{"version":3,"file":"useSorter.cjs","sources":["../../../../../../../packages/components/table/src/hooks/useSorter.tsx"],"sourcesContent":["import type { TableLocale } from '@antdv/locale';\nimport type { Ref } from 'vue';\nimport type { TooltipProps } from '../../../tooltip';\nimport type {\n  ColumnTitleProps,\n  CompareFn,\n  SorterResult,\n  SortOrder,\n  SortState,\n  TableColumnGroupType,\n  TableColumnsType,\n  TableColumnType,\n  TransformColumns,\n} from '../interface';\nimport { CaretDownOutlined, CaretUpOutlined } from '@ant-design/icons-vue';\nimport { useState } from '@antdv/hooks';\nimport { classNames, KeyCode } from '@antdv/utils';\nimport { computed } from 'vue';\n\nimport Tooltip from '../../../tooltip';\nimport { getColumnKey, getColumnPos, renderColumnTitle } from '../util';\n\nconst ASCEND = 'ascend';\nconst DESCEND = 'descend';\n\nfunction getMultiplePriority<RecordType>(column: TableColumnType<RecordType>): number | false {\n  if (typeof column.sorter === 'object' && typeof column.sorter.multiple === 'number')\n    return column.sorter.multiple;\n\n  return false;\n}\n\nfunction getSortFunction<RecordType>(\n  sorter: TableColumnType<RecordType>['sorter'],\n): CompareFn<RecordType> | false {\n  if (typeof sorter === 'function')\n    return sorter;\n\n  if (sorter && typeof sorter === 'object' && sorter.compare)\n    return sorter.compare;\n\n  return false;\n}\n\nfunction nextSortDirection(sortDirections: SortOrder[], current: SortOrder | null) {\n  if (!current)\n    return sortDirections[0];\n\n  return sortDirections[sortDirections.indexOf(current) + 1];\n}\n\nfunction collectSortStates<RecordType>(\n  columns: TableColumnsType<RecordType>,\n  init: boolean,\n  pos?: string,\n): Array<SortState<RecordType>> {\n  let sortStates: Array<SortState<RecordType>> = [];\n\n  function pushState(column: TableColumnsType<RecordType>[number], columnPos: string) {\n    sortStates.push({\n      column,\n      key: getColumnKey(column, columnPos),\n      multiplePriority: getMultiplePriority(column),\n      sortOrder: column.sortOrder!,\n    });\n  }\n\n  (columns || []).forEach((column, index) => {\n    const columnPos = getColumnPos(index, pos);\n\n    if ((column as TableColumnGroupType<RecordType>).children) {\n      if ('sortOrder' in column) {\n        // Controlled\n        pushState(column, columnPos);\n      }\n      sortStates = [\n        ...sortStates,\n        ...collectSortStates((column as TableColumnGroupType<RecordType>).children, init, columnPos),\n      ];\n    } else if (column.sorter) {\n      if ('sortOrder' in column) {\n        // Controlled\n        pushState(column, columnPos);\n      } else if (init && column.defaultSortOrder) {\n        // Default sorter\n        sortStates.push({\n          column,\n          key: getColumnKey(column, columnPos),\n          multiplePriority: getMultiplePriority(column),\n          sortOrder: column.defaultSortOrder!,\n        });\n      }\n    }\n  });\n\n  return sortStates;\n}\n\nfunction injectSorter<RecordType>(\n  prefixCls: string,\n  columns: TableColumnsType<RecordType>,\n  sorterStates: Array<SortState<RecordType>>,\n  triggerSorter: (sorterStates: SortState<RecordType>) => void,\n  defaultSortDirections: SortOrder[],\n  tableLocale?: TableLocale,\n  tableShowSorterTooltip?: boolean | TooltipProps,\n  pos?: string,\n): TableColumnsType<RecordType> {\n  return (columns || []).map((column, index) => {\n    const columnPos = getColumnPos(index, pos);\n    let newColumn: TableColumnsType<RecordType>[number] = column;\n\n    if (newColumn.sorter) {\n      const sortDirections: SortOrder[] = newColumn.sortDirections || defaultSortDirections;\n      const showSorterTooltip\n        = newColumn.showSorterTooltip === undefined\n          ? tableShowSorterTooltip\n          : newColumn.showSorterTooltip;\n      const columnKey = getColumnKey(newColumn, columnPos);\n      const sorterState = sorterStates.find(({ key }) => key === columnKey);\n      const sorterOrder = sorterState ? sorterState.sortOrder : null;\n      const nextSortOrder = nextSortDirection(sortDirections, sorterOrder);\n      const upNode = sortDirections.includes(ASCEND) && (\n        <CaretUpOutlined\n          class={classNames(`${prefixCls}-column-sorter-up`, {\n            active: sorterOrder === ASCEND,\n          })}\n          role=\"presentation\"\n        />\n      );\n      const downNode = sortDirections.includes(DESCEND) && (\n        <CaretDownOutlined\n          role=\"presentation\"\n          class={classNames(`${prefixCls}-column-sorter-down`, {\n            active: sorterOrder === DESCEND,\n          })}\n        />\n      );\n      const { cancelSort, triggerAsc, triggerDesc } = tableLocale || {};\n      let sortTip: string | undefined = cancelSort;\n      if (nextSortOrder === DESCEND)\n        sortTip = triggerDesc;\n      else if (nextSortOrder === ASCEND)\n        sortTip = triggerAsc;\n\n      const tooltipProps: TooltipProps\n        = typeof showSorterTooltip === 'object' ? showSorterTooltip : { title: sortTip };\n      newColumn = {\n        ...newColumn,\n        className: classNames(newColumn.className, { [`${prefixCls}-column-sort`]: sorterOrder }),\n        title: (renderProps: ColumnTitleProps<RecordType>) => {\n          const renderSortTitle = (\n            <div class={`${prefixCls}-column-sorters`}>\n              <span class={`${prefixCls}-column-title`}>\n                {renderColumnTitle(column.title, renderProps)}\n              </span>\n              <span\n                class={classNames(`${prefixCls}-column-sorter`, {\n                  [`${prefixCls}-column-sorter-full`]: !!(upNode && downNode),\n                })}\n              >\n                <span class={`${prefixCls}-column-sorter-inner`}>\n                  {upNode}\n                  {downNode}\n                </span>\n              </span>\n            </div>\n          );\n          return showSorterTooltip\n            ? (\n                <Tooltip {...tooltipProps}>{renderSortTitle}</Tooltip>\n              )\n            : (\n                renderSortTitle\n              );\n        },\n        customHeaderCell: (col) => {\n          const cell = (column.customHeaderCell && column.customHeaderCell(col)) || {};\n          const originOnClick = cell.onClick;\n          const originOKeyDown = cell.onKeydown;\n          cell.onClick = (event: MouseEvent) => {\n            triggerSorter({\n              column,\n              key: columnKey,\n              sortOrder: nextSortOrder,\n              multiplePriority: getMultiplePriority(column),\n            });\n\n            if (originOnClick)\n              originOnClick(event);\n          };\n          cell.onKeydown = (event: KeyboardEvent) => {\n            if (event.keyCode === KeyCode.ENTER) {\n              triggerSorter({\n                column,\n                key: columnKey,\n                sortOrder: nextSortOrder,\n                multiplePriority: getMultiplePriority(column),\n              });\n              originOKeyDown?.(event);\n            }\n          };\n\n          // Inform the screen-reader so it can tell the visually impaired user which column is sorted\n          if (sorterOrder)\n            cell['aria-sort'] = sorterOrder === 'ascend' ? 'ascending' : 'descending';\n\n          cell.class = classNames(cell.class, `${prefixCls}-column-has-sorters`);\n          cell.tabindex = 0;\n          return cell;\n        },\n      };\n    }\n\n    if ('children' in newColumn) {\n      newColumn = {\n        ...newColumn,\n        children: injectSorter(\n          prefixCls,\n          newColumn.children,\n          sorterStates,\n          triggerSorter,\n          defaultSortDirections,\n          tableLocale,\n          tableShowSorterTooltip,\n          columnPos,\n        ),\n      };\n    }\n\n    return newColumn;\n  });\n}\n\nfunction stateToInfo<RecordType>(sorterStates: SortState<RecordType>) {\n  const { column, sortOrder } = sorterStates;\n  return { column, order: sortOrder, field: column.dataIndex, columnKey: column.key };\n}\n\nfunction generateSorterInfo<RecordType>(\n  sorterStates: Array<SortState<RecordType>>,\n): SorterResult<RecordType> | Array<SorterResult<RecordType>> {\n  const list = sorterStates.filter(({ sortOrder }) => sortOrder).map(stateToInfo);\n\n  // =========== Legacy compatible support ===========\n  // https://github.com/ant-design/ant-design/pull/19226\n  if (list.length === 0 && sorterStates.length) {\n    return {\n      ...stateToInfo(sorterStates[sorterStates.length - 1]),\n      column: undefined,\n    };\n  }\n\n  if (list.length <= 1)\n    return list[0] || {};\n\n  return list;\n}\n\nexport function getSortData<RecordType>(\n  data: readonly RecordType[],\n  sortStates: Array<SortState<RecordType>>,\n  childrenColumnName: string,\n): RecordType[] {\n  const innerSorterStates = sortStates\n    .slice()\n    .sort((a, b) => (b.multiplePriority as number) - (a.multiplePriority as number));\n\n  const cloneData = data.slice();\n\n  const runningSorters = innerSorterStates.filter(\n    ({ column: { sorter }, sortOrder }) => getSortFunction(sorter) && sortOrder,\n  );\n\n  // Skip if no sorter needed\n  if (!runningSorters.length)\n    return cloneData;\n\n  return cloneData\n    .sort((record1, record2) => {\n      for (let i = 0; i < runningSorters.length; i += 1) {\n        const sorterState = runningSorters[i];\n        const {\n          column: { sorter },\n          sortOrder,\n        } = sorterState;\n\n        const compareFn = getSortFunction(sorter);\n\n        if (compareFn && sortOrder) {\n          const compareResult = compareFn(record1, record2, sortOrder);\n\n          if (compareResult !== 0)\n            return sortOrder === ASCEND ? compareResult : -compareResult;\n        }\n      }\n\n      return 0;\n    })\n    .map<RecordType>((record) => {\n      const subRecords = (record as any)[childrenColumnName];\n      if (subRecords) {\n        return {\n          ...record,\n          [childrenColumnName]: getSortData(subRecords, sortStates, childrenColumnName),\n        };\n      }\n      return record;\n    });\n}\n\ninterface SorterConfig<RecordType> {\n  prefixCls: Ref<string>\n  mergedColumns: Ref<TableColumnsType<RecordType>>\n  onSorterChange: (\n    sorterResult: SorterResult<RecordType> | Array<SorterResult<RecordType>>,\n    sortStates: Array<SortState<RecordType>>,\n  ) => void\n  sortDirections: Ref<SortOrder[]>\n  tableLocale?: Ref<TableLocale>\n  showSorterTooltip?: Ref<boolean | TooltipProps>\n}\n\nexport default function useFilterSorter<RecordType>({\n  prefixCls,\n  mergedColumns,\n  onSorterChange,\n  sortDirections,\n  tableLocale,\n  showSorterTooltip,\n}: SorterConfig<RecordType>): [\n    TransformColumns<RecordType>,\n    Ref<Array<SortState<RecordType>>>,\n    Ref<ColumnTitleProps<RecordType>>,\n    Ref<SorterResult<RecordType> | Array<SorterResult<RecordType>>>,\n  ] {\n  const [sortStates, setSortStates] = useState<Array<SortState<RecordType>>>(\n    collectSortStates(mergedColumns.value, true),\n  );\n\n  const mergedSorterStates = computed(() => {\n    let validate = true;\n    const collectedStates = collectSortStates(mergedColumns.value, false);\n\n    // Return if not controlled\n    if (!collectedStates.length)\n      return sortStates.value;\n\n    const validateStates: Array<SortState<RecordType>> = [];\n\n    function patchStates(state: SortState<RecordType>) {\n      if (validate) {\n        validateStates.push(state);\n      } else {\n        validateStates.push({\n          ...state,\n          sortOrder: null,\n        });\n      }\n    }\n\n    let multipleMode: boolean | null = null;\n    collectedStates.forEach((state) => {\n      if (multipleMode === null) {\n        patchStates(state);\n\n        if (state.sortOrder) {\n          if (state.multiplePriority === false)\n            validate = false;\n          else\n            multipleMode = true;\n        }\n      } else if (multipleMode && state.multiplePriority !== false) {\n        patchStates(state);\n      } else {\n        validate = false;\n        patchStates(state);\n      }\n    });\n\n    return validateStates;\n  });\n\n  // Get render columns title required props\n  const columnTitleSorterProps = computed<ColumnTitleProps<RecordType>>(() => {\n    const sortColumns = mergedSorterStates.value.map(({ column, sortOrder }) => ({\n      column,\n      order: sortOrder,\n    }));\n\n    return {\n      sortColumns,\n      // Legacy\n      sortColumn: sortColumns[0] && sortColumns[0].column,\n      sortOrder: (sortColumns[0] && sortColumns[0].order) as SortOrder,\n    };\n  });\n\n  function triggerSorter(sortState: SortState<RecordType>) {\n    let newSorterStates;\n\n    if (\n      sortState.multiplePriority === false\n      || !mergedSorterStates.value.length\n      || mergedSorterStates.value[0].multiplePriority === false\n    ) {\n      newSorterStates = [sortState];\n    } else {\n      newSorterStates = [\n        ...mergedSorterStates.value.filter(({ key }) => key !== sortState.key),\n        sortState,\n      ];\n    }\n\n    setSortStates(newSorterStates);\n    onSorterChange(generateSorterInfo(newSorterStates), newSorterStates);\n  }\n\n  const transformColumns = (innerColumns: TableColumnsType<RecordType>) =>\n    injectSorter(\n      prefixCls.value,\n      innerColumns,\n      mergedSorterStates.value,\n      triggerSorter,\n      sortDirections.value,\n      tableLocale.value,\n      showSorterTooltip.value,\n    );\n\n  const sorters = computed(() => generateSorterInfo(mergedSorterStates.value));\n\n  return [transformColumns, mergedSorterStates, columnTitleSorterProps, sorters];\n}\n"],"names":["ASCEND","DESCEND","getMultiplePriority","column","sorter","multiple","getSortFunction","compare","nextSortDirection","sortDirections","current","indexOf","collectSortStates","columns","init","pos","sortStates","pushState","columnPos","push","key","getColumnKey","multiplePriority","sortOrder","forEach","index","getColumnPos","children","defaultSortOrder","injectSorter","prefixCls","sorterStates","triggerSorter","defaultSortDirections","tableLocale","tableShowSorterTooltip","map","newColumn","showSorterTooltip","undefined","columnKey","sorterState","find","sorterOrder","nextSortOrder","upNode","includes","_createVNode","CaretUpOutlined","classNames","active","downNode","CaretDownOutlined","cancelSort","triggerAsc","triggerDesc","sortTip","tooltipProps","title","className","renderProps","renderSortTitle","renderColumnTitle","Tooltip","default","customHeaderCell","col","cell","originOnClick","onClick","originOKeyDown","onKeydown","event","keyCode","KeyCode","ENTER","class","tabindex","stateToInfo","order","field","dataIndex","generateSorterInfo","list","filter","length","getSortData","data","childrenColumnName","innerSorterStates","slice","sort","a","b","cloneData","runningSorters","record1","record2","i","compareFn","compareResult","record","subRecords","useFilterSorter","mergedColumns","onSorterChange","setSortStates","useState","value","mergedSorterStates","computed","validate","collectedStates","validateStates","patchStates","state","multipleMode","columnTitleSorterProps","sortColumns","sortColumn","sortState","newSorterStates","transformColumns","innerColumns","sorters"],"mappings":"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"}