vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 31.6 kB
Source Map (JSON)
{"version":3,"file":"table-head-cell.vue2.cjs","sources":["../../../components/table/table-head-cell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Checkbox } from '@/components/checkbox'\nimport { Ellipsis } from '@/components/ellipsis'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\nimport { Tooltip } from '@/components/tooltip'\n\nimport { computed, inject, ref, toRef } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport TableIcon from './table-icon.vue'\nimport { useMoving, useRtl } from '@vexip-ui/hooks'\nimport { getLast, isFunction, nextFrameOnce } from '@vexip-ui/utils'\nimport { TABLE_ACTIONS, TABLE_HEAD_PREFIX, TABLE_STORE, columnTypes } from './symbol'\n\nimport type { PropType, StyleValue } from 'vue'\nimport type { MovingState } from '@vexip-ui/hooks'\nimport type {\n ColumnWithKey,\n ParsedFilterOptions,\n ParsedTableSorterOptions,\n TableRowState,\n TableSelectionColumn,\n TableTypeColumn,\n} from './symbol'\n\ndefineOptions({ name: 'TableHeadCell' })\n\nconst props = defineProps({\n column: {\n type: Object as PropType<ColumnWithKey>,\n default: () => ({}),\n },\n index: {\n type: Number,\n default: -1,\n },\n row: {\n type: Object as PropType<TableRowState>,\n default: () => ({}),\n },\n rowIndex: {\n type: Number,\n default: 0,\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 locale = toRef(state, 'locale')\nconst icons = useIcons()\nconst { isRtl } = useRtl()\n\nconst filterVisible = ref(false)\nconst resizable = toRef(state, 'colResizable')\nconst resizing = computed(() => state.colResizing)\n\nconst wrapper = ref<HTMLElement>()\n\nconst isGroup = computed(() => mutations.isGroupColumn(props.column))\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.get(props.fixed || 'default')!.get(`h${props.rowIndex},${props.index}`) || {\n colSpan: 1,\n rowSpan: 1,\n }\n )\n})\nconst inLast = computed(() => {\n return isGroup.value\n ? props.column.last\n : props.column.index + cellSpan.value.colSpan >= state.columns.length\n})\n\nconst minWidth = 10\n\nlet currentWidth = 0\n\nfunction processColResize(payload: MovingState, lazy = false) {\n const width = Math.max(currentWidth + (payload.isRtl ? -1 : 1) * payload.deltaX, minWidth)\n\n !lazy &&\n mutations.handleColumnResize(\n state.columns\n .slice(props.column.index, props.column.index + cellSpan.value.colSpan)\n .map(column => column.key),\n width,\n )\n\n return width\n}\n\nconst { target: resizer } = useMoving({\n capture: false,\n onStart: (payload, event) => {\n if (!resizable.value || resizing.value || isGroup.value) return false\n\n const table = tableActions.getTableElement()\n\n if (!table || !wrapper.value) return false\n\n payload.xStart = payload.clientX - table.getBoundingClientRect().left\n payload.isRtl = isRtl.value\n currentWidth = wrapper.value.getBoundingClientRect().width\n\n mutations.setColumnResizing(true)\n mutations.setResizeLeft(payload.xStart)\n tableActions.emitColResize('Start', {\n ...buildEventPayload(event),\n width: currentWidth,\n })\n },\n onMove: (payload, event) => {\n payload.xEnd = Math.max(payload.xStart - currentWidth + minWidth, payload.xEnd)\n\n mutations.setResizeLeft(payload.xEnd)\n tableActions.emitColResize('Move', {\n ...buildEventPayload(event),\n width: processColResize(payload, state.colResizable !== 'responsive'),\n })\n },\n onEnd: (payload, event) => {\n mutations.setColumnResizing(false)\n tableActions.emitColResize('End', {\n ...buildEventPayload(event),\n width: processColResize(payload),\n })\n },\n})\n\nconst typed = computed(() => columnTypes.includes((props.column as TableTypeColumn).type))\nconst className = computed(() => {\n let customClass = null\n\n if (typeof state.headClass === 'function') {\n customClass = state.headClass({\n column: props.column,\n index: props.column.colIndex,\n rowIndex: props.rowIndex,\n })\n } else {\n customClass = state.headClass\n }\n\n return [\n nh.be('head-cell'),\n {\n [nh.bem('head-cell', 'group')]: isGroup.value,\n [nh.bem('head-cell', 'typed')]: typed.value,\n [nh.bem('head-cell', 'center')]: typed.value || props.column.textAlign === 'center',\n [nh.bem('head-cell', 'right')]: props.column.textAlign === 'right',\n [nh.bem('head-cell', 'last')]: inLast.value,\n },\n props.column.class,\n customClass,\n ]\n})\nconst customStyle = computed(() => {\n if (typeof state.headStyle === 'function') {\n return state.headStyle({\n column: props.column,\n index: props.column.colIndex,\n rowIndex: props.rowIndex,\n })\n }\n\n return state.headStyle\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.index + colSpan] - totalWidths[props.index]\n\n let height: number | undefined\n\n if (rowSpan > 1) {\n height = 0\n\n for (let i = 0; i < rowSpan; ++i) {\n height += state.rowMap.get(`${TABLE_HEAD_PREFIX}${props.rowIndex + i}`)?.height ?? 0\n }\n }\n\n return [\n props.column.style || '',\n customStyle.value,\n {\n display: !colSpan ? '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.index + colSpan >= totalWidths.length - 1\n ? 0\n : undefined,\n transform: `translate3d(${isRtl.value ? '-' : ''}${\n (props.column.index ? padLeft : 0) + totalWidths[props.index]\n }px, 0, 0)`,\n },\n ] as StyleValue\n})\nconst attrs = computed(() => {\n let customAttrs: Record<string, any>\n\n if (typeof state.headAttrs === 'function') {\n customAttrs = state.headAttrs({\n column: props.column,\n index: props.column.colIndex,\n rowIndex: props.rowIndex,\n })\n } else {\n customAttrs = state.headAttrs\n }\n\n return { ...(props.column.attrs || {}), ...(customAttrs || {}) }\n})\nconst sorter = computed(() => {\n return state.sorters.get(props.column.key) || ({} as ParsedTableSorterOptions)\n})\nconst filter = computed(() => {\n return state.filters.get(props.column.key) || ({} as ParsedFilterOptions)\n})\nconst hasFilterActive = computed(() => {\n const options = filter.value.options ?? []\n\n for (let i = 0, len = options.length; i < len; ++i) {\n if (options[i].active) {\n return true\n }\n }\n\n return false\n})\nconst checkboxDisabled = computed(() => {\n if (!isSelection(props.column)) {\n return false\n }\n\n const records = Object.values(getters.disableCheckRows)\n\n return (\n getters.processedData.length === records.length &&\n !Object.values(getters.disableCheckRows).includes(false)\n )\n})\n\nconst refreshXScroll = () => nextFrameOnce(tableActions.refreshXScroll)\n\nfunction isSelection(column: unknown): column is TableSelectionColumn {\n return !isGroup.value && (column as TableTypeColumn).type === 'selection'\n}\n\nfunction buildEventPayload(event: Event) {\n return {\n column: props.column,\n index: props.column.colIndex,\n event,\n }\n}\n\nfunction handleMouseEnter(event: MouseEvent) {\n tableActions?.emitHeadEvent('Enter', buildEventPayload(event))\n}\n\nfunction handleMouseLeave(event: MouseEvent) {\n tableActions?.emitHeadEvent('Leave', buildEventPayload(event))\n}\n\nfunction handleClick(event: MouseEvent) {\n tableActions?.emitHeadEvent('Click', buildEventPayload(event))\n}\n\nfunction handleDblclick(event: MouseEvent) {\n tableActions?.emitHeadEvent('Dblclick', buildEventPayload(event))\n}\n\nfunction handleContextmenu(event: MouseEvent) {\n tableActions?.emitHeadEvent('Contextmenu', buildEventPayload(event))\n}\n\nfunction handleSortAsc() {\n const key = props.column.key\n const type = sorter.value.type === 'asc' ? null : 'asc'\n\n mutations.handleSort(key, type)\n tableActions.emitRowSort()\n}\n\nfunction handleSortDesc() {\n const key = props.column.key\n const type = sorter.value.type === 'desc' ? null : 'desc'\n\n mutations.handleSort(key, type)\n tableActions.emitRowSort()\n}\n\nfunction handleFilter(value: ParsedFilterOptions['active']) {\n mutations.handleFilter(props.column.key, value)\n}\n\nfunction handleFilterItemSelect(value: string | number, active: boolean) {\n mutations.toggleFilterItemActive({\n key: props.column.key,\n value,\n active,\n disableOthers: true,\n })\n handleFilter(value)\n filterVisible.value = false\n tableActions.emitRowFilter()\n}\n\nfunction handleFilterCheck(value: string | number, checked: boolean) {\n mutations.toggleFilterItemActive({\n key: props.column.key,\n value,\n active: checked,\n })\n}\n\nfunction handleFilterMultiple() {\n const options = filter.value.options ?? []\n const activeValues = []\n\n for (let i = 0, len = options.length; i < len; ++i) {\n const option = options[i]\n\n if (option.active) {\n activeValues.push(option.value)\n }\n }\n\n handleFilter(activeValues)\n filterVisible.value = false\n tableActions.emitRowFilter()\n}\n\nfunction handleResetFilter() {\n filterVisible.value = false\n handleFilter(null)\n mutations.toggleFilterItemActive({\n key: props.column.key,\n value: null,\n disableOthers: true,\n })\n tableActions.emitRowFilter()\n}\n\nfunction handleCheckAllRow() {\n mutations.handleCheckAll()\n tableActions.emitAllRowCheck(state.checkedAll, state.partial)\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=\"columnheader\"\n scope=\"col\"\n :colspan=\"cellSpan.colSpan !== 1 ? cellSpan.colSpan : undefined\"\n :rowspan=\"cellSpan.rowSpan !== 1 ? cellSpan.rowSpan : undefined\"\n :style=\"style\"\n :aria-sort=\"\n !isGroup && sorter.able\n ? sorter.type\n ? sorter.type === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none'\n : undefined\n \"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n @click=\"handleClick\"\n @dblclick=\"handleDblclick\"\n @contextmenu=\"handleContextmenu\"\n @transitionend=\"refreshXScroll\"\n >\n <div\n v-if=\"column.index === 0\"\n :class=\"nh.be('side-pad')\"\n role=\"none\"\n aria-hidden\n ></div>\n <template v-if=\"isSelection(column)\">\n <div v-if=\"!column.singleSelect\" :class=\"nh.be('content')\">\n <Checkbox\n inherit\n control\n :class=\"nh.be('selection')\"\n :checked=\"state.checkedAll\"\n :partial=\"state.partial\"\n :disabled=\"checkboxDisabled\"\n :size=\"column.selectionSize || 'default'\"\n @click.prevent=\"handleCheckAllRow\"\n ></Checkbox>\n </div>\n </template>\n <ResizeObserver\n v-else\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 v-if=\"isGroup && isFunction((column as any).renderer)\"\n :renderer=\"(column as any).renderer\"\n ></Renderer>\n <Renderer\n v-else-if=\"isFunction(column.headRenderer)\"\n :renderer=\"column.headRenderer\"\n :data=\"{ column, index }\"\n ></Renderer>\n <template v-else>\n {{ column.name }}\n </template>\n </Ellipsis>\n <template v-else>\n <Renderer\n v-if=\"isGroup && isFunction((column as any).renderer)\"\n :renderer=\"(column as any).renderer\"\n ></Renderer>\n <Renderer\n v-else-if=\"isFunction(column.headRenderer)\"\n :renderer=\"column.headRenderer\"\n :data=\"{ column, index }\"\n ></Renderer>\n <template v-else>\n {{ column.name }}\n </template>\n </template>\n <template v-if=\"!isGroup\">\n <div v-if=\"sorter.able\" :class=\"nh.be('sorter')\">\n <span\n :class=\"{\n [nh.bem('sorter', 'asc')]: true,\n [nh.bem('sorter', 'active')]: sorter.type === 'asc'\n }\"\n @click=\"handleSortAsc()\"\n >\n <TableIcon name=\"asc\" :origin=\"icons.angleUp\"></TableIcon>\n </span>\n <span\n :class=\"{\n [nh.bem('sorter', 'desc')]: true,\n [nh.bem('sorter', 'active')]: sorter.type === 'desc'\n }\"\n @click=\"handleSortDesc()\"\n >\n <TableIcon name=\"desc\" :origin=\"icons.angleDown\"></TableIcon>\n </span>\n </div>\n <template v-if=\"filter.able\">\n <Renderer\n v-if=\"isFunction(column.filterRenderer)\"\n :renderer=\"column.filterRenderer\"\n :data=\"{ column, index, filter, handleFilter }\"\n ></Renderer>\n <Tooltip\n v-else\n v-model:visible=\"filterVisible\"\n transfer\n placement=\"bottom\"\n trigger=\"click\"\n :class=\"{\n [nh.be('filter')]: true,\n [nh.bem('filter', 'visible')]: filterVisible,\n [nh.bem('filter', 'active')]: filter.active\n }\"\n :tip-class=\"{\n [nh.be('filter-wrapper')]: true,\n [nh.bs('vars')]: true,\n [nh.bem('filter-wrapper', 'multiple')]: filter.multiple\n }\"\n >\n <template #trigger>\n <div :class=\"nh.be('filter-trigger')\">\n <TableIcon name=\"filter\" :origin=\"icons.filter\"></TableIcon>\n </div>\n </template>\n <template v-if=\"filter.multiple\" #default>\n <div vertical :class=\"nh.be('filter-group')\">\n <Checkbox\n v-for=\"item in filter.options\"\n :key=\"item.value\"\n inherit\n :checked=\"item.active\"\n :label=\"item.label\"\n :value=\"item.value\"\n @change=\"handleFilterCheck(item.value, $event)\"\n ></Checkbox>\n </div>\n <div :class=\"nh.be('filter-actions')\">\n <Button\n inherit\n text\n size=\"small\"\n :disabled=\"!hasFilterActive\"\n @click=\"handleFilterMultiple()\"\n >\n {{ locale.filterConfirm }}\n </Button>\n <Button\n inherit\n text\n size=\"small\"\n @click=\"handleResetFilter\"\n >\n {{ locale.filterReset }}\n </Button>\n </div>\n </template>\n <template v-else #default>\n <div\n :class=\"{\n [nh.be('filter-item')]: true,\n [nh.bem('filter-item', 'active')]: !filter.active\n }\"\n @click=\"handleResetFilter\"\n >\n {{ locale.filterAll }}\n </div>\n <div\n v-for=\"item in filter.options\"\n :key=\"item.value\"\n :class=\"{\n [nh.be('filter-item')]: true,\n [nh.bem('filter-item', 'active')]: item.active\n }\"\n @click=\"handleFilterItemSelect(item.value, !item.active)\"\n >\n {{ item.label }}\n </div>\n </template>\n </Tooltip>\n </template>\n </template>\n </span>\n </ResizeObserver>\n <div\n v-if=\"!isGroup && resizable && !typed && !column.last\"\n ref=\"resizer\"\n :class=\"nh.be('resizer')\"\n ></div>\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":["minWidth","props","__props","state","getters","mutations","inject","TABLE_STORE","tableActions","TABLE_ACTIONS","nh","useNameHelper","locale","toRef","icons","useIcons","isRtl","useRtl","filterVisible","ref","resizable","resizing","computed","wrapper","isGroup","columns","cellSpan","inLast","currentWidth","processColResize","payload","lazy","width","column","resizer","useMoving","event","table","buildEventPayload","typed","columnTypes","className","customClass","customStyle","style","totalWidths","colSpan","rowSpan","noFixed","padLeft","_a","padRight","getLast","height","i","_c","TABLE_HEAD_PREFIX","attrs","customAttrs","sorter","filter","hasFilterActive","options","len","checkboxDisabled","isSelection","records","refreshXScroll","nextFrameOnce","handleMouseEnter","handleMouseLeave","handleClick","handleDblclick","handleContextmenu","handleSortAsc","key","type","handleSortDesc","handleFilter","value","handleFilterItemSelect","active","handleFilterCheck","checked","handleFilterMultiple","activeValues","option","handleResetFilter","handleCheckAllRow","handleCellResize","entry","_b","_createElementBlock","_mergeProps","_normalizeClass","_unref","_Fragment","_createVNode","Checkbox","_createBlock","ResizeObserver","_createElementVNode","Ellipsis","isFunction","Renderer","_createTextVNode","_toDisplayString","TableIcon","Tooltip","$event","_openBlock","_renderList","item","Button","_hoisted_2"],"mappings":"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"}