fcb0b9cc4106dc5cec92d76fa07b9e73b32ba11f62a88ca560bde7fd46e438d9959ecf2c0da3247e6ca644a88e83b6660d325b846ce0af952ca58892e219b1 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { createVNode, renderSlot, mergeProps } from 'vue';
  2. import { oppositeOrderMap, SortOrder, Alignment } from '../constants.mjs';
  3. import { placeholderSign } from '../private.mjs';
  4. import { enforceUnit, componentToSlot, tryCall } from '../utils.mjs';
  5. import HeaderCell$1 from '../components/header-cell.mjs';
  6. import SortIcon from '../components/sort-icon.mjs';
  7. const HeaderCellRenderer = (props, {
  8. slots
  9. }) => {
  10. const {
  11. column,
  12. ns,
  13. style,
  14. onColumnSorted
  15. } = props;
  16. const cellStyle = enforceUnit(style);
  17. if (column.placeholderSign === placeholderSign) {
  18. return createVNode("div", {
  19. "class": ns.em("header-row-cell", "placeholder"),
  20. "style": cellStyle
  21. }, null);
  22. }
  23. const {
  24. headerCellRenderer,
  25. headerClass,
  26. sortable
  27. } = column;
  28. const cellProps = {
  29. ...props,
  30. class: ns.e("header-cell-text")
  31. };
  32. const columnCellRenderer = componentToSlot(headerCellRenderer);
  33. const Cell = columnCellRenderer ? columnCellRenderer(cellProps) : renderSlot(slots, "default", cellProps, () => [createVNode(HeaderCell$1, cellProps, null)]);
  34. const {
  35. sortBy,
  36. sortState,
  37. headerCellProps
  38. } = props;
  39. let sorting, sortOrder;
  40. if (sortState) {
  41. const order = sortState[column.key];
  42. sorting = Boolean(oppositeOrderMap[order]);
  43. sortOrder = sorting ? order : SortOrder.ASC;
  44. } else {
  45. sorting = column.key === sortBy.key;
  46. sortOrder = sorting ? sortBy.order : SortOrder.ASC;
  47. }
  48. const cellKls = [ns.e("header-cell"), tryCall(headerClass, props, ""), column.align === Alignment.CENTER && ns.is("align-center"), column.align === Alignment.RIGHT && ns.is("align-right"), sortable && ns.is("sortable")];
  49. const cellWrapperProps = {
  50. ...tryCall(headerCellProps, props),
  51. onClick: column.sortable ? onColumnSorted : void 0,
  52. class: cellKls,
  53. style: cellStyle,
  54. ["data-key"]: column.key
  55. };
  56. return createVNode("div", mergeProps(cellWrapperProps, {
  57. "role": "columnheader"
  58. }), [Cell, sortable && createVNode(SortIcon, {
  59. "class": [ns.e("sort-icon"), sorting && ns.is("sorting")],
  60. "sortOrder": sortOrder
  61. }, null)]);
  62. };
  63. var HeaderCell = HeaderCellRenderer;
  64. export { HeaderCell as default };
  65. //# sourceMappingURL=header-cell.mjs.map