UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 10.6 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../../packages/components/table/src/table-header/index.ts"],"sourcesContent":["import {\n defineComponent,\n getCurrentInstance,\n computed,\n onMounted,\n nextTick,\n ref,\n h,\n} from 'vue'\nimport ElCheckbox from '@element-plus/components/checkbox'\nimport FilterPanel from '../filter-panel.vue'\nimport useLayoutObserver from '../layout-observer'\nimport { hColgroup } from '../h-helper'\nimport useEvent from './event-helper'\nimport useStyle from './style.helper'\nimport useUtils from './utils-helper'\n\nimport type { ComponentInternalInstance, Ref, PropType } from 'vue'\nimport type { DefaultRow, Sort, Table } from '../table/defaults'\nimport type { Store } from '../store'\nexport interface TableHeader extends ComponentInternalInstance {\n state: {\n onColumnsChange\n onScrollableChange\n }\n filterPanels: Ref<unknown>\n}\nexport interface TableHeaderProps<T> {\n fixed: string\n store: Store<T>\n border: boolean\n defaultSort: Sort\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<DefaultRow>['store']>,\n },\n border: Boolean,\n defaultSort: {\n type: Object as PropType<TableHeaderProps<DefaultRow>['defaultSort']>,\n default: () => {\n return {\n prop: '',\n order: '',\n }\n },\n },\n },\n setup(props, { emit }) {\n const instance = getCurrentInstance() as TableHeader\n const parent = instance.parent as Table<unknown>\n const storeData = parent.store.states\n const filterPanels = ref({})\n const { tableLayout, onColumnsChange, onScrollableChange } =\n useLayoutObserver(parent)\n const hasGutter = computed(() => {\n return !props.fixed && tableLayout.gutterWidth\n })\n onMounted(() => {\n nextTick(() => {\n const { prop, order } = props.defaultSort\n const init = true\n parent.store.commit('sort', { prop, order, init })\n })\n })\n const {\n handleHeaderClick,\n handleHeaderContextMenu,\n handleMouseDown,\n handleMouseMove,\n handleMouseOut,\n handleSortClick,\n handleFilterClick,\n } = useEvent(props as TableHeaderProps<unknown>, emit)\n const {\n getHeaderRowStyle,\n getHeaderRowClass,\n getHeaderCellStyle,\n getHeaderCellClass,\n } = useStyle(props as TableHeaderProps<unknown>)\n const { isGroup, toggleAllSelection, columnRows } = useUtils(\n props as TableHeaderProps<unknown>\n )\n\n instance.state = {\n onColumnsChange,\n onScrollableChange,\n }\n // eslint-disable-next-line\n instance.filterPanels = filterPanels\n\n return {\n columns: storeData.columns,\n filterPanels,\n hasGutter,\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 }\n },\n render() {\n return h(\n 'table',\n {\n border: '0',\n cellpadding: '0',\n cellspacing: '0',\n class: 'el-table__header',\n },\n [\n hColgroup(this.columns, this.hasGutter),\n h(\n 'thead',\n {\n class: { 'is-group': this.isGroup, 'has-gutter': this.hasGutter },\n },\n this.columnRows.map((subColumns, rowIndex) =>\n h(\n 'tr',\n {\n class: this.getHeaderRowClass(rowIndex),\n key: rowIndex,\n style: this.getHeaderRowStyle(rowIndex),\n },\n subColumns.map((column, cellIndex) =>\n h(\n 'th',\n {\n class: this.getHeaderCellClass(\n rowIndex,\n cellIndex,\n subColumns,\n column\n ),\n colspan: column.colSpan,\n key: `${column.id}-thead`,\n rowSpan: column.rowSpan,\n style: this.getHeaderCellStyle(\n rowIndex,\n cellIndex,\n subColumns,\n column\n ),\n onClick: ($event) => this.handleHeaderClick($event, column),\n onContextmenu: ($event) =>\n this.handleHeaderContextMenu($event, column),\n onMousedown: ($event) =>\n this.handleMouseDown($event, column),\n onMousemove: ($event) =>\n this.handleMouseMove($event, column),\n onMouseout: this.handleMouseOut,\n },\n [\n h(\n 'div',\n {\n class: [\n 'cell',\n column.filteredValue &&\n column.filteredValue.length > 0\n ? 'highlight'\n : '',\n column.labelClassName,\n ],\n },\n [\n column.renderHeader\n ? column.renderHeader({\n column,\n $index: cellIndex,\n store: this.store,\n _self: this.$parent,\n })\n : column.label,\n column.sortable &&\n h(\n 'span',\n {\n onClick: ($event) =>\n this.handleSortClick($event, column),\n class: 'caret-wrapper',\n },\n [\n h('i', {\n onClick: ($event) =>\n this.handleSortClick(\n $event,\n column,\n 'ascending'\n ),\n class: 'sort-caret ascending',\n }),\n h('i', {\n onClick: ($event) =>\n this.handleSortClick(\n $event,\n column,\n 'descending'\n ),\n class: 'sort-caret descending',\n }),\n ]\n ),\n column.filterable &&\n h(FilterPanel, {\n store: this.$parent.store,\n placement: column.filterPlacement || 'bottom-start',\n column,\n upDataColumn: (key, value) => {\n column[key] = value\n },\n }),\n ]\n ),\n ]\n )\n )\n )\n )\n ),\n ]\n )\n },\n})\n"],"names":["FilterPanel"],"mappings":"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"}