element-plus
Version:
A Component Library for Vue 3
1 lines • 5.68 kB
Source Map (JSON)
{"version":3,"file":"expand.mjs","sources":["../../../../../../../packages/components/table/src/store/expand.ts"],"sourcesContent":["import { getCurrentInstance, ref } from 'vue'\nimport { getKeysMap, getRowIdentity, toggleRowStatus } from '../util'\n\nimport type { Ref } from 'vue'\nimport type { WatcherPropsData } from '.'\nimport type { DefaultRow, Table } from '../table/defaults'\n\nfunction useExpand<T extends DefaultRow>(watcherData: WatcherPropsData<T>) {\n const instance = getCurrentInstance() as Table<T>\n const defaultExpandAll = ref(false)\n const expandRows: Ref<T[]> = ref([])\n\n const canRowExpand = (row: T, index: number) => {\n const expandableFn = instance.store.states.rowExpandable.value\n return expandableFn?.(row, index) ?? true\n }\n\n const updateExpandRows = () => {\n const data = watcherData.data.value || []\n const rowKey = watcherData.rowKey.value\n if (defaultExpandAll.value) {\n expandRows.value = instance.store.states.rowExpandable.value\n ? data.filter(canRowExpand)\n : data.slice()\n } else if (rowKey) {\n // TODO:这里的代码可以优化\n const expandRowsMap = getKeysMap(expandRows.value, rowKey)\n expandRows.value = data.filter((row, index) => {\n const rowId = getRowIdentity(row, rowKey)\n return !!expandRowsMap[rowId] && canRowExpand(row, index)\n })\n } else {\n expandRows.value = []\n }\n }\n\n const toggleRowExpansion = (row: T, expanded?: boolean) => {\n const dataArr = watcherData.data.value || []\n const rowIndex = dataArr.indexOf(row)\n if (rowIndex > -1 && !canRowExpand(row, rowIndex)) return\n\n const changed = toggleRowStatus(\n expandRows.value,\n row,\n expanded,\n undefined,\n undefined,\n undefined,\n watcherData.rowKey.value\n )\n if (changed) {\n instance.emit('expand-change', row, expandRows.value.slice())\n }\n }\n\n const setExpandRowKeys = (rowKeys: (string | number)[]) => {\n instance.store.assertRowKey()\n // TODO:这里的代码可以优化\n const data = watcherData.data.value || []\n const rowKey = watcherData.rowKey.value\n const keysMap = getKeysMap(data, rowKey)\n expandRows.value = rowKeys.reduce((prev: T[], cur) => {\n const info = keysMap[cur]\n if (info && canRowExpand(info.row, info.index)) {\n prev.push(info.row)\n }\n return prev\n }, [])\n }\n\n const isRowExpanded = (row: T): boolean => {\n const rowKey = watcherData.rowKey.value\n if (rowKey) {\n const expandMap = getKeysMap(expandRows.value, rowKey)\n return !!expandMap[getRowIdentity(row, rowKey)]\n }\n return expandRows.value.includes(row)\n }\n return {\n updateExpandRows,\n toggleRowExpansion,\n setExpandRowKeys,\n isRowExpanded,\n states: {\n expandRows,\n defaultExpandAll,\n },\n }\n}\n\nexport default useExpand\n"],"names":[],"mappings":"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"}