element-plus
Version:
A Component Library for Vue 3
1 lines • 13.3 kB
Source Map (JSON)
{"version":3,"file":"events-helper.mjs","sources":["../../../../../../../packages/components/table/src/table-body/events-helper.ts"],"sourcesContent":["import { h, inject, ref } from 'vue'\nimport { debounce } from 'lodash-unified'\nimport { addClass, hasClass, removeClass } from '@element-plus/utils'\nimport {\n createTablePopper,\n getCell,\n getColumnByCell,\n removePopper,\n} from '../util'\nimport { TABLE_INJECTION_KEY } from '../tokens'\n\nimport type { TableColumnCtx } from '../table-column/defaults'\nimport type { TableBodyProps } from './defaults'\nimport type { TableOverflowTooltipOptions } from '../util'\nimport type { DefaultRow } from '../table/defaults'\n\nfunction isGreaterThan(a: number, b: number, epsilon = 0.03) {\n return a - b > epsilon\n}\n\nfunction useEvents<T extends DefaultRow>(props: Partial<TableBodyProps<T>>) {\n const parent = inject(TABLE_INJECTION_KEY)\n const tooltipContent = ref('')\n const tooltipTrigger = ref(h('div'))\n const handleEvent = (event: Event, row: T, name: string) => {\n const table = parent\n const cell = getCell(event)\n let column: TableColumnCtx<T> | null = null\n const namespace = table?.vnode.el?.dataset.prefix\n if (cell) {\n column = getColumnByCell(\n {\n columns: props.store?.states.columns.value ?? [],\n },\n cell,\n namespace\n )\n if (column) {\n table?.emit(`cell-${name}`, row, column, cell, event)\n }\n }\n table?.emit(`row-${name}`, row, column, event)\n }\n const handleDoubleClick = (event: Event, row: T) => {\n handleEvent(event, row, 'dblclick')\n }\n const handleClick = (event: Event, row: T) => {\n props.store?.commit('setCurrentRow', row)\n handleEvent(event, row, 'click')\n }\n const handleContextMenu = (event: Event, row: T) => {\n handleEvent(event, row, 'contextmenu')\n }\n const handleMouseEnter = debounce((index: number) => {\n props.store?.commit('setHoverRow', index)\n }, 30)\n const handleMouseLeave = debounce(() => {\n props.store?.commit('setHoverRow', null)\n }, 30)\n const getPadding = (el: HTMLElement) => {\n const style = window.getComputedStyle(el, null)\n const paddingLeft = Number.parseInt(style.paddingLeft, 10) || 0\n const paddingRight = Number.parseInt(style.paddingRight, 10) || 0\n const paddingTop = Number.parseInt(style.paddingTop, 10) || 0\n const paddingBottom = Number.parseInt(style.paddingBottom, 10) || 0\n return {\n left: paddingLeft,\n right: paddingRight,\n top: paddingTop,\n bottom: paddingBottom,\n }\n }\n\n const toggleRowClassByCell = (\n rowSpan: number,\n event: MouseEvent,\n toggle: (el: Element, cls: string) => void\n ) => {\n let node: Node | null | undefined = (event?.target as Element | null)\n ?.parentNode\n while (rowSpan > 1) {\n node = node?.nextSibling\n if (!node || node.nodeName !== 'TR') break\n toggle(node as Element, 'hover-row hover-fixed-row')\n rowSpan--\n }\n }\n\n const handleCellMouseEnter = (\n event: MouseEvent,\n row: T,\n tooltipOptions: TableOverflowTooltipOptions\n ) => {\n if (!parent) return\n const table = parent\n const cell = getCell(event)\n const namespace = table?.vnode.el?.dataset.prefix\n let column: TableColumnCtx<T> | null = null\n if (cell) {\n column = getColumnByCell(\n {\n columns: props.store?.states.columns.value ?? [],\n },\n cell,\n namespace\n )\n if (!column) {\n return\n }\n if (cell.rowSpan > 1) {\n toggleRowClassByCell(cell.rowSpan, event, addClass)\n }\n const hoverState = (table.hoverState = {\n cell,\n column: column as any,\n row,\n })\n table?.emit(\n 'cell-mouse-enter',\n hoverState.row,\n hoverState.column,\n hoverState.cell,\n event\n )\n }\n\n if (!tooltipOptions) {\n if (removePopper?.trigger === cell) {\n removePopper?.()\n }\n return\n }\n\n // 判断是否text-overflow, 如果是就显示tooltip\n const cellChild = (event.target as HTMLElement).querySelector(\n '.cell'\n ) as HTMLElement\n if (\n !(\n hasClass(cellChild, `${namespace}-tooltip`) &&\n cellChild.childNodes.length &&\n cellChild.textContent?.trim()\n )\n ) {\n return\n }\n // use range width instead of scrollWidth to determine whether the text is overflowing\n // to address a potential FireFox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1074543#c3\n const range = document.createRange()\n range.setStart(cellChild, 0)\n range.setEnd(cellChild, cellChild.childNodes.length)\n /** detail: https://github.com/element-plus/element-plus/issues/10790\n * What went wrong?\n * UI > Browser > Zoom, In Blink/WebKit, getBoundingClientRect() sometimes returns inexact values, probably due to lost precision during internal calculations. In the example above:\n * - Expected: 188\n * - Actual: 188.00000762939453\n */\n const { width: rangeWidth, height: rangeHeight } =\n range.getBoundingClientRect()\n const { width: cellChildWidth, height: cellChildHeight } =\n cellChild.getBoundingClientRect()\n\n const { top, left, right, bottom } = getPadding(cellChild)\n const horizontalPadding = left + right\n const verticalPadding = top + bottom\n if (\n isGreaterThan(rangeWidth + horizontalPadding, cellChildWidth) ||\n isGreaterThan(rangeHeight + verticalPadding, cellChildHeight) ||\n // When using a high-resolution screen, it is possible that a returns cellChild.scrollWidth value of 1921 and\n // cellChildWidth returns a value of 1920.994140625. #16856 #16673\n isGreaterThan(cellChild.scrollWidth, cellChildWidth)\n ) {\n createTablePopper(\n tooltipOptions,\n (cell?.innerText || cell?.textContent) ?? '',\n row,\n column,\n cell,\n table\n )\n } else if (removePopper?.trigger === cell) {\n removePopper?.()\n }\n }\n const handleCellMouseLeave = (event: MouseEvent) => {\n const cell = getCell(event)\n if (!cell) return\n if (cell.rowSpan > 1) {\n toggleRowClassByCell(cell.rowSpan, event, removeClass)\n }\n const oldHoverState = parent?.hoverState\n parent?.emit(\n 'cell-mouse-leave',\n oldHoverState?.row,\n oldHoverState?.column,\n oldHoverState?.cell,\n event\n )\n }\n\n return {\n handleDoubleClick,\n handleClick,\n handleContextMenu,\n handleMouseEnter,\n handleMouseLeave,\n handleCellMouseEnter,\n handleCellMouseLeave,\n tooltipContent,\n tooltipTrigger,\n }\n}\n\nexport default useEvents\n"],"names":[],"mappings":"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"}