UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 32.5 kB
{"version":3,"file":"watcher.mjs","sources":["../../../../../../../packages/components/table/src/store/watcher.ts"],"sourcesContent":["import { computed, getCurrentInstance, ref, toRefs, unref, watch } from 'vue'\nimport { ensureArray, hasOwn, isArray, isString } from '@element-plus/utils'\nimport {\n getColumnById,\n getColumnByKey,\n getKeysMap,\n getRowIdentity,\n orderBy,\n toggleRowStatus,\n} from '../util'\nimport useExpand from './expand'\nimport useCurrent from './current'\nimport useTree from './tree'\n\nimport type { Ref } from 'vue'\nimport type { TableColumnCtx } from '../table-column/defaults'\nimport type {\n DefaultRow,\n Table,\n TableRefs,\n TableSortOrder,\n} from '../table/defaults'\nimport type { StoreFilter } from '.'\n\nconst sortData = <T extends DefaultRow>(\n data: T[],\n states: {\n sortingColumn: TableColumnCtx<T> | null\n sortProp: string | null\n sortOrder: string | number | null\n }\n) => {\n const sortingColumn = states.sortingColumn\n if (!sortingColumn || isString(sortingColumn.sortable)) {\n return data\n }\n return orderBy(\n data,\n states.sortProp,\n states.sortOrder,\n sortingColumn.sortMethod,\n sortingColumn.sortBy\n )\n}\n\nconst doFlattenColumns = <T extends DefaultRow>(\n columns: TableColumnCtx<T>[]\n) => {\n const result: TableColumnCtx<T>[] = []\n columns.forEach((column) => {\n if (column.children && column.children.length > 0) {\n // eslint-disable-next-line prefer-spread\n result.push.apply(result, doFlattenColumns(column.children))\n } else {\n result.push(column)\n }\n })\n return result\n}\n\nfunction useWatcher<T extends DefaultRow>() {\n const instance = getCurrentInstance() as Table<T>\n const { size: tableSize } = toRefs(instance.proxy?.$props as any)\n const rowKey: Ref<string | null> = ref(null)\n const data: Ref<T[]> = ref([])\n const _data: Ref<T[]> = ref([])\n const isComplex = ref(false)\n const _columns: Ref<TableColumnCtx<T>[]> = ref([])\n const originColumns: Ref<TableColumnCtx<T>[]> = ref([])\n const columns: Ref<TableColumnCtx<T>[]> = ref([])\n const fixedColumns: Ref<TableColumnCtx<T>[]> = ref([])\n const rightFixedColumns: Ref<TableColumnCtx<T>[]> = ref([])\n const leafColumns: Ref<TableColumnCtx<T>[]> = ref([])\n const fixedLeafColumns: Ref<TableColumnCtx<T>[]> = ref([])\n const rightFixedLeafColumns: Ref<TableColumnCtx<T>[]> = ref([])\n const updateOrderFns: (() => void)[] = []\n const leafColumnsLength = ref(0)\n const fixedLeafColumnsLength = ref(0)\n const rightFixedLeafColumnsLength = ref(0)\n const isAllSelected = ref(false)\n const selection: Ref<T[]> = ref([])\n const reserveSelection = ref(false)\n const selectOnIndeterminate = ref(false)\n const selectable: Ref<((row: T, index: number) => boolean) | null> = ref(null)\n const rowExpandable: Ref<((row: T, index: number) => boolean) | null> =\n ref(null)\n const filters: Ref<StoreFilter> = ref({})\n const filteredData: Ref<T[] | null> = ref(null)\n const sortingColumn: Ref<TableColumnCtx<T> | null> = ref(null)\n const sortProp: Ref<string | null> = ref(null)\n const sortOrder: Ref<string | number | null> = ref(null)\n const hoverRow: Ref<T | null> = ref(null)\n\n const selectedMap = computed(() => {\n return rowKey.value ? getKeysMap(selection.value, rowKey.value) : undefined\n })\n\n watch(\n data,\n () => {\n if (instance.state) {\n scheduleLayout(false)\n const needUpdateFixed = instance.props.tableLayout === 'auto'\n if (needUpdateFixed) {\n instance.refs.tableHeaderRef?.updateFixedColumnStyle()\n }\n }\n },\n {\n deep: true,\n }\n )\n\n // 检查 rowKey 是否存在\n const assertRowKey = () => {\n if (!rowKey.value) throw new Error('[ElTable] prop row-key is required')\n }\n\n // 更新 fixed\n const updateChildFixed = (column: TableColumnCtx<T>) => {\n column.children?.forEach((childColumn) => {\n childColumn.fixed = column.fixed\n updateChildFixed(childColumn)\n })\n }\n\n // 更新列\n const updateColumns = () => {\n _columns.value.forEach((column) => {\n updateChildFixed(column)\n })\n fixedColumns.value = _columns.value.filter((column) =>\n [true, 'left'].includes(column.fixed)\n )\n\n const selectColumn = _columns.value.find(\n (column) => column.type === 'selection'\n )\n\n let selectColFixLeft: boolean\n if (\n selectColumn &&\n selectColumn.fixed !== 'right' &&\n !fixedColumns.value.includes(selectColumn)\n ) {\n const selectColumnIndex = _columns.value.indexOf(selectColumn)\n if (selectColumnIndex === 0 && fixedColumns.value.length) {\n fixedColumns.value.unshift(selectColumn)\n selectColFixLeft = true\n }\n }\n\n rightFixedColumns.value = _columns.value.filter(\n (column) => column.fixed === 'right'\n )\n\n const notFixedColumns = _columns.value.filter(\n (column) =>\n (selectColFixLeft ? column.type !== 'selection' : true) && !column.fixed\n )\n\n originColumns.value = Array.from(fixedColumns.value)\n .concat(notFixedColumns)\n .concat(rightFixedColumns.value)\n const leafColumns = doFlattenColumns(notFixedColumns)\n const fixedLeafColumns = doFlattenColumns(fixedColumns.value)\n const rightFixedLeafColumns = doFlattenColumns(rightFixedColumns.value)\n\n leafColumnsLength.value = leafColumns.length\n fixedLeafColumnsLength.value = fixedLeafColumns.length\n rightFixedLeafColumnsLength.value = rightFixedLeafColumns.length\n\n columns.value = Array.from(fixedLeafColumns)\n .concat(leafColumns)\n .concat(rightFixedLeafColumns)\n isComplex.value =\n fixedColumns.value.length > 0 || rightFixedColumns.value.length > 0\n }\n\n // 更新 DOM\n const scheduleLayout = (needUpdateColumns?: boolean, immediate = false) => {\n if (needUpdateColumns) {\n updateColumns()\n }\n if (immediate) {\n instance.state.doLayout()\n } else {\n instance.state.debouncedUpdateLayout()\n }\n }\n\n // 选择\n const isSelected = (row: T) => {\n if (selectedMap.value) {\n return !!selectedMap.value[getRowIdentity(row, rowKey.value)]\n } else {\n return selection.value.includes(row)\n }\n }\n\n const clearSelection = () => {\n isAllSelected.value = false\n const oldSelection = selection.value\n selection.value = []\n if (oldSelection.length) {\n instance.emit('selection-change', [])\n }\n }\n\n const cleanSelection = () => {\n let deleted\n if (rowKey.value) {\n deleted = []\n const childrenKey = instance?.store?.states?.childrenColumnName.value\n const dataMap = getKeysMap(data.value, rowKey.value, true, childrenKey)\n for (const key in selectedMap.value) {\n if (hasOwn(selectedMap.value, key) && !dataMap[key]) {\n deleted.push(selectedMap.value[key].row)\n }\n }\n } else {\n deleted = selection.value.filter((item) => !data.value.includes(item))\n }\n if (deleted.length) {\n const newSelection = selection.value.filter(\n (item) => !deleted.includes(item)\n )\n selection.value = newSelection\n instance.emit('selection-change', newSelection.slice())\n }\n }\n\n const getSelectionRows = () => {\n return (selection.value || []).slice()\n }\n\n const toggleRowSelection = (\n row: T,\n selected?: boolean,\n emitChange = true,\n ignoreSelectable = false\n ) => {\n const treeProps = {\n children: instance?.store?.states?.childrenColumnName.value,\n checkStrictly: instance?.store?.states?.checkStrictly.value,\n }\n const changed = toggleRowStatus(\n selection.value,\n row,\n selected,\n treeProps,\n ignoreSelectable ? undefined : selectable.value,\n data.value.indexOf(row),\n rowKey.value\n )\n if (changed) {\n const newSelection = (selection.value || []).slice()\n // 调用 API 修改选中值,不触发 select 事件\n if (emitChange) {\n instance.emit('select', newSelection, row)\n }\n instance.emit('selection-change', newSelection)\n }\n }\n\n const _toggleAllSelection = () => {\n // when only some rows are selected (but not all), select or deselect all of them\n // depending on the value of selectOnIndeterminate\n const value = selectOnIndeterminate.value\n ? !isAllSelected.value\n : !(isAllSelected.value || selection.value.length)\n isAllSelected.value = value\n\n let selectionChanged = false\n let childrenCount = 0\n const rowKey = instance?.store?.states?.rowKey.value\n const { childrenColumnName } = instance.store.states\n const treeProps = {\n children: childrenColumnName.value,\n checkStrictly: false, // Disable checkStrictly when selecting all\n }\n\n data.value.forEach((row, index) => {\n const rowIndex = index + childrenCount\n if (\n toggleRowStatus(\n selection.value,\n row,\n value,\n treeProps,\n selectable.value,\n rowIndex,\n rowKey\n )\n ) {\n selectionChanged = true\n }\n childrenCount += getChildrenCount(getRowIdentity(row, rowKey))\n })\n\n if (selectionChanged) {\n instance.emit(\n 'selection-change',\n selection.value ? selection.value.slice() : []\n )\n }\n instance.emit('select-all', (selection.value || []).slice())\n }\n\n const updateAllSelected = () => {\n // data 为 null 时,解构时的默认值会被忽略\n if (data.value?.length === 0) {\n isAllSelected.value = false\n return\n }\n\n const { childrenColumnName } = instance.store.states\n let rowIndex = 0\n let selectedCount = 0\n\n const checkSelectedStatus = (data: T[]) => {\n for (const row of data) {\n const isRowSelectable =\n selectable.value && selectable.value.call(null, row, rowIndex)\n\n if (!isSelected(row)) {\n if (!selectable.value || isRowSelectable) {\n return false\n }\n } else {\n selectedCount++\n }\n rowIndex++\n\n if (\n row[childrenColumnName.value]?.length &&\n !checkSelectedStatus(row[childrenColumnName.value])\n ) {\n return false\n }\n }\n return true\n }\n\n const isAllSelected_ = checkSelectedStatus(data.value || [])\n isAllSelected.value = selectedCount === 0 ? false : isAllSelected_\n }\n\n const getChildrenCount = (rowKey: string) => {\n if (!instance || !instance.store) return 0\n const { treeData } = instance.store.states\n let count = 0\n const children = treeData.value[rowKey]?.children\n if (children) {\n count += children.length\n children.forEach((childKey) => {\n count += getChildrenCount(childKey)\n })\n }\n return count\n }\n\n // 过滤与排序\n const updateFilters = (column: TableColumnCtx<T>, values: string[]) => {\n const filters_: Record<string, string[]> = {}\n ensureArray(column).forEach((col) => {\n filters.value[col.id] = values\n filters_[col.columnKey || col.id] = values\n })\n return filters_\n }\n\n const updateSort = (\n column: TableColumnCtx<T> | null,\n prop: string | null,\n order: TableSortOrder | null\n ) => {\n if (sortingColumn.value && sortingColumn.value !== column) {\n sortingColumn.value.order = null\n }\n sortingColumn.value = column\n sortProp.value = prop\n sortOrder.value = order\n }\n\n const execFilter = () => {\n let sourceData = unref(_data)\n Object.keys(filters.value).forEach((columnId) => {\n const values = filters.value[columnId]\n if (!values || values.length === 0) return\n const column = getColumnById(\n {\n columns: columns.value,\n },\n columnId\n )\n if (column && column.filterMethod) {\n sourceData = sourceData.filter((row) => {\n return values.some((value) =>\n column.filterMethod.call(null, value, row, column)\n )\n })\n }\n })\n filteredData.value = sourceData\n }\n\n const execSort = () => {\n data.value = sortData(filteredData.value ?? [], {\n sortingColumn: sortingColumn.value,\n sortProp: sortProp.value,\n sortOrder: sortOrder.value,\n })\n }\n\n // 根据 filters 与 sort 去过滤 data\n const execQuery = (ignore: { filter: boolean } | undefined = undefined) => {\n if (!ignore?.filter) {\n execFilter()\n }\n execSort()\n }\n\n const clearFilter = (columnKeys?: string[] | string) => {\n const { tableHeaderRef } = instance.refs as TableRefs\n if (!tableHeaderRef) return\n const panels = Object.assign({}, tableHeaderRef.filterPanels)\n\n const keys = Object.keys(panels)\n if (!keys.length) return\n\n if (isString(columnKeys)) {\n columnKeys = [columnKeys]\n }\n\n if (isArray(columnKeys)) {\n const columns_ = columnKeys.map((key) =>\n getColumnByKey(\n {\n columns: columns.value,\n },\n key\n )\n )\n keys.forEach((key) => {\n const column = columns_.find((col) => col.id === key)\n if (column) {\n column.filteredValue = []\n }\n })\n instance.store.commit('filterChange', {\n column: columns_,\n values: [],\n silent: true,\n multi: true,\n })\n } else {\n keys.forEach((key) => {\n const column = columns.value.find((col) => col.id === key)\n if (column) {\n column.filteredValue = []\n }\n })\n\n filters.value = {}\n instance.store.commit('filterChange', {\n column: {},\n values: [],\n silent: true,\n })\n }\n }\n\n const clearSort = () => {\n if (!sortingColumn.value) return\n\n updateSort(null, null, null)\n instance.store.commit('changeSortCondition', {\n silent: true,\n })\n }\n const {\n setExpandRowKeys,\n toggleRowExpansion,\n updateExpandRows,\n states: expandStates,\n isRowExpanded,\n } = useExpand({\n data,\n rowKey,\n })\n const {\n updateTreeExpandKeys,\n toggleTreeExpansion,\n updateTreeData,\n updateKeyChildren,\n loadOrToggle,\n states: treeStates,\n } = useTree({\n data,\n rowKey,\n })\n const {\n updateCurrentRowData,\n updateCurrentRow,\n setCurrentRowKey,\n states: currentData,\n } = useCurrent({\n data,\n rowKey,\n })\n // 适配层,expand-row-keys 在 Expand 与 TreeTable 中都有使用\n const setExpandRowKeysAdapter = (val: string[]) => {\n // 这里会触发额外的计算,但为了兼容性,暂时这么做\n setExpandRowKeys(val)\n updateTreeExpandKeys(val)\n }\n\n // 展开行与 TreeTable 都要使用\n const toggleRowExpansionAdapter = (row: T, expanded?: boolean) => {\n const hasExpandColumn = columns.value.some(({ type }) => type === 'expand')\n if (hasExpandColumn) {\n toggleRowExpansion(row, expanded)\n } else {\n toggleTreeExpansion(row, expanded)\n }\n }\n\n return {\n assertRowKey,\n updateColumns,\n scheduleLayout,\n isSelected,\n clearSelection,\n cleanSelection,\n getSelectionRows,\n toggleRowSelection,\n _toggleAllSelection,\n toggleAllSelection: null as (() => void) | null,\n updateAllSelected,\n updateFilters,\n updateCurrentRow,\n updateSort,\n execFilter,\n execSort,\n execQuery,\n clearFilter,\n clearSort,\n toggleRowExpansion,\n setExpandRowKeysAdapter,\n setCurrentRowKey,\n toggleRowExpansionAdapter,\n isRowExpanded,\n updateExpandRows,\n updateCurrentRowData,\n loadOrToggle,\n updateTreeData,\n updateKeyChildren,\n states: {\n tableSize,\n rowKey,\n data,\n _data,\n isComplex,\n _columns,\n originColumns,\n columns,\n fixedColumns,\n rightFixedColumns,\n leafColumns,\n fixedLeafColumns,\n rightFixedLeafColumns,\n updateOrderFns,\n leafColumnsLength,\n fixedLeafColumnsLength,\n rightFixedLeafColumnsLength,\n isAllSelected,\n selection,\n reserveSelection,\n selectOnIndeterminate,\n selectable,\n rowExpandable,\n filters,\n filteredData,\n sortingColumn,\n sortProp,\n sortOrder,\n hoverRow,\n ...expandStates,\n ...treeStates,\n ...currentData,\n },\n }\n}\n\nexport default useWatcher\n"],"names":["_a","leafColumns","fixedLeafColumns","rightFixedLeafColumns","rowKey","data","ensureArray"],"mappings":"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"}