material-react-table 0.8.0-alpha.1 → 0.8.1

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.
Files changed (51) hide show
  1. package/README.md +1 -1
  2. package/dist/MaterialReactTable.d.ts +8 -2
  3. package/dist/head/MRT_DraggableTableHeadCell.d.ts +8 -0
  4. package/dist/head/MRT_TableHeadCell.d.ts +5 -1
  5. package/dist/head/MRT_TableHeadCellFilterContainer.d.ts +8 -0
  6. package/dist/head/MRT_TableHeadCellFilterLabel.d.ts +8 -0
  7. package/dist/head/MRT_TableHeadCellGrabHandle.d.ts +9 -0
  8. package/dist/head/MRT_TableHeadCellResizeHandle.d.ts +8 -0
  9. package/dist/head/MRT_TableHeadCellSortLabel.d.ts +8 -0
  10. package/dist/icons.d.ts +1 -0
  11. package/dist/inputs/MRT_FilterRangeFields.d.ts +2 -2
  12. package/dist/localization.d.ts +1 -0
  13. package/dist/material-react-table.cjs.development.js +514 -313
  14. package/dist/material-react-table.cjs.development.js.map +1 -1
  15. package/dist/material-react-table.cjs.production.min.js +1 -1
  16. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  17. package/dist/material-react-table.esm.js +516 -315
  18. package/dist/material-react-table.esm.js.map +1 -1
  19. package/dist/toolbar/MRT_ToolbarAlertBanner.d.ts +1 -0
  20. package/dist/toolbar/MRT_ToolbarTop.d.ts +2 -0
  21. package/dist/utils.d.ts +1 -1
  22. package/package.json +13 -13
  23. package/src/MaterialReactTable.tsx +13 -0
  24. package/src/body/MRT_TableBodyCell.tsx +10 -7
  25. package/src/buttons/MRT_CopyButton.tsx +3 -2
  26. package/src/buttons/MRT_ExpandAllButton.tsx +26 -18
  27. package/src/buttons/MRT_ExpandButton.tsx +27 -21
  28. package/src/footer/MRT_TableFooterCell.tsx +11 -8
  29. package/src/footer/MRT_TableFooterRow.tsx +3 -2
  30. package/src/head/MRT_DraggableTableHeadCell.tsx +52 -0
  31. package/src/head/MRT_TableHeadCell.tsx +75 -156
  32. package/src/head/MRT_TableHeadCellFilterContainer.tsx +32 -0
  33. package/src/head/MRT_TableHeadCellFilterLabel.tsx +82 -0
  34. package/src/head/MRT_TableHeadCellGrabHandle.tsx +52 -0
  35. package/src/head/MRT_TableHeadCellResizeHandle.tsx +52 -0
  36. package/src/head/MRT_TableHeadCellSortLabel.tsx +45 -0
  37. package/src/head/MRT_TableHeadRow.tsx +17 -8
  38. package/src/icons.ts +3 -0
  39. package/src/inputs/MRT_EditCellTextField.tsx +1 -1
  40. package/src/inputs/MRT_FilterRangeFields.tsx +1 -3
  41. package/src/inputs/MRT_FilterTextField.tsx +4 -1
  42. package/src/inputs/MRT_SelectCheckbox.tsx +1 -2
  43. package/src/localization.ts +2 -0
  44. package/src/menus/MRT_ColumnActionMenu.tsx +6 -6
  45. package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +1 -1
  46. package/src/table/MRT_TablePaper.tsx +26 -22
  47. package/src/table/MRT_TableRoot.tsx +9 -9
  48. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +11 -27
  49. package/src/toolbar/MRT_ToolbarBottom.tsx +23 -5
  50. package/src/toolbar/MRT_ToolbarInternalButtons.tsx +30 -29
  51. package/src/toolbar/MRT_ToolbarTop.tsx +21 -20
@@ -1,6 +1,7 @@
1
1
  import { FC } from 'react';
2
2
  import { MRT_TableInstance } from '..';
3
3
  interface Props {
4
+ stackAlertBanner?: boolean;
4
5
  tableInstance: MRT_TableInstance;
5
6
  }
6
7
  export declare const MRT_ToolbarAlertBanner: FC<Props>;
@@ -7,6 +7,8 @@ export declare const commonToolbarStyles: ({ theme }: {
7
7
  backgroundColor: string;
8
8
  backgroundImage: string;
9
9
  display: string;
10
+ minHeight: string;
11
+ overflow: string;
10
12
  p: string;
11
13
  transition: string;
12
14
  width: string;
package/dist/utils.d.ts CHANGED
@@ -7,6 +7,6 @@ export declare const createGroup: <D extends Record<string, any> = {}>(table: Ta
7
7
  export declare const createDataColumn: <D extends Record<string, any> = {}>(table: Table<D>, column: MRT_ColumnDef<D>, currentFilterFns: {
8
8
  [key: string]: MRT_FilterFn<{}>;
9
9
  }) => ColumnDef<D>;
10
- export declare const createDisplayColumn: <D extends Record<string, any> = {}>(table: Table<D>, column: Pick<MRT_ColumnDef<D>, "footer" | "columns" | "filterFn" | "id" | "accessorKey" | "accessorFn" | "cell" | "meta" | "enableHiding" | "enablePinning" | "enableColumnFilter" | "enableGlobalFilter" | "sortingFn" | "sortDescFirst" | "enableSorting" | "enableMultiSort" | "invertSorting" | "sortUndefined" | "aggregationFn" | "aggregatedCell" | "enableGrouping" | "enableResizing" | "size" | "minSize" | "maxSize" | "Edit" | "Filter" | "Footer" | "Header" | "Cell" | "enableClickToCopy" | "enableColumnActions" | "enableEditing" | "enabledColumnFilterOptions" | "filterSelectOptions" | "muiTableBodyCellCopyButtonProps" | "muiTableBodyCellEditTextFieldProps" | "muiTableBodyCellProps" | "muiTableFooterCellProps" | "muiTableHeadCellColumnActionsButtonProps" | "muiTableHeadCellFilterTextFieldProps" | "muiTableHeadCellProps" | "onCellEditBlur" | "onCellEditChange" | "onColumnFilterValueChange"> & {
10
+ export declare const createDisplayColumn: <D extends Record<string, any> = {}>(table: Table<D>, column: Pick<MRT_ColumnDef<D>, "footer" | "columns" | "filterFn" | "id" | "accessorKey" | "accessorFn" | "cell" | "meta" | "enableHiding" | "enablePinning" | "enableColumnFilter" | "enableGlobalFilter" | "sortingFn" | "sortDescFirst" | "enableSorting" | "enableMultiSort" | "invertSorting" | "sortUndefined" | "aggregationFn" | "aggregatedCell" | "enableGrouping" | "enableResizing" | "size" | "minSize" | "maxSize" | "Edit" | "Filter" | "Footer" | "Header" | "Cell" | "enableClickToCopy" | "enableColumnActions" | "enableColumnOrdering" | "enableEditing" | "enabledColumnFilterOptions" | "filterSelectOptions" | "muiTableBodyCellCopyButtonProps" | "muiTableBodyCellEditTextFieldProps" | "muiTableBodyCellProps" | "muiTableFooterCellProps" | "muiTableHeadCellColumnActionsButtonProps" | "muiTableHeadCellFilterTextFieldProps" | "muiTableHeadCellProps" | "onCellEditBlur" | "onCellEditChange" | "onColumnFilterValueChange"> & {
11
11
  header?: string | undefined;
12
12
  }) => ColumnDef<D>;
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
- "version": "0.8.0-alpha.1",
2
+ "version": "0.8.1",
3
3
  "license": "MIT",
4
4
  "name": "material-react-table",
5
- "description": "A fully featured Material UI implementation of react-table, inspired by material-table and the MUI X DataGrid, written from the ground up in TypeScript.",
5
+ "description": "A fully featured Material UI implementation of Tanstack react-table, inspired by material-table and the MUI X DataGrid, written from the ground up in TypeScript.",
6
6
  "author": "Kevin Vandy",
7
7
  "keywords": [
8
8
  "react-table",
9
9
  "material-ui",
10
- "material-table"
10
+ "material-table",
11
+ "tanstack table"
11
12
  ],
12
13
  "repository": {
13
14
  "type": "git",
@@ -47,29 +48,26 @@
47
48
  "size-limit": [
48
49
  {
49
50
  "path": "dist/material-react-table.cjs.production.min.js",
50
- "limit": "40 KB"
51
+ "limit": "50 KB"
51
52
  },
52
53
  {
53
54
  "path": "dist/material-react-table.esm.js",
54
- "limit": "40 KB"
55
+ "limit": "50 KB"
55
56
  }
56
57
  ],
57
58
  "devDependencies": {
58
59
  "@babel/core": "^7.18.2",
59
60
  "@emotion/react": "^11.9.0",
60
61
  "@emotion/styled": "^11.8.1",
61
- "@etchteam/storybook-addon-status": "^4.2.1",
62
- "@faker-js/faker": "^7.1.0",
62
+ "@faker-js/faker": "^6.3.1",
63
63
  "@mui/icons-material": "^5.8.0",
64
64
  "@mui/material": "^5.8.1",
65
65
  "@size-limit/preset-small-lib": "^7.0.8",
66
66
  "@storybook/addon-a11y": "^6.5.5",
67
67
  "@storybook/addon-actions": "^6.5.5",
68
- "@storybook/addon-console": "^1.2.3",
69
68
  "@storybook/addon-essentials": "^6.5.5",
70
69
  "@storybook/addon-info": "^5.3.21",
71
70
  "@storybook/addon-links": "^6.5.5",
72
- "@storybook/addon-storysource": "^6.5.5",
73
71
  "@storybook/addons": "^6.5.5",
74
72
  "@storybook/react": "^6.5.5",
75
73
  "@types/react": "^18.0.9",
@@ -79,11 +77,10 @@
79
77
  "eslint-plugin-react-hooks": "^4.5.0",
80
78
  "husky": "^8.0.1",
81
79
  "prettier": "^2.6.2",
82
- "react": "^18.1.0",
83
- "react-dom": "^18.1.0",
80
+ "react": "^17.0.2",
81
+ "react-dom": "^17.0.2",
84
82
  "react-is": "^18.1.0",
85
83
  "size-limit": "^7.0.8",
86
- "storybook-addon-paddings": "^4.3.0",
87
84
  "storybook-dark-mode": "^1.1.0",
88
85
  "tsdx": "^0.14.1",
89
86
  "tslib": "^2.4.0",
@@ -98,6 +95,9 @@
98
95
  },
99
96
  "dependencies": {
100
97
  "@tanstack/match-sorter-utils": "^8.0.0-alpha.83",
101
- "@tanstack/react-table": "^8.0.0-alpha.87"
98
+ "@tanstack/react-table": "^8.0.0-alpha.89",
99
+ "react-dnd": "^16.0.1",
100
+ "react-dnd-html5-backend": "^16.0.1",
101
+ "react-dnd-scrolling": "^1.2.4"
102
102
  }
103
103
  }
@@ -80,6 +80,7 @@ export type MRT_TableInstance<D extends Record<string, any> = {}> = Omit<
80
80
  >,
81
81
  | 'getAllColumns'
82
82
  | 'getAllLeafColumns'
83
+ | 'getColumn'
83
84
  | 'getExpandedRowModel'
84
85
  | 'getPaginationRowModel'
85
86
  | 'getPrePaginationRowModel'
@@ -90,6 +91,7 @@ export type MRT_TableInstance<D extends Record<string, any> = {}> = Omit<
90
91
  > & {
91
92
  getAllColumns: () => MRT_Column<D>[];
92
93
  getAllLeafColumns: () => MRT_Column<D>[];
94
+ getColumn: (columnId: string) => MRT_Column<D>;
93
95
  getExpandedRowModel: () => MRT_RowModel<D>;
94
96
  getPaginationRowModel: () => MRT_RowModel<D>;
95
97
  getPrePaginationRowModel: () => MRT_RowModel<D>;
@@ -176,6 +178,7 @@ export type MRT_ColumnDef<D extends Record<string, any> = {}> = Omit<
176
178
  columns?: MRT_ColumnDef<D>[];
177
179
  enableClickToCopy?: boolean;
178
180
  enableColumnActions?: boolean;
181
+ enableColumnOrdering?: boolean;
179
182
  enableEditing?: boolean;
180
183
  enabledColumnFilterOptions?: (MRT_FILTER_OPTION | string)[];
181
184
  filterFn?: MRT_FilterFn;
@@ -280,6 +283,9 @@ export type MRT_Column<D extends Record<string, any> = {}> = Omit<
280
283
  > &
281
284
  MRT_ColumnDef<D> & {
282
285
  columns?: MRT_Column<D>[];
286
+ columnDef: MRT_ColumnDef<D>;
287
+ header: string;
288
+ footer: string;
283
289
  };
284
290
 
285
291
  export type MRT_Header<D extends Record<string, any> = {}> = Omit<
@@ -327,6 +333,7 @@ export type MaterialReactTableProps<D extends Record<string, any> = {}> =
327
333
  editingMode?: 'table' | 'row' | 'cell';
328
334
  enableClickToCopy?: boolean;
329
335
  enableColumnActions?: boolean;
336
+ enableColumnOrdering?: boolean;
330
337
  enableDensePaddingToggle?: boolean;
331
338
  enableEditing?: boolean;
332
339
  enableExpandAll?: boolean;
@@ -754,15 +761,18 @@ export type MaterialReactTableProps<D extends Record<string, any> = {}> =
754
761
  export default <D extends Record<string, any> = {}>({
755
762
  autoResetExpanded = false,
756
763
  columnResizeMode = 'onEnd',
764
+ defaultColumn = { minSize: 50, maxSize: 1000, size: 150 },
757
765
  editingMode = 'row',
758
766
  enableColumnActions = true,
759
767
  enableColumnFilters = true,
768
+ enableColumnOrdering = false,
760
769
  enableColumnResizing = false,
761
770
  enableDensePaddingToggle = true,
762
771
  enableExpandAll = true,
763
772
  enableFilters = true,
764
773
  enableFullScreenToggle = true,
765
774
  enableGlobalFilter = true,
775
+ enableGrouping = false,
766
776
  enableHiding = true,
767
777
  enableMultiRowSelection = true,
768
778
  enablePagination = true,
@@ -787,15 +797,18 @@ export default <D extends Record<string, any> = {}>({
787
797
  <MRT_TableRoot
788
798
  autoResetExpanded={autoResetExpanded}
789
799
  columnResizeMode={columnResizeMode}
800
+ defaultColumn={defaultColumn}
790
801
  editingMode={editingMode}
791
802
  enableColumnActions={enableColumnActions}
792
803
  enableColumnFilters={enableColumnFilters}
804
+ enableColumnOrdering={enableColumnOrdering}
793
805
  enableColumnResizing={enableColumnResizing}
794
806
  enableDensePaddingToggle={enableDensePaddingToggle}
795
807
  enableExpandAll={enableExpandAll}
796
808
  enableFilters={enableFilters}
797
809
  enableFullScreenToggle={enableFullScreenToggle}
798
810
  enableGlobalFilter={enableGlobalFilter}
811
+ enableGrouping={enableGrouping}
799
812
  enableHiding={enableHiding}
800
813
  enableMultiRowSelection={enableMultiRowSelection}
801
814
  enablePagination={enablePagination}
@@ -132,8 +132,6 @@ export const MRT_TableBodyCell: FC<Props> = ({
132
132
  column.getIsPinned() === 'left'
133
133
  ? `${column.getStart('left')}px`
134
134
  : undefined,
135
- maxWidth: `min(${column.getSize()}px, fit-content)`,
136
- minWidth: `max${column.getSize()}px, ${column.minSize}px`,
137
135
  p: isDensePadding
138
136
  ? column.columnDefType === 'display'
139
137
  ? '0 0.5rem'
@@ -150,7 +148,6 @@ export const MRT_TableBodyCell: FC<Props> = ({
150
148
  column.getIsPinned() === 'right' ? `${getTotalRight()}px` : undefined,
151
149
  transition: 'all 0.2s ease-in-out',
152
150
  whiteSpace: isDensePadding ? 'nowrap' : 'normal',
153
- width: column.getSize(),
154
151
  zIndex: column.getIsPinned() ? 1 : undefined,
155
152
  '&:hover': {
156
153
  backgroundColor: enableHover
@@ -161,6 +158,11 @@ export const MRT_TableBodyCell: FC<Props> = ({
161
158
  },
162
159
  ...(tableCellProps?.sx as any),
163
160
  })}
161
+ style={{
162
+ maxWidth: `min(${column.getSize()}px, fit-content)`,
163
+ minWidth: `max(${column.getSize()}px, ${column.minSize ?? 30}px)`,
164
+ width: column.getSize(),
165
+ }}
164
166
  >
165
167
  <>
166
168
  {isLoading || showSkeletons ? (
@@ -171,7 +173,7 @@ export const MRT_TableBodyCell: FC<Props> = ({
171
173
  {...muiTableBodyCellSkeletonProps}
172
174
  />
173
175
  ) : column.columnDefType === 'display' ? (
174
- column.Cell?.({ cell, tableInstance })
176
+ column.columnDef.Cell?.({ cell, tableInstance })
175
177
  ) : cell.getIsPlaceholder() ||
176
178
  (row.getIsGrouped() &&
177
179
  column.id !==
@@ -184,7 +186,7 @@ export const MRT_TableBodyCell: FC<Props> = ({
184
186
  <>
185
187
  <MRT_CopyButton cell={cell} tableInstance={tableInstance}>
186
188
  <>
187
- {cell.column?.Cell?.({ cell, tableInstance }) ??
189
+ {cell.column.columnDef?.Cell?.({ cell, tableInstance }) ??
188
190
  cell.renderCell()}
189
191
  </>
190
192
  </MRT_CopyButton>
@@ -192,8 +194,9 @@ export const MRT_TableBodyCell: FC<Props> = ({
192
194
  </>
193
195
  ) : (
194
196
  <>
195
- {cell.column?.Cell?.({ cell, tableInstance }) ?? cell.renderCell()}
196
- {row.getIsGrouped() && <> ({row.subRows?.length})</>}
197
+ {cell.column.columnDef?.Cell?.({ cell, tableInstance }) ??
198
+ cell.renderCell()}
199
+ {row.getIsGrouped() && <> ({row.subRows?.length ?? ''})</>}
197
200
  </>
198
201
  )}
199
202
  </>
@@ -4,7 +4,7 @@ import { MRT_Cell, MRT_TableInstance } from '..';
4
4
 
5
5
  interface Props {
6
6
  cell: MRT_Cell;
7
- children: ReactNode
7
+ children: ReactNode;
8
8
  tableInstance: MRT_TableInstance;
9
9
  }
10
10
 
@@ -52,6 +52,8 @@ export const MRT_CopyButton: FC<Props> = ({
52
52
  aria-label={localization.clickToCopy}
53
53
  onClick={() => handleCopy(cell.getValue())}
54
54
  size="small"
55
+ type="button"
56
+ variant="text"
55
57
  {...buttonProps}
56
58
  sx={{
57
59
  backgroundColor: 'transparent',
@@ -67,7 +69,6 @@ export const MRT_CopyButton: FC<Props> = ({
67
69
  textTransform: 'inherit',
68
70
  ...buttonProps?.sx,
69
71
  }}
70
- variant="text"
71
72
  >
72
73
  {children}
73
74
  </Button>
@@ -1,5 +1,5 @@
1
1
  import React, { FC } from 'react';
2
- import { IconButton } from '@mui/material';
2
+ import { IconButton, Tooltip } from '@mui/material';
3
3
  import { MRT_TableInstance } from '..';
4
4
 
5
5
  interface Props {
@@ -10,35 +10,43 @@ export const MRT_ExpandAllButton: FC<Props> = ({ tableInstance }) => {
10
10
  const {
11
11
  getIsAllRowsExpanded,
12
12
  getIsSomeRowsExpanded,
13
+ getCanSomeRowsExpand,
13
14
  getState,
14
15
  options: {
15
16
  icons: { DoubleArrowDownIcon },
16
17
  localization,
18
+ renderDetailPanel,
17
19
  },
18
20
  toggleAllRowsExpanded,
19
21
  } = tableInstance;
20
22
 
21
- const { isDensePadding, isLoading } = getState();
23
+ const { isDensePadding } = getState();
22
24
 
23
25
  return (
24
- <IconButton
25
- aria-label={localization.expandAll}
26
- disabled={isLoading}
26
+ <Tooltip
27
+ arrow
28
+ enterDelay={1000}
29
+ enterNextDelay={1000}
27
30
  title={localization.expandAll}
28
- onClick={() => toggleAllRowsExpanded(!getIsAllRowsExpanded())}
29
- sx={{
30
- height: isDensePadding ? '1.75rem' : '2.25rem',
31
- width: isDensePadding ? '1.75rem' : '2.25rem',
32
- }}
33
31
  >
34
- <DoubleArrowDownIcon
35
- style={{
36
- transform: `rotate(${
37
- getIsAllRowsExpanded() ? -180 : getIsSomeRowsExpanded() ? -90 : 0
38
- }deg)`,
39
- transition: 'transform 0.2s',
32
+ <IconButton
33
+ aria-label={localization.expandAll}
34
+ disabled={!getCanSomeRowsExpand() && !renderDetailPanel}
35
+ onClick={() => toggleAllRowsExpanded(!getIsAllRowsExpanded())}
36
+ sx={{
37
+ height: isDensePadding ? '1.75rem' : '2.25rem',
38
+ width: isDensePadding ? '1.75rem' : '2.25rem',
40
39
  }}
41
- />
42
- </IconButton>
40
+ >
41
+ <DoubleArrowDownIcon
42
+ style={{
43
+ transform: `rotate(${
44
+ getIsAllRowsExpanded() ? -180 : getIsSomeRowsExpanded() ? -90 : 0
45
+ }deg)`,
46
+ transition: 'transform 0.2s',
47
+ }}
48
+ />
49
+ </IconButton>
50
+ </Tooltip>
43
51
  );
44
52
  };
@@ -1,5 +1,5 @@
1
1
  import React, { FC, MouseEvent } from 'react';
2
- import { IconButton } from '@mui/material';
2
+ import { IconButton, Tooltip } from '@mui/material';
3
3
  import type { MRT_Row, MRT_TableInstance } from '..';
4
4
 
5
5
  interface Props {
@@ -26,28 +26,34 @@ export const MRT_ExpandButton: FC<Props> = ({ row, tableInstance }) => {
26
26
  };
27
27
 
28
28
  return (
29
- <IconButton
30
- aria-label={localization.expand}
31
- disabled={!row.getCanExpand() && !renderDetailPanel}
29
+ <Tooltip
30
+ arrow
31
+ enterDelay={1000}
32
+ enterNextDelay={1000}
32
33
  title={localization.expand}
33
- onClick={handleToggleExpand}
34
- sx={{
35
- height: isDensePadding ? '1.75rem' : '2.25rem',
36
- width: isDensePadding ? '1.75rem' : '2.25rem',
37
- }}
38
34
  >
39
- <ExpandMoreIcon
40
- style={{
41
- transform: `rotate(${
42
- !row.getCanExpand() && !renderDetailPanel
43
- ? -90
44
- : row.getIsExpanded()
45
- ? -180
46
- : 0
47
- }deg)`,
48
- transition: 'transform 0.2s',
35
+ <IconButton
36
+ aria-label={localization.expand}
37
+ disabled={!row.getCanExpand() && !renderDetailPanel}
38
+ onClick={handleToggleExpand}
39
+ sx={{
40
+ height: isDensePadding ? '1.75rem' : '2.25rem',
41
+ width: isDensePadding ? '1.75rem' : '2.25rem',
49
42
  }}
50
- />
51
- </IconButton>
43
+ >
44
+ <ExpandMoreIcon
45
+ style={{
46
+ transform: `rotate(${
47
+ !row.getCanExpand() && !renderDetailPanel
48
+ ? -90
49
+ : row.getIsExpanded()
50
+ ? -180
51
+ : 0
52
+ }deg)`,
53
+ transition: 'transform 0.2s',
54
+ }}
55
+ />
56
+ </IconButton>
57
+ </Tooltip>
52
58
  );
53
59
  };
@@ -54,14 +54,17 @@ export const MRT_TableFooterCell: FC<Props> = ({ footer, tableInstance }) => {
54
54
  ...(tableCellProps?.sx as any),
55
55
  })}
56
56
  >
57
- {footer.isPlaceholder
58
- ? null
59
- : column.Footer?.({
60
- footer,
61
- tableInstance,
62
- }) ??
63
- column.footer ??
64
- null}
57
+ <>
58
+ {footer.isPlaceholder
59
+ ? null
60
+ : column.columnDef.Footer?.({
61
+ footer,
62
+ tableInstance,
63
+ }) ??
64
+ column.columnDef.footer ??
65
+ footer.renderFooter() ??
66
+ null}
67
+ </>
65
68
  </TableCell>
66
69
  );
67
70
  };
@@ -20,8 +20,9 @@ export const MRT_TableFooterRow: FC<Props> = ({
20
20
  if (
21
21
  !footerGroup.headers?.some(
22
22
  (h) =>
23
- (typeof h.column.footer === 'string' && !!h.column.footer) ||
24
- h.column.Footer,
23
+ (typeof h.column.columnDef.footer === 'string' &&
24
+ !!h.column.columnDef.footer) ||
25
+ h.column.columnDef.Footer,
25
26
  )
26
27
  )
27
28
  return null;
@@ -0,0 +1,52 @@
1
+ import React, { FC } from 'react';
2
+ import { useDrag, useDrop } from 'react-dnd';
3
+ import { MRT_TableHeadCell } from './MRT_TableHeadCell';
4
+ import type { MRT_Header, MRT_TableInstance } from '..';
5
+
6
+ interface Props {
7
+ header: MRT_Header;
8
+ tableInstance: MRT_TableInstance;
9
+ }
10
+
11
+ export const MRT_DraggableTableHeadCell: FC<Props> = ({
12
+ header,
13
+ tableInstance,
14
+ }) => {
15
+ const {
16
+ getState,
17
+ options: {},
18
+ setColumnOrder,
19
+ } = tableInstance;
20
+
21
+ const { columnOrder } = getState();
22
+
23
+ const reorder = (item: MRT_Header, newIndex: number) => {
24
+ const { index: currentIndex } = item;
25
+ columnOrder.splice(newIndex, 0, columnOrder.splice(currentIndex, 1)[0]);
26
+ setColumnOrder([...columnOrder]);
27
+ };
28
+
29
+ const [, drop] = useDrop({
30
+ accept: 'header',
31
+ drop: (item: MRT_Header) => reorder(item, header.index),
32
+ });
33
+
34
+ const [{ isDragging }, drag, preview] = useDrag({
35
+ collect: (monitor) => ({
36
+ isDragging: monitor.isDragging(),
37
+ }),
38
+ item: () => header,
39
+ type: 'header',
40
+ });
41
+
42
+ return (
43
+ <MRT_TableHeadCell
44
+ dragRef={drag}
45
+ dropRef={drop}
46
+ header={header}
47
+ isDragging={isDragging}
48
+ previewRef={preview}
49
+ tableInstance={tableInstance}
50
+ />
51
+ );
52
+ };