UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 9.6 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../../packages/components/table/src/store/index.ts"],"sourcesContent":["import { nextTick, getCurrentInstance, unref } from 'vue'\nimport useWatcher from './watcher'\n\nimport type { Ref } from 'vue'\nimport type { TableColumnCtx } from '../table-column/defaults'\nimport type { Filter, Sort, Table } from '../table/defaults'\n\ninterface WatcherPropsData<T> {\n data: Ref<T[]>\n rowKey: Ref<string>\n}\n\nfunction replaceColumn<T>(\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>(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>() {\n const instance = getCurrentInstance() as Table<T>\n const watcher = useWatcher<T>()\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 instance.store.updateSelectionByRowKey()\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 ) {\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 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 removeColumn(\n states: StoreStates,\n column: TableColumnCtx<T>,\n parent: TableColumnCtx<T>\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 if (parent.children.length === 0) {\n delete parent.children\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 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 const { sortingColumn: column, sortProp: prop, sortOrder: order } = states\n if (unref(order) === null) {\n states.sortingColumn.value = null\n states.sortProp.value = null\n }\n const ingore = { filter: true }\n instance.store.execQuery(ingore)\n\n if (!options || !(options.silent || options.init)) {\n instance.emit('sort-change', {\n column: unref(column),\n prop: unref(prop),\n order: unref(order),\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, 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, row: T) {\n instance.store.updateCurrentRow(row)\n },\n }\n const commit = function (name: keyof typeof mutations, ...args) {\n const mutations = instance.store.mutations\n if (mutations[name]) {\n mutations[name].apply(instance, [instance.store.states].concat(args))\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 ...watcher,\n mutations,\n commit,\n updateTableScrollY,\n }\n}\nexport default useStore\n\nclass HelperStore<T> {\n Return = useStore<T>()\n}\ntype StoreFilter = Record<string, string[]>\ntype Store<T> = HelperStore<T>['Return']\nexport type { WatcherPropsData, Store, StoreFilter }\n"],"names":[],"mappings":"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"}