UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 12.8 kB
{"version":3,"file":"render-helper.mjs","sources":["../../../../../../../packages/components/table/src/table-body/render-helper.ts"],"sourcesContent":["import { h, getCurrentInstance, computed } from 'vue'\nimport { getRowIdentity } from '../util'\nimport useEvents from './events-helper'\nimport useStyles from './styles-helper'\n\nimport type { TableBodyProps } from './defaults'\nimport type {\n RenderRowData,\n Table,\n TreeNode,\n TableProps,\n} from '../table/defaults'\n\nfunction useRender<T>(props: Partial<TableBodyProps<T>>) {\n const instance = getCurrentInstance()\n const parent = instance.parent as Table<T>\n const {\n handleDoubleClick,\n handleClick,\n handleContextMenu,\n handleMouseEnter,\n handleMouseLeave,\n handleCellMouseEnter,\n handleCellMouseLeave,\n tooltipContent,\n tooltipTrigger,\n } = useEvents(props)\n const {\n getRowStyle,\n getRowClass,\n getCellStyle,\n getCellClass,\n getSpan,\n getColspanRealWidth,\n } = useStyles(props)\n const firstDefaultColumnIndex = computed(() => {\n return props.store.states.columns.value.findIndex(\n ({ type }) => type === 'default'\n )\n })\n const getKeyOfRow = (row: T, index: number) => {\n const rowKey = (parent.props as Partial<TableProps<T>>).rowKey\n if (rowKey) {\n return getRowIdentity(row, rowKey)\n }\n return index\n }\n const rowRender = (row: T, $index: number, treeRowData?: TreeNode) => {\n const { tooltipEffect, store } = props\n const { indent, columns } = store.states\n const rowClasses = getRowClass(row, $index)\n let display = true\n if (treeRowData) {\n rowClasses.push(`el-table__row--level-${treeRowData.level}`)\n display = treeRowData.display\n }\n const displayStyle = display\n ? null\n : {\n display: 'none',\n }\n return h(\n 'tr',\n {\n style: [displayStyle, getRowStyle(row, $index)],\n class: rowClasses,\n key: getKeyOfRow(row, $index),\n onDblclick: ($event) => handleDoubleClick($event, row),\n onClick: ($event) => handleClick($event, row),\n onContextmenu: ($event) => handleContextMenu($event, row),\n onMouseenter: () => handleMouseEnter($index),\n onMouseleave: handleMouseLeave,\n },\n columns.value.map((column, cellIndex) => {\n const { rowspan, colspan } = getSpan(row, column, $index, cellIndex)\n if (!rowspan || !colspan) {\n return null\n }\n const columnData = { ...column }\n columnData.realWidth = getColspanRealWidth(\n columns.value,\n colspan,\n cellIndex\n )\n const data: RenderRowData<T> = {\n store: props.store,\n _self: props.context || parent,\n column: columnData,\n row,\n $index,\n }\n if (cellIndex === firstDefaultColumnIndex.value && treeRowData) {\n data.treeNode = {\n indent: treeRowData.level * indent.value,\n level: treeRowData.level,\n }\n if (typeof treeRowData.expanded === 'boolean') {\n data.treeNode.expanded = treeRowData.expanded\n // 表明是懒加载\n if ('loading' in treeRowData) {\n data.treeNode.loading = treeRowData.loading\n }\n if ('noLazyChildren' in treeRowData) {\n data.treeNode.noLazyChildren = treeRowData.noLazyChildren\n }\n }\n }\n const baseKey = `${$index},${cellIndex}`\n const patchKey = columnData.columnKey || columnData.rawColumnKey || ''\n const tdChildren = cellChildren(cellIndex, column, data)\n return h(\n 'td',\n {\n style: getCellStyle($index, cellIndex, row, column),\n class: getCellClass($index, cellIndex, row, column),\n key: `${patchKey}${baseKey}`,\n rowspan,\n colspan,\n onMouseenter: ($event) =>\n handleCellMouseEnter($event, { ...row, tooltipEffect }),\n onMouseleave: handleCellMouseLeave,\n },\n [tdChildren]\n )\n })\n )\n }\n const cellChildren = (cellIndex, column, data) => {\n return column.renderCell(data)\n }\n const wrappedRowRender = (row: T, $index: number) => {\n const store = props.store\n const { isRowExpanded, assertRowKey } = store\n const { treeData, lazyTreeNodeMap, childrenColumnName, rowKey } =\n store.states\n const hasExpandColumn = store.states.columns.value.some(\n ({ type }) => type === 'expand'\n )\n if (hasExpandColumn && isRowExpanded(row)) {\n const renderExpanded = parent.renderExpanded\n const tr = rowRender(row, $index, undefined)\n if (!renderExpanded) {\n console.error('[Element Error]renderExpanded is required.')\n return tr\n }\n // 使用二维数组,避免修改 $index\n // Use a two dimensional array avoid modifying $index\n return [\n [\n tr,\n h(\n 'tr',\n {\n key: `expanded-row__${tr.key as string}`,\n },\n [\n h(\n 'td',\n {\n colspan: store.states.columns.value.length,\n class: 'el-table__cell el-table__expanded-cell',\n },\n [renderExpanded({ row, $index, store })]\n ),\n ]\n ),\n ],\n ]\n } else if (Object.keys(treeData.value).length) {\n assertRowKey()\n // TreeTable 时,rowKey 必须由用户设定,不使用 getKeyOfRow 计算\n // 在调用 rowRender 函数时,仍然会计算 rowKey,不太好的操作\n const key = getRowIdentity(row, rowKey.value)\n let cur = treeData.value[key]\n let treeRowData = null\n if (cur) {\n treeRowData = {\n expanded: cur.expanded,\n level: cur.level,\n display: true,\n }\n if (typeof cur.lazy === 'boolean') {\n if (typeof cur.loaded === 'boolean' && cur.loaded) {\n treeRowData.noLazyChildren = !(cur.children && cur.children.length)\n }\n treeRowData.loading = cur.loading\n }\n }\n const tmp = [rowRender(row, $index, treeRowData)]\n // 渲染嵌套数据\n if (cur) {\n // currentRow 记录的是 index,所以还需主动增加 TreeTable 的 index\n let i = 0\n const traverse = (children, parent) => {\n if (!(children && children.length && parent)) return\n children.forEach((node) => {\n // 父节点的 display 状态影响子节点的显示状态\n const innerTreeRowData = {\n display: parent.display && parent.expanded,\n level: parent.level + 1,\n expanded: false,\n noLazyChildren: false,\n loading: false,\n }\n const childKey = getRowIdentity(node, rowKey.value)\n if (childKey === undefined || childKey === null) {\n throw new Error('For nested data item, row-key is required.')\n }\n cur = { ...treeData.value[childKey] }\n // 对于当前节点,分成有无子节点两种情况。\n // 如果包含子节点的,设置 expanded 属性。\n // 对于它子节点的 display 属性由它本身的 expanded 与 display 共同决定。\n if (cur) {\n innerTreeRowData.expanded = cur.expanded\n // 懒加载的某些节点,level 未知\n cur.level = cur.level || innerTreeRowData.level\n cur.display = !!(cur.expanded && innerTreeRowData.display)\n if (typeof cur.lazy === 'boolean') {\n if (typeof cur.loaded === 'boolean' && cur.loaded) {\n innerTreeRowData.noLazyChildren = !(\n cur.children && cur.children.length\n )\n }\n innerTreeRowData.loading = cur.loading\n }\n }\n i++\n tmp.push(rowRender(node, $index + i, innerTreeRowData))\n if (cur) {\n const nodes =\n lazyTreeNodeMap.value[childKey] ||\n node[childrenColumnName.value]\n traverse(nodes, cur)\n }\n })\n }\n // 对于 root 节点,display 一定为 true\n cur.display = true\n const nodes =\n lazyTreeNodeMap.value[key] || row[childrenColumnName.value]\n traverse(nodes, cur)\n }\n return tmp\n } else {\n return rowRender(row, $index, undefined)\n }\n }\n\n return {\n wrappedRowRender,\n tooltipContent,\n tooltipTrigger,\n }\n}\n\nexport default useRender\n"],"names":[],"mappings":"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"}