UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 7.66 kB
{"version":3,"file":"render-helper.mjs","sources":["../../../../../../../packages/components/table/src/table-column/render-helper.ts"],"sourcesContent":["import { getCurrentInstance, h, ref, computed, watchEffect } from 'vue'\nimport { debugWarn } from '@element-plus/utils/error'\nimport { cellForced, defaultRenderCell, treeCellPrefix } from '../config'\nimport { parseWidth, parseMinWidth } from '../util'\n\nimport type { ComputedRef } from 'vue'\nimport type { TableColumnCtx, TableColumn } from './defaults'\n\nfunction useRender<T>(\n props: TableColumnCtx<T>,\n slots,\n owner: ComputedRef<any>\n) {\n const instance = getCurrentInstance() as TableColumn<T>\n const columnId = ref('')\n const isSubColumn = ref(false)\n const realAlign = ref<string>()\n const realHeaderAlign = ref<string>()\n watchEffect(() => {\n realAlign.value = props.align ? `is-${props.align}` : null\n // nextline help render\n realAlign.value\n })\n watchEffect(() => {\n realHeaderAlign.value = props.headerAlign\n ? `is-${props.headerAlign}`\n : realAlign.value\n // nextline help render\n realHeaderAlign.value\n })\n const columnOrTableParent = computed(() => {\n let parent: any = instance.vnode.vParent || instance.parent\n while (parent && !parent.tableId && !parent.columnId) {\n parent = parent.vnode.vParent || parent.parent\n }\n return parent\n })\n\n const realWidth = ref(parseWidth(props.width))\n const realMinWidth = ref(parseMinWidth(props.minWidth))\n const setColumnWidth = (column: TableColumnCtx<T>) => {\n if (realWidth.value) column.width = realWidth.value\n if (realMinWidth.value) {\n column.minWidth = realMinWidth.value\n }\n if (!column.minWidth) {\n column.minWidth = 80\n }\n column.realWidth = Number(\n column.width === undefined ? column.minWidth : column.width\n )\n return column\n }\n const setColumnForcedProps = (column: TableColumnCtx<T>) => {\n // 对于特定类型的 column,某些属性不允许设置\n const type = column.type\n const source = cellForced[type] || {}\n Object.keys(source).forEach((prop) => {\n const value = source[prop]\n if (value !== undefined) {\n column[prop] = prop === 'className' ? `${column[prop]} ${value}` : value\n }\n })\n return column\n }\n\n const checkSubColumn = (children: TableColumn<T> | TableColumn<T>[]) => {\n if (children instanceof Array) {\n children.forEach((child) => check(child))\n } else {\n check(children)\n }\n function check(item: TableColumn<T>) {\n if (item?.type?.name === 'ElTableColumn') {\n item.vParent = instance\n }\n }\n }\n const setColumnRenders = (column: TableColumnCtx<T>) => {\n // renderHeader 属性不推荐使用。\n if (props.renderHeader) {\n debugWarn(\n 'TableColumn',\n 'Comparing to render-header, scoped-slot header is easier to use. We recommend users to use scoped-slot header.'\n )\n } else if (column.type !== 'selection') {\n column.renderHeader = (scope) => {\n // help render\n instance.columnConfig.value['label']\n const renderHeader = slots.header\n return renderHeader ? renderHeader(scope) : column.label\n }\n }\n\n let originRenderCell = column.renderCell\n // TODO: 这里的实现调整\n if (column.type === 'expand') {\n // 对于展开行,renderCell 不允许配置的。在上一步中已经设置过,这里需要简单封装一下。\n column.renderCell = (data) =>\n h(\n 'div',\n {\n class: 'cell',\n },\n [originRenderCell(data)]\n )\n owner.value.renderExpanded = (data) => {\n return slots.default ? slots.default(data) : slots.default\n }\n } else {\n originRenderCell = originRenderCell || defaultRenderCell\n // 对 renderCell 进行包装\n column.renderCell = (data) => {\n let children = null\n if (slots.default) {\n children = slots.default(data)\n } else {\n children = originRenderCell(data)\n }\n const prefix = treeCellPrefix(data)\n const props = {\n class: 'cell',\n style: {},\n }\n if (column.showOverflowTooltip) {\n props.class += ' el-tooltip'\n props.style = {\n width: `${\n (data.column.realWidth || Number(data.column.width)) - 1\n }px`,\n }\n }\n checkSubColumn(children)\n return h('div', props, [prefix, children])\n }\n }\n return column\n }\n const getPropsData = (...propsKey: unknown[]) => {\n return propsKey.reduce((prev, cur) => {\n if (Array.isArray(cur)) {\n cur.forEach((key) => {\n prev[key] = props[key]\n })\n }\n return prev\n }, {})\n }\n const getColumnElIndex = (children, child) => {\n return [].indexOf.call(children, child)\n }\n\n return {\n columnId,\n realAlign,\n isSubColumn,\n realHeaderAlign,\n columnOrTableParent,\n setColumnWidth,\n setColumnForcedProps,\n setColumnRenders,\n getPropsData,\n getColumnElIndex,\n }\n}\n\nexport default useRender\n"],"names":[],"mappings":"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"}