{"version":3,"file":"watcher.mjs","sources":["../../../../../../../packages/components/table/src/store/watcher.ts"],"sourcesContent":["import { ref, getCurrentInstance, unref, watch, toRefs } from 'vue'\nimport { hasOwn } from '@vue/shared'\nimport {\n  getKeysMap,\n  getRowIdentity,\n  getColumnById,\n  getColumnByKey,\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 { Table, TableRefs } from '../table/defaults'\nimport type { StoreFilter } from './index'\n\nconst sortData = (data, states) => {\n  const sortingColumn = states.sortingColumn\n  if (!sortingColumn || typeof sortingColumn.sortable === 'string') {\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 = (columns) => {\n  const result = []\n  columns.forEach((column) => {\n    if (column.children) {\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>() {\n  const instance = getCurrentInstance() as Table<T>\n  const { size: tableSize } = toRefs(instance.proxy?.$props as any)\n  const rowKey: Ref<string> = 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 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> = ref(null)\n  const filters: Ref<StoreFilter> = ref({})\n  const filteredData = ref(null)\n  const sortingColumn = ref(null)\n  const sortProp = ref(null)\n  const sortOrder = ref(null)\n  const hoverRow = ref(null)\n\n  watch(data, () => instance.state && scheduleLayout(false), {\n    deep: true,\n  })\n\n  // 检查 rowKey 是否存在\n  const assertRowKey = () => {\n    if (!rowKey.value) throw new Error('[ElTable] prop row-key is required')\n  }\n\n  // 更新列\n  const updateColumns = () => {\n    fixedColumns.value = _columns.value.filter(\n      (column) => column.fixed === true || column.fixed === 'left'\n    )\n    rightFixedColumns.value = _columns.value.filter(\n      (column) => column.fixed === 'right'\n    )\n    if (\n      fixedColumns.value.length > 0 &&\n      _columns.value[0] &&\n      _columns.value[0].type === 'selection' &&\n      !_columns.value[0].fixed\n    ) {\n      _columns.value[0].fixed = true\n      fixedColumns.value.unshift(_columns.value[0])\n    }\n\n    const notFixedColumns = _columns.value.filter((column) => !column.fixed)\n    originColumns.value = []\n      .concat(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 = []\n      .concat(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) => {\n    return selection.value.indexOf(row) > -1\n  }\n\n  const clearSelection = () => {\n    isAllSelected.value = false\n    const oldSelection = selection.value\n    if (oldSelection.length) {\n      selection.value = []\n      instance.emit('selection-change', [])\n    }\n  }\n\n  const cleanSelection = () => {\n    let deleted\n    if (rowKey.value) {\n      deleted = []\n      const selectedMap = getKeysMap(selection.value, rowKey.value)\n      const dataMap = getKeysMap(data.value, rowKey.value)\n      for (const key in selectedMap) {\n        if (hasOwn(selectedMap, key) && !dataMap[key]) {\n          deleted.push(selectedMap[key].row)\n        }\n      }\n    } else {\n      deleted = selection.value.filter(\n        (item) => data.value.indexOf(item) === -1\n      )\n    }\n    if (deleted.length) {\n      const newSelection = selection.value.filter(\n        (item) => deleted.indexOf(item) === -1\n      )\n      selection.value = newSelection\n      instance.emit('selection-change', newSelection.slice())\n    } else {\n      if (selection.value.length) {\n        selection.value = []\n        instance.emit('selection-change', [])\n      }\n    }\n  }\n\n  const toggleRowSelection = (\n    row: T,\n    selected = undefined,\n    emitChange = true\n  ) => {\n    const changed = toggleRowStatus(selection.value, row, selected)\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    data.value.forEach((row, index) => {\n      const rowIndex = index + childrenCount\n      if (selectable.value) {\n        if (\n          selectable.value.call(null, row, rowIndex) &&\n          toggleRowStatus(selection.value, row, value)\n        ) {\n          selectionChanged = true\n        }\n      } else {\n        if (toggleRowStatus(selection.value, row, value)) {\n          selectionChanged = true\n        }\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)\n  }\n\n  const updateSelectionByRowKey = () => {\n    const selectedMap = getKeysMap(selection.value, rowKey.value)\n    data.value.forEach((row) => {\n      const rowId = getRowIdentity(row, rowKey.value)\n      const rowInfo = selectedMap[rowId]\n      if (rowInfo) {\n        selection.value[rowInfo.index] = row\n      }\n    })\n  }\n\n  const updateAllSelected = () => {\n    // data 为 null 时，解构时的默认值会被忽略\n    if (data.value?.length === 0) {\n      isAllSelected.value = false\n      return\n    }\n\n    let selectedMap\n    if (rowKey.value) {\n      selectedMap = getKeysMap(selection.value, rowKey.value)\n    }\n    const isSelected = function (row) {\n      if (selectedMap) {\n        return !!selectedMap[getRowIdentity(row, rowKey.value)]\n      } else {\n        return selection.value.indexOf(row) !== -1\n      }\n    }\n    let isAllSelected_ = true\n    let selectedCount = 0\n    let childrenCount = 0\n    for (let i = 0, j = (data.value || []).length; i < j; i++) {\n      const keyProp = instance?.store?.states?.rowKey.value\n      const rowIndex = i + childrenCount\n      const item = data.value[i]\n      const isRowSelectable =\n        selectable.value && selectable.value.call(null, item, rowIndex)\n      if (!isSelected(item)) {\n        if (!selectable.value || isRowSelectable) {\n          isAllSelected_ = false\n          break\n        }\n      } else {\n        selectedCount++\n      }\n      childrenCount += getChildrenCount(getRowIdentity(item, keyProp))\n    }\n\n    if (selectedCount === 0) isAllSelected_ = false\n    isAllSelected.value = isAllSelected_\n  }\n\n  // gets the number of all child nodes by rowKey\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 = (columns, values) => {\n    if (!Array.isArray(columns)) {\n      columns = [columns]\n    }\n    const filters_ = {}\n    columns.forEach((col) => {\n      filters.value[col.id] = values\n      filters_[col.columnKey || col.id] = values\n    })\n    return filters_\n  }\n\n  const updateSort = (column, prop, order) => {\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\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 = undefined) => {\n    if (!(ignore && ignore.filter)) {\n      execFilter()\n    }\n    execSort()\n  }\n\n  const clearFilter = (columnKeys) => {\n    const { tableHeader, fixedTableHeader, rightFixedTableHeader } =\n      instance.refs as TableRefs\n    let panels = {}\n    if (tableHeader) panels = Object.assign(panels, tableHeader.filterPanels)\n    if (fixedTableHeader)\n      panels = Object.assign(panels, fixedTableHeader.filterPanels)\n    if (rightFixedTableHeader)\n      panels = Object.assign(panels, rightFixedTableHeader.filterPanels)\n\n    const keys = Object.keys(panels)\n    if (!keys.length) return\n\n    if (typeof columnKeys === 'string') {\n      columnKeys = [columnKeys]\n    }\n\n    if (Array.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    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    toggleRowSelection,\n    _toggleAllSelection,\n    toggleAllSelection: null,\n    updateSelectionByRowKey,\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    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      leafColumnsLength,\n      fixedLeafColumnsLength,\n      rightFixedLeafColumnsLength,\n      isAllSelected,\n      selection,\n      reserveSelection,\n      selectOnIndeterminate,\n      selectable,\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":[],"mappings":"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"}