{"version":3,"file":"index.mjs","sources":["../../../../../../../packages/components/table/src/table-header/index.ts"],"sourcesContent":["// @ts-nocheck\nimport {\n  defineComponent,\n  getCurrentInstance,\n  h,\n  inject,\n  nextTick,\n  onMounted,\n  ref,\n} from 'vue'\nimport BCheckbox from '@bigin/components/checkbox'\nimport { useGlobalConfig, useNamespace } from '@bigin/hooks'\nimport { BIcon } from '@bigin/components/icon'\nimport {\n  Sort as ISort,\n  SortDown as ISortDown,\n  SortUp as ISortUp,\n} from '@bigin/icons-vue'\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'\nimport type { ComponentInternalInstance, PropType, Ref } from 'vue'\nimport type { DefaultRow, Sort } 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: 'BTableHeader',\n  components: {\n    BCheckbox,\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 = inject(TABLE_INJECTION_KEY)\n    const ns = useNamespace('table')\n    const filterPanels = ref({})\n    const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent!)\n    onMounted(async () => {\n      // Need double await, because udpateColumns 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    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    instance.filterPanels = filterPanels\n\n    return {\n      ns,\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    }\n  },\n  render() {\n    const tableConfig = useGlobalConfig('table', {\n      sort: { ascending: 'ascending', descending: 'descending' },\n    })\n\n    const {\n      ns,\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    } = this\n    let rowSpan = 1\n    return h(\n      'thead',\n      {\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            return h(\n              'th',\n              {\n                class: 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: getHeaderCellStyle(\n                  rowIndex,\n                  cellIndex,\n                  subColumns,\n                  column\n                ),\n                onClick: ($event) => handleHeaderClick($event, column),\n                onContextmenu: ($event) =>\n                  handleHeaderContextMenu($event, column),\n                onMousedown: ($event) => handleMouseDown($event, column),\n                onMousemove: ($event) => 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                        'span',\n                        {\n                          class: 'caret-wrapper',\n                        },\n                        [\n                          ![\n                            tableConfig.value.sort.ascending,\n                            tableConfig.value.sort.descending,\n                          ].includes(column.order) &&\n                            h(\n                              BIcon,\n                              {\n                                onClick: ($event) =>\n                                  handleSortClick($event, column),\n                                class: 'sort-caret',\n                              },\n                              () => h(ISort)\n                            ),\n                          column.order === tableConfig.value.sort.descending &&\n                            h(\n                              BIcon,\n                              {\n                                onClick: ($event) =>\n                                  handleSortClick(\n                                    $event,\n                                    column,\n                                    tableConfig.value.sort.ascending\n                                  ),\n                                class: 'sort-caret ascending',\n                              },\n                              () => h(ISortUp)\n                            ),\n                          column.order === tableConfig.value.sort.ascending &&\n                            h(\n                              BIcon,\n                              {\n                                onClick: ($event) =>\n                                  handleSortClick(\n                                    $event,\n                                    column,\n                                    tableConfig.value.sort.descending\n                                  ),\n                                class: 'sort-caret descending',\n                              },\n                              () => h(ISortDown)\n                            ),\n                        ]\n                      ),\n                    column.filterable &&\n                      h(FilterPanel, {\n                        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"],"names":["ISort","ISortUp","ISortDown"],"mappings":"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"}