element-plus
Version:
A Component Library for Vue 3
1 lines • 14.1 kB
Source Map (JSON)
{"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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"}