@extclp/vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 19.2 kB
Source Map (JSON)
{"version":3,"file":"table-row.vue2.mjs","sources":["../../../components/table/table-row.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { CollapseTransition } from '@/components/collapse-transition'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\n\r\nimport { computed, inject, nextTick, onMounted, reactive, ref, toRef, watchEffect } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { useSetTimeout } from '@vexip-ui/hooks'\r\nimport { isFunction } from '@vexip-ui/utils'\r\nimport { TABLE_ACTIONS, TABLE_STORE } from './symbol'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { TableRowState } from './symbol'\r\n\r\ndefineOptions({ name: 'TableRow' })\r\n\r\nconst props = defineProps({\r\n row: {\r\n type: Object as PropType<TableRowState>,\r\n default: () => ({}),\r\n },\r\n index: {\r\n type: Number,\r\n default: null,\r\n },\r\n isHead: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n isFoot: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n fixed: {\r\n type: String as PropType<'left' | 'right' | undefined>,\r\n default: null,\r\n },\r\n})\r\n\r\nconst { state, getters, mutations } = inject(TABLE_STORE)!\r\nconst tableAction = inject(TABLE_ACTIONS)!\r\n\r\nconst nh = useNameHelper('table')\r\n\r\nconst { timer } = useSetTimeout()\r\nconst dragging = ref(false)\r\nconst isDragOver = ref(false)\r\n\r\nconst wrapper = ref<HTMLElement>()\r\nconst rowEl = ref<HTMLElement>()\r\nconst expandEl = ref<HTMLElement>()\r\n\r\nconst instance = reactive({\r\n el: wrapper,\r\n row: toRef(props, 'row'),\r\n})\r\n\r\nconst rowKey = computed(() => props.row.key)\r\nconst rowType = computed(() => (props.isHead ? 'head' : props.isFoot ? 'foot' : undefined))\r\nconst className = computed(() => {\r\n let customClass = null\r\n\r\n if (!rowType.value) {\r\n if (typeof state.rowClass === 'function') {\r\n customClass = state.rowClass(props.row.data, props.index)\r\n } else {\r\n customClass = state.rowClass\r\n }\r\n }\r\n\r\n return [\r\n nh.be('row'),\r\n {\r\n [nh.bem('row', 'fixed')]: state.rowHeight && state.rowHeight > 0,\r\n [nh.bem('row', 'hover')]:\r\n !rowType.value && state.highlight && rowKey.value === state.hoveredRowKey,\r\n [nh.bem('row', 'stripe')]: state.stripe && props.index % 2 === 1,\r\n [nh.bem('row', 'checked')]: props.row.checked,\r\n [nh.bem('row', 'dragging')]: dragging.value,\r\n [nh.bem('row', 'drag-over')]: isDragOver.value,\r\n },\r\n customClass,\r\n ]\r\n})\r\nconst maxHeight = computed(() =>\r\n Math.max(...Object.values(props.row.cellHeights || {}), state.rowMinHeight),\r\n)\r\nconst style = computed(() => {\r\n let customStyle: any = ''\r\n\r\n if (!rowType.value) {\r\n if (typeof state.rowStyle === 'function') {\r\n customStyle = state.rowStyle(props.row.data, props.index)\r\n } else {\r\n customStyle = state.rowStyle\r\n }\r\n }\r\n\r\n return [\r\n customStyle,\r\n {\r\n height: !state.rowHeight ? `${maxHeight.value}px` : `${state.rowHeight}px`,\r\n minHeight: state.rowHeight ? undefined : `${state.rowMinHeight}px`,\r\n border: '0',\r\n },\r\n ]\r\n})\r\nconst attrs = computed(() => {\r\n if (!rowType.value) {\r\n if (typeof state.rowAttrs === 'function') {\r\n return state.rowAttrs(props.row.data, props.index)\r\n } else {\r\n return state.rowAttrs\r\n }\r\n }\r\n\r\n return null\r\n})\r\nconst groupStyle = computed(() => {\r\n if (props.isHead || props.isFoot) return undefined\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\r\n state.heightTrigger\r\n\r\n const offset =\r\n state.heightBITree && !rowType.value && props.index ? state.heightBITree.sum(props.index) : 0\r\n\r\n return {\r\n transform: offset ? `translate3d(0, ${offset}px, 0)` : undefined,\r\n }\r\n})\r\nconst cellDraggable = computed(() => {\r\n return getters.hasDragColumn && !getters.disableDragRows.has(rowKey.value)\r\n})\r\nconst rowDraggable = computed(() => !rowType.value && state.rowDraggable)\r\nconst draggable = computed(() => !rowType.value && (state.rowDraggable || cellDraggable.value))\r\nconst expandRenderer = computed(() => state.expandRenderer)\r\nconst hasExpand = computed(() => {\r\n if (props.isHead || props.isFoot || !getters.expandColumn) return false\r\n if (state.rightFixedColumns.length) return props.fixed === 'right'\r\n if (state.leftFixedColumns.length) return props.fixed === 'left'\r\n\r\n return !!state.normalColumns.length && !props.fixed\r\n})\r\n\r\nfunction setExpandHeight() {\r\n let targetHeight: number\r\n\r\n if (props.row.expanded && expandEl.value) {\r\n targetHeight = expandEl.value.scrollHeight\r\n } else {\r\n targetHeight = 0\r\n }\r\n\r\n if (targetHeight !== props.row.expandHeight) {\r\n mutations.setRowProp(rowKey.value, 'expandHeight', targetHeight)\r\n updateTotalHeight(true)\r\n }\r\n}\r\n\r\nfunction updateTotalHeight(force = false) {\r\n if (state.heightBITree && getters.visibleKeys.has(rowKey.value) && (force || !props.fixed)) {\r\n const height = props.row.height + props.row.expandHeight\r\n const tree = state.heightBITree\r\n const prev = tree.get(props.index)\r\n\r\n if (height !== prev) {\r\n tree.add(props.index, height - prev)\r\n mutations.updateTotalHeight()\r\n mutations.triggerHeightChange()\r\n }\r\n }\r\n}\r\n\r\nfunction handleResize(entry: ResizeObserverEntry) {\r\n const height = entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height\r\n mutations.setRowProp(rowKey.value, 'height', height)\r\n !rowType.value && updateTotalHeight()\r\n}\r\n\r\nwatchEffect(() => {\r\n if (props.isHead || props.isFoot) return\r\n\r\n mutations.setRowProp(rowKey.value, 'height', state.rowHeight || maxHeight.value)\r\n !rowType.value && updateTotalHeight()\r\n nextTick(() => {\r\n hasExpand.value && setExpandHeight()\r\n })\r\n})\r\n\r\nonMounted(() => {\r\n nextTick(() => {\r\n mutations.setRowProp(rowKey.value, 'height', state.rowHeight || maxHeight.value)\r\n nextTick(() => {\r\n hasExpand.value && setExpandHeight()\r\n })\r\n })\r\n})\r\n\r\nfunction buildEventPayload(event: Event) {\r\n return {\r\n row: props.row.data,\r\n key: props.row.key,\r\n index: props.index,\r\n event,\r\n }\r\n}\r\n\r\nfunction handleMouseEnter(event: MouseEvent) {\r\n mutations.setHoveredRowKey(rowKey.value)\r\n\r\n if (!rowType.value && tableAction) {\r\n tableAction.emitRowEvent('Enter', buildEventPayload(event))\r\n }\r\n}\r\n\r\nfunction handleMouseLeave(event: MouseEvent) {\r\n mutations.setHoveredRowKey(null)\r\n\r\n if (!rowType.value && tableAction) {\r\n tableAction.emitRowEvent('Leave', buildEventPayload(event))\r\n }\r\n}\r\n\r\nfunction handleClick(event: MouseEvent) {\r\n if (!rowType.value && tableAction) {\r\n tableAction.emitRowEvent('Click', buildEventPayload(event))\r\n }\r\n}\r\n\r\nfunction handleDblclick(event: MouseEvent) {\r\n if (!rowType.value && tableAction) {\r\n tableAction.emitRowEvent('Dblclick', buildEventPayload(event))\r\n }\r\n}\r\n\r\nfunction handleContextmenu(event: MouseEvent) {\r\n if (!rowType.value && tableAction) {\r\n tableAction.emitRowEvent('Contextmenu', buildEventPayload(event))\r\n }\r\n}\r\n\r\nfunction shouldProcessDrag() {\r\n return draggable.value && state.dragging\r\n}\r\n\r\nfunction handleDragStart(event: DragEvent) {\r\n if (!draggable.value && !cellDraggable.value) return\r\n\r\n dragging.value = true\r\n tableAction.handleRowDragStart(instance, event)\r\n}\r\n\r\nfunction handleDragOver(event: DragEvent) {\r\n if (!shouldProcessDrag() || (cellDraggable.value && !getters.rowDragging)) return\r\n\r\n clearTimeout(timer.drag)\r\n event.stopPropagation()\r\n event.preventDefault()\r\n\r\n isDragOver.value = true\r\n\r\n tableAction.handleRowDragOver(instance, event)\r\n}\r\n\r\nfunction handleDrop(event: DragEvent) {\r\n if (!shouldProcessDrag()) return\r\n\r\n clearTimeout(timer.drag)\r\n event.stopPropagation()\r\n event.preventDefault()\r\n\r\n isDragOver.value = false\r\n\r\n tableAction.handleRowDrop(instance, event)\r\n nextTick(() => mutations.handleDrag(rowKey.value, false))\r\n}\r\n\r\nfunction handleDragEnd(event: DragEvent) {\r\n if (!shouldProcessDrag()) return\r\n\r\n event.stopPropagation()\r\n dragging.value = true\r\n\r\n tableAction.handleRowDragEnd(event)\r\n nextTick(() => mutations.handleDrag(rowKey.value, false))\r\n}\r\n\r\nfunction handleDragLeave(event: DragEvent) {\r\n if (!shouldProcessDrag()) return\r\n\r\n clearTimeout(timer.drag)\r\n event.preventDefault()\r\n\r\n timer.drag = setTimeout(() => {\r\n isDragOver.value = false\r\n }, 100)\r\n}\r\n\r\nfunction afterExpand() {\r\n mutations.setRowProp(rowKey.value, 'expandAnimate', false)\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"!row.hidden\"\r\n ref=\"wrapper\"\r\n :class=\"{\r\n [nh.be('group')]: true,\r\n [nh.bem('group', 'checked')]: row.checked,\r\n [nh.bem('group', 'last')]: row.last,\r\n }\"\r\n role=\"row\"\r\n :draggable=\"rowDraggable || row.dragging\"\r\n :style=\"groupStyle\"\r\n @mouseenter=\"handleMouseEnter\"\r\n @mouseleave=\"handleMouseLeave\"\r\n @click=\"handleClick\"\r\n @dblclick=\"handleDblclick\"\r\n @contextmenu=\"handleContextmenu\"\r\n @dragstart.stop=\"handleDragStart\"\r\n @dragover=\"handleDragOver\"\r\n @drop=\"handleDrop\"\r\n @dragend=\"handleDragEnd\"\r\n @dragleave=\"handleDragLeave\"\r\n >\r\n <ResizeObserver :on-resize=\"handleResize\">\r\n <div\r\n v-bind=\"attrs\"\r\n ref=\"rowEl\"\r\n :class=\"className\"\r\n :style=\"style\"\r\n >\r\n <slot></slot>\r\n </div>\r\n </ResizeObserver>\r\n <CollapseTransition\r\n v-if=\"hasExpand\"\r\n :disabled=\"!row.expandAnimate\"\r\n @enter=\"setExpandHeight\"\r\n @leave=\"setExpandHeight\"\r\n @after-enter=\"afterExpand\"\r\n @after-leave=\"afterExpand\"\r\n >\r\n <div\r\n v-if=\"row.expanded\"\r\n ref=\"expandEl\"\r\n :class=\"[nh.be('expanded'), fixed === 'right' && nh.bem('expanded', 'fixed')]\"\r\n >\r\n <ResizeObserver :disabled=\"row.expandAnimate\" :on-resize=\"setExpandHeight\">\r\n <div :class=\"nh.be('expanded-wrapper')\">\r\n <Renderer\r\n v-if=\"isFunction(getters.expandColumn!.renderer)\"\r\n :renderer=\"getters.expandColumn!.renderer\"\r\n :data=\"{ leftFixed: 0, rightFixed: 0, row: row.data, rowIndex: index }\"\r\n ></Renderer>\r\n <Renderer\r\n v-else-if=\"isFunction(expandRenderer)\"\r\n :renderer=\"expandRenderer\"\r\n :data=\"{ leftFixed: 0, rightFixed: 0, row: row.data, rowIndex: index }\"\r\n ></Renderer>\r\n </div>\r\n </ResizeObserver>\r\n </div>\r\n </CollapseTransition>\r\n </div>\r\n</template>\r\n"],"names":["props","__props","state","getters","mutations","inject","TABLE_STORE","tableAction","TABLE_ACTIONS","nh","useNameHelper","timer","useSetTimeout","dragging","ref","isDragOver","wrapper","rowEl","expandEl","instance","reactive","toRef","rowKey","computed","rowType","className","customClass","maxHeight","style","customStyle","attrs","groupStyle","offset","cellDraggable","rowDraggable","draggable","expandRenderer","hasExpand","setExpandHeight","targetHeight","updateTotalHeight","force","height","tree","prev","handleResize","entry","_b","_a","watchEffect","nextTick","onMounted","buildEventPayload","event","handleMouseEnter","handleMouseLeave","handleClick","handleDblclick","handleContextmenu","shouldProcessDrag","handleDragStart","handleDragOver","handleDrop","handleDragEnd","handleDragLeave","afterExpand","_createElementBlock","_normalizeClass","_unref","_createVNode","ResizeObserver","_createElementVNode","_mergeProps","_renderSlot","_ctx","_createBlock","CollapseTransition","isFunction","Renderer"],"mappings":"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"}