UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 14.4 kB
{"version":3,"file":"render-helper.mjs","sources":["../../../../../../../packages/components/table/src/table-column/render-helper.ts"],"sourcesContent":["import {\n Comment,\n Fragment,\n computed,\n createTextVNode,\n getCurrentInstance,\n h,\n ref,\n renderSlot,\n unref,\n watchEffect,\n} from 'vue'\nimport { debugWarn, isArray, isUndefined } from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport {\n cellForced,\n defaultRenderCell,\n getDefaultClassName,\n treeCellPrefix,\n} from '../config'\nimport { ensureValidVNode, parseMinWidth, parseWidth } from '../util'\n\nimport type { ComputedRef, RendererNode, Slots, VNode } from 'vue'\nimport type { TableColumn, TableColumnCtx } from './defaults'\nimport type { DefaultRow, Table } from '../table/defaults'\n\nfunction useRender<T extends DefaultRow>(\n props: TableColumnCtx<T>,\n slots: Slots,\n owner: ComputedRef<Table<T>>\n) {\n const instance = getCurrentInstance() as TableColumn<T>\n const columnId = ref('')\n const isSubColumn = ref(false)\n const realAlign = ref<string | null>()\n const realHeaderAlign = ref<string | null | undefined>()\n const ns = useNamespace('table')\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<Table<T> | TableColumn<T>>(() => {\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 const hasTreeColumn = computed<boolean>(() => {\n const { store } = (instance.parent as Table<T>)!\n if (!store) return false\n const { treeData } = store.states\n const treeDataValue = treeData.value\n return treeDataValue && Object.keys(treeDataValue).length > 0\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 (!realWidth.value && realMinWidth.value) {\n column.width = undefined\n }\n if (!column.minWidth) {\n column.minWidth = 80\n }\n column.realWidth = Number(\n isUndefined(column.width) ? 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 as keyof typeof cellForced] || {}\n Object.keys(source).forEach((prop) => {\n const value = source[prop as keyof typeof source]\n if (prop !== 'className' && !isUndefined(value)) {\n ;(column as any)[prop] = value\n }\n })\n const className = getDefaultClassName(type)\n if (className) {\n const forceClass = `${unref(ns.namespace)}-${className}`\n column.className = column.className\n ? `${column.className} ${forceClass}`\n : forceClass\n }\n return column\n }\n\n const checkSubColumn = (children: VNode | VNode[]) => {\n if (isArray(children)) {\n children.forEach((child) => check(child))\n } else {\n check(children)\n }\n function check(item: any) {\n if (item?.type?.name === 'ElTableColumn') {\n item.vParent = instance\n }\n }\n }\n const setColumnRenders = (column: TableColumnCtx<T>) => {\n // renderHeader 属性不推荐使用。\n //@ts-expect-error\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\n if (slots.header) {\n const slotResult = slots.header(scope)\n // Manual valid check to support v-if fallback\n // and bypass renderSlot to support HMR\n if (ensureValidVNode(slotResult)) {\n return h(Fragment, slotResult)\n }\n }\n\n return createTextVNode(column.label)\n }\n }\n\n if (slots['filter-icon']) {\n column.renderFilterIcon = (scope) => {\n return renderSlot(slots, 'filter-icon', scope)\n }\n }\n\n if (slots.expand) {\n column.renderExpand = (scope) => {\n return renderSlot(slots, 'expand', scope)\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 = (row) => {\n return slots.default ? slots.default(row) : slots.default\n }\n } else {\n originRenderCell = originRenderCell || defaultRenderCell\n // 对 renderCell 进行包装\n column.renderCell = (data) => {\n let children: VNode | VNode[] | null = null\n if (slots.default) {\n const vnodes = slots.default(data)\n children = vnodes.some((v) => v.type !== Comment)\n ? vnodes\n : originRenderCell(data)\n } else {\n children = originRenderCell(data)\n }\n\n const { columns } = owner.value.store.states\n const firstUserColumnIndex = columns.value.findIndex(\n (item) => item.type === 'default'\n )\n const shouldCreatePlaceholder =\n hasTreeColumn.value && data.cellIndex === firstUserColumnIndex\n const prefix = treeCellPrefix(data, shouldCreatePlaceholder)\n const props = {\n class: 'cell',\n style: {},\n }\n if (column.showOverflowTooltip) {\n props.class = `${props.class} ${unref(ns.namespace)}-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: string[][]) => {\n return propsKey.reduce(\n (prev, cur) => {\n if (isArray(cur)) {\n cur.forEach((key) => {\n prev[key] = props[key as keyof TableColumnCtx<T>]\n })\n }\n return prev\n },\n {} as Record<string, any>\n )\n }\n const getColumnElIndex = (children: T[], child: RendererNode | null) => {\n return Array.prototype.indexOf.call(children, child)\n }\n\n const updateColumnOrder = () => {\n owner.value.store.commit('updateColumnOrder', instance.columnConfig.value)\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 updateColumnOrder,\n }\n}\n\nexport default useRender\n"],"names":["props"],"mappings":"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"}