{"version":3,"file":"events.mjs","sources":["../../../../../../src/components/ivue-table/table-header/events.ts"],"sourcesContent":["import { inject, ref, getCurrentInstance } from 'vue';\r\n\r\nimport { hasClass, removeClass, addClass } from '../../../utils/assist';\r\nimport { on, off } from '../../../utils/dom';\r\n\r\n// type\r\nimport { TableContextKey } from '../table/defaults';\r\n\r\nimport type { TableColumnCtx } from '../table-column/defaults';\r\nimport type { DragState, SortOrder, TableHeaderProps } from './types';\r\n\r\nfunction useEvent(props: TableHeaderProps, emit) {\r\n  // vm\r\n  const vm = getCurrentInstance();\r\n\r\n  // inject\r\n  const IvueTable = inject(TableContextKey);\r\n\r\n  // data\r\n\r\n  // 当前鼠标移动到的拖动列\r\n  const draggingColumn = ref<TableColumnCtx>(null);\r\n\r\n  // 拖动中\r\n  const dragging = ref<boolean>(false);\r\n\r\n  // 拖动开始\r\n  const dragState = ref<DragState>({});\r\n\r\n  // 切换排序\r\n  const toggleOrder = ({ order, sortOrders }) => {\r\n    // 表示升序\r\n    if (order === '') {\r\n      return sortOrders[0];\r\n    }\r\n\r\n    // 下标\r\n    const index = sortOrders.indexOf(order || null);\r\n\r\n    return sortOrders[index > sortOrders.length - 2 ? 0 : index + 1];\r\n  };\r\n\r\n  // 点击排序\r\n  const handleSortClick = (\r\n    event: Event,\r\n    column: TableColumnCtx,\r\n    givenOrder: string | boolean\r\n  ) => {\r\n    // stopPropagation\r\n    event.stopPropagation();\r\n\r\n    // 顺序\r\n    const order =\r\n      column.order === givenOrder ? null : givenOrder || toggleOrder(column);\r\n\r\n    let target = event.target as HTMLElement;\r\n    while (target && target.tagName !== 'TH') {\r\n      target = target.parentNode as HTMLElement;\r\n    }\r\n\r\n    // 点击th\r\n    if (target && target.tagName === 'TH') {\r\n      // 是否有 noclick 防止开启排序时点击\r\n      if (hasClass(target, 'noclick')) {\r\n        removeClass(target, 'noclick');\r\n\r\n        return;\r\n      }\r\n    }\r\n\r\n    // 没有排序\r\n    if (!column.sortable) {\r\n      return;\r\n    }\r\n\r\n    // states\r\n    const states = props.store.states;\r\n\r\n    // 排序的key 对应列内容的字段名\r\n    let sortProp = states.sortProp.value;\r\n    // 需要排序的列\r\n    const sortingColumn = states.sortingColumn.value;\r\n\r\n    // 排序\r\n    let sortOrder: SortOrder;\r\n\r\n    // 不是当前列\r\n    if (\r\n      sortingColumn !== column ||\r\n      (sortingColumn === column && sortingColumn.order === null)\r\n    ) {\r\n      // 初始化排序\r\n      if (sortingColumn) {\r\n        sortingColumn.order = null;\r\n      }\r\n\r\n      // 保存当前列\r\n      states.sortingColumn.value = column;\r\n\r\n      // 排序的key 对应列内容的字段名\r\n      sortProp = column.property;\r\n    }\r\n\r\n    // 没有排序顺序\r\n    if (!order) {\r\n      column.order = null;\r\n      sortOrder = null;\r\n    }\r\n    // 设置排序顺序\r\n    else {\r\n      sortOrder = order;\r\n      column.order = order;\r\n    }\r\n\r\n    // 排序的key 对应列内容的字段名\r\n    states.sortProp.value = sortProp;\r\n    // 设置排序顺序 descending | ascending | null\r\n    states.sortOrder.value = sortOrder;\r\n\r\n    // 改变排序\r\n    IvueTable.store.commit('changeSortCondition');\r\n  };\r\n\r\n  // 头部点击\r\n  const handleHeaderClick = (event: Event, column: TableColumnCtx) => {\r\n    event.preventDefault();\r\n\r\n    // 没有过滤筛选数据，只有排序\r\n    if (!column.filters && column.sortable) {\r\n      handleSortClick(event, column, false);\r\n    }\r\n\r\n    IvueTable.emit('on-header-click', column, event);\r\n  };\r\n\r\n  // 鼠标按下\r\n  const handleMouseDown = (event: MouseEvent, column: TableColumnCtx) => {\r\n    // 有子节点\r\n    if (column.children && column.children.length > 0) {\r\n      return;\r\n    }\r\n\r\n    // 可以拖动列 有开启边框\r\n    if (draggingColumn.value && props.border) {\r\n      // 拖动中\r\n      dragging.value = true;\r\n\r\n      emit('on-drag-visible', true);\r\n\r\n      // 表格节点\r\n      const tableDom = IvueTable.vnode.el;\r\n\r\n      // 表格距离左边窗口的距离\r\n      const tableLeft = tableDom.getBoundingClientRect().left;\r\n\r\n      // 当前拖动的列\r\n      const currentColumnDom = vm!.vnode.el!.querySelector(`th.${column.id}`);\r\n\r\n      // 当前列距离窗口的距离\r\n      const columnRect = currentColumnDom.getBoundingClientRect();\r\n\r\n      // 单元格宽度\r\n      const cellDom = currentColumnDom.querySelector('.cell-content');\r\n\r\n      // 最小左边距离\r\n      const minLeft = columnRect.left - tableLeft + (cellDom.offsetWidth + 30);\r\n\r\n      // 添加class noclick 防止开启排序时点击\r\n      addClass(currentColumnDom, 'noclick');\r\n\r\n      // 开始拖动\r\n      dragState.value = {\r\n        // 触发点相对浏览器可视区域左距离\r\n        startMouseLeft: event.clientX,\r\n        // 当前列距离窗口的距离右边 - 表格距离左边窗口的距离\r\n        startLeft: columnRect.right - tableLeft,\r\n        // 当前列距离窗口的距离 - 表格距离左边窗口的距离\r\n        startColumnLeft: columnRect.left - tableLeft,\r\n        // 表格距离左边窗口的距离\r\n        tableLeft,\r\n      };\r\n\r\n      // 拖拽时的虚线\r\n      const draggingDottedDom = IvueTable.refs.draggingDotted as HTMLElement;\r\n\r\n      // 设置拖拽时的虚线距离\r\n      draggingDottedDom.style.left = `${dragState.value.startLeft}px`;\r\n\r\n      // 禁止document选择事件\r\n      document.onselectstart = () => {\r\n        return false;\r\n      };\r\n\r\n      // 禁止document拖拽事件\r\n      document.ondragstart = () => {\r\n        return false;\r\n      };\r\n\r\n      // 鼠标移动\r\n      const handleDocumentMouseMove = (event) => {\r\n        // 当前触发点相对浏览器可视区域左距离 - 开始拖动时 触发点相对浏览器可视区域左距离\r\n        const deltaLeft = event.clientX - dragState.value.startMouseLeft;\r\n\r\n        // 可拖动最大值\r\n        let maxLeft = dragState.value.startLeft + deltaLeft;\r\n\r\n        // 最大表格宽度\r\n        if (maxLeft >= tableDom.offsetWidth) {\r\n          maxLeft = tableDom.offsetWidth;\r\n        }\r\n\r\n        // minLeft ｜ maxLeft\r\n        draggingDottedDom.style.left = `${Math.max(minLeft, maxLeft)}px`;\r\n      };\r\n\r\n      // 鼠标放开\r\n      const handleDocumentMouseUp = () => {\r\n        // 拖动中\r\n        if (dragging.value) {\r\n          const { startColumnLeft, startLeft } = dragState.value;\r\n\r\n          // 拖拽时的虚线位置\r\n          const draggingDottedDomLeft = Number.parseInt(\r\n            draggingDottedDom.style.left,\r\n            10\r\n          );\r\n\r\n          // 列的宽度 = 拖拽虚线后的位置 - 开始列左边到窗口的距离\r\n          const columnWidth = draggingDottedDomLeft - startColumnLeft;\r\n\r\n          // 设置列的宽度\r\n          column.width = columnWidth;\r\n          column.columnWidth = columnWidth;\r\n\r\n          IvueTable.emit(\r\n            'on-header-dragend',\r\n            // 设置列的宽度\r\n            column.width,\r\n            // 拖拽后的位置\r\n            startLeft - startColumnLeft,\r\n            column,\r\n            event\r\n          );\r\n\r\n          // 更新dom重新执行布局\r\n          requestAnimationFrame(() => {\r\n            props.store.scheduleLayout(false, true);\r\n          });\r\n\r\n          // 初始化样式\r\n          document.body.style.cursor = '';\r\n\r\n          // 拖动中\r\n          dragging.value = false;\r\n\r\n          // 当前鼠标移动到的拖动列\r\n          draggingColumn.value = null;\r\n\r\n          // 拖动开始\r\n          dragState.value = {};\r\n\r\n          // 隐藏拖动虚线\r\n          emit('on-drag-visible', false);\r\n        }\r\n\r\n        // 移除鼠标移动\r\n        off(document, 'mousemove', handleDocumentMouseMove);\r\n        // 移除鼠标放开\r\n        off(document, 'mouseup', handleDocumentMouseUp);\r\n\r\n        // 开启document选择事件\r\n        document.onselectstart = null;\r\n        // 开启document拖拽事件\r\n        document.ondragstart = null;\r\n\r\n        // 删除样式\r\n        setTimeout(() => {\r\n          removeClass(currentColumnDom, 'noclick');\r\n        }, 0);\r\n      };\r\n\r\n      // 鼠标移动\r\n      on(document, 'mousemove', handleDocumentMouseMove);\r\n      // 鼠标放开\r\n      on(document, 'mouseup', handleDocumentMouseUp);\r\n    }\r\n  };\r\n\r\n  // 鼠标移动\r\n  const handleMouseMove = (event: MouseEvent, column: TableColumnCtx) => {\r\n    // 有子节点\r\n    if (column.children && column.children.length > 0) {\r\n      return;\r\n    }\r\n\r\n    // 获取当前节点的父节点->列的头部\r\n    let target = event.target as HTMLElement;\r\n\r\n    // 获取th\r\n    while (target && target.tagName !== 'TH') {\r\n      target = target.parentNode as HTMLElement;\r\n    }\r\n\r\n    // 不能拖动\r\n    if (!column || !column.resizable) {\r\n      return;\r\n    }\r\n\r\n    // 没有拖动 开启边框\r\n    if (!dragging.value && props.border) {\r\n      // 当前头部的大小\r\n      const rect = target.getBoundingClientRect();\r\n\r\n      // body样式\r\n      const bodyStyle = document.body.style;\r\n\r\n      // dom宽度 > 12px  && dom右边距离body的距离 - 当前手势距离窗口的距离 < 8px\r\n      if (rect.width > 12 && rect.right - event.pageX < 8) {\r\n        bodyStyle.cursor = 'col-resize';\r\n\r\n        // 是否有排序\r\n        if (hasClass(target, 'is-sortable')) {\r\n          target.style.cursor = 'col-resize';\r\n        }\r\n\r\n        // 当前鼠标移动到的拖动列\r\n        draggingColumn.value = column;\r\n      }\r\n      // 没有拖动初始化手势样式\r\n      else if (!dragging.value) {\r\n        bodyStyle.cursor = '';\r\n\r\n        // 是否有排序\r\n        if (hasClass(target, 'is-sortable') && column.filterable) {\r\n          target.style.cursor = 'inherit';\r\n        }\r\n        // 是否有排序\r\n        else if (hasClass(target, 'is-sortable')) {\r\n          target.style.cursor = 'pointer';\r\n        }\r\n\r\n        // 当前鼠标移动到的拖动列\r\n        draggingColumn.value = null;\r\n      }\r\n    }\r\n  };\r\n\r\n  // 鼠标退出\r\n  const handleMouseOut = () => {\r\n    document.body.style.cursor = '';\r\n  };\r\n\r\n  return {\r\n    handleSortClick,\r\n    handleHeaderClick,\r\n    handleMouseDown,\r\n    handleMouseMove,\r\n    handleMouseOut,\r\n  };\r\n}\r\n\r\nexport default useEvent;\r\n"],"names":["event"],"mappings":"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"}