import { getCurrentInstance, ref } from 'vue';
|
import { getKeysMap, getRowIdentity, toggleRowStatus } from '../util.mjs';
|
|
function useExpand(watcherData) {
|
const instance = getCurrentInstance();
|
const defaultExpandAll = ref(false);
|
const expandRows = ref([]);
|
const updateExpandRows = () => {
|
const data = watcherData.data.value || [];
|
const rowKey = watcherData.rowKey.value;
|
if (defaultExpandAll.value) {
|
expandRows.value = data.slice();
|
} else if (rowKey) {
|
const expandRowsMap = getKeysMap(expandRows.value, rowKey);
|
expandRows.value = data.reduce((prev, row) => {
|
const rowId = getRowIdentity(row, rowKey);
|
const rowInfo = expandRowsMap[rowId];
|
if (rowInfo) {
|
prev.push(row);
|
}
|
return prev;
|
}, []);
|
} else {
|
expandRows.value = [];
|
}
|
};
|
const toggleRowExpansion = (row, expanded) => {
|
const changed = toggleRowStatus(expandRows.value, row, expanded);
|
if (changed) {
|
instance.emit("expand-change", row, expandRows.value.slice());
|
}
|
};
|
const setExpandRowKeys = (rowKeys) => {
|
instance.store.assertRowKey();
|
const data = watcherData.data.value || [];
|
const rowKey = watcherData.rowKey.value;
|
const keysMap = getKeysMap(data, rowKey);
|
expandRows.value = rowKeys.reduce((prev, cur) => {
|
const info = keysMap[cur];
|
if (info) {
|
prev.push(info.row);
|
}
|
return prev;
|
}, []);
|
};
|
const isRowExpanded = (row) => {
|
const rowKey = watcherData.rowKey.value;
|
if (rowKey) {
|
const expandMap = getKeysMap(expandRows.value, rowKey);
|
return !!expandMap[getRowIdentity(row, rowKey)];
|
}
|
return expandRows.value.includes(row);
|
};
|
return {
|
updateExpandRows,
|
toggleRowExpansion,
|
setExpandRowKeys,
|
isRowExpanded,
|
states: {
|
expandRows,
|
defaultExpandAll
|
}
|
};
|
}
|
|
export { useExpand as default };
|
//# sourceMappingURL=expand.mjs.map
|