{"version":3,"file":"index.mjs","sources":["../../../../../../../packages/components/table/src/table-header/index.ts"],"sourcesContent":["// @ts-nocheck\r\nimport {\r\n  defineComponent,\r\n  getCurrentInstance,\r\n  h,\r\n  inject,\r\n  nextTick,\r\n  onMounted,\r\n  ref,\r\n} from 'vue'\r\nimport SgCheckbox from '@sgui-plus/components/checkbox'\r\nimport { useNamespace } from '@sgui-plus/hooks'\r\nimport FilterPanel from '../filter-panel.vue'\r\nimport useLayoutObserver from '../layout-observer'\r\nimport { TABLE_INJECTION_KEY } from '../tokens'\r\nimport useEvent from './event-helper'\r\nimport useStyle from './style.helper'\r\nimport useUtils from './utils-helper'\r\nimport type { ComponentInternalInstance, PropType, Ref } from 'vue'\r\nimport type { DefaultRow, Sort } from '../table/defaults'\r\nimport type { Store } from '../store'\r\nexport interface TableHeader extends ComponentInternalInstance {\r\n  state: {\r\n    onColumnsChange\r\n    onScrollableChange\r\n  }\r\n  filterPanels: Ref<unknown>\r\n}\r\nexport interface TableHeaderProps<T> {\r\n  fixed: string\r\n  store: Store<T>\r\n  border: boolean\r\n  defaultSort: Sort\r\n}\r\n\r\nexport default defineComponent({\r\n  name: 'SgTableHeader',\r\n  components: {\r\n    SgCheckbox,\r\n  },\r\n  props: {\r\n    fixed: {\r\n      type: String,\r\n      default: '',\r\n    },\r\n    store: {\r\n      required: true,\r\n      type: Object as PropType<TableHeaderProps<DefaultRow>['store']>,\r\n    },\r\n    border: Boolean,\r\n    defaultSort: {\r\n      type: Object as PropType<TableHeaderProps<DefaultRow>['defaultSort']>,\r\n      default: () => {\r\n        return {\r\n          prop: '',\r\n          order: '',\r\n        }\r\n      },\r\n    },\r\n  },\r\n  setup(props, { emit }) {\r\n    const instance = getCurrentInstance() as TableHeader\r\n    const parent = inject(TABLE_INJECTION_KEY)\r\n    const ns = useNamespace('table')\r\n    const filterPanels = ref({})\r\n    const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent!)\r\n    onMounted(async () => {\r\n      // Need double await, because udpateColumns is executed after nextTick for now\r\n      await nextTick()\r\n      await nextTick()\r\n      const { prop, order } = props.defaultSort\r\n      parent?.store.commit('sort', { prop, order, init: true })\r\n    })\r\n    const {\r\n      handleHeaderClick,\r\n      handleHeaderContextMenu,\r\n      handleMouseDown,\r\n      handleMouseMove,\r\n      handleMouseOut,\r\n      handleSortClick,\r\n      handleFilterClick,\r\n    } = useEvent(props as TableHeaderProps<unknown>, emit)\r\n    const {\r\n      getHeaderRowStyle,\r\n      getHeaderRowClass,\r\n      getHeaderCellStyle,\r\n      getHeaderCellClass,\r\n    } = useStyle(props as TableHeaderProps<unknown>)\r\n    const { isGroup, toggleAllSelection, columnRows } = useUtils(\r\n      props as TableHeaderProps<unknown>\r\n    )\r\n\r\n    instance.state = {\r\n      onColumnsChange,\r\n      onScrollableChange,\r\n    }\r\n    instance.filterPanels = filterPanels\r\n\r\n    return {\r\n      ns,\r\n      filterPanels,\r\n      onColumnsChange,\r\n      onScrollableChange,\r\n      columnRows,\r\n      getHeaderRowClass,\r\n      getHeaderRowStyle,\r\n      getHeaderCellClass,\r\n      getHeaderCellStyle,\r\n      handleHeaderClick,\r\n      handleHeaderContextMenu,\r\n      handleMouseDown,\r\n      handleMouseMove,\r\n      handleMouseOut,\r\n      handleSortClick,\r\n      handleFilterClick,\r\n      isGroup,\r\n      toggleAllSelection,\r\n    }\r\n  },\r\n  render() {\r\n    const {\r\n      ns,\r\n      isGroup,\r\n      columnRows,\r\n      getHeaderCellStyle,\r\n      getHeaderCellClass,\r\n      getHeaderRowClass,\r\n      getHeaderRowStyle,\r\n      handleHeaderClick,\r\n      handleHeaderContextMenu,\r\n      handleMouseDown,\r\n      handleMouseMove,\r\n      handleSortClick,\r\n      handleMouseOut,\r\n      store,\r\n      $parent,\r\n    } = this\r\n    let rowSpan = 1\r\n    return h(\r\n      'thead',\r\n      {\r\n        class: { [ns.is('group')]: isGroup },\r\n      },\r\n      columnRows.map((subColumns, rowIndex) =>\r\n        h(\r\n          'tr',\r\n          {\r\n            class: getHeaderRowClass(rowIndex),\r\n            key: rowIndex,\r\n            style: getHeaderRowStyle(rowIndex),\r\n          },\r\n          subColumns.map((column, cellIndex) => {\r\n            if (column.rowSpan > rowSpan) {\r\n              rowSpan = column.rowSpan\r\n            }\r\n            return h(\r\n              'th',\r\n              {\r\n                class: getHeaderCellClass(\r\n                  rowIndex,\r\n                  cellIndex,\r\n                  subColumns,\r\n                  column\r\n                ),\r\n                colspan: column.colSpan,\r\n                key: `${column.id}-thead`,\r\n                rowspan: column.rowSpan,\r\n                style: getHeaderCellStyle(\r\n                  rowIndex,\r\n                  cellIndex,\r\n                  subColumns,\r\n                  column\r\n                ),\r\n                onClick: ($event) => handleHeaderClick($event, column),\r\n                onContextmenu: ($event) =>\r\n                  handleHeaderContextMenu($event, column),\r\n                onMousedown: ($event) => handleMouseDown($event, column),\r\n                onMousemove: ($event) => handleMouseMove($event, column),\r\n                onMouseout: handleMouseOut,\r\n              },\r\n              [\r\n                h(\r\n                  'div',\r\n                  {\r\n                    class: [\r\n                      'cell',\r\n                      column.filteredValue && column.filteredValue.length > 0\r\n                        ? 'highlight'\r\n                        : '',\r\n                    ],\r\n                  },\r\n                  [\r\n                    column.renderHeader\r\n                      ? column.renderHeader({\r\n                          column,\r\n                          $index: cellIndex,\r\n                          store,\r\n                          _self: $parent,\r\n                        })\r\n                      : column.label,\r\n                    column.sortable &&\r\n                      h(\r\n                        'span',\r\n                        {\r\n                          onClick: ($event) => handleSortClick($event, column),\r\n                          class: 'caret-wrapper',\r\n                        },\r\n                        [\r\n                          h('i', {\r\n                            onClick: ($event) =>\r\n                              handleSortClick($event, column, 'ascending'),\r\n                            class: 'sort-caret ascending',\r\n                          }),\r\n                          h('i', {\r\n                            onClick: ($event) =>\r\n                              handleSortClick($event, column, 'descending'),\r\n                            class: 'sort-caret descending',\r\n                          }),\r\n                        ]\r\n                      ),\r\n                    column.filterable &&\r\n                      h(FilterPanel, {\r\n                        store,\r\n                        placement: column.filterPlacement || 'bottom-start',\r\n                        column,\r\n                        upDataColumn: (key, value) => {\r\n                          column[key] = value\r\n                        },\r\n                      }),\r\n                  ]\r\n                ),\r\n              ]\r\n            )\r\n          })\r\n        )\r\n      )\r\n    )\r\n  },\r\n})\r\n"],"names":[],"mappings":"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"}