UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 14 kB
{"version":3,"file":"table-column.mjs","sources":["../../../components/table/table-column.ts"],"sourcesContent":["import {\n computed,\n defineComponent,\n inject,\n onBeforeUnmount,\n reactive,\n renderSlot,\n watch,\n} from 'vue'\n\nimport { createSizeProp, useProps } from '@vexip-ui/config'\nimport { isNull, warnOnce } from '@vexip-ui/utils'\nimport { tableColumnProps } from './props'\nimport { COLUMN_GROUP_ACTIONS, TABLE_ACTIONS, columnTypes, noopFormatter } from './symbol'\n\nimport type { ColumnWithKey, Data, TableRowState, TableTextAlign } from './symbol'\n\ntype ColumnPropKey = keyof typeof tableColumnProps\n\nconst propKeys = Object.keys(tableColumnProps) as ColumnPropKey[]\nconst aliases: Partial<Record<ColumnPropKey, string>> = {\n idKey: 'key',\n}\nconst ignoredProps: ColumnPropKey[] = [\n 'renderer',\n 'headRenderer',\n 'filterRenderer',\n 'summaryRenderer',\n]\nconst triggerProps: ColumnPropKey[] = [\n 'idKey',\n 'fixed',\n 'type',\n 'width',\n 'minWidth',\n 'maxWidth',\n 'sorter',\n 'order',\n 'orderLabel',\n 'disableRow',\n 'headSpan',\n 'cellSpan',\n]\nconst aligns: TableTextAlign[] = ['left', 'center', 'right']\n\nconst funcProp = {\n default: null,\n isFunc: true,\n static: true,\n}\n\nexport default defineComponent({\n name: 'TableColumn',\n inheritAttrs: false,\n props: tableColumnProps,\n setup(_props, { slots }) {\n const props = useProps('tableColumn', _props, {\n idKey: {\n default: null,\n validator: value => !isNull(value),\n static: true,\n },\n name: {\n default: '',\n static: true,\n },\n accessor: {\n default: null,\n isFunc: true,\n static: true,\n },\n fixed: {\n default: false,\n static: true,\n },\n class: null,\n style: null,\n attrs: null,\n type: {\n default: null,\n validator: value => columnTypes.includes(value),\n static: true,\n },\n width: null,\n minWidth: 100,\n maxWidth: null,\n filter: null,\n sorter: false,\n renderer: funcProp,\n headRenderer: funcProp,\n filterRenderer: funcProp,\n order: {\n default: 0,\n static: true,\n },\n ellipsis: null,\n checkboxSize: {\n ...createSizeProp(),\n default: null,\n },\n selectionSize: {\n ...createSizeProp(),\n default: null,\n },\n disableRow: {\n default: null,\n isFunc: true,\n },\n truthIndex: false,\n orderLabel: {\n default: null,\n isFunc: true,\n },\n meta: null,\n textAlign: {\n default: 'left',\n validator: value => aligns.includes(value),\n },\n headSpan: {\n default: 1,\n static: true,\n },\n cellSpan: funcProp,\n noSummary: false,\n summaryRenderer: funcProp,\n indented: false,\n formatter: {\n default: null,\n isFunc: true,\n },\n singleSelect: false,\n })\n\n const selectionSize = computed(() => {\n if (props.checkboxSize) {\n warnOnce(\"'checkboxSize' has been deprecated, please use 'selectionSize' instead.\")\n }\n\n return props.selectionSize ?? props.checkboxSize ?? 'default'\n })\n\n const tableAction = inject(TABLE_ACTIONS, null)\n const parentActions = inject(COLUMN_GROUP_ACTIONS, null)\n const options = reactive({}) as ColumnWithKey\n\n for (const key of propKeys) {\n if (ignoredProps.includes(key)) continue\n\n if (key === 'selectionSize' || key === 'checkboxSize') {\n ;(options as any).selectionSize = selectionSize.value\n\n watch(selectionSize, value => {\n ;(options as any).selectionSize = value\n tableAction?.setColumnProp(options.key, 'selectionSize', value)\n })\n\n continue\n }\n\n const aliasKey = (aliases[key] || key) as keyof ColumnWithKey\n\n ;(options[aliasKey] as any) = props[key]\n\n if (key === 'idKey') {\n const update = (value: string | number) => {\n if (isNull(value) && props.type) {\n ;(options[aliasKey] as any) = value = `__vxp_${props.type}`\n } else {\n ;(options[aliasKey] as any) = value\n }\n }\n\n update(props.idKey)\n watch(\n () => props.idKey,\n value => {\n update(value)\n tableAction?.updateColumns()\n },\n )\n } else if (key === 'filter') {\n const filterWithoutMeta = computed(() => {\n if (props.filter) {\n const { meta, ...filter } = props.filter\n return filter\n }\n\n return props.filter\n })\n\n watch(\n filterWithoutMeta,\n () => {\n options.filter = props.filter\n tableAction?.updateColumns()\n },\n { deep: true },\n )\n } else {\n const trigger = triggerProps.includes(key)\n\n watch(\n () => props[key],\n value => {\n ;(options[aliasKey] as any) = value\n trigger\n ? tableAction?.updateColumns()\n : tableAction?.setColumnProp(options.key, key, value)\n },\n )\n }\n }\n\n watch(() => props.renderer, setRenderer)\n watch(() => props.headRenderer, setHeadRenderer)\n watch(() => props.filterRenderer, setFilterRenderer)\n watch(() => props.summaryRenderer, setSummaryRenderer)\n\n setRenderer()\n setHeadRenderer()\n setFilterRenderer()\n setSummaryRenderer()\n\n if (parentActions) {\n parentActions.increaseColumn(options)\n\n onBeforeUnmount(() => {\n parentActions.decreaseColumn(options)\n })\n } else {\n tableAction?.increaseColumn(options)\n\n onBeforeUnmount(() => {\n tableAction?.decreaseColumn(options)\n })\n }\n\n // TODO: 在动态列时会触发无限 watch,初步估计是重置单元格合并状态导致的\n // onBeforeUpdate(() => {\n // setRenderer()\n // setHeadRenderer()\n // setFilterRenderer()\n // }\n\n function setRenderer() {\n if (options.type && options.type !== 'expand') {\n ;(options as any).renderer = undefined\n return\n }\n\n options.renderer = (data: any) => {\n if (typeof slots.default === 'function') {\n return renderSlot(slots, 'default', data)\n }\n\n if (typeof props.renderer === 'function') {\n return props.renderer(data)\n }\n\n if (options.type === 'expand') {\n return ''\n }\n\n const row = data.row\n const rowIndex = data.rowIndex as number\n const formatter =\n typeof options.formatter === 'function' ? options.formatter : noopFormatter\n\n const result = formatter(\n typeof props.accessor === 'function'\n ? props.accessor(row as Data, rowIndex)\n : (row as TableRowState)[options.key as unknown as keyof TableRowState],\n )\n\n return isNull(result) ? '' : String(result)\n }\n }\n\n function setHeadRenderer() {\n if (options.type === 'selection') {\n ;(options as any).renderer = undefined\n return\n }\n\n options.headRenderer = data => {\n if (typeof slots.head === 'function') {\n return renderSlot(slots, 'head', data)\n }\n\n if (typeof props.headRenderer === 'function') {\n return props.headRenderer(data)\n }\n\n return props.name\n }\n }\n\n function setFilterRenderer() {\n if (typeof slots.filter === 'function' || typeof props.filterRenderer === 'function') {\n options.filterRenderer = data => {\n if (typeof slots.filter === 'function') {\n return renderSlot(slots, 'filter', data)\n }\n\n return props.filterRenderer(data)\n }\n } else {\n options.filterRenderer = undefined\n }\n }\n\n function setSummaryRenderer() {\n if (typeof slots.summary === 'function' || typeof props.summaryRenderer === 'function') {\n options.summaryRenderer = data => {\n if (typeof slots.summary === 'function') {\n return renderSlot(slots, 'summary', data)\n }\n\n if (typeof props.summaryRenderer === 'function') {\n return props.summaryRenderer(data)\n }\n\n return ''\n }\n } else {\n options.summaryRenderer = undefined\n }\n }\n\n return () => null\n },\n})\n"],"names":["propKeys","tableColumnProps","aliases","ignoredProps","triggerProps","aligns","funcProp","TableColumn","defineComponent","_props","slots","props","useProps","value","isNull","columnTypes","createSizeProp","selectionSize","computed","warnOnce","tableAction","inject","TABLE_ACTIONS","parentActions","COLUMN_GROUP_ACTIONS","options","reactive","key","watch","aliasKey","update","filterWithoutMeta","meta","filter","trigger","setRenderer","setHeadRenderer","setFilterRenderer","setSummaryRenderer","onBeforeUnmount","data","renderSlot","row","rowIndex","result","noopFormatter"],"mappings":"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"}