import { toggleRowStatus, getKeysMap, getRowIdentity } from '../util';
|
|
export default {
|
data() {
|
return {
|
states: {
|
defaultExpandAll: false,
|
expandRows: []
|
}
|
};
|
},
|
|
methods: {
|
updateExpandRows() {
|
const { data = [], rowKey, defaultExpandAll, expandRows } = this.states;
|
if (defaultExpandAll) {
|
this.states.expandRows = data.slice();
|
} else if (rowKey) {
|
// TODO:这里的代码可以优化
|
const expandRowsMap = getKeysMap(expandRows, rowKey);
|
this.states.expandRows = data.reduce((prev, row) => {
|
const rowId = getRowIdentity(row, rowKey);
|
const rowInfo = expandRowsMap[rowId];
|
if (rowInfo) {
|
prev.push(row);
|
}
|
return prev;
|
}, []);
|
} else {
|
this.states.expandRows = [];
|
}
|
},
|
|
toggleRowExpansion(row, expanded) {
|
const changed = toggleRowStatus(this.states.expandRows, row, expanded);
|
if (changed) {
|
this.table.$emit('expand-change', row, this.states.expandRows.slice());
|
this.scheduleLayout();
|
}
|
},
|
|
setExpandRowKeys(rowKeys) {
|
this.assertRowKey();
|
// TODO:这里的代码可以优化
|
const { data, rowKey } = this.states;
|
const keysMap = getKeysMap(data, rowKey);
|
this.states.expandRows = rowKeys.reduce((prev, cur) => {
|
const info = keysMap[cur];
|
if (info) {
|
prev.push(info.row);
|
}
|
return prev;
|
}, []);
|
},
|
|
isRowExpanded(row) {
|
const { expandRows = [], rowKey } = this.states;
|
if (rowKey) {
|
const expandMap = getKeysMap(expandRows, rowKey);
|
return !!expandMap[getRowIdentity(row, rowKey)];
|
}
|
return expandRows.indexOf(row) !== -1;
|
}
|
}
|
};
|