UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 11.2 kB
{"version":3,"file":"index.mjs","names":[],"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.updateSelectionByChildren({ emitChange: false })\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"],"mappings":"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"}