{"version":3,"file":"watcher.mjs","sources":["../../../../../../../packages/components/table/src/store/watcher.ts"],"sourcesContent":["// @ts-nocheck\r\nimport { getCurrentInstance, ref, shallowRef, toRefs, unref, watch } from 'vue'\r\nimport { hasOwn } from '@sgui-plus/utils'\r\nimport {\r\n  getColumnById,\r\n  getColumnByKey,\r\n  getKeysMap,\r\n  getRowIdentity,\r\n  orderBy,\r\n  toggleRowStatus,\r\n} from '../util'\r\nimport useExpand from './expand'\r\nimport useCurrent from './current'\r\nimport useTree from './tree'\r\n\r\nimport type { Ref } from 'vue'\r\nimport type { TableColumnCtx } from '../table-column/defaults'\r\nimport type { Table, TableRefs } from '../table/defaults'\r\nimport type { StoreFilter } from '.'\r\n\r\nconst sortData = (data, states) => {\r\n  const sortingColumn = states.sortingColumn\r\n  if (!sortingColumn || typeof sortingColumn.sortable === 'string') {\r\n    return data\r\n  }\r\n  return orderBy(\r\n    data,\r\n    states.sortProp,\r\n    states.sortOrder,\r\n    sortingColumn.sortMethod,\r\n    sortingColumn.sortBy\r\n  )\r\n}\r\n\r\nconst doFlattenColumns = (columns) => {\r\n  const result = []\r\n  columns.forEach((column) => {\r\n    if (column.children && column.children.length > 0) {\r\n      // eslint-disable-next-line prefer-spread\r\n      result.push.apply(result, doFlattenColumns(column.children))\r\n    } else {\r\n      result.push(column)\r\n    }\r\n  })\r\n  return result\r\n}\r\n\r\nfunction useWatcher<T>() {\r\n  const instance = getCurrentInstance() as Table<T>\r\n  const { size: tableSize } = toRefs(instance.proxy?.$props as any)\r\n  const rowKey: Ref<string> = ref(null)\r\n  const data: Ref<T[]> = shallowRef([])\r\n  const _data: Ref<T[]> = shallowRef([])\r\n  const isComplex = ref(false)\r\n  const _columns: Ref<TableColumnCtx<T>[]> = shallowRef([])\r\n  const originColumns: Ref<TableColumnCtx<T>[]> = ref([])\r\n  const columns: Ref<TableColumnCtx<T>[]> = shallowRef([])\r\n  const fixedColumns: Ref<TableColumnCtx<T>[]> = ref([])\r\n  const rightFixedColumns: Ref<TableColumnCtx<T>[]> = ref([])\r\n  const leafColumns: Ref<TableColumnCtx<T>[]> = ref([])\r\n  const fixedLeafColumns: Ref<TableColumnCtx<T>[]> = ref([])\r\n  const rightFixedLeafColumns: Ref<TableColumnCtx<T>[]> = ref([])\r\n  const updateOrderFns: (() => void)[] = []\r\n  const leafColumnsLength = ref(0)\r\n  const fixedLeafColumnsLength = ref(0)\r\n  const rightFixedLeafColumnsLength = ref(0)\r\n  const isAllSelected = ref(false)\r\n  const selection: Ref<T[]> = ref([])\r\n  const reserveSelection = ref(false)\r\n  const selectOnIndeterminate = ref(false)\r\n  const selectable: Ref<(row: T, index: number) => boolean> = ref(null)\r\n  const filters: Ref<StoreFilter> = ref({})\r\n  const filteredData = ref(null)\r\n  const sortingColumn = ref(null)\r\n  const sortProp = ref(null)\r\n  const sortOrder = ref(null)\r\n  const hoverRow = ref(null)\r\n\r\n  watch(data, () => instance.state && scheduleLayout(false), {\r\n    deep: true,\r\n  })\r\n\r\n  // 检查 rowKey 是否存在\r\n  const assertRowKey = () => {\r\n    if (!rowKey.value) throw new Error('[SgTable] prop row-key is required')\r\n  }\r\n\r\n  // 更新 fixed\r\n  const updateChildFixed = (column: TableColumnCtx<T>) => {\r\n    column.children?.forEach((childColumn) => {\r\n      childColumn.fixed = column.fixed\r\n      updateChildFixed(childColumn)\r\n    })\r\n  }\r\n\r\n  // 更新列\r\n  const updateColumns = () => {\r\n    _columns.value.forEach((column) => {\r\n      updateChildFixed(column)\r\n    })\r\n    fixedColumns.value = _columns.value.filter(\r\n      (column) => column.fixed === true || column.fixed === 'left'\r\n    )\r\n    rightFixedColumns.value = _columns.value.filter(\r\n      (column) => column.fixed === 'right'\r\n    )\r\n    if (\r\n      fixedColumns.value.length > 0 &&\r\n      _columns.value[0] &&\r\n      _columns.value[0].type === 'selection' &&\r\n      !_columns.value[0].fixed\r\n    ) {\r\n      _columns.value[0].fixed = true\r\n      fixedColumns.value.unshift(_columns.value[0])\r\n    }\r\n\r\n    const notFixedColumns = _columns.value.filter((column) => !column.fixed)\r\n    originColumns.value = []\r\n      .concat(fixedColumns.value)\r\n      .concat(notFixedColumns)\r\n      .concat(rightFixedColumns.value)\r\n    const leafColumns = doFlattenColumns(notFixedColumns)\r\n    const fixedLeafColumns = doFlattenColumns(fixedColumns.value)\r\n    const rightFixedLeafColumns = doFlattenColumns(rightFixedColumns.value)\r\n\r\n    leafColumnsLength.value = leafColumns.length\r\n    fixedLeafColumnsLength.value = fixedLeafColumns.length\r\n    rightFixedLeafColumnsLength.value = rightFixedLeafColumns.length\r\n\r\n    columns.value = []\r\n      .concat(fixedLeafColumns)\r\n      .concat(leafColumns)\r\n      .concat(rightFixedLeafColumns)\r\n    isComplex.value =\r\n      fixedColumns.value.length > 0 || rightFixedColumns.value.length > 0\r\n  }\r\n\r\n  // 更新 DOM\r\n  const scheduleLayout = (needUpdateColumns?: boolean, immediate = false) => {\r\n    if (needUpdateColumns) {\r\n      updateColumns()\r\n    }\r\n    if (immediate) {\r\n      instance.state.doLayout()\r\n    } else {\r\n      instance.state.debouncedUpdateLayout()\r\n    }\r\n  }\r\n\r\n  // 选择\r\n  const isSelected = (row) => {\r\n    return selection.value.includes(row)\r\n  }\r\n\r\n  const clearSelection = () => {\r\n    isAllSelected.value = false\r\n    const oldSelection = selection.value\r\n    if (oldSelection.length) {\r\n      selection.value = []\r\n      instance.emit('selection-change', [])\r\n    }\r\n  }\r\n\r\n  const cleanSelection = () => {\r\n    let deleted\r\n    if (rowKey.value) {\r\n      deleted = []\r\n      const selectedMap = getKeysMap(selection.value, rowKey.value)\r\n      const dataMap = getKeysMap(data.value, rowKey.value)\r\n      for (const key in selectedMap) {\r\n        if (hasOwn(selectedMap, key) && !dataMap[key]) {\r\n          deleted.push(selectedMap[key].row)\r\n        }\r\n      }\r\n    } else {\r\n      deleted = selection.value.filter((item) => !data.value.includes(item))\r\n    }\r\n    if (deleted.length) {\r\n      const newSelection = selection.value.filter(\r\n        (item) => !deleted.includes(item)\r\n      )\r\n      selection.value = newSelection\r\n      instance.emit('selection-change', newSelection.slice())\r\n    }\r\n  }\r\n\r\n  const getSelectionRows = () => {\r\n    return (selection.value || []).slice()\r\n  }\r\n\r\n  const toggleRowSelection = (\r\n    row: T,\r\n    selected = undefined,\r\n    emitChange = true\r\n  ) => {\r\n    const changed = toggleRowStatus(selection.value, row, selected)\r\n    if (changed) {\r\n      const newSelection = (selection.value || []).slice()\r\n      // 调用 API 修改选中值，不触发 select 事件\r\n      if (emitChange) {\r\n        instance.emit('select', newSelection, row)\r\n      }\r\n      instance.emit('selection-change', newSelection)\r\n    }\r\n  }\r\n\r\n  const _toggleAllSelection = () => {\r\n    // when only some rows are selected (but not all), select or deselect all of them\r\n    // depending on the value of selectOnIndeterminate\r\n    const value = selectOnIndeterminate.value\r\n      ? !isAllSelected.value\r\n      : !(isAllSelected.value || selection.value.length)\r\n    isAllSelected.value = value\r\n\r\n    let selectionChanged = false\r\n    let childrenCount = 0\r\n    const rowKey = instance?.store?.states?.rowKey.value\r\n    data.value.forEach((row, index) => {\r\n      const rowIndex = index + childrenCount\r\n      if (selectable.value) {\r\n        if (\r\n          selectable.value.call(null, row, rowIndex) &&\r\n          toggleRowStatus(selection.value, row, value)\r\n        ) {\r\n          selectionChanged = true\r\n        }\r\n      } else {\r\n        if (toggleRowStatus(selection.value, row, value)) {\r\n          selectionChanged = true\r\n        }\r\n      }\r\n      childrenCount += getChildrenCount(getRowIdentity(row, rowKey))\r\n    })\r\n\r\n    if (selectionChanged) {\r\n      instance.emit(\r\n        'selection-change',\r\n        selection.value ? selection.value.slice() : []\r\n      )\r\n    }\r\n    instance.emit('select-all', selection.value)\r\n  }\r\n\r\n  const updateSelectionByRowKey = () => {\r\n    const selectedMap = getKeysMap(selection.value, rowKey.value)\r\n    data.value.forEach((row) => {\r\n      const rowId = getRowIdentity(row, rowKey.value)\r\n      const rowInfo = selectedMap[rowId]\r\n      if (rowInfo) {\r\n        selection.value[rowInfo.index] = row\r\n      }\r\n    })\r\n  }\r\n\r\n  const updateAllSelected = () => {\r\n    // data 为 null 时，解构时的默认值会被忽略\r\n    if (data.value?.length === 0) {\r\n      isAllSelected.value = false\r\n      return\r\n    }\r\n\r\n    let selectedMap\r\n    if (rowKey.value) {\r\n      selectedMap = getKeysMap(selection.value, rowKey.value)\r\n    }\r\n    const isSelected = function (row) {\r\n      if (selectedMap) {\r\n        return !!selectedMap[getRowIdentity(row, rowKey.value)]\r\n      } else {\r\n        return selection.value.includes(row)\r\n      }\r\n    }\r\n    let isAllSelected_ = true\r\n    let selectedCount = 0\r\n    let childrenCount = 0\r\n    for (let i = 0, j = (data.value || []).length; i < j; i++) {\r\n      const keyProp = instance?.store?.states?.rowKey.value\r\n      const rowIndex = i + childrenCount\r\n      const item = data.value[i]\r\n      const isRowSelectable =\r\n        selectable.value && selectable.value.call(null, item, rowIndex)\r\n      if (!isSelected(item)) {\r\n        if (!selectable.value || isRowSelectable) {\r\n          isAllSelected_ = false\r\n          break\r\n        }\r\n      } else {\r\n        selectedCount++\r\n      }\r\n      childrenCount += getChildrenCount(getRowIdentity(item, keyProp))\r\n    }\r\n\r\n    if (selectedCount === 0) isAllSelected_ = false\r\n    isAllSelected.value = isAllSelected_\r\n  }\r\n\r\n  // gets the number of all child nodes by rowKey\r\n  const getChildrenCount = (rowKey: string) => {\r\n    if (!instance || !instance.store) return 0\r\n    const { treeData } = instance.store.states\r\n    let count = 0\r\n    const children = treeData.value[rowKey]?.children\r\n    if (children) {\r\n      count += children.length\r\n      children.forEach((childKey) => {\r\n        count += getChildrenCount(childKey)\r\n      })\r\n    }\r\n    return count\r\n  }\r\n\r\n  // 过滤与排序\r\n  const updateFilters = (columns, values) => {\r\n    if (!Array.isArray(columns)) {\r\n      columns = [columns]\r\n    }\r\n    const filters_ = {}\r\n    columns.forEach((col) => {\r\n      filters.value[col.id] = values\r\n      filters_[col.columnKey || col.id] = values\r\n    })\r\n    return filters_\r\n  }\r\n\r\n  const updateSort = (column, prop, order) => {\r\n    if (sortingColumn.value && sortingColumn.value !== column) {\r\n      sortingColumn.value.order = null\r\n    }\r\n    sortingColumn.value = column\r\n    sortProp.value = prop\r\n    sortOrder.value = order\r\n  }\r\n\r\n  const execFilter = () => {\r\n    let sourceData = unref(_data)\r\n    Object.keys(filters.value).forEach((columnId) => {\r\n      const values = filters.value[columnId]\r\n      if (!values || values.length === 0) return\r\n      const column = getColumnById(\r\n        {\r\n          columns: columns.value,\r\n        },\r\n        columnId\r\n      )\r\n      if (column && column.filterMethod) {\r\n        sourceData = sourceData.filter((row) => {\r\n          return values.some((value) =>\r\n            column.filterMethod.call(null, value, row, column)\r\n          )\r\n        })\r\n      }\r\n    })\r\n\r\n    filteredData.value = sourceData\r\n  }\r\n\r\n  const execSort = () => {\r\n    data.value = sortData(filteredData.value, {\r\n      sortingColumn: sortingColumn.value,\r\n      sortProp: sortProp.value,\r\n      sortOrder: sortOrder.value,\r\n    })\r\n  }\r\n\r\n  // 根据 filters 与 sort 去过滤 data\r\n  const execQuery = (ignore = undefined) => {\r\n    if (!(ignore && ignore.filter)) {\r\n      execFilter()\r\n    }\r\n    execSort()\r\n  }\r\n\r\n  const clearFilter = (columnKeys) => {\r\n    const { tableHeaderRef } = instance.refs as TableRefs\r\n    if (!tableHeaderRef) return\r\n    const panels = Object.assign({}, tableHeaderRef.filterPanels)\r\n\r\n    const keys = Object.keys(panels)\r\n    if (!keys.length) return\r\n\r\n    if (typeof columnKeys === 'string') {\r\n      columnKeys = [columnKeys]\r\n    }\r\n\r\n    if (Array.isArray(columnKeys)) {\r\n      const columns_ = columnKeys.map((key) =>\r\n        getColumnByKey(\r\n          {\r\n            columns: columns.value,\r\n          },\r\n          key\r\n        )\r\n      )\r\n      keys.forEach((key) => {\r\n        const column = columns_.find((col) => col.id === key)\r\n        if (column) {\r\n          column.filteredValue = []\r\n        }\r\n      })\r\n      instance.store.commit('filterChange', {\r\n        column: columns_,\r\n        values: [],\r\n        silent: true,\r\n        multi: true,\r\n      })\r\n    } else {\r\n      keys.forEach((key) => {\r\n        const column = columns.value.find((col) => col.id === key)\r\n        if (column) {\r\n          column.filteredValue = []\r\n        }\r\n      })\r\n\r\n      filters.value = {}\r\n      instance.store.commit('filterChange', {\r\n        column: {},\r\n        values: [],\r\n        silent: true,\r\n      })\r\n    }\r\n  }\r\n\r\n  const clearSort = () => {\r\n    if (!sortingColumn.value) return\r\n\r\n    updateSort(null, null, null)\r\n    instance.store.commit('changeSortCondition', {\r\n      silent: true,\r\n    })\r\n  }\r\n  const {\r\n    setExpandRowKeys,\r\n    toggleRowExpansion,\r\n    updateExpandRows,\r\n    states: expandStates,\r\n    isRowExpanded,\r\n  } = useExpand({\r\n    data,\r\n    rowKey,\r\n  })\r\n  const {\r\n    updateTreeExpandKeys,\r\n    toggleTreeExpansion,\r\n    updateTreeData,\r\n    loadOrToggle,\r\n    states: treeStates,\r\n  } = useTree({\r\n    data,\r\n    rowKey,\r\n  })\r\n  const {\r\n    updateCurrentRowData,\r\n    updateCurrentRow,\r\n    setCurrentRowKey,\r\n    states: currentData,\r\n  } = useCurrent({\r\n    data,\r\n    rowKey,\r\n  })\r\n  // 适配层，expand-row-keys 在 Expand 与 TreeTable 中都有使用\r\n  const setExpandRowKeysAdapter = (val: string[]) => {\r\n    // 这里会触发额外的计算，但为了兼容性，暂时这么做\r\n    setExpandRowKeys(val)\r\n    updateTreeExpandKeys(val)\r\n  }\r\n\r\n  // 展开行与 TreeTable 都要使用\r\n  const toggleRowExpansionAdapter = (row: T, expanded?: boolean) => {\r\n    const hasExpandColumn = columns.value.some(({ type }) => type === 'expand')\r\n    if (hasExpandColumn) {\r\n      toggleRowExpansion(row, expanded)\r\n    } else {\r\n      toggleTreeExpansion(row, expanded)\r\n    }\r\n  }\r\n\r\n  return {\r\n    assertRowKey,\r\n    updateColumns,\r\n    scheduleLayout,\r\n    isSelected,\r\n    clearSelection,\r\n    cleanSelection,\r\n    getSelectionRows,\r\n    toggleRowSelection,\r\n    _toggleAllSelection,\r\n    toggleAllSelection: null,\r\n    updateSelectionByRowKey,\r\n    updateAllSelected,\r\n    updateFilters,\r\n    updateCurrentRow,\r\n    updateSort,\r\n    execFilter,\r\n    execSort,\r\n    execQuery,\r\n    clearFilter,\r\n    clearSort,\r\n    toggleRowExpansion,\r\n    setExpandRowKeysAdapter,\r\n    setCurrentRowKey,\r\n    toggleRowExpansionAdapter,\r\n    isRowExpanded,\r\n    updateExpandRows,\r\n    updateCurrentRowData,\r\n    loadOrToggle,\r\n    updateTreeData,\r\n    states: {\r\n      tableSize,\r\n      rowKey,\r\n      data,\r\n      _data,\r\n      isComplex,\r\n      _columns,\r\n      originColumns,\r\n      columns,\r\n      fixedColumns,\r\n      rightFixedColumns,\r\n      leafColumns,\r\n      fixedLeafColumns,\r\n      rightFixedLeafColumns,\r\n      updateOrderFns,\r\n      leafColumnsLength,\r\n      fixedLeafColumnsLength,\r\n      rightFixedLeafColumnsLength,\r\n      isAllSelected,\r\n      selection,\r\n      reserveSelection,\r\n      selectOnIndeterminate,\r\n      selectable,\r\n      filters,\r\n      filteredData,\r\n      sortingColumn,\r\n      sortProp,\r\n      sortOrder,\r\n      hoverRow,\r\n      ...expandStates,\r\n      ...treeStates,\r\n      ...currentData,\r\n    },\r\n  }\r\n}\r\n\r\nexport default useWatcher\r\n"],"names":[],"mappings":"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"}