import { defineComponent, h } from 'vue' import type { ProColumn } from '../types' export const DefaultCellRenderer = defineComponent({ name: 'EcpProTableDefaultCellRenderer', props: { column: { type: Object as () => ProColumn, required: true }, record: { type: Object as () => Record, required: true }, index: { type: Number, required: true }, value: { required: false }, }, setup(p) { return () => { const col = p.column as any if (col?.customRender) { const r = col.customRender({ text: p.value, record: p.record, index: p.index }) if (typeof r === 'string' || typeof r === 'number') return h('span', String(r)) return r as any } if (col?.valueEnum) { const text = col.valueEnum?.[p.value]?.text ?? p.value return h('span', text == null ? '' : String(text)) } return h('span', p.value == null ? '' : String(p.value)) } }, }) export const BodyCellRenderer = defineComponent({ name: 'EcpProTableBodyCellRenderer', props: { slotRender: { type: Function, required: true }, column: { type: Object as () => ProColumn, required: true }, record: { type: Object as () => Record, required: true }, index: { type: Number, required: true }, value: { required: false }, customRender: { type: Function, required: false }, valueEnum: { type: Object, required: false }, }, setup(p) { return () => { const slot = p.slotRender as any const nodes = slot?.({ column: p.column, row: p.record, record: p.record, index: p.index, value: p.value }) const normalize = (n: any) => { if (n == null) return [] if (Array.isArray(n)) return n.filter((x) => x != null && x !== false && !x.isComment) return [n] } const normalized = normalize(nodes) if (normalized.length > 0) return nodes const col = { ...(p.column as any) } if (p.customRender) col.customRender = p.customRender if (p.valueEnum) col.valueEnum = p.valueEnum return h(DefaultCellRenderer as any, { props: { column: col, record: p.record, index: p.index, value: p.value } }) } }, })