@dmsi/wedgekit-react 0.0.54 → 0.0.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2728,6 +2728,7 @@ function DataGrid({
2728
2728
  right: predeterminedRightPins
2729
2729
  }
2730
2730
  },
2731
+ enableColumnPinning: (predeterminedLeftPins == null ? void 0 : predeterminedLeftPins.length) > 0 || predeterminedRightPins.length > 0,
2731
2732
  onColumnOrderChange: setColumnOrder,
2732
2733
  onSortingChange: adaptTableStateSetter(setSortingState),
2733
2734
  onColumnFiltersChange: adaptTableStateSetter(setColumnFilterState),
@@ -3312,90 +3313,88 @@ function PinnedColumns(_a) {
3312
3313
  ]);
3313
3314
  var _a2;
3314
3315
  const headerGroups = pinDirection === "left" ? table.getLeftHeaderGroups() : table.getRightHeaderGroups();
3315
- return ((_a2 = headerGroups[0]) == null ? void 0 : _a2.headers.length) > 0 && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("table", { className: (0, import_clsx14.default)(
3316
- "grid min-h-min sticky z-20 bg-background-grouped-primary-normal",
3317
- pinDirection === "left" ? "left-0" : "right-0"
3318
- ), children: [
3319
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("thead", { className: "sticky top-0 z-20 grid", children: headerGroups.map((headerGroup) => {
3320
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("tr", { className: "flex w-full", children: headerGroup.headers.map((header) => {
3321
- var _a3, _b2, _c;
3322
- if (!header) {
3323
- return;
3324
- }
3325
- if (typeof header.column.columnDef.header === "string") {
3326
- const customHeaderWidth = (_a3 = header.column.columnDef.meta) == null ? void 0 : _a3.headerWidth;
3327
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
3328
- DataCellHeader,
3329
- {
3330
- locked: true,
3331
- header,
3332
- center: centerHeader,
3333
- width: customHeaderWidth,
3334
- className: (0, import_clsx14.default)(
3335
- header.column.getCanSort() ? "cursor-pointer" : "cursor-grab",
3336
- "group"
3337
- ),
3338
- children: [
3339
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Subheader, { tall: true, children: header.column.columnDef.header }),
3340
- getSortIcon(header.column.getIsSorted()),
3341
- !header.column.getIsSorted() && header.column.getCanSort() && getSortIcon(
3342
- header.column.getNextSortingOrder(),
3343
- true
3344
- ),
3345
- header.column.getSortIndex() !== -1 && table.getState().sorting.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Subheader, { tall: true, children: header.column.getSortIndex() + 1 }),
3346
- !((_b2 = header.column.columnDef.meta) == null ? void 0 : _b2.locked) && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
3347
- "div",
3348
- {
3349
- onDoubleClick: (e) => {
3350
- e.stopPropagation();
3351
- header.column.resetSize();
3352
- },
3353
- onMouseDown: (e) => {
3354
- e.stopPropagation();
3355
- header.getResizeHandler()(e);
3356
- },
3357
- onTouchStart: (e) => {
3358
- e.stopPropagation();
3359
- header.getResizeHandler()(e);
3360
- },
3361
- className: "absolute right-0 inset-y-0 w-px bg-black cursor-col-resize"
3362
- }
3363
- )
3364
- ]
3365
- },
3366
- header.id
3367
- );
3368
- }
3369
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react13.default.Fragment, { children: ((_c = header.column.columnDef.meta) == null ? void 0 : _c.checkbox) ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
3370
- DataGridCell,
3371
- {
3372
- type: "header",
3373
- component: "checkbox",
3374
- locked: true,
3375
- children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
3316
+ return ((_a2 = headerGroups[0]) == null ? void 0 : _a2.headers.length) > 0 && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
3317
+ "table",
3318
+ {
3319
+ className: (0, import_clsx14.default)(
3320
+ "grid min-h-min sticky z-20 bg-background-grouped-primary-normal",
3321
+ pinDirection === "left" ? "left-0" : "right-0"
3322
+ ),
3323
+ children: [
3324
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("thead", { className: "sticky top-0 z-20 grid", children: headerGroups.map((headerGroup) => {
3325
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("tr", { className: "flex w-full", children: headerGroup.headers.map((header) => {
3326
+ var _a3, _b2, _c;
3327
+ if (!header) {
3328
+ return;
3329
+ }
3330
+ if (typeof header.column.columnDef.header === "string") {
3331
+ const customHeaderWidth = (_a3 = header.column.columnDef.meta) == null ? void 0 : _a3.headerWidth;
3332
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
3333
+ DataCellHeader,
3334
+ {
3335
+ locked: true,
3336
+ header,
3337
+ center: centerHeader,
3338
+ width: customHeaderWidth,
3339
+ className: (0, import_clsx14.default)(
3340
+ header.column.getCanSort() ? "cursor-pointer" : "cursor-grab",
3341
+ "group"
3342
+ ),
3343
+ children: [
3344
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Subheader, { tall: true, children: header.column.columnDef.header }),
3345
+ getSortIcon(header.column.getIsSorted()),
3346
+ !header.column.getIsSorted() && header.column.getCanSort() && getSortIcon(
3347
+ header.column.getNextSortingOrder(),
3348
+ true
3349
+ ),
3350
+ header.column.getSortIndex() !== -1 && table.getState().sorting.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Subheader, { tall: true, children: header.column.getSortIndex() + 1 }),
3351
+ !((_b2 = header.column.columnDef.meta) == null ? void 0 : _b2.locked) && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
3352
+ "div",
3353
+ {
3354
+ onDoubleClick: (e) => {
3355
+ e.stopPropagation();
3356
+ header.column.resetSize();
3357
+ },
3358
+ onMouseDown: (e) => {
3359
+ e.stopPropagation();
3360
+ header.getResizeHandler()(e);
3361
+ },
3362
+ onTouchStart: (e) => {
3363
+ e.stopPropagation();
3364
+ header.getResizeHandler()(e);
3365
+ },
3366
+ className: "absolute right-0 inset-y-0 w-px bg-black cursor-col-resize"
3367
+ }
3368
+ )
3369
+ ]
3370
+ },
3371
+ header.id
3372
+ );
3373
+ }
3374
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react13.default.Fragment, { children: ((_c = header.column.columnDef.meta) == null ? void 0 : _c.checkbox) ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DataGridCell, { type: "header", component: "checkbox", locked: true, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
3376
3375
  Checkbox,
3377
3376
  {
3378
3377
  checked: allSelectedAcrossPages,
3379
3378
  indeterminate: someSelectedAcrossPages,
3380
3379
  onChange: toggleSelectAllAcrossPages
3381
3380
  }
3382
- )
3383
- }
3384
- ) : (0, import_react_table.flexRender)(
3385
- header.column.columnDef.header,
3386
- header.getContext()
3387
- ) }, header.id);
3388
- }) }, headerGroup.id);
3389
- }) }),
3390
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
3391
- TableBody,
3392
- __spreadProps(__spreadValues({}, props), {
3393
- table,
3394
- locked: true,
3395
- pinDirection
3396
- })
3397
- )
3398
- ] });
3381
+ ) }) : (0, import_react_table.flexRender)(
3382
+ header.column.columnDef.header,
3383
+ header.getContext()
3384
+ ) }, header.id);
3385
+ }) }, headerGroup.id);
3386
+ }) }),
3387
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
3388
+ TableBody,
3389
+ __spreadProps(__spreadValues({}, props), {
3390
+ table,
3391
+ locked: true,
3392
+ pinDirection
3393
+ })
3394
+ )
3395
+ ]
3396
+ }
3397
+ );
3399
3398
  }
3400
3399
  var LoadingCell = ({
3401
3400
  id,
@@ -198,6 +198,7 @@ function DataGrid({
198
198
  right: predeterminedRightPins
199
199
  }
200
200
  },
201
+ enableColumnPinning: (predeterminedLeftPins == null ? void 0 : predeterminedLeftPins.length) > 0 || predeterminedRightPins.length > 0,
201
202
  onColumnOrderChange: setColumnOrder,
202
203
  onSortingChange: adaptTableStateSetter(setSortingState),
203
204
  onColumnFiltersChange: adaptTableStateSetter(setColumnFilterState),
@@ -782,90 +783,88 @@ function PinnedColumns(_a) {
782
783
  ]);
783
784
  var _a2;
784
785
  const headerGroups = pinDirection === "left" ? table.getLeftHeaderGroups() : table.getRightHeaderGroups();
785
- return ((_a2 = headerGroups[0]) == null ? void 0 : _a2.headers.length) > 0 && /* @__PURE__ */ jsxs("table", { className: clsx(
786
- "grid min-h-min sticky z-20 bg-background-grouped-primary-normal",
787
- pinDirection === "left" ? "left-0" : "right-0"
788
- ), children: [
789
- /* @__PURE__ */ jsx("thead", { className: "sticky top-0 z-20 grid", children: headerGroups.map((headerGroup) => {
790
- return /* @__PURE__ */ jsx("tr", { className: "flex w-full", children: headerGroup.headers.map((header) => {
791
- var _a3, _b2, _c;
792
- if (!header) {
793
- return;
794
- }
795
- if (typeof header.column.columnDef.header === "string") {
796
- const customHeaderWidth = (_a3 = header.column.columnDef.meta) == null ? void 0 : _a3.headerWidth;
797
- return /* @__PURE__ */ jsxs(
798
- DataCellHeader,
799
- {
800
- locked: true,
801
- header,
802
- center: centerHeader,
803
- width: customHeaderWidth,
804
- className: clsx(
805
- header.column.getCanSort() ? "cursor-pointer" : "cursor-grab",
806
- "group"
807
- ),
808
- children: [
809
- /* @__PURE__ */ jsx(Subheader, { tall: true, children: header.column.columnDef.header }),
810
- getSortIcon(header.column.getIsSorted()),
811
- !header.column.getIsSorted() && header.column.getCanSort() && getSortIcon(
812
- header.column.getNextSortingOrder(),
813
- true
814
- ),
815
- header.column.getSortIndex() !== -1 && table.getState().sorting.length > 1 && /* @__PURE__ */ jsx(Subheader, { tall: true, children: header.column.getSortIndex() + 1 }),
816
- !((_b2 = header.column.columnDef.meta) == null ? void 0 : _b2.locked) && /* @__PURE__ */ jsx(
817
- "div",
818
- {
819
- onDoubleClick: (e) => {
820
- e.stopPropagation();
821
- header.column.resetSize();
822
- },
823
- onMouseDown: (e) => {
824
- e.stopPropagation();
825
- header.getResizeHandler()(e);
826
- },
827
- onTouchStart: (e) => {
828
- e.stopPropagation();
829
- header.getResizeHandler()(e);
830
- },
831
- className: "absolute right-0 inset-y-0 w-px bg-black cursor-col-resize"
832
- }
833
- )
834
- ]
835
- },
836
- header.id
837
- );
838
- }
839
- return /* @__PURE__ */ jsx(React.Fragment, { children: ((_c = header.column.columnDef.meta) == null ? void 0 : _c.checkbox) ? /* @__PURE__ */ jsx(
840
- DataGridCell,
841
- {
842
- type: "header",
843
- component: "checkbox",
844
- locked: true,
845
- children: /* @__PURE__ */ jsx(
786
+ return ((_a2 = headerGroups[0]) == null ? void 0 : _a2.headers.length) > 0 && /* @__PURE__ */ jsxs(
787
+ "table",
788
+ {
789
+ className: clsx(
790
+ "grid min-h-min sticky z-20 bg-background-grouped-primary-normal",
791
+ pinDirection === "left" ? "left-0" : "right-0"
792
+ ),
793
+ children: [
794
+ /* @__PURE__ */ jsx("thead", { className: "sticky top-0 z-20 grid", children: headerGroups.map((headerGroup) => {
795
+ return /* @__PURE__ */ jsx("tr", { className: "flex w-full", children: headerGroup.headers.map((header) => {
796
+ var _a3, _b2, _c;
797
+ if (!header) {
798
+ return;
799
+ }
800
+ if (typeof header.column.columnDef.header === "string") {
801
+ const customHeaderWidth = (_a3 = header.column.columnDef.meta) == null ? void 0 : _a3.headerWidth;
802
+ return /* @__PURE__ */ jsxs(
803
+ DataCellHeader,
804
+ {
805
+ locked: true,
806
+ header,
807
+ center: centerHeader,
808
+ width: customHeaderWidth,
809
+ className: clsx(
810
+ header.column.getCanSort() ? "cursor-pointer" : "cursor-grab",
811
+ "group"
812
+ ),
813
+ children: [
814
+ /* @__PURE__ */ jsx(Subheader, { tall: true, children: header.column.columnDef.header }),
815
+ getSortIcon(header.column.getIsSorted()),
816
+ !header.column.getIsSorted() && header.column.getCanSort() && getSortIcon(
817
+ header.column.getNextSortingOrder(),
818
+ true
819
+ ),
820
+ header.column.getSortIndex() !== -1 && table.getState().sorting.length > 1 && /* @__PURE__ */ jsx(Subheader, { tall: true, children: header.column.getSortIndex() + 1 }),
821
+ !((_b2 = header.column.columnDef.meta) == null ? void 0 : _b2.locked) && /* @__PURE__ */ jsx(
822
+ "div",
823
+ {
824
+ onDoubleClick: (e) => {
825
+ e.stopPropagation();
826
+ header.column.resetSize();
827
+ },
828
+ onMouseDown: (e) => {
829
+ e.stopPropagation();
830
+ header.getResizeHandler()(e);
831
+ },
832
+ onTouchStart: (e) => {
833
+ e.stopPropagation();
834
+ header.getResizeHandler()(e);
835
+ },
836
+ className: "absolute right-0 inset-y-0 w-px bg-black cursor-col-resize"
837
+ }
838
+ )
839
+ ]
840
+ },
841
+ header.id
842
+ );
843
+ }
844
+ return /* @__PURE__ */ jsx(React.Fragment, { children: ((_c = header.column.columnDef.meta) == null ? void 0 : _c.checkbox) ? /* @__PURE__ */ jsx(DataGridCell, { type: "header", component: "checkbox", locked: true, children: /* @__PURE__ */ jsx(
846
845
  Checkbox,
847
846
  {
848
847
  checked: allSelectedAcrossPages,
849
848
  indeterminate: someSelectedAcrossPages,
850
849
  onChange: toggleSelectAllAcrossPages
851
850
  }
852
- )
853
- }
854
- ) : flexRender(
855
- header.column.columnDef.header,
856
- header.getContext()
857
- ) }, header.id);
858
- }) }, headerGroup.id);
859
- }) }),
860
- /* @__PURE__ */ jsx(
861
- TableBody,
862
- __spreadProps(__spreadValues({}, props), {
863
- table,
864
- locked: true,
865
- pinDirection
866
- })
867
- )
868
- ] });
851
+ ) }) : flexRender(
852
+ header.column.columnDef.header,
853
+ header.getContext()
854
+ ) }, header.id);
855
+ }) }, headerGroup.id);
856
+ }) }),
857
+ /* @__PURE__ */ jsx(
858
+ TableBody,
859
+ __spreadProps(__spreadValues({}, props), {
860
+ table,
861
+ locked: true,
862
+ pinDirection
863
+ })
864
+ )
865
+ ]
866
+ }
867
+ );
869
868
  }
870
869
  var LoadingCell = ({
871
870
  id,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dmsi/wedgekit-react",
3
3
  "private": false,
4
- "version": "0.0.54",
4
+ "version": "0.0.56",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "build": "tsup",
@@ -147,7 +147,7 @@ export function DataGrid<T extends Record<string, unknown>>({
147
147
  centerHeader,
148
148
  enableColumnSelector,
149
149
  predeterminedLeftPins = [],
150
- predeterminedRightPins = []
150
+ predeterminedRightPins = [],
151
151
  }: DataGridProps<T>) {
152
152
  const [columnOrder, setColumnOrder] = useState<string[]>(() =>
153
153
  columns.map((c) => c.id!),
@@ -267,8 +267,10 @@ export function DataGrid<T extends Record<string, unknown>>({
267
267
  columnPinning: {
268
268
  left: predeterminedLeftPins,
269
269
  right: predeterminedRightPins,
270
- }
270
+ },
271
271
  },
272
+ enableColumnPinning:
273
+ predeterminedLeftPins?.length > 0 || predeterminedRightPins.length > 0,
272
274
  onColumnOrderChange: setColumnOrder,
273
275
  onSortingChange: adaptTableStateSetter(setSortingState),
274
276
  onColumnFiltersChange: adaptTableStateSetter(setColumnFilterState),
@@ -278,7 +280,7 @@ export function DataGrid<T extends Record<string, unknown>>({
278
280
  const cellValue = row?.getValue(columnId);
279
281
 
280
282
  if (!cellValue || !filterValue) {
281
- return true
283
+ return true;
282
284
  }
283
285
 
284
286
  return String(cellValue)
@@ -289,7 +291,7 @@ export function DataGrid<T extends Record<string, unknown>>({
289
291
  const cellValue = row?.getValue(columnId);
290
292
 
291
293
  if (!cellValue || !filterValue) {
292
- return true
294
+ return true;
293
295
  }
294
296
 
295
297
  return String(cellValue)
@@ -401,7 +403,7 @@ export function DataGrid<T extends Record<string, unknown>>({
401
403
  <div
402
404
  className={clsx(
403
405
  "flex overflow-auto scrollbar-thin relative contain-paint will-change-transform",
404
- empty ? "overflow-y-hidden" : "h-full"
406
+ empty ? "overflow-y-hidden" : "h-full",
405
407
  )}
406
408
  ref={containerRef}
407
409
  >
@@ -415,7 +417,7 @@ export function DataGrid<T extends Record<string, unknown>>({
415
417
  showFilterRow={showFilterRow}
416
418
  enableColumnSelector={enableColumnSelector}
417
419
  />
418
-
420
+
419
421
  <table className="flex-1 grid min-h-min">
420
422
  <thead className="sticky top-0 z-10 grid">
421
423
  {table.getCenterHeaderGroups().map((headerGroup) => (
@@ -550,7 +552,7 @@ export function DataGrid<T extends Record<string, unknown>>({
550
552
  enableColumnSelector={enableColumnSelector}
551
553
  />
552
554
  </table>
553
-
555
+
554
556
  <PinnedColumns
555
557
  pinDirection="right"
556
558
  table={table}
@@ -678,7 +680,7 @@ interface TableBodyProps<TData extends RowData> {
678
680
  showFilterRow: boolean;
679
681
  enableColumnSelector?: boolean;
680
682
  locked?: boolean;
681
- pinDirection?: 'left' | 'right';
683
+ pinDirection?: "left" | "right";
682
684
  }
683
685
 
684
686
  // Helpers
@@ -711,9 +713,9 @@ function TableBody<T>({
711
713
  const CellElement = locked ? DataGridCell : DragAlongCell;
712
714
 
713
715
  let headerGroups: HeaderGroup<T>[];
714
- if (pinDirection === 'left') {
716
+ if (pinDirection === "left") {
715
717
  headerGroups = table.getLeftHeaderGroups();
716
- } else if (pinDirection === 'right') {
718
+ } else if (pinDirection === "right") {
717
719
  headerGroups = table.getRightHeaderGroups();
718
720
  } else {
719
721
  headerGroups = table.getCenterHeaderGroups();
@@ -751,7 +753,10 @@ function TableBody<T>({
751
753
  noPadding
752
754
  key={header.id}
753
755
  cell={header}
754
- width={header.column.columnDef.meta?.headerWidth || (locked ? `${header.column.getSize()}px` : '')}
756
+ width={
757
+ header.column.columnDef.meta?.headerWidth ||
758
+ (locked ? `${header.column.getSize()}px` : "")
759
+ }
755
760
  >
756
761
  {header.column.getCanFilter() &&
757
762
  (header.column.columnDef.meta?.filterRowCell?.({
@@ -828,7 +833,7 @@ interface TableBodyRowProps<T> {
828
833
  showFilterRow: boolean;
829
834
  enableColumnSelector?: boolean;
830
835
  locked?: boolean;
831
- pinDirection?: 'left' | 'right';
836
+ pinDirection?: "left" | "right";
832
837
  }
833
838
 
834
839
  function TableBodyRow<T>({
@@ -847,9 +852,10 @@ function TableBodyRow<T>({
847
852
  let visibleCells: Cell<T, unknown>[];
848
853
 
849
854
  if (locked) {
850
- visibleCells = pinDirection === 'left'
851
- ? row.getLeftVisibleCells()
852
- : row.getRightVisibleCells();
855
+ visibleCells =
856
+ pinDirection === "left"
857
+ ? row.getLeftVisibleCells()
858
+ : row.getRightVisibleCells();
853
859
  } else {
854
860
  visibleCells = row.getCenterVisibleCells();
855
861
  }
@@ -862,7 +868,7 @@ function TableBodyRow<T>({
862
868
  row.original !== null &&
863
869
  "rowState" in row.original &&
864
870
  row.original.rowState === "error";
865
-
871
+
866
872
  const CellElement = locked ? DataGridCell : DragAlongCell;
867
873
 
868
874
  return (
@@ -891,7 +897,7 @@ function TableBodyRow<T>({
891
897
  ) : null}
892
898
 
893
899
  {columns.map((column) => {
894
- const cell = locked
900
+ const cell = locked
895
901
  ? (column as Cell<T, unknown>)
896
902
  : visibleCells[(column as VirtualItem).index];
897
903
 
@@ -928,14 +934,15 @@ function TableBodyRow<T>({
928
934
  <td style={{ display: "flex", width: virtualPaddingRight }} />
929
935
  ) : null}
930
936
 
931
- {enableColumnSelector && !locked && <td className="p-2" style={{ width: '48.8px' }}></td>}
937
+ {enableColumnSelector && !locked && (
938
+ <td className="p-2" style={{ width: "48.8px" }}></td>
939
+ )}
932
940
  </tr>
933
941
  );
934
942
  }
935
943
 
936
-
937
944
  interface PinnedColumnsProps<TData extends RowData> {
938
- pinDirection: 'left' | 'right';
945
+ pinDirection: "left" | "right";
939
946
  table: Table<TData>;
940
947
  tableContainerRef: React.RefObject<HTMLDivElement | null>;
941
948
  pagination: DataGridPagination | undefined;
@@ -957,109 +964,108 @@ function PinnedColumns<TData>({
957
964
  someSelectedAcrossPages,
958
965
  toggleSelectAllAcrossPages,
959
966
  ...props
960
- } : PinnedColumnsProps<TData>) {
961
- const headerGroups = pinDirection === "left"
962
- ? table.getLeftHeaderGroups()
963
- : table.getRightHeaderGroups();
964
-
965
- return headerGroups[0]?.headers.length > 0 && (
966
- <table className={clsx(
967
- "grid min-h-min sticky z-20 bg-background-grouped-primary-normal",
968
- pinDirection === "left" ? "left-0" : "right-0"
969
- )}>
967
+ }: PinnedColumnsProps<TData>) {
968
+ const headerGroups =
969
+ pinDirection === "left"
970
+ ? table.getLeftHeaderGroups()
971
+ : table.getRightHeaderGroups();
972
+
973
+ return (
974
+ headerGroups[0]?.headers.length > 0 && (
975
+ <table
976
+ className={clsx(
977
+ "grid min-h-min sticky z-20 bg-background-grouped-primary-normal",
978
+ pinDirection === "left" ? "left-0" : "right-0",
979
+ )}
980
+ >
970
981
  <thead className="sticky top-0 z-20 grid">
971
982
  {headerGroups.map((headerGroup) => {
972
983
  return (
973
984
  <tr key={headerGroup.id} className="flex w-full">
974
985
  {headerGroup.headers.map((header) => {
986
+ if (!header) {
987
+ return;
988
+ }
975
989
 
976
- if (!header) {
977
- return;
978
- }
979
-
980
- if (typeof header.column.columnDef.header === "string") {
981
- const customHeaderWidth =
982
- header.column.columnDef.meta?.headerWidth;
990
+ if (typeof header.column.columnDef.header === "string") {
991
+ const customHeaderWidth =
992
+ header.column.columnDef.meta?.headerWidth;
983
993
 
984
- return (
985
- <DataCellHeader
986
- locked
987
- key={header.id}
988
- header={header}
989
- center={centerHeader}
990
- width={customHeaderWidth}
991
- className={clsx(
992
- header.column.getCanSort()
993
- ? "cursor-pointer"
994
- : "cursor-grab",
995
- "group",
996
- )}
997
- >
998
- <Subheader tall>
999
- {header.column.columnDef.header}
1000
- </Subheader>
1001
-
1002
- {getSortIcon(header.column.getIsSorted())}
1003
-
1004
- {!header.column.getIsSorted() &&
1005
- header.column.getCanSort() &&
1006
- getSortIcon(
1007
- header.column.getNextSortingOrder(),
1008
- true,
994
+ return (
995
+ <DataCellHeader
996
+ locked
997
+ key={header.id}
998
+ header={header}
999
+ center={centerHeader}
1000
+ width={customHeaderWidth}
1001
+ className={clsx(
1002
+ header.column.getCanSort()
1003
+ ? "cursor-pointer"
1004
+ : "cursor-grab",
1005
+ "group",
1009
1006
  )}
1007
+ >
1008
+ <Subheader tall>
1009
+ {header.column.columnDef.header}
1010
+ </Subheader>
1010
1011
 
1011
- {header.column.getSortIndex() !== -1 &&
1012
- table.getState().sorting.length > 1 && (
1013
- <Subheader tall>
1014
- {header.column.getSortIndex() + 1}
1015
- </Subheader>
1016
- )}
1012
+ {getSortIcon(header.column.getIsSorted())}
1013
+
1014
+ {!header.column.getIsSorted() &&
1015
+ header.column.getCanSort() &&
1016
+ getSortIcon(
1017
+ header.column.getNextSortingOrder(),
1018
+ true,
1019
+ )}
1020
+
1021
+ {header.column.getSortIndex() !== -1 &&
1022
+ table.getState().sorting.length > 1 && (
1023
+ <Subheader tall>
1024
+ {header.column.getSortIndex() + 1}
1025
+ </Subheader>
1026
+ )}
1017
1027
 
1018
- {!header.column.columnDef.meta?.locked && (
1019
- <div
1020
- onDoubleClick={(e) => {
1021
- e.stopPropagation();
1022
- header.column.resetSize();
1023
- }}
1024
- onMouseDown={(e) => {
1025
- e.stopPropagation();
1026
- header.getResizeHandler()(e);
1027
- }}
1028
- onTouchStart={(e) => {
1029
- e.stopPropagation();
1030
- header.getResizeHandler()(e);
1031
- }}
1032
- className="absolute right-0 inset-y-0 w-px bg-black cursor-col-resize"
1033
- />
1028
+ {!header.column.columnDef.meta?.locked && (
1029
+ <div
1030
+ onDoubleClick={(e) => {
1031
+ e.stopPropagation();
1032
+ header.column.resetSize();
1033
+ }}
1034
+ onMouseDown={(e) => {
1035
+ e.stopPropagation();
1036
+ header.getResizeHandler()(e);
1037
+ }}
1038
+ onTouchStart={(e) => {
1039
+ e.stopPropagation();
1040
+ header.getResizeHandler()(e);
1041
+ }}
1042
+ className="absolute right-0 inset-y-0 w-px bg-black cursor-col-resize"
1043
+ />
1044
+ )}
1045
+ </DataCellHeader>
1046
+ );
1047
+ }
1048
+ return (
1049
+ <React.Fragment key={header.id}>
1050
+ {header.column.columnDef.meta?.checkbox ? (
1051
+ <DataGridCell type="header" component="checkbox" locked>
1052
+ <Checkbox
1053
+ checked={allSelectedAcrossPages}
1054
+ indeterminate={someSelectedAcrossPages}
1055
+ onChange={toggleSelectAllAcrossPages}
1056
+ />
1057
+ </DataGridCell>
1058
+ ) : (
1059
+ flexRender(
1060
+ header.column.columnDef.header,
1061
+ header.getContext(),
1062
+ )
1034
1063
  )}
1035
- </DataCellHeader>
1064
+ </React.Fragment>
1036
1065
  );
1037
- }
1038
- return (
1039
- <React.Fragment key={header.id}>
1040
- {header.column.columnDef.meta?.checkbox ? (
1041
- <DataGridCell
1042
- type="header"
1043
- component="checkbox"
1044
- locked
1045
- >
1046
- <Checkbox
1047
- checked={allSelectedAcrossPages}
1048
- indeterminate={someSelectedAcrossPages}
1049
- onChange={toggleSelectAllAcrossPages}
1050
- />
1051
- </DataGridCell>
1052
- ) : (
1053
- flexRender(
1054
- header.column.columnDef.header,
1055
- header.getContext(),
1056
- )
1057
- )}
1058
- </React.Fragment>
1059
- );
1060
1066
  })}
1061
1067
  </tr>
1062
- )
1068
+ );
1063
1069
  })}
1064
1070
  </thead>
1065
1071
 
@@ -1071,6 +1077,7 @@ function PinnedColumns<TData>({
1071
1077
  />
1072
1078
  </table>
1073
1079
  )
1080
+ );
1074
1081
  }
1075
1082
 
1076
1083
  const LoadingCell = <T extends RowData>({