element-plus
Version:
A Component Library for Vue 3
1 lines • 5.72 kB
Source Map (JSON)
{"version":3,"file":"events-helper.mjs","sources":["../../../../../../../packages/components/table/src/table-body/events-helper.ts"],"sourcesContent":["import { getCurrentInstance, ref, h } from 'vue'\nimport debounce from 'lodash/debounce'\nimport { getStyle, hasClass } from '@element-plus/utils/dom'\nimport { createTablePopper, getCell, getColumnByCell } from '../util'\n\nimport type { TableColumnCtx } from '../table-column/defaults'\nimport type { Table } from '../table/defaults'\nimport type { TableBodyProps } from './defaults'\n\nfunction useEvents<T>(props: Partial<TableBodyProps<T>>) {\n const instance = getCurrentInstance()\n const parent = instance.parent as Table<T>\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>\n if (cell) {\n column = getColumnByCell(\n {\n columns: props.store.states.columns.value,\n },\n cell\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(function (index: number) {\n props.store.commit('setHoverRow', index)\n }, 30)\n const handleMouseLeave = debounce(function () {\n props.store.commit('setHoverRow', null)\n }, 30)\n const handleCellMouseEnter = (\n event: MouseEvent,\n row: T & { tooltipEffect: string }\n ) => {\n const table = parent\n const cell = getCell(event)\n\n if (cell) {\n const column = getColumnByCell(\n {\n columns: props.store.states.columns.value,\n },\n cell\n )\n const hoverState = (table.hoverState = { cell, column, row })\n table.emit(\n 'cell-mouse-enter',\n hoverState.row,\n hoverState.column,\n hoverState.cell,\n event\n )\n }\n\n // 判断是否text-overflow, 如果是就显示tooltip\n const cellChild = (event.target as HTMLElement).querySelector(\n '.cell'\n ) as HTMLElement\n if (!(hasClass(cellChild, 'el-tooltip') && cellChild.childNodes.length)) {\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 const rangeWidth = range.getBoundingClientRect().width\n const padding =\n (parseInt(getStyle(cellChild, 'paddingLeft'), 10) || 0) +\n (parseInt(getStyle(cellChild, 'paddingRight'), 10) || 0)\n if (\n rangeWidth + padding > cellChild.offsetWidth ||\n cellChild.scrollWidth > cellChild.offsetWidth\n ) {\n createTablePopper(\n cell,\n cell.innerText || cell.textContent,\n {\n placement: 'top',\n strategy: 'fixed',\n },\n row.tooltipEffect\n )\n }\n }\n const handleCellMouseLeave = (event) => {\n const cell = getCell(event)\n if (!cell) return\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":";;;;;AASA,mBAAsB,OAAmC;AACvD,QAAM,WAAW;AACjB,QAAM,SAAS,SAAS;AACxB,QAAM,iBAAiB,IAAI;AAC3B,QAAM,iBAAiB,IAAI,EAAE;AAC7B,QAAM,cAAc,CAAC,OAAc,KAAQ,SAAiB;AAC1D,UAAM,QAAQ;AACd,UAAM,OAAO,QAAQ;AACrB,QAAI;AACJ,QAAI,MAAM;AACR,eAAS,gBACP;AAAA,QACE,SAAS,MAAM,MAAM,OAAO,QAAQ;AAAA,SAEtC;AAEF,UAAI,QAAQ;AACV,cAAM,KAAK,QAAQ,QAAQ,KAAK,QAAQ,MAAM;AAAA;AAAA;AAGlD,UAAM,KAAK,OAAO,QAAQ,KAAK,QAAQ;AAAA;AAEzC,QAAM,oBAAoB,CAAC,OAAc,QAAW;AAClD,gBAAY,OAAO,KAAK;AAAA;AAE1B,QAAM,cAAc,CAAC,OAAc,QAAW;AAC5C,UAAM,MAAM,OAAO,iBAAiB;AACpC,gBAAY,OAAO,KAAK;AAAA;AAE1B,QAAM,oBAAoB,CAAC,OAAc,QAAW;AAClD,gBAAY,OAAO,KAAK;AAAA;AAE1B,QAAM,mBAAmB,SAAS,SAAU,OAAe;AACzD,UAAM,MAAM,OAAO,eAAe;AAAA,KACjC;AACH,QAAM,mBAAmB,SAAS,WAAY;AAC5C,UAAM,MAAM,OAAO,eAAe;AAAA,KACjC;AACH,QAAM,uBAAuB,CAC3B,OACA,QACG;AACH,UAAM,QAAQ;AACd,UAAM,OAAO,QAAQ;AAErB,QAAI,MAAM;AACR,YAAM,SAAS,gBACb;AAAA,QACE,SAAS,MAAM,MAAM,OAAO,QAAQ;AAAA,SAEtC;AAEF,YAAM,aAAc,MAAM,aAAa,EAAE,MAAM,QAAQ;AACvD,YAAM,KACJ,oBACA,WAAW,KACX,WAAW,QACX,WAAW,MACX;AAAA;AAKJ,UAAM,YAAa,MAAM,OAAuB,cAC9C;AAEF,QAAI,WAAW,WAAW,iBAAiB,UAAU,WAAW,SAAS;AACvE;AAAA;AAIF,UAAM,QAAQ,SAAS;AACvB,UAAM,SAAS,WAAW;AAC1B,UAAM,OAAO,WAAW,UAAU,WAAW;AAC7C,UAAM,aAAa,MAAM,wBAAwB;AACjD,UAAM,UACH,UAAS,SAAS,WAAW,gBAAgB,OAAO,eAC3C,SAAS,WAAW,iBAAiB,OAAO;AACxD,QACE,aAAa,UAAU,UAAU,eACjC,UAAU,cAAc,UAAU,aAClC;AACA,wBACE,MACA,KAAK,aAAa,KAAK,aACvB;AAAA,QACE,WAAW;AAAA,QACX,UAAU;AAAA,SAEZ,IAAI;AAAA;AAAA;AAIV,QAAM,uBAAuB,CAAC,UAAU;AACtC,UAAM,OAAO,QAAQ;AACrB,QAAI,CAAC;AAAM;AAEX,UAAM,gBAAgB,OAAO;AAC7B,WAAO,KACL,oBACA,+CAAe,KACf,+CAAe,QACf,+CAAe,MACf;AAAA;AAIJ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;;;;"}