UNPKG

ivue-material-plus

Version:

A high quality UI components Library with Vue.js

1 lines 19.9 kB
{"version":3,"file":"render.mjs","sources":["../../../../../../src/components/ivue-table/table-body/render.ts"],"sourcesContent":["useRender;\r\nimport { h, inject, computed } from 'vue';\r\nimport useStyles from './styles';\r\nimport useEvents from './events';\r\nimport { getRowIdentity } from '../utils';\r\nimport { throwError } from '../../../utils/error';\r\n\r\n// ts\r\nimport type { TableProps, RenderRowData, TreeNode } from '../table/defaults';\r\nimport type { TableBodyProps } from './defaults';\r\nimport type { TableColumnCtx } from '../table-column/defaults';\r\n\r\nimport { TableContextKey } from '../table/defaults';\r\n\r\nfunction useRender(props: Partial<TableBodyProps>) {\r\n // inject\r\n const IvueTable = inject(TableContextKey);\r\n\r\n // 样式\r\n const { getRowClass, getRowStyle, getTableSpan, getCellClass, getCellStyle } =\r\n useStyles(props);\r\n\r\n // 事件\r\n const {\r\n handleClickTr,\r\n handleCellMouseEnter,\r\n handleCellMouseLeave,\r\n handleMouseEnter,\r\n handleMouseLeave,\r\n } = useEvents(props);\r\n\r\n // computed\r\n\r\n // 是否是默认索引\r\n const firstDefaultColumnIndex = computed(() => {\r\n return props.store?.states.columns.value.findIndex(\r\n ({ type }) => type === 'default'\r\n );\r\n });\r\n\r\n // methods\r\n\r\n // 获取行key\r\n const getRowKey = (row: TableColumnCtx, index: number) => {\r\n const rowKey = (IvueTable.props as Partial<TableProps>).rowKey;\r\n\r\n // 有自定义 rowKey\r\n if (rowKey) {\r\n // 获取rowKey对应的数据\r\n return getRowIdentity(row, rowKey);\r\n }\r\n\r\n return index;\r\n };\r\n\r\n // 渲染行\r\n const rowRender = (\r\n row: TableColumnCtx,\r\n $index: number,\r\n treeRowData?: TreeNode,\r\n // 展开状态\r\n expanded = false\r\n ) => {\r\n const { store } = props;\r\n\r\n const { columns, indent } = store.states;\r\n\r\n // 行样式\r\n const rowClasses = getRowClass(row, $index);\r\n\r\n let display = true;\r\n\r\n // 是否是子节点数据\r\n if (treeRowData) {\r\n rowClasses.push(`ivue-table-level-${treeRowData.level}`);\r\n\r\n display = treeRowData.display;\r\n }\r\n\r\n // tr 隐藏显示用于树形节点\r\n const displayStyle = display\r\n ? null\r\n : {\r\n display: 'none',\r\n };\r\n\r\n return h(\r\n 'tr',\r\n {\r\n class: rowClasses,\r\n style: [displayStyle, getRowStyle(row, $index)],\r\n key: getRowKey(row, $index),\r\n onClick: ($event) => {\r\n handleClickTr($event, row);\r\n },\r\n // 鼠标进入\r\n onMouseenter: () => {\r\n handleMouseEnter($index);\r\n },\r\n // 鼠标离开\r\n onMouseleave: () => {\r\n handleMouseLeave();\r\n },\r\n },\r\n columns.value.map((column, cellIndex) => {\r\n // 获取单元格样式\r\n const { rowspan, colspan } = getTableSpan(\r\n row,\r\n column,\r\n $index,\r\n cellIndex\r\n );\r\n\r\n // 是否存在单元格样式\r\n if (!rowspan || !colspan) {\r\n return null;\r\n }\r\n\r\n // key\r\n const baseKey = `${$index},${cellIndex}`;\r\n\r\n // 当前列的数据\r\n const columnData = { ...column };\r\n\r\n // column 的 key | 列 vode key\r\n const patchKey = columnData.columnKey || columnData.rawColumnKey || '';\r\n\r\n // data\r\n const data: RenderRowData = {\r\n store: props?.store,\r\n _self: props.context || IvueTable,\r\n column: columnData,\r\n row,\r\n $index,\r\n cellIndex,\r\n // 展开状态\r\n expanded,\r\n };\r\n\r\n // 设置子节点数据\r\n if (cellIndex === firstDefaultColumnIndex.value && treeRowData) {\r\n data.treeNode = {\r\n indent: treeRowData.level * indent.value,\r\n level: treeRowData.level,\r\n };\r\n\r\n // 是否有展开\r\n if (typeof treeRowData.expanded === 'boolean') {\r\n data.treeNode.expanded = treeRowData.expanded;\r\n\r\n // 表明是懒加载\r\n if ('loading' in treeRowData) {\r\n data.treeNode.loading = treeRowData.loading;\r\n }\r\n\r\n // 没有懒加载节点\r\n if ('noLazyChildren' in treeRowData) {\r\n data.treeNode.noLazyChildren = treeRowData.noLazyChildren;\r\n }\r\n }\r\n }\r\n\r\n return h(\r\n 'td',\r\n {\r\n // class\r\n class: getCellClass($index, cellIndex, row, column),\r\n // style\r\n style: getCellStyle($index, cellIndex, row, column),\r\n rowspan,\r\n colspan,\r\n // key\r\n key: `${patchKey}${baseKey}`,\r\n // 鼠标进入\r\n onMouseenter: (event) => {\r\n handleCellMouseEnter(event, row);\r\n },\r\n // 鼠标离开\r\n onMouseleave: (event) => {\r\n handleCellMouseLeave(event);\r\n },\r\n },\r\n [\r\n // 渲染单元格\r\n column.renderCell(data),\r\n ]\r\n );\r\n })\r\n );\r\n };\r\n\r\n // 渲染行\r\n const wrappedRowRender = (row: TableColumnCtx, $index: number): any => {\r\n const store = props.store;\r\n\r\n const { isRowExpanded, assertRowKey } = store;\r\n\r\n const { treeData, lazyTreeNodeMap, childrenColumnName, rowKey } =\r\n store.states;\r\n\r\n const columns = store?.states.columns.value;\r\n\r\n // 是否是展开行\r\n const hasExpandColumn = columns.some(({ type }) => type === 'expand');\r\n\r\n // 是否是展开行\r\n if (hasExpandColumn) {\r\n // 是否展开行\r\n const expanded = isRowExpanded(row);\r\n\r\n // tr\r\n const tr = rowRender(\r\n row,\r\n $index,\r\n undefined,\r\n // 展开状态\r\n expanded\r\n );\r\n\r\n // 展开的内容\r\n const renderExpanded = IvueTable.renderExpanded;\r\n // 展开\r\n if (expanded) {\r\n // 没有展开内容\r\n if (!renderExpanded) {\r\n // eslint-disable-next-line no-console\r\n console.error('[Error]renderExpanded is required.');\r\n\r\n return tr;\r\n }\r\n\r\n return [\r\n [\r\n tr,\r\n h(\r\n 'tr',\r\n {\r\n key: `expanded-row__${tr.key as string}`,\r\n },\r\n [\r\n h(\r\n 'td',\r\n {\r\n colspan: columns.length,\r\n class: ['ivue-table-cell', 'ivue-table--expand-cell'],\r\n },\r\n [\r\n renderExpanded({\r\n row,\r\n $index,\r\n store,\r\n // 展开状态\r\n expanded,\r\n }),\r\n ]\r\n ),\r\n ]\r\n ),\r\n ],\r\n ];\r\n }\r\n // 未展开\r\n else {\r\n return [[tr]];\r\n }\r\n }\r\n // 子节点渲染\r\n else if (Object.keys(treeData.value).length) {\r\n // 检查 rowKey 是否存在\r\n assertRowKey();\r\n\r\n // TreeTable 时,rowKey 必须由用户设定,不使用 getKeyOfRow 计算\r\n // 在调用 rowRender 函数时,仍然会计算 rowKey,\r\n\r\n // 获取rowKey对应的数据\r\n const rowKeyData = getRowIdentity(row, rowKey.value);\r\n\r\n // 子节点数据\r\n let childrenData = treeData.value[rowKeyData];\r\n\r\n // 每一行的节点数据\r\n let treeRowData = null;\r\n\r\n // 子节点数据\r\n if (childrenData) {\r\n treeRowData = {\r\n expanded: childrenData.expanded,\r\n level: childrenData.level,\r\n display: true,\r\n };\r\n\r\n // 懒加载数据\r\n if (typeof childrenData.lazy === 'boolean') {\r\n // 加载完成\r\n if (typeof childrenData.loaded === 'boolean' && childrenData.loaded) {\r\n // 没有子节点\r\n treeRowData.noLazyChildren = !(\r\n childrenData.children && childrenData.children.length\r\n );\r\n }\r\n\r\n // 加载\r\n treeRowData.loading = childrenData.loading;\r\n }\r\n }\r\n\r\n const dom = [rowRender(row, $index, treeRowData)];\r\n\r\n // 渲染嵌套数据\r\n if (childrenData) {\r\n // currentRow 记录的是 index,所以还需主动增加 TreeTable 的 index\r\n let i = 0;\r\n\r\n // 递归方法\r\n const traverse = (children, parent) => {\r\n // 没有数据\r\n if (!(children && children.length && parent)) {\r\n return;\r\n }\r\n\r\n children.forEach((node) => {\r\n // 父节点的 display 状态影响子节点的显示状态\r\n const innerTreeRowData = {\r\n display: parent.display && parent.expanded,\r\n level: parent.level + 1,\r\n expanded: false,\r\n noLazyChildren: false,\r\n loading: false,\r\n };\r\n\r\n // 获取rowKey对应的数据\r\n const childKey = getRowIdentity(node, rowKey.value);\r\n if (childKey === undefined || childKey === null) {\r\n throwError(\r\n 'ivue-table',\r\n 'For nested data item, row-key is required'\r\n );\r\n }\r\n\r\n childrenData = { ...treeData.value[childKey] };\r\n\r\n // 对于当前节点,分成有无子节点两种情况。\r\n // 如果包含子节点的,设置 expanded 属性。\r\n // 对于它子节点的 display 属性由它本身的 expanded 与 display 共同决定。\r\n if (childrenData) {\r\n innerTreeRowData.expanded = childrenData.expanded;\r\n\r\n // 懒加载的某些节点,level 未知\r\n childrenData.level = childrenData.level || innerTreeRowData.level;\r\n childrenData.display = !!(\r\n childrenData.expanded && innerTreeRowData.display\r\n );\r\n\r\n // 懒加载\r\n if (typeof childrenData.lazy === 'boolean') {\r\n // 加载完成\r\n if (\r\n typeof childrenData.loaded === 'boolean' &&\r\n childrenData.loaded\r\n ) {\r\n // 没有子节点\r\n innerTreeRowData.noLazyChildren = !(\r\n childrenData.children && childrenData.children.length\r\n );\r\n }\r\n\r\n // 加载中\r\n innerTreeRowData.loading = childrenData.loading;\r\n }\r\n }\r\n\r\n i++;\r\n\r\n // 添加节点\r\n dom.push(rowRender(node, $index + i, innerTreeRowData));\r\n\r\n if (childrenData) {\r\n // 懒加载节点 | 子节点 = 获取行数据\r\n const nodes =\r\n lazyTreeNodeMap.value[childKey] ||\r\n node[childrenColumnName.value];\r\n\r\n traverse(nodes, childrenData);\r\n }\r\n });\r\n };\r\n\r\n // 对于 root 节点,display 一定为 true\r\n childrenData.display = true;\r\n\r\n // 懒加载节点 | 子节点 = 获取行数据\r\n const nodes =\r\n lazyTreeNodeMap.value[rowKeyData] || row[childrenColumnName.value];\r\n\r\n // 递归方法\r\n traverse(nodes, childrenData);\r\n }\r\n\r\n return dom;\r\n }\r\n // 普通渲染\r\n else {\r\n return rowRender(row, $index);\r\n }\r\n };\r\n\r\n return {\r\n wrappedRowRender,\r\n };\r\n}\r\n\r\nexport default useRender;\r\n"],"names":["nodes"],"mappings":"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"}