{"version":3,"file":"header-cell.mjs","sources":["../../../../../../../packages/components/table-v2/src/renderers/header-cell.tsx"],"sourcesContent":["import { HeaderCell, SortIcon } from '../components'\n// import ColumnResizer from '../table-column-resizer'\nimport { Alignment, SortOrder, oppositeOrderMap } from '../constants'\nimport { placeholderSign } from '../private'\nimport { componentToSlot, enforceUnit, tryCall } from '../utils'\n\nimport type { FunctionalComponent, UnwrapNestedRefs } from 'vue'\nimport type { UseNamespaceReturn } from '@bigin/hooks'\nimport type { TableV2HeaderRowCellRendererParams } from '../components'\nimport type { UseTableReturn } from '../use-table'\nimport type { TableV2Props } from '../table'\nimport type { TableV2HeaderCell } from '../header-cell'\n\nexport type HeaderCellRendererProps = TableV2HeaderRowCellRendererParams &\n  UnwrapNestedRefs<Pick<UseTableReturn, 'onColumnSorted'>> &\n  Pick<TableV2Props, 'sortBy' | 'sortState' | 'headerCellProps'> & {\n    ns: UseNamespaceReturn\n  }\n\nconst HeaderCellRenderer: FunctionalComponent<HeaderCellRendererProps> = (\n  props,\n  { slots }\n) => {\n  const { column, ns, style, onColumnSorted } = props\n\n  const cellStyle = enforceUnit(style)\n\n  if (column.placeholderSign === placeholderSign) {\n    return (\n      <div class={ns.em('header-row-cell', 'placeholder')} style={cellStyle} />\n    )\n  }\n\n  const { headerCellRenderer, headerClass, sortable } = column\n\n  /**\n   * render Cell children\n   */\n\n  const cellProps = {\n    ...props,\n    class: ns.e('header-cell-text'),\n  }\n\n  const cellRenderer =\n    componentToSlot<typeof cellProps>(headerCellRenderer) ||\n    slots.default ||\n    ((props: TableV2HeaderCell) => <HeaderCell {...props} />)\n\n  const Cell = cellRenderer(cellProps)\n\n  /**\n   * Render cell container and sort indicator\n   */\n  const { sortBy, sortState, headerCellProps } = props\n\n  let sorting: boolean, sortOrder: SortOrder\n  if (sortState) {\n    const order = sortState[column.key]\n    sorting = Boolean(oppositeOrderMap[order])\n    sortOrder = sorting ? order : SortOrder.ASC\n  } else {\n    sorting = column.key === sortBy.key\n    sortOrder = sorting ? sortBy.order : SortOrder.ASC\n  }\n\n  const cellKls = [\n    ns.e('header-cell'),\n    tryCall(headerClass, props, ''),\n    column.align === Alignment.CENTER && ns.is('align-center'),\n    column.align === Alignment.RIGHT && ns.is('align-right'),\n    sortable && ns.is('sortable'),\n  ]\n\n  const cellWrapperProps = {\n    ...tryCall(headerCellProps, props),\n    onClick: column.sortable ? onColumnSorted : undefined,\n    class: cellKls,\n    style: cellStyle,\n    ['data-key']: column.key,\n  }\n\n  // For now we don't deliver resizable column feature since it has some UX issue.\n  return (\n    <div {...cellWrapperProps}>\n      {Cell}\n\n      {sortable && (\n        <SortIcon\n          class={[ns.e('sort-icon'), sorting && ns.is('sorting')]}\n          sortOrder={sortOrder}\n        />\n      )}\n    </div>\n  )\n}\n\nexport default HeaderCellRenderer\nexport type HeaderCellSlotProps = HeaderCellRendererProps & { class: string }\n"],"names":["HeaderCellRenderer","props","slots","column","ns","style","onColumnSorted","cellStyle","enforceUnit","placeholderSign","_createVNode","em","headerCellRenderer","headerClass","sortable","cellProps","class","e","cellRenderer","componentToSlot","default","Cell","sortBy","sortState","headerCellProps","sorting","sortOrder","order","key","Boolean","oppositeOrderMap","SortOrder","ASC","cellKls","tryCall","align","Alignment","CENTER","is","RIGHT","cellWrapperProps","onClick","undefined"],"mappings":"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"}