element-plus
Version:
A Component Library for Vue 3
1 lines • 13.8 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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"}