element-plus
Version:
A Component Library for Vue 3
1 lines • 7.8 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../../../packages/components/table/src/table-body/index.ts"],"sourcesContent":["import {\n defineComponent,\n getCurrentInstance,\n h,\n inject,\n onUnmounted,\n watch,\n} from 'vue'\nimport { addClass, isClient, rAF, removeClass } from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport useLayoutObserver from '../layout-observer'\nimport { removePopper } from '../util'\nimport { TABLE_INJECTION_KEY } from '../tokens'\nimport useRender from './render-helper'\nimport defaultProps from './defaults'\n\nimport type { VNode } from 'vue'\n\nexport default defineComponent({\n name: 'ElTableBody',\n props: defaultProps,\n setup(props) {\n const instance = getCurrentInstance()\n const parent = inject(TABLE_INJECTION_KEY)\n const ns = useNamespace('table')\n const { wrappedRowRender, tooltipContent, tooltipTrigger } =\n useRender(props)\n const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent!)\n\n const hoveredCellList: HTMLTableCellElement[] = []\n watch(props.store?.states.hoverRow, (newVal: any, oldVal: any) => {\n const el = instance?.vnode.el as HTMLElement\n const rows = Array.from(el?.children || []).filter((e) =>\n e?.classList.contains(`${ns.e('row')}`)\n )\n\n // hover rowSpan > 1 choose the whole row\n let rowNum = newVal\n const childNodes = rows[rowNum]\n ?.childNodes as NodeListOf<HTMLTableCellElement>\n if (childNodes?.length) {\n let control = 0\n const indexes = Array.from(childNodes).reduce((acc, item, index) => {\n // drop colsSpan\n if (childNodes[index]?.colSpan > 1) {\n control = childNodes[index]?.colSpan\n }\n if (item.nodeName !== 'TD' && control === 0) {\n acc.push(index)\n }\n control > 0 && control--\n return acc\n }, [] as number[])\n\n indexes.forEach((rowIndex) => {\n rowNum = newVal\n while (rowNum > 0) {\n // find from previous\n const preChildNodes = rows[rowNum - 1]\n ?.childNodes as NodeListOf<HTMLTableCellElement>\n\n if (\n preChildNodes[rowIndex] &&\n preChildNodes[rowIndex].nodeName === 'TD' &&\n preChildNodes[rowIndex].rowSpan > 1\n ) {\n addClass(preChildNodes[rowIndex], 'hover-cell')\n hoveredCellList.push(preChildNodes[rowIndex])\n break\n }\n rowNum--\n }\n })\n } else {\n hoveredCellList.forEach((item) => removeClass(item, 'hover-cell'))\n hoveredCellList.length = 0\n }\n if (!props.store?.states.isComplex.value || !isClient) return\n\n rAF(() => {\n // just get first level children; fix #9723\n const oldRow = rows[oldVal]\n const newRow = rows[newVal]\n // when there is fixed row, hover on rowSpan > 1 should not clear the class\n if (oldRow && !oldRow.classList.contains('hover-fixed-row')) {\n removeClass(oldRow, 'hover-row')\n }\n if (newRow) {\n addClass(newRow, 'hover-row')\n }\n })\n })\n\n onUnmounted(() => {\n removePopper?.()\n })\n\n return {\n ns,\n onColumnsChange,\n onScrollableChange,\n wrappedRowRender,\n tooltipContent,\n tooltipTrigger,\n }\n },\n render() {\n const { wrappedRowRender, store } = this\n const data = store?.states.data.value || []\n // Why do we need tabIndex: -1 ?\n // If you set the tabindex attribute on an element ,\n // then its child content cannot be scrolled with the arrow keys,\n // unless you set tabindex on the content too\n // See https://github.com/facebook/react/issues/25462#issuecomment-1274775248 or https://developer.mozilla.org/zh-CN/docs/Web/HTML/Global_attributes/tabindex\n return h('tbody', { tabIndex: -1 }, [\n data.reduce((acc: VNode[], row) => {\n return acc.concat(wrappedRowRender(row, acc.length) as VNode[])\n }, []),\n ])\n },\n})\n"],"names":["_a","_b"],"mappings":"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"}