@extclp/vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 20 kB
Source Map (JSON)
{"version":3,"file":"table-cell.vue2.mjs","sources":["../../../components/table/table-cell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Checkbox } from '@/components/checkbox'\nimport { Ellipsis } from '@/components/ellipsis'\nimport { Radio } from '@/components/radio'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, inject, nextTick, ref, watchEffect } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport TableIcon from './table-icon.vue'\nimport { useRtl } from '@vexip-ui/hooks'\nimport { getLast, isFunction } from '@vexip-ui/utils'\nimport { TABLE_ACTIONS, TABLE_STORE, columnTypes, noopFormatter } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type {\n ColumnWithKey,\n TableDragColumn,\n TableExpandColumn,\n TableOrderColumn,\n TableRowState,\n TableSelectionColumn,\n TableTypeColumn\n} from './symbol'\n\ndefineOptions({ name: 'TableCell' })\n\nconst props = defineProps({\n row: {\n type: Object as PropType<TableRowState>,\n default: () => ({})\n },\n rowIndex: {\n type: Number,\n default: -1\n },\n column: {\n type: Object as PropType<ColumnWithKey>,\n default: () => ({})\n },\n colIndex: {\n type: Number,\n default: -1\n },\n fixed: {\n type: String as PropType<'left' | 'right' | undefined>,\n default: null\n }\n})\n\nconst { state, getters, mutations } = inject(TABLE_STORE)!\nconst tableActions = inject(TABLE_ACTIONS)!\n\nconst nh = useNameHelper('table')\nconst icons = useIcons()\nconst { isRtl } = useRtl()\n\nconst contentHeight = ref(0)\n\nconst wrapper = ref<HTMLElement>()\n\nconst inLast = computed(() => {\n return props.column.index + cellSpan.value.colSpan >= state.columns.length\n})\nconst className = computed(() => {\n let customClass = null\n\n if (typeof state.cellClass === 'function') {\n customClass = state.cellClass({\n row: props.row.data,\n rowIndex: props.rowIndex,\n column: props.column,\n columnIndex: props.column.index\n })\n } else {\n customClass = state.cellClass\n }\n\n const typed = columnTypes.includes((props.column as TableTypeColumn).type)\n\n return [\n nh.be('cell'),\n {\n [nh.bem('cell', 'typed')]: typed,\n [nh.bem('cell', 'center')]: typed || props.column.textAlign === 'center',\n [nh.bem('cell', 'right')]: props.column.textAlign === 'right',\n [nh.bem('cell', 'last')]: inLast.value\n },\n props.column.class,\n customClass\n ]\n})\nconst columns = computed(() => {\n return props.fixed === 'left'\n ? state.leftFixedColumns\n : props.fixed === 'right'\n ? state.rightFixedColumns\n : state.normalColumns\n})\nconst cellSpan = computed(() => {\n return (\n state.cellSpanMap\n .get(props.fixed || 'default')!\n .get(`${props.row.index},${props.column.index}`) || { colSpan: 1, rowSpan: 1 }\n )\n})\nconst customStyle = computed(() => {\n if (typeof state.cellStyle === 'function') {\n return state.cellStyle({\n row: props.row.data,\n rowIndex: props.rowIndex,\n column: props.column,\n columnIndex: props.column.index\n })\n }\n\n return state.cellStyle\n})\nconst style = computed(() => {\n const totalWidths =\n props.fixed === 'left'\n ? getters.leftFixedWidths\n : props.fixed === 'right'\n ? getters.rightFixedWidths\n : getters.normalWidths\n const { colSpan, rowSpan } = cellSpan.value\n const noFixed = !getters.hasFixedColumn\n const padLeft = noFixed || columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\n const padRight =\n noFixed || getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\n const width = totalWidths[props.colIndex + colSpan] - totalWidths[props.colIndex]\n\n let height: number | undefined\n\n if (rowSpan > 1 && state.heightBITree) {\n height =\n state.heightBITree.sum(props.row.listIndex + rowSpan) -\n state.heightBITree.sum(props.row.listIndex)\n }\n\n return [\n props.column.style || '',\n customStyle.value,\n {\n display: !colSpan || !rowSpan ? 'none' : undefined,\n width: `${(props.column.index ? 0 : padLeft) + (inLast.value ? padRight : 0) + width}px`,\n height: height ? `${height}px` : undefined,\n visibility: props.column.fixed && !props.fixed ? 'hidden' : undefined,\n borderRightWidth:\n !state.border && colSpan > 1 && props.colIndex + colSpan >= totalWidths.length - 1\n ? 0\n : undefined,\n borderBottomWidth:\n rowSpan > 1 && props.rowIndex + rowSpan >= getters.processedData.length ? 0 : undefined,\n transform: `translate3d(${isRtl.value ? '-' : ''}${\n (props.column.index ? padLeft : 0) + totalWidths[props.colIndex]\n }px, 0, 0)`\n }\n ]\n})\nconst attrs = computed(() => {\n let customAttrs: Record<string, any>\n\n if (typeof state.cellAttrs === 'function') {\n customAttrs = state.cellAttrs({\n row: props.row.data,\n rowIndex: props.rowIndex,\n column: props.column,\n columnIndex: props.colIndex\n })\n } else {\n customAttrs = state.cellAttrs\n }\n\n return { ...(props.column.attrs || {}), ...(customAttrs || {}) }\n})\nconst formatter = computed(() => {\n return isFunction(props.column.formatter) ? props.column.formatter : noopFormatter\n})\n\nwatchEffect(() => {\n if (isTypeColumn(props.column)) return\n\n mutations.setCellHeight(props.row.key, props.column.key, contentHeight.value)\n})\n\nfunction isSelectionColumn(column: unknown): column is TableSelectionColumn {\n return (column as TableTypeColumn).type === 'selection'\n}\n\nfunction isOrderColumn(column: unknown): column is TableOrderColumn {\n return (column as TableTypeColumn).type === 'order'\n}\n\nfunction isExpandColumn(column: unknown): column is TableExpandColumn {\n return (column as TableTypeColumn).type === 'expand'\n}\n\nfunction isDragColumn(column: unknown): column is TableDragColumn {\n return (column as TableTypeColumn).type === 'drag'\n}\n\nfunction isTypeColumn(column: unknown): column is TableTypeColumn {\n return (\n isSelectionColumn(column) ||\n isOrderColumn(column) ||\n isExpandColumn(column) ||\n isDragColumn(column)\n )\n}\n\nfunction buildEventPayload(event: Event) {\n return {\n row: props.row.data,\n key: props.row.key,\n rowIndex: props.rowIndex,\n column: props.column,\n columnIndex: props.colIndex,\n event\n }\n}\n\nfunction handleMouseEnter(event: MouseEvent) {\n tableActions?.emitCellEvent('Enter', buildEventPayload(event))\n}\n\nfunction handleMouseLeave(event: MouseEvent) {\n tableActions?.emitCellEvent('Leave', buildEventPayload(event))\n}\n\nfunction handleClick(event: MouseEvent) {\n tableActions?.emitCellEvent('Click', buildEventPayload(event))\n}\n\nfunction handleDblclick(event: MouseEvent) {\n tableActions?.emitCellEvent('Dblclick', buildEventPayload(event))\n}\n\nfunction handleContextmenu(event: MouseEvent) {\n tableActions?.emitCellEvent('Contextmenu', buildEventPayload(event))\n}\n\nfunction handleCheckRow(row: TableRowState, event: MouseEvent, single = false) {\n if (!getters.disableCheckRows.has(row.key)) {\n const checked = !row.checked\n const { data, key, index } = row\n\n mutations.handleCheck(key, checked, single)\n tableActions.emitRowCheck({ row: data, key, index, event, checked })\n }\n}\n\nfunction handleExpandRow(row: TableRowState, event: MouseEvent) {\n if (!getters.disableExpandRows.has(row.key)) {\n const expanded = !row.expanded\n const { data, key, index } = row\n\n mutations.setRowProp(key, 'expandAnimate', true)\n nextTick(() => {\n mutations.handleExpand(key, expanded)\n tableActions.emitRowExpand({ row: data, key, index, event, expanded })\n })\n }\n}\n\nfunction handleDragRow(row: TableRowState) {\n if (!getters.disableDragRows.has(row.key)) {\n mutations.handleDrag(row.key, true)\n }\n}\n\nfunction handleExpandTree(row: TableRowState, event: MouseEvent) {\n if (!row.children?.length) return\n\n const expanded = !row.treeExpanded\n const { data, key, index } = row\n\n tableActions.runInLocked()\n mutations.setTreeExpanded(row.key, expanded)\n tableActions.emitRowExpand({ row: data, key, index, event, expanded })\n}\n\nfunction handleCellResize(entry: ResizeObserverEntry) {\n contentHeight.value =\n (entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height) + state.borderWidth\n}\n</script>\n\n<template>\n <div\n v-bind=\"attrs\"\n ref=\"wrapper\"\n :class=\"className\"\n role=\"cell\"\n :scope=\"column.first ? 'row' : undefined\"\n :colspan=\"cellSpan.colSpan !== 1 ? cellSpan.colSpan : undefined\"\n :rowspan=\"cellSpan.rowSpan !== 1 ? cellSpan.rowSpan : undefined\"\n :style=\"style\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n @click=\"handleClick\"\n @dblclick=\"handleDblclick\"\n @contextmenu=\"handleContextmenu\"\n >\n <div\n v-if=\"column.index === 0\"\n :class=\"nh.be('side-pad')\"\n role=\"none\"\n aria-hidden\n ></div>\n <div v-if=\"isTypeColumn(column)\" :class=\"nh.be('content')\">\n <template v-if=\"isSelectionColumn(column)\">\n <Radio\n v-if=\"column.singleSelect\"\n inherit\n :label=\"row.key\"\n :value=\"row.checked ? row.key : null\"\n :class=\"nh.be('selection')\"\n :size=\"column.selectionSize || 'default'\"\n :disabled=\"getters.disableCheckRows.has(row.key)\"\n @click.prevent.stop=\"handleCheckRow(row, $event, true)\"\n ></Radio>\n <Checkbox\n v-else\n inherit\n :class=\"nh.be('selection')\"\n :checked=\"row.checked\"\n :size=\"column.selectionSize || 'default'\"\n :disabled=\"getters.disableCheckRows.has(row.key)\"\n :partial=\"row.partial\"\n :control=\"!!row.children?.length\"\n @click.prevent.stop=\"handleCheckRow(row, $event)\"\n ></Checkbox>\n </template>\n <span v-else-if=\"isOrderColumn(column)\" :class=\"nh.be('order')\">\n {{ column.orderLabel && column.orderLabel(column.truthIndex ? row.index : rowIndex) }}\n </span>\n <template v-else-if=\"isExpandColumn(column)\">\n <button\n v-if=\"!getters.disableExpandRows.has(row.key)\"\n type=\"button\"\n :class=\"{\n [nh.be('expand')]: true,\n [nh.bem('expand', 'active')]: row.expanded\n }\"\n @click.stop=\"handleExpandRow(row, $event)\"\n >\n <TableIcon name=\"expand\" :origin=\"icons.angleRight\"></TableIcon>\n </button>\n </template>\n <template v-else-if=\"isDragColumn(column)\">\n <button\n v-if=\"!getters.disableDragRows.has(row.key)\"\n type=\"button\"\n :class=\"nh.be('dragger')\"\n @mousedown=\"handleDragRow(row)\"\n >\n <TableIcon name=\"dragger\" :origin=\"icons.dragger\"></TableIcon>\n </button>\n </template>\n </div>\n <ResizeObserver v-else :on-resize=\"handleCellResize\">\n <span :class=\"nh.be('content')\">\n <template\n v-if=\"\n getters.usingTree &&\n (getters.indentedColumn ? column.key === getters.indentedColumn.key : column.first)\n \"\n >\n <span\n :class=\"nh.be('pad')\"\n :style=\"{\n [nh.cv('row-depth')]: row.depth\n }\"\n ></span>\n <button\n type=\"button\"\n :class=\"[\n nh.be('tree-expand'),\n !row.children?.length && nh.bem('tree-expand', 'hidden')\n ]\"\n @click=\"handleExpandTree(row, $event)\"\n >\n <TableIcon v-if=\"row.treeExpanded\" name=\"minus\" :origin=\"icons.minusSquare\"></TableIcon>\n <TableIcon v-else name=\"plus\" :origin=\"icons.plusSquare\"></TableIcon>\n </button>\n </template>\n <Ellipsis\n v-if=\"column.ellipsis ?? state.ellipsis\"\n inherit\n :class=\"nh.be('ellipsis')\"\n :tip-disabled=\"state.barScrolling\"\n :tooltip-theme=\"state.tooltipTheme\"\n :tip-max-width=\"state.tooltipWidth\"\n >\n <Renderer\n v-if=\"isFunction(column.renderer)\"\n :renderer=\"column.renderer\"\n :data=\"{ row: row.data, rowIndex, column, columnIndex: column.index }\"\n ></Renderer>\n <template v-else-if=\"isFunction(column.accessor)\">\n {{ formatter(column.accessor(row.data, rowIndex)) }}\n </template>\n <template v-else>\n {{ formatter(row.data[column.key]) }}\n </template>\n </Ellipsis>\n <template v-else>\n <Renderer\n v-if=\"isFunction(column.renderer)\"\n :renderer=\"column.renderer\"\n :data=\"{ row: row.data, rowIndex, column, columnIndex: column.index }\"\n ></Renderer>\n <template v-else-if=\"isFunction(column.accessor)\">\n {{ formatter(column.accessor(row.data, rowIndex)) }}\n </template>\n <template v-else>\n {{ formatter(row.data[column.key]) }}\n </template>\n </template>\n </span>\n </ResizeObserver>\n <div\n v-if=\"inLast\"\n :class=\"[nh.be('side-pad'), nh.bem('side-pad', 'right')]\"\n role=\"none\"\n aria-hidden\n ></div>\n </div>\n</template>\n"],"names":["props","__props","state","getters","mutations","inject","TABLE_STORE","tableActions","TABLE_ACTIONS","nh","useNameHelper","icons","useIcons","isRtl","useRtl","contentHeight","ref","wrapper","inLast","computed","cellSpan","className","customClass","typed","columnTypes","columns","customStyle","style","totalWidths","colSpan","rowSpan","noFixed","padLeft","_a","padRight","_b","getLast","width","height","attrs","customAttrs","formatter","isFunction","noopFormatter","watchEffect","isTypeColumn","isSelectionColumn","column","isOrderColumn","isExpandColumn","isDragColumn","buildEventPayload","event","handleMouseEnter","handleMouseLeave","handleClick","handleDblclick","handleContextmenu","handleCheckRow","row","single","checked","data","key","index","handleExpandRow","expanded","nextTick","handleDragRow","handleExpandTree","handleCellResize","entry"],"mappings":"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"}