element-plus
Version:
A Component Library for Vue 3
1 lines • 15.2 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../../../packages/components/table/src/store/index.ts"],"sourcesContent":["import { getCurrentInstance, nextTick, unref } from 'vue'\nimport { isNull } from 'lodash-unified'\nimport { useLocale, useNamespace } from '@element-plus/hooks'\nimport useWatcher from './watcher'\n\nimport type { Ref } from 'vue'\nimport type { TableColumnCtx } from '../table-column/defaults'\nimport type { DefaultRow, Filter, Sort, Table } from '../table/defaults'\n\ninterface WatcherPropsData<T extends DefaultRow> {\n data: Ref<T[]>\n rowKey: Ref<string | null>\n}\n\nfunction replaceColumn<T extends DefaultRow>(\n array: TableColumnCtx<T>[],\n column: TableColumnCtx<T>\n) {\n return array.map((item) => {\n if (item.id === column.id) {\n return column\n } else if (item.children?.length) {\n item.children = replaceColumn(item.children, column)\n }\n return item\n })\n}\n\nfunction sortColumn<T extends DefaultRow>(array: TableColumnCtx<T>[]) {\n array.forEach((item) => {\n item.no = item.getColumnIndex?.()\n if (item.children?.length) {\n sortColumn(item.children)\n }\n })\n array.sort((cur, pre) => cur.no - pre.no)\n}\n\nfunction useStore<T extends DefaultRow>() {\n const instance = getCurrentInstance() as Table<T>\n const watcher = useWatcher<T>()\n const ns = useNamespace('table')\n const { t } = useLocale()\n\n type StoreStates = typeof watcher.states\n const mutations = {\n setData(states: StoreStates, data: T[]) {\n const dataInstanceChanged = unref(states._data) !== data\n states.data.value = data\n states._data.value = data\n instance.store.execQuery()\n // 数据变化,更新部分数据。\n // 没有使用 computed,而是手动更新部分数据 https://github.com/vuejs/vue/issues/6660#issuecomment-331417140\n instance.store.updateCurrentRowData()\n instance.store.updateExpandRows()\n instance.store.updateTreeData(\n instance.store.states.defaultExpandAll.value\n )\n if (unref(states.reserveSelection)) {\n instance.store.assertRowKey()\n } else {\n if (dataInstanceChanged) {\n instance.store.clearSelection()\n } else {\n instance.store.cleanSelection()\n }\n }\n instance.store.updateAllSelected()\n if (instance.$ready) {\n instance.store.scheduleLayout()\n }\n },\n\n insertColumn(\n states: StoreStates,\n column: TableColumnCtx<T>,\n parent: TableColumnCtx<T>,\n updateColumnOrder: () => void\n ) {\n const array = unref(states._columns)\n let newColumns = []\n if (!parent) {\n array.push(column)\n newColumns = array\n } else {\n if (parent && !parent.children) {\n parent.children = []\n }\n parent.children?.push(column)\n newColumns = replaceColumn(array, parent)\n }\n sortColumn(newColumns)\n states._columns.value = newColumns\n states.updateOrderFns.push(updateColumnOrder)\n if (column.type === 'selection') {\n states.selectable.value = column.selectable\n states.reserveSelection.value = column.reserveSelection\n }\n if (instance.$ready) {\n instance.store.updateColumns() // hack for dynamics insert column\n instance.store.scheduleLayout()\n }\n },\n\n updateColumnOrder(states: StoreStates, column: TableColumnCtx<T>) {\n const newColumnIndex = column.getColumnIndex?.()\n if (newColumnIndex === column.no) return\n\n sortColumn(states._columns.value)\n\n if (instance.$ready) {\n instance.store.updateColumns()\n }\n },\n\n removeColumn(\n states: StoreStates,\n column: TableColumnCtx<T>,\n parent: TableColumnCtx<T>,\n updateColumnOrder: () => void\n ) {\n const array = unref(states._columns) || []\n if (parent) {\n parent.children?.splice(\n parent.children.findIndex((item) => item.id === column.id),\n 1\n )\n // fix #10699, delete parent.children immediately will trigger again\n nextTick(() => {\n if (parent.children?.length === 0) {\n delete parent.children\n }\n })\n states._columns.value = replaceColumn(array, parent)\n } else {\n const index = array.indexOf(column)\n if (index > -1) {\n array.splice(index, 1)\n states._columns.value = array\n }\n }\n\n const updateFnIndex = states.updateOrderFns.indexOf(updateColumnOrder)\n updateFnIndex > -1 && states.updateOrderFns.splice(updateFnIndex, 1)\n\n if (instance.$ready) {\n instance.store.updateColumns() // hack for dynamics remove column\n instance.store.scheduleLayout()\n }\n },\n\n sort(states: StoreStates, options: Sort) {\n const { prop, order, init } = options\n if (prop) {\n const column = unref(states.columns).find(\n (column) => column.property === prop\n )\n if (column) {\n column.order = order\n instance.store.updateSort(column, prop, order)\n instance.store.commit('changeSortCondition', { init })\n }\n }\n },\n\n changeSortCondition(states: StoreStates, options: Sort) {\n // 修复 pr https://github.com/ElemeFE/element/pull/15012 导致的 bug\n // https://github.com/element-plus/element-plus/pull/4640\n const { sortingColumn, sortProp, sortOrder } = states\n const columnValue = unref(sortingColumn),\n propValue = unref(sortProp),\n orderValue = unref(sortOrder)\n if (isNull(orderValue)) {\n states.sortingColumn.value = null\n states.sortProp.value = null\n }\n const ignore = { filter: true }\n instance.store.execQuery(ignore)\n\n if (!options || !(options.silent || options.init)) {\n instance.emit('sort-change', {\n column: columnValue,\n prop: propValue,\n order: orderValue,\n })\n }\n\n instance.store.updateTableScrollY()\n },\n\n filterChange(_states: StoreStates, options: Filter<T>) {\n const { column, values, silent } = options\n const newFilters = instance.store.updateFilters(column, values)\n instance.store.execQuery()\n\n if (!silent) {\n instance.emit('filter-change', newFilters)\n }\n instance.store.updateTableScrollY()\n },\n\n toggleAllSelection() {\n instance.store.toggleAllSelection?.()\n },\n\n rowSelectedChanged(_states: StoreStates, row: T) {\n instance.store.toggleRowSelection(row)\n instance.store.updateAllSelected()\n },\n\n setHoverRow(states: StoreStates, row: T) {\n states.hoverRow.value = row\n },\n\n setCurrentRow(_states: StoreStates, row: T) {\n instance.store.updateCurrentRow(row)\n },\n }\n const commit = function (name: keyof typeof mutations, ...args: any[]) {\n const mutations = instance.store.mutations\n if (mutations[name]) {\n ;(mutations[name] as any).apply(instance, [\n instance.store.states,\n ...args,\n ])\n } else {\n throw new Error(`Action not found: ${name}`)\n }\n }\n const updateTableScrollY = function () {\n nextTick(() => instance.layout.updateScrollY.apply(instance.layout))\n }\n return {\n ns,\n t,\n ...watcher,\n mutations,\n commit,\n updateTableScrollY,\n }\n}\n\nexport default useStore\n\nclass HelperStore<T extends DefaultRow> {\n Return = useStore<T>()\n}\n\ntype StoreFilter = Record<string, string[]>\ntype Store<T extends DefaultRow> = HelperStore<T>['Return']\nexport type { WatcherPropsData, Store, StoreFilter }\n"],"names":["_a","column","mutations"],"mappings":"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"}