UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 16.5 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../../packages/components/table/src/table-header/index.ts"],"sourcesContent":["import {\n defineComponent,\n getCurrentInstance,\n h,\n inject,\n nextTick,\n onBeforeUnmount,\n onMounted,\n reactive,\n ref,\n watch,\n} from 'vue'\nimport ElCheckbox from '@element-plus/components/checkbox'\nimport { useNamespace } from '@element-plus/hooks'\nimport { useLocale } from '@element-plus/hooks/use-locale'\nimport FilterPanel from '../filter-panel.vue'\nimport useLayoutObserver from '../layout-observer'\nimport { TABLE_INJECTION_KEY } from '../tokens'\nimport useEvent from './event-helper'\nimport useStyle from './style.helper'\nimport useUtils from './utils-helper'\n\nimport type TableLayout from '../table-layout'\nimport type { ComponentInternalInstance, PropType, Ref } from 'vue'\nimport type { DefaultRow, Sort } from '../table/defaults'\nimport type { Store } from '../store'\n\nexport interface TableHeader extends ComponentInternalInstance {\n state: {\n onColumnsChange: (layout: TableLayout<any>) => void\n onScrollableChange: (layout: TableLayout<any>) => void\n }\n filterPanels: Ref<DefaultRow>\n}\nexport interface TableHeaderProps<T extends DefaultRow> {\n fixed: string\n store: Store<T>\n border: boolean\n defaultSort: Sort\n allowDragLastColumn: boolean\n}\n\nexport default defineComponent({\n name: 'ElTableHeader',\n components: {\n ElCheckbox,\n },\n props: {\n fixed: {\n type: String,\n default: '',\n },\n store: {\n required: true,\n type: Object as PropType<TableHeaderProps<any>['store']>,\n },\n border: Boolean,\n defaultSort: {\n type: Object as PropType<TableHeaderProps<any>['defaultSort']>,\n default: () => {\n return {\n prop: '',\n order: '',\n }\n },\n },\n appendFilterPanelTo: {\n type: String,\n },\n allowDragLastColumn: {\n type: Boolean,\n },\n },\n setup(props, { emit }) {\n const instance = getCurrentInstance() as TableHeader\n const parent = inject(TABLE_INJECTION_KEY)\n const ns = useNamespace('table')\n const filterPanels = ref({})\n const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent!)\n\n const isTableLayoutAuto = parent?.props.tableLayout === 'auto'\n const saveIndexSelection = reactive(new Map())\n const theadRef = ref()\n\n let delayId: ReturnType<typeof setTimeout> | undefined\n const updateFixedColumnStyle = () => {\n delayId = setTimeout(() => {\n if (saveIndexSelection.size > 0) {\n saveIndexSelection.forEach((column, key) => {\n const el = theadRef.value.querySelector(\n `.${key.replace(/\\s/g, '.')}`\n )\n if (el) {\n const width = el.getBoundingClientRect().width\n column.width = width || column.width\n }\n })\n saveIndexSelection.clear()\n }\n })\n }\n\n watch(saveIndexSelection, updateFixedColumnStyle)\n onBeforeUnmount(() => {\n if (delayId) {\n clearTimeout(delayId)\n delayId = undefined\n }\n })\n\n onMounted(async () => {\n // Need double await, because updateColumns is executed after nextTick for now\n await nextTick()\n await nextTick()\n const { prop, order } = props.defaultSort\n parent?.store.commit('sort', { prop, order, init: true })\n\n updateFixedColumnStyle()\n })\n\n const {\n handleHeaderClick,\n handleHeaderContextMenu,\n handleMouseDown,\n handleMouseMove,\n handleMouseOut,\n handleSortClick,\n handleFilterClick,\n } = useEvent(props as TableHeaderProps<any>, emit)\n const {\n getHeaderRowStyle,\n getHeaderRowClass,\n getHeaderCellStyle,\n getHeaderCellClass,\n } = useStyle(props as TableHeaderProps<any>)\n const { isGroup, toggleAllSelection, columnRows } = useUtils(\n props as TableHeaderProps<any>\n )\n\n const { t } = useLocale()\n\n instance.state = {\n onColumnsChange,\n onScrollableChange,\n }\n instance.filterPanels = filterPanels\n\n return {\n ns,\n t,\n filterPanels,\n onColumnsChange,\n onScrollableChange,\n columnRows,\n getHeaderRowClass,\n getHeaderRowStyle,\n getHeaderCellClass,\n getHeaderCellStyle,\n handleHeaderClick,\n handleHeaderContextMenu,\n handleMouseDown,\n handleMouseMove,\n handleMouseOut,\n handleSortClick,\n handleFilterClick,\n isGroup,\n toggleAllSelection,\n saveIndexSelection,\n isTableLayoutAuto,\n theadRef,\n updateFixedColumnStyle,\n }\n },\n render() {\n const {\n ns,\n t,\n isGroup,\n columnRows,\n getHeaderCellStyle,\n getHeaderCellClass,\n getHeaderRowClass,\n getHeaderRowStyle,\n handleHeaderClick,\n handleHeaderContextMenu,\n handleMouseDown,\n handleMouseMove,\n handleSortClick,\n handleMouseOut,\n store,\n $parent,\n saveIndexSelection,\n isTableLayoutAuto,\n } = this\n let rowSpan = 1\n return h(\n 'thead',\n {\n ref: 'theadRef',\n class: ns.is('group', isGroup),\n },\n columnRows.map((subColumns, rowIndex) =>\n h(\n 'tr',\n {\n class: getHeaderRowClass(rowIndex),\n key: rowIndex,\n style: getHeaderRowStyle(rowIndex),\n },\n subColumns.map((column, cellIndex) => {\n if (column.rowSpan > rowSpan) {\n rowSpan = column.rowSpan\n }\n const _class = getHeaderCellClass(\n rowIndex,\n cellIndex,\n subColumns,\n column\n )\n if (isTableLayoutAuto && column.fixed) {\n saveIndexSelection.set(_class, column)\n }\n return h(\n 'th',\n {\n class: _class,\n colspan: column.colSpan,\n key: `${column.id}-thead`,\n rowspan: column.rowSpan,\n scope: column.colSpan > 1 ? 'colgroup' : 'col',\n ariaSort: column.sortable ? column.order : undefined,\n style: getHeaderCellStyle(\n rowIndex,\n cellIndex,\n subColumns,\n column\n ),\n onClick: ($event: Event) => {\n if (\n ($event.currentTarget as Element)?.classList.contains(\n 'noclick'\n )\n ) {\n return\n }\n handleHeaderClick($event, column)\n },\n onContextmenu: ($event: MouseEvent) =>\n handleHeaderContextMenu($event, column),\n onMousedown: ($event: MouseEvent) =>\n handleMouseDown($event, column),\n onMousemove: ($event: MouseEvent) =>\n handleMouseMove($event, column),\n onMouseout: handleMouseOut,\n },\n [\n h(\n 'div',\n {\n class: [\n 'cell',\n column.filteredValue && column.filteredValue.length > 0\n ? 'highlight'\n : '',\n ],\n },\n [\n column.renderHeader\n ? column.renderHeader({\n column,\n $index: cellIndex,\n store,\n _self: $parent,\n })\n : column.label,\n column.sortable &&\n h(\n 'button',\n {\n type: 'button',\n class: 'caret-wrapper',\n 'aria-label': t('el.table.sortLabel', {\n column: column.label || '',\n }),\n onClick: ($event: Event) =>\n handleSortClick($event, column),\n },\n [\n h('i', {\n onClick: ($event: Event) =>\n handleSortClick($event, column, 'ascending'),\n class: 'sort-caret ascending',\n }),\n h('i', {\n onClick: ($event: Event) =>\n handleSortClick($event, column, 'descending'),\n class: 'sort-caret descending',\n }),\n ]\n ),\n column.filterable &&\n h(\n FilterPanel as any,\n {\n store,\n placement: column.filterPlacement || 'bottom-start',\n appendTo: ($parent as any)?.appendFilterPanelTo,\n column,\n upDataColumn: (key: never, value: never) => {\n column[key] = value\n },\n },\n {\n 'filter-icon': () =>\n column.renderFilterIcon\n ? column.renderFilterIcon({\n filterOpened: column.filterOpened,\n })\n : null,\n }\n ),\n ]\n ),\n ]\n )\n })\n )\n )\n )\n },\n})\n"],"names":[],"mappings":"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"}