UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 14.7 kB
{"version":3,"file":"event-helper.mjs","sources":["../../../../../../../packages/components/table/src/table-header/event-helper.ts"],"sourcesContent":["import { getCurrentInstance, inject, ref } from 'vue'\nimport { isNull } from 'lodash-unified'\nimport {\n addClass,\n hasClass,\n isClient,\n isElement,\n removeClass,\n} from '@element-plus/utils'\nimport { TABLE_INJECTION_KEY } from '../tokens'\n\nimport type { EmitFn } from '@element-plus/utils'\nimport type { TableHeaderProps } from '.'\nimport type { TableColumnCtx } from '../table-column/defaults'\nimport type { DefaultRow, TableSortOrder } from '../table/defaults'\n\nfunction useEvent<T extends DefaultRow>(\n props: TableHeaderProps<T>,\n emit: EmitFn<string[]>\n) {\n const instance = getCurrentInstance()\n const parent = inject(TABLE_INJECTION_KEY)\n const handleFilterClick = (event: Event) => {\n event.stopPropagation()\n return\n }\n\n const handleHeaderClick = (event: Event, column: TableColumnCtx<T>) => {\n if (!column.filters && column.sortable) {\n handleSortClick(event, column, false)\n } else if (column.filterable && !column.sortable) {\n handleFilterClick(event)\n }\n parent?.emit('header-click', column, event)\n }\n\n const handleHeaderContextMenu = (event: Event, column: TableColumnCtx<T>) => {\n parent?.emit('header-contextmenu', column, event)\n }\n const draggingColumn = ref<TableColumnCtx<T> | null>(null)\n const dragging = ref(false)\n const dragState = ref<{\n startMouseLeft: number\n startLeft: number\n startColumnLeft: number\n tableLeft: number\n }>()\n const handleMouseDown = (event: MouseEvent, column: TableColumnCtx<T>) => {\n if (!isClient) return\n if (column.children && column.children.length > 0) return\n /* istanbul ignore if */\n if (\n draggingColumn.value &&\n props.border &&\n draggingColumn.value.id === column.id\n ) {\n dragging.value = true\n\n const table = parent\n emit('set-drag-visible', true)\n const tableEl = table?.vnode.el\n const tableLeft = tableEl?.getBoundingClientRect().left\n const columnEl = instance?.vnode?.el?.querySelector(`th.${column.id}`)\n const columnRect = columnEl.getBoundingClientRect()\n const minLeft = columnRect.left - tableLeft + 30\n\n addClass(columnEl, 'noclick')\n\n dragState.value = {\n startMouseLeft: event.clientX,\n startLeft: columnRect.right - tableLeft,\n startColumnLeft: columnRect.left - tableLeft,\n tableLeft,\n }\n const resizeProxy = table?.refs.resizeProxy as HTMLElement\n resizeProxy.style.left = `${(dragState.value as any).startLeft}px`\n\n document.onselectstart = function () {\n return false\n }\n document.ondragstart = function () {\n return false\n }\n\n const handleMouseMove = (event: MouseEvent) => {\n const deltaLeft =\n event.clientX - (dragState.value as any).startMouseLeft\n const proxyLeft = (dragState.value as any).startLeft + deltaLeft\n\n resizeProxy.style.left = `${Math.max(minLeft, proxyLeft)}px`\n }\n\n const handleMouseUp = () => {\n if (dragging.value) {\n const { startColumnLeft, startLeft } = dragState.value as any\n const finalLeft = Number.parseInt(resizeProxy.style.left, 10)\n const columnWidth = finalLeft - startColumnLeft\n column.width = column.realWidth = columnWidth\n table?.emit(\n 'header-dragend',\n column.width,\n startLeft - startColumnLeft,\n column,\n event\n )\n requestAnimationFrame(() => {\n props.store.scheduleLayout(false, true)\n })\n document.body.style.cursor = ''\n dragging.value = false\n draggingColumn.value = null\n dragState.value = undefined\n emit('set-drag-visible', false)\n }\n\n document.removeEventListener('mousemove', handleMouseMove)\n document.removeEventListener('mouseup', handleMouseUp)\n document.onselectstart = null\n document.ondragstart = null\n\n setTimeout(() => {\n removeClass(columnEl, 'noclick')\n }, 0)\n }\n\n document.addEventListener('mousemove', handleMouseMove)\n document.addEventListener('mouseup', handleMouseUp)\n }\n }\n\n const handleMouseMove = (event: MouseEvent, column: TableColumnCtx<T>) => {\n if (!props.border || (column.children && column.children.length > 0)) return\n const el = event.target as HTMLElement\n const target = isElement(el) ? el.closest('th') : null\n if (!target) {\n return\n }\n\n const isSortable = hasClass(target, 'is-sortable')\n\n if (isSortable) {\n const cursor = dragging.value ? 'col-resize' : ''\n target.style.cursor = cursor\n\n const caret = target.querySelector<HTMLElement>('.caret-wrapper')\n if (caret) {\n caret.style.cursor = cursor\n }\n }\n\n if (!column.resizable || dragging.value) {\n draggingColumn.value = null\n return\n }\n\n const rect = target.getBoundingClientRect()\n const isLastTh = target.parentNode?.lastElementChild === target\n const allowDrag = props.allowDragLastColumn || !isLastTh\n const isResizeHandleActive =\n rect.width > 12 && rect.right - event.clientX < 8 && allowDrag\n const cursor = isResizeHandleActive ? 'col-resize' : ''\n\n document.body.style.cursor = cursor\n draggingColumn.value = isResizeHandleActive ? (column as any) : null\n if (isSortable) {\n target.style.cursor = cursor\n }\n }\n\n const handleMouseOut = () => {\n if (!isClient || dragging.value) return\n document.body.style.cursor = ''\n }\n const toggleOrder = ({ order, sortOrders }: TableColumnCtx<T>) => {\n if ((order as string) === '') return sortOrders[0]\n const index = sortOrders.indexOf(order || null)\n return sortOrders[index > sortOrders.length - 2 ? 0 : index + 1]\n }\n const handleSortClick = (\n event: Event,\n column: TableColumnCtx<T>,\n givenOrder?: TableSortOrder | boolean\n ) => {\n event.stopPropagation()\n const order = (\n column.order === givenOrder ? null : givenOrder || toggleOrder(column)\n ) as TableSortOrder | null\n const target = (event.target as HTMLElement)?.closest('th')\n\n if (target) {\n if (hasClass(target, 'noclick')) {\n removeClass(target, 'noclick')\n return\n }\n }\n\n if (!column.sortable) return\n\n const clickTarget = event.currentTarget\n\n if (\n ['ascending', 'descending'].some(\n (str) =>\n hasClass(clickTarget as Element, str) &&\n !column.sortOrders.includes(str as TableSortOrder)\n )\n ) {\n return\n }\n\n const states = props.store.states\n let sortProp = states.sortProp.value\n let sortOrder\n const sortingColumn = states.sortingColumn.value\n\n if (\n sortingColumn !== column ||\n (sortingColumn === column && isNull(sortingColumn.order))\n ) {\n if (sortingColumn) {\n sortingColumn.order = null\n }\n states.sortingColumn.value = column\n sortProp = column.property\n }\n if (!order) {\n sortOrder = column.order = null\n } else {\n sortOrder = column.order = order\n }\n\n states.sortProp.value = sortProp\n states.sortOrder.value = sortOrder\n\n parent?.store.commit('changeSortCondition')\n }\n\n return {\n handleHeaderClick,\n handleHeaderContextMenu,\n handleMouseDown,\n handleMouseMove,\n handleMouseOut,\n handleSortClick,\n handleFilterClick,\n }\n}\n\nexport default useEvent\n"],"names":["handleMouseMove","event","cursor"],"mappings":"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"}