UNPKG

vexip-ui

Version:

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

1 lines 14 kB
{"version":3,"file":"table-foot-cell.vue2.cjs","sources":["../../../components/table/table-foot-cell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Ellipsis } from '@/components/ellipsis'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, inject, ref } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useRtl } from '@vexip-ui/hooks'\nimport { getLast, isFunction } from '@vexip-ui/utils'\nimport { TABLE_ACTIONS, TABLE_STORE, columnTypes } from './symbol'\n\nimport type { PropType, StyleValue } from 'vue'\nimport type { ColumnWithKey, SummaryWithKey, TableRowState, TableTypeColumn } from './symbol'\n\ndefineOptions({ name: 'TableFootCell' })\n\nconst props = defineProps({\n row: {\n type: Object as PropType<TableRowState>,\n default: () => ({}),\n },\n column: {\n type: Object as PropType<ColumnWithKey>,\n default: () => ({}),\n },\n colIndex: {\n type: Number,\n default: -1,\n },\n summary: {\n type: Object as PropType<SummaryWithKey>,\n default: () => ({}),\n },\n summaryIndex: {\n type: Number,\n default: -1,\n },\n fixed: {\n type: String as PropType<'left' | 'right' | undefined>,\n default: null,\n },\n above: {\n type: Boolean,\n default: false,\n },\n})\n\nconst { state, getters, mutations } = inject(TABLE_STORE)!\nconst tableActions = inject(TABLE_ACTIONS)!\n\nconst nh = useNameHelper('table')\nconst { isRtl } = useRtl()\n\nconst wrapper = ref<HTMLElement>()\n\nconst inLast = computed(() => {\n return props.column.index + cellSpan.value.colSpan >= state.columns.length\n})\nconst columns = computed(() => {\n return props.fixed === 'left'\n ? state.leftFixedColumns\n : props.fixed === 'right'\n ? state.rightFixedColumns\n : state.normalColumns\n})\n// We use 'a' and 'b' to distinguish above and below\nconst prefix = computed(() => (props.above ? 'af' : 'bf'))\nconst summaries = computed(() => (props.above ? state.aboveSummaries : state.belowSummaries))\nconst heights = computed(() => (props.above ? getters.topFixedHeights : getters.bottomFixedHeights))\nconst className = computed(() => {\n let customClass = null\n\n if (typeof state.footClass === 'function') {\n customClass = state.footClass({\n column: props.column,\n columnIndex: props.column.index,\n summary: props.summary,\n summaryIndex: props.summaryIndex,\n })\n } else {\n customClass = state.footClass\n }\n\n const typed = columnTypes.includes((props.column as TableTypeColumn).type)\n\n return [\n nh.be('foot-cell'),\n {\n [nh.bem('foot-cell', 'typed')]: typed,\n [nh.bem('foot-cell', 'center')]: typed || props.column.textAlign === 'center',\n [nh.bem('foot-cell', 'right')]: props.column.textAlign === 'right',\n [nh.bem('foot-cell', 'last')]: inLast.value,\n },\n props.column.class,\n customClass,\n ]\n})\nconst cellSpan = computed(() => {\n return (\n state.cellSpanMap\n .get(props.fixed || 'default')!\n .get(`${prefix.value}${props.summaryIndex},${props.column.index}`) || {\n colSpan: 1,\n rowSpan: 1,\n }\n )\n})\nconst customStyle = computed(() => {\n if (typeof state.footStyle === 'function') {\n return state.footStyle({\n column: props.column,\n columnIndex: props.column.index,\n summary: props.summary,\n summaryIndex: props.summaryIndex,\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 padLeft = columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\n const padRight = 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) {\n height = heights.value[props.summaryIndex + rowSpan] - heights.value[props.summaryIndex]\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.summaryIndex + rowSpan >= summaries.value.length ? 0 : undefined,\n transform: `translate3d(${isRtl.value ? '-' : ''}${\n (props.column.index ? padLeft : 0) + totalWidths[props.colIndex]\n }px, 0, 0)`,\n },\n ] as StyleValue\n})\nconst attrs = computed(() => {\n let customAttrs: Record<string, any>\n\n if (typeof state.footAttrs === 'function') {\n customAttrs = state.footAttrs({\n column: props.column,\n columnIndex: props.column.index,\n summary: props.summary,\n summaryIndex: props.summaryIndex,\n })\n } else {\n customAttrs = state.footAttrs\n }\n\n return { ...(props.column.attrs || {}), ...(customAttrs || {}) }\n})\nconst summaryData = computed(() => getters.summaryData.get(props.column.key))\n\nfunction buildEventPayload(event: Event) {\n return {\n column: props.column,\n columnIndex: props.column.index,\n summary: props.summary,\n summaryIndex: props.summaryIndex,\n event,\n }\n}\n\nfunction handleMouseEnter(event: MouseEvent) {\n tableActions?.emitFootEvent('Enter', buildEventPayload(event))\n}\n\nfunction handleMouseLeave(event: MouseEvent) {\n tableActions?.emitFootEvent('Leave', buildEventPayload(event))\n}\n\nfunction handleClick(event: MouseEvent) {\n tableActions?.emitFootEvent('Click', buildEventPayload(event))\n}\n\nfunction handleDblclick(event: MouseEvent) {\n tableActions?.emitFootEvent('Dblclick', buildEventPayload(event))\n}\n\nfunction handleContextmenu(event: MouseEvent) {\n tableActions?.emitFootEvent('Contextmenu', buildEventPayload(event))\n}\n\nfunction handleCellResize(entry: ResizeObserverEntry) {\n mutations.setCellHeight(\n props.row.key,\n props.column.key,\n (entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height) + state.borderWidth,\n )\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 <ResizeObserver\n v-if=\"isFunction(summary.renderer)\"\n :disabled=\"column.ellipsis ?? state.ellipsis\"\n :on-resize=\"handleCellResize\"\n >\n <span :class=\"nh.be('content')\">\n <Ellipsis\n v-if=\"column.ellipsis ?? state.ellipsis\"\n inherit\n :class=\"nh.be('ellipsis')\"\n :tooltip-theme=\"state.tooltipTheme\"\n :tip-max-width=\"state.tooltipWidth\"\n >\n <Renderer\n :renderer=\"summary.renderer\"\n :data=\"{\n column,\n index: column.index,\n rows: state.data,\n meta: summaryData\n }\"\n ></Renderer>\n </Ellipsis>\n <Renderer\n v-else\n :renderer=\"summary.renderer\"\n :data=\"{\n column,\n index: column.index,\n rows: state.data,\n meta: summaryData\n }\"\n ></Renderer>\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","isRtl","useRtl","wrapper","ref","inLast","computed","cellSpan","columns","prefix","summaries","heights","className","customClass","typed","columnTypes","customStyle","style","totalWidths","colSpan","rowSpan","padLeft","_a","padRight","getLast","width","height","attrs","customAttrs","summaryData","buildEventPayload","event","handleMouseEnter","handleMouseLeave","handleClick","handleDblclick","handleContextmenu","handleCellResize","entry","_b","_createElementBlock","_mergeProps","_normalizeClass","_unref","isFunction","_createBlock","ResizeObserver","_createElementVNode","Ellipsis","_createVNode","Renderer"],"mappings":"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"}