{"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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"}