{"version":3,"file":"useDragSort.mjs","sources":["../../../src/table/hooks/useDragSort.ts"],"sourcesContent":["// 表格 行拖拽 + 列拖拽功能\nimport { SetupContext, computed, toRefs, ref, watch, h } from 'vue';\nimport Sortable, { SortableEvent, SortableOptions, MoveEvent } from 'sortablejs';\nimport get from 'lodash/get';\nimport isFunction from 'lodash/isFunction';\nimport { TableRowData, TdPrimaryTableProps, DragSortContext } from '../type';\nimport useClassName from './useClassName';\nimport log from '../../_common/js/log';\nimport { hasClass } from '../../utils/dom';\nimport swapDragArrayElement from '../../_common/js/utils/swapDragArrayElement';\nimport { BaseTableColumns } from '../interface';\nimport { getColumnDataByKey, getColumnIndexByKey } from '../utils';\n\nexport default function useDragSort(props: TdPrimaryTableProps, context: SetupContext) {\n  const { sortOnRowDraggable, dragSort, data, rowKey } = toRefs(props);\n  const { tableDraggableClasses, tableBaseClass, tableFullRowClasses } = useClassName();\n  const primaryTableRef = ref(null);\n  const columns = ref<BaseTableColumns>(props.columns || []);\n  // @ts-ignore 判断是否有拖拽列\n  const dragCol = computed(() => columns.value.find((item) => item.colKey === 'drag'));\n  // 行拖拽判断条件\n  const isRowDraggable = computed(\n    () => sortOnRowDraggable.value || ['row', 'row-handler-col'].includes(dragSort.value),\n  );\n  // 行拖拽判断条件-手柄列\n  const isRowHandlerDraggable = computed(\n    () => ['row-handler', 'row-handler-col'].includes(dragSort.value) && !!dragCol.value,\n  );\n  // 列拖拽判断条件\n  const isColDraggable = computed(() => ['col', 'row-handler-col'].includes(dragSort.value));\n  // 行拖拽排序，存储上一次的变化结果\n  const lastRowList = ref([]);\n  // 列拖拽排序，存储上一次的变化结果\n  const lastColList = ref([]);\n\n  // 行拖拽实例\n  let dragRowInstanceTmp: Sortable = null;\n  // 列拖拽实例\n  let dragColInstanceTmp: Sortable = null;\n\n  if (props.sortOnRowDraggable) {\n    log.error('Table', \"`sortOnRowDraggable` is going to be deprecated, use dragSort='row' instead.\");\n  }\n\n  watch(\n    [data],\n    ([data]) => {\n      lastRowList.value = data?.map((item) => get(item, rowKey.value)) || [];\n      // Hack 处理：数据变化时，DOM 元素无法自动变化，只得手动设置顺序和重置数据\n      const timer = setTimeout(() => {\n        if (data.length) {\n          dragRowInstanceTmp?.sort(lastRowList.value);\n        } else {\n          const trList = primaryTableRef.value?.$el.querySelectorAll('tr[data-id]');\n          trList?.forEach((node: HTMLElement) => node.remove());\n        }\n        clearTimeout(timer);\n      }, 0);\n    },\n    { immediate: true },\n  );\n\n  watch(\n    columns,\n    (columns) => {\n      lastColList.value = columns ? columns.map((t) => t.colKey) : [];\n      // Hack 处理：数据变化时，DOM 元素无法自动变化，只得手动设置顺序和重置数据\n      const timer = setTimeout(() => {\n        if (!dragColInstanceTmp || !dragColInstanceTmp.el) return;\n        dragColInstanceTmp?.sort(lastColList.value);\n        clearTimeout(timer);\n      }, 0);\n    },\n    // { immediate: true },\n  );\n\n  // 本地分页的表格，index 不同，需加上分页计数\n  function getDataPageIndex(index: number) {\n    const { pagination } = props;\n    // 开启本地分页的场景\n    if (!props.disableDataPage && pagination && data.value.length > pagination.pageSize) {\n      return pagination.pageSize * (pagination.current - 1) + index;\n    }\n    return index;\n  }\n\n  // 行拖拽排序\n  const registerRowDragEvent = (element: HTMLDivElement): void => {\n    if (!isRowHandlerDraggable.value && !isRowDraggable.value) return;\n    const dragContainer = element?.querySelector('tbody');\n    if (!dragContainer) {\n      console.error('tbody does not exist.');\n      return null;\n    }\n    const baseOptions: SortableOptions = {\n      animation: 150,\n      ghostClass: tableDraggableClasses.ghost,\n      chosenClass: tableDraggableClasses.chosen,\n      dragClass: tableDraggableClasses.dragging,\n      filter: `.${tableFullRowClasses.base}`, // 过滤首行尾行固定\n      onMove: (evt: MoveEvent) => !hasClass(evt.related, tableFullRowClasses.base),\n      onEnd(evt: SortableEvent) {\n        if (evt.newIndex === evt.oldIndex) return;\n        // 处理受控：拖拽列表恢复原始排序\n        dragRowInstanceTmp?.sort(lastRowList.value);\n        let { oldIndex: currentIndex, newIndex: targetIndex } = evt;\n        if ((isFunction(props.firstFullRow) && props.firstFullRow(h)) || context.slots.firstFullRow) {\n          currentIndex -= 1;\n          targetIndex -= 1;\n        }\n        const params: DragSortContext<TableRowData> = {\n          data: data.value,\n          currentIndex,\n          current: data.value[currentIndex],\n          targetIndex,\n          target: data.value[targetIndex],\n          newData: swapDragArrayElement([...props.data], getDataPageIndex(currentIndex), getDataPageIndex(targetIndex)),\n          e: evt,\n          sort: 'row',\n        };\n        // currentData is going to be deprecated\n        params.currentData = params.newData;\n        props.onDragSort?.(params);\n      },\n      ...props.dragSortOptions,\n    };\n\n    if (!dragContainer) return;\n    if (isRowDraggable.value) {\n      dragRowInstanceTmp = new Sortable(dragContainer, { ...baseOptions });\n    } else {\n      dragRowInstanceTmp = new Sortable(dragContainer, {\n        ...baseOptions,\n        handle: `.${tableDraggableClasses.handle}`,\n      });\n    }\n    lastRowList.value = dragRowInstanceTmp.toArray();\n  };\n\n  const registerOneLevelColDragEvent = (container: HTMLElement, recover: boolean) => {\n    const options: SortableOptions = {\n      animation: 150,\n      dataIdAttr: 'data-colkey',\n      direction: 'vertical',\n      ghostClass: tableDraggableClasses.ghost,\n      chosenClass: tableDraggableClasses.chosen,\n      dragClass: tableDraggableClasses.dragging,\n      handle: `.${tableBaseClass.thCellInner}`,\n      // 存在类名：t-table__th--drag-sort 的列才允许拖拽调整顺序（注意：添加 draggable 之后，固定列的表头 和 吸顶表头 位置顺序会错位，暂时注释）\n      // draggable: `th.${tableDraggableClasses.dragSortTh}`,\n      onEnd: (evt: SortableEvent) => {\n        if (evt.newIndex === evt.oldIndex) return;\n        if (recover) {\n          // 处理受控：拖拽列表恢复原始排序，等待外部数据 data 变化，更新最终顺序\n          dragColInstanceTmp?.sort([...lastColList.value]);\n        }\n        const { oldIndex, newIndex, target: targetElement } = evt;\n        let currentIndex = recover ? oldIndex : newIndex;\n        let targetIndex = recover ? newIndex : oldIndex;\n        const oldElement = targetElement.children[currentIndex] as HTMLElement;\n        const newElement = targetElement.children[targetIndex] as HTMLElement;\n        const current = getColumnDataByKey(columns.value, oldElement.dataset.colkey);\n        const target = getColumnDataByKey(columns.value, newElement.dataset.colkey);\n        if (!current || !current.colKey) {\n          log.error('Table', `colKey is missing in ${JSON.stringify(current)}`);\n        }\n        if (!target || !target.colKey) {\n          log.error('Table', `colKey is missing in ${JSON.stringify(target)}`);\n        }\n        // 寻找外部数据 props.columns 中的真正下标\n        currentIndex = getColumnIndexByKey(props.columns, current.colKey);\n        targetIndex = getColumnIndexByKey(props.columns, target.colKey);\n        const params: DragSortContext<TableRowData> = {\n          data: columns.value,\n          currentIndex,\n          current,\n          targetIndex,\n          target,\n          newData: swapDragArrayElement([...props.columns], currentIndex, targetIndex),\n          e: evt,\n          sort: 'col',\n        };\n        // currentData is going to be deprecated\n        params.currentData = params.newData;\n        props.onDragSort?.(params);\n      },\n      ...props.dragSortOptions,\n    };\n    if (!container) return;\n    dragColInstanceTmp = new Sortable(container, options);\n    return dragColInstanceTmp;\n  };\n\n  // 列拖拽排序：涉及到多级表头、自定义显示列 等综合场景\n  const registerColDragEvent = (tableElement: HTMLElement) => {\n    if (!isColDraggable.value || !tableElement) return;\n    const trList = tableElement.querySelectorAll('thead > tr');\n    if (trList.length <= 1) {\n      const [container] = trList;\n      const dragInstanceTmp = registerOneLevelColDragEvent(container as HTMLElement, true);\n      lastColList.value = dragInstanceTmp?.toArray();\n    } else {\n      // 多级表头只抛出事件，不处理其他未知逻辑（如多层表头之间具体如何交换）\n      trList?.forEach((container) => {\n        registerOneLevelColDragEvent(container as HTMLElement, false);\n      });\n    }\n  };\n\n  function setDragSortPrimaryTableRef(primaryTableElement: any) {\n    primaryTableRef.value = primaryTableElement;\n  }\n\n  function setDragSortColumns(val: BaseTableColumns) {\n    columns.value = val;\n  }\n\n  // 注册拖拽事件\n  watch([primaryTableRef], ([val]: [any]) => {\n    if (!val || !val.$el) return;\n    registerRowDragEvent(val.$el);\n    registerColDragEvent(val.$el);\n    /** 待表头节点准备完成后 */\n    const timer = setTimeout(() => {\n      if (val.$refs.affixHeaderRef) {\n        registerColDragEvent(val.$refs.affixHeaderRef);\n      }\n      clearTimeout(timer);\n    });\n  });\n\n  return {\n    isRowDraggable,\n    isRowHandlerDraggable,\n    isColDraggable,\n    setDragSortPrimaryTableRef,\n    setDragSortColumns,\n  };\n}\n"],"names":["log","watch","data","lastRowList","get","immediate","console","animation","filter","isFunction","currentIndex","targetIndex","current","target","newData","e","sort","params","handle","dataIdAttr","direction","onEnd","dragColInstanceTmp","container","registerOneLevelColDragEvent","val","registerRowDragEvent","registerColDragEvent","isRowDraggable","isRowHandlerDraggable","isColDraggable","setDragSortPrimaryTableRef","setDragSortColumns"],"mappings":"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"}