mirror of https://github.com/ElemeFE/element
Table: update expandRows when setData (#11186)
* Table: update expandRows when setData. Fix a bug that after set new table data, the expanded cells will not be able to unexpand. * Update table-store.jspull/11200/head
parent
1d3ecc5820
commit
c6e9cdac88
|
@ -139,6 +139,8 @@ TableStore.prototype.mutations = {
|
||||||
|
|
||||||
this.updateCurrentRow();
|
this.updateCurrentRow();
|
||||||
|
|
||||||
|
const rowKey = states.rowKey;
|
||||||
|
|
||||||
if (!states.reserveSelection) {
|
if (!states.reserveSelection) {
|
||||||
if (dataInstanceChanged) {
|
if (dataInstanceChanged) {
|
||||||
this.clearSelection();
|
this.clearSelection();
|
||||||
|
@ -147,7 +149,6 @@ TableStore.prototype.mutations = {
|
||||||
}
|
}
|
||||||
this.updateAllSelected();
|
this.updateAllSelected();
|
||||||
} else {
|
} else {
|
||||||
const rowKey = states.rowKey;
|
|
||||||
if (rowKey) {
|
if (rowKey) {
|
||||||
const selection = states.selection;
|
const selection = states.selection;
|
||||||
const selectedMap = getKeysMap(selection, rowKey);
|
const selectedMap = getKeysMap(selection, rowKey);
|
||||||
|
@ -169,6 +170,20 @@ TableStore.prototype.mutations = {
|
||||||
const defaultExpandAll = states.defaultExpandAll;
|
const defaultExpandAll = states.defaultExpandAll;
|
||||||
if (defaultExpandAll) {
|
if (defaultExpandAll) {
|
||||||
this.states.expandRows = (states.data || []).slice(0);
|
this.states.expandRows = (states.data || []).slice(0);
|
||||||
|
} else if (rowKey) {
|
||||||
|
// update expandRows to new rows according to rowKey
|
||||||
|
const ids = getKeysMap(this.states.expandRows, rowKey);
|
||||||
|
let expandRows = [];
|
||||||
|
for (const row of states.data) {
|
||||||
|
const rowId = getRowIdentity(row, rowKey);
|
||||||
|
if (ids[rowId]) {
|
||||||
|
expandRows.push(row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.states.expandRows = expandRows;
|
||||||
|
} else {
|
||||||
|
// clear the old rows
|
||||||
|
this.states.expandRows = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
Vue.nextTick(() => this.table.updateScrollY());
|
Vue.nextTick(() => this.table.updateScrollY());
|
||||||
|
|
|
@ -959,17 +959,16 @@ describe('Table', () => {
|
||||||
</el-table>
|
</el-table>
|
||||||
`,
|
`,
|
||||||
|
|
||||||
created() {
|
|
||||||
this.testData = getTestData();
|
|
||||||
},
|
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return { expandCount: 0, expandRowKeys: [] };
|
return { expandCount: 0, expandRowKeys: [], testData: getTestData() };
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
handleExpand() {
|
handleExpand() {
|
||||||
this.expandCount++;
|
this.expandCount++;
|
||||||
|
},
|
||||||
|
refreshData() {
|
||||||
|
this.testData = getTestData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, true);
|
}, true);
|
||||||
|
@ -1026,6 +1025,29 @@ describe('Table', () => {
|
||||||
done();
|
done();
|
||||||
}, DELAY);
|
}, DELAY);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should unexpand after refresh data and click', function(done) {
|
||||||
|
const vm = createInstance();
|
||||||
|
setTimeout(_ => {
|
||||||
|
vm.$el.querySelector('td.el-table__expand-column .el-table__expand-icon').click();
|
||||||
|
setTimeout(_ => {
|
||||||
|
expect(vm.$el.querySelectorAll('.el-table__expanded-cell').length).to.equal(1);
|
||||||
|
expect(vm.expandCount).to.equal(1);
|
||||||
|
vm.refreshData();
|
||||||
|
setTimeout(_ => { // wait until refreshed
|
||||||
|
expect(vm.$el.querySelectorAll('.el-table__expanded-cell').length).to.equal(1);
|
||||||
|
vm.$el.querySelector('td.el-table__expand-column .el-table__expand-icon').click();
|
||||||
|
setTimeout(_ => {
|
||||||
|
// should unexpand
|
||||||
|
expect(vm.$el.querySelectorAll('.el-table__expanded-cell').length).to.equal(0);
|
||||||
|
expect(vm.expandCount).to.equal(2);
|
||||||
|
destroyVM(vm);
|
||||||
|
done();
|
||||||
|
}, DELAY);
|
||||||
|
}, DELAY);
|
||||||
|
}, DELAY);
|
||||||
|
}, DELAY);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue