material-react-table 0.17.1 → 0.19.0-alpha.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 (110) hide show
  1. package/dist/MaterialReactTable.d.ts +170 -230
  2. package/dist/body/MRT_TableBody.d.ts +1 -1
  3. package/dist/body/MRT_TableBodyCell.d.ts +1 -1
  4. package/dist/body/MRT_TableBodyRow.d.ts +1 -1
  5. package/dist/body/MRT_TableDetailPanel.d.ts +1 -1
  6. package/dist/buttons/MRT_ColumnPinningButtons.d.ts +1 -1
  7. package/dist/buttons/MRT_CopyButton.d.ts +1 -1
  8. package/dist/buttons/MRT_EditActionButtons.d.ts +1 -1
  9. package/dist/buttons/MRT_ExpandAllButton.d.ts +1 -1
  10. package/dist/buttons/MRT_ExpandButton.d.ts +1 -1
  11. package/dist/buttons/MRT_FullScreenToggleButton.d.ts +1 -1
  12. package/dist/buttons/MRT_GrabHandleButton.d.ts +1 -1
  13. package/dist/buttons/MRT_ShowHideColumnsButton.d.ts +1 -1
  14. package/dist/buttons/MRT_ToggleDensePaddingButton.d.ts +1 -1
  15. package/dist/buttons/MRT_ToggleFiltersButton.d.ts +1 -1
  16. package/dist/buttons/MRT_ToggleGlobalFilterButton.d.ts +1 -1
  17. package/dist/buttons/MRT_ToggleRowActionMenuButton.d.ts +1 -1
  18. package/dist/filtersFns.d.ts +31 -23
  19. package/dist/footer/MRT_TableFooter.d.ts +1 -1
  20. package/dist/footer/MRT_TableFooterCell.d.ts +1 -1
  21. package/dist/footer/MRT_TableFooterRow.d.ts +1 -1
  22. package/dist/head/MRT_DraggableTableHeadCell.d.ts +1 -1
  23. package/dist/head/MRT_TableHead.d.ts +1 -1
  24. package/dist/head/MRT_TableHeadCell.d.ts +1 -1
  25. package/dist/head/MRT_TableHeadCellColumnActionsButton.d.ts +1 -1
  26. package/dist/head/MRT_TableHeadCellFilterContainer.d.ts +1 -1
  27. package/dist/head/MRT_TableHeadCellFilterLabel.d.ts +1 -1
  28. package/dist/head/MRT_TableHeadCellResizeHandle.d.ts +1 -1
  29. package/dist/head/MRT_TableHeadCellSortLabel.d.ts +1 -1
  30. package/dist/head/MRT_TableHeadRow.d.ts +1 -1
  31. package/dist/inputs/MRT_EditCellTextField.d.ts +1 -1
  32. package/dist/inputs/MRT_FilterRangeFields.d.ts +1 -1
  33. package/dist/inputs/MRT_FilterTextField.d.ts +1 -1
  34. package/dist/inputs/MRT_GlobalFilterTextField.d.ts +1 -1
  35. package/dist/inputs/MRT_SelectCheckbox.d.ts +1 -1
  36. package/dist/material-react-table.cjs.development.js +791 -915
  37. package/dist/material-react-table.cjs.development.js.map +1 -1
  38. package/dist/material-react-table.cjs.production.min.js +1 -1
  39. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  40. package/dist/material-react-table.esm.js +793 -917
  41. package/dist/material-react-table.esm.js.map +1 -1
  42. package/dist/menus/MRT_ColumnActionMenu.d.ts +1 -1
  43. package/dist/menus/MRT_FilterOptionMenu.d.ts +1 -1
  44. package/dist/menus/MRT_RowActionMenu.d.ts +1 -1
  45. package/dist/menus/MRT_ShowHideColumnsMenu.d.ts +1 -1
  46. package/dist/menus/MRT_ShowHideColumnsMenuItems.d.ts +1 -1
  47. package/dist/sortingFns.d.ts +10 -3
  48. package/dist/table/MRT_Table.d.ts +1 -1
  49. package/dist/table/MRT_TableContainer.d.ts +1 -1
  50. package/dist/table/MRT_TablePaper.d.ts +1 -1
  51. package/dist/toolbar/MRT_LinearProgressBar.d.ts +1 -1
  52. package/dist/toolbar/MRT_TablePagination.d.ts +1 -1
  53. package/dist/toolbar/MRT_ToolbarAlertBanner.d.ts +1 -1
  54. package/dist/toolbar/MRT_ToolbarBottom.d.ts +1 -1
  55. package/dist/toolbar/MRT_ToolbarInternalButtons.d.ts +1 -1
  56. package/dist/toolbar/MRT_ToolbarTop.d.ts +1 -1
  57. package/dist/utils.d.ts +10 -16
  58. package/package.json +4 -4
  59. package/src/MaterialReactTable.tsx +168 -334
  60. package/src/body/MRT_TableBody.tsx +5 -6
  61. package/src/body/MRT_TableBodyCell.tsx +19 -36
  62. package/src/body/MRT_TableBodyRow.tsx +9 -12
  63. package/src/body/MRT_TableDetailPanel.tsx +8 -12
  64. package/src/buttons/MRT_ColumnPinningButtons.tsx +3 -3
  65. package/src/buttons/MRT_CopyButton.tsx +5 -7
  66. package/src/buttons/MRT_EditActionButtons.tsx +4 -5
  67. package/src/buttons/MRT_ExpandAllButton.tsx +4 -5
  68. package/src/buttons/MRT_ExpandButton.tsx +6 -9
  69. package/src/buttons/MRT_FullScreenToggleButton.tsx +5 -15
  70. package/src/buttons/MRT_GrabHandleButton.tsx +39 -41
  71. package/src/buttons/MRT_ShowHideColumnsButton.tsx +4 -4
  72. package/src/buttons/MRT_ToggleDensePaddingButton.tsx +5 -15
  73. package/src/buttons/MRT_ToggleFiltersButton.tsx +5 -12
  74. package/src/buttons/MRT_ToggleGlobalFilterButton.tsx +6 -16
  75. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +6 -6
  76. package/src/filtersFns.ts +24 -23
  77. package/src/footer/MRT_TableFooter.tsx +5 -6
  78. package/src/footer/MRT_TableFooterCell.tsx +8 -11
  79. package/src/footer/MRT_TableFooterRow.tsx +5 -9
  80. package/src/head/MRT_DraggableTableHeadCell.tsx +4 -6
  81. package/src/head/MRT_TableHead.tsx +5 -5
  82. package/src/head/MRT_TableHeadCell.tsx +18 -29
  83. package/src/head/MRT_TableHeadCellColumnActionsButton.tsx +6 -8
  84. package/src/head/MRT_TableHeadCellFilterContainer.tsx +5 -7
  85. package/src/head/MRT_TableHeadCellFilterLabel.tsx +13 -19
  86. package/src/head/MRT_TableHeadCellResizeHandle.tsx +12 -11
  87. package/src/head/MRT_TableHeadCellSortLabel.tsx +3 -5
  88. package/src/head/MRT_TableHeadRow.tsx +6 -6
  89. package/src/inputs/MRT_EditCellTextField.tsx +13 -15
  90. package/src/inputs/MRT_FilterRangeFields.tsx +4 -4
  91. package/src/inputs/MRT_FilterTextField.tsx +27 -64
  92. package/src/inputs/MRT_GlobalFilterTextField.tsx +5 -10
  93. package/src/inputs/MRT_SelectCheckbox.tsx +9 -36
  94. package/src/menus/MRT_ColumnActionMenu.tsx +5 -9
  95. package/src/menus/MRT_FilterOptionMenu.tsx +16 -48
  96. package/src/menus/MRT_RowActionMenu.tsx +4 -5
  97. package/src/menus/MRT_ShowHideColumnsMenu.tsx +8 -9
  98. package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +11 -10
  99. package/src/sortingFns.ts +11 -3
  100. package/src/table/MRT_Table.tsx +7 -11
  101. package/src/table/MRT_TableContainer.tsx +5 -6
  102. package/src/table/MRT_TablePaper.tsx +7 -8
  103. package/src/table/MRT_TableRoot.tsx +123 -156
  104. package/src/toolbar/MRT_LinearProgressBar.tsx +4 -5
  105. package/src/toolbar/MRT_TablePagination.tsx +7 -9
  106. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +15 -11
  107. package/src/toolbar/MRT_ToolbarBottom.tsx +8 -9
  108. package/src/toolbar/MRT_ToolbarInternalButtons.tsx +10 -10
  109. package/src/toolbar/MRT_ToolbarTop.tsx +11 -11
  110. package/src/utils.ts +56 -50
@@ -19,10 +19,10 @@ export const commonToolbarStyles = ({ theme }: { theme: Theme }) => ({
19
19
  });
20
20
 
21
21
  interface Props {
22
- instance: MRT_TableInstance;
22
+ table: MRT_TableInstance;
23
23
  }
24
24
 
25
- export const MRT_ToolbarTop: FC<Props> = ({ instance }) => {
25
+ export const MRT_ToolbarTop: FC<Props> = ({ table }) => {
26
26
  const {
27
27
  getState,
28
28
  options: {
@@ -36,7 +36,7 @@ export const MRT_ToolbarTop: FC<Props> = ({ instance }) => {
36
36
  renderToolbarTopCustomActions,
37
37
  tableId,
38
38
  },
39
- } = instance;
39
+ } = table;
40
40
 
41
41
  const { isFullScreen, showGlobalFilter } = getState();
42
42
 
@@ -44,7 +44,7 @@ export const MRT_ToolbarTop: FC<Props> = ({ instance }) => {
44
44
 
45
45
  const toolbarProps =
46
46
  muiTableToolbarTopProps instanceof Function
47
- ? muiTableToolbarTopProps({ instance })
47
+ ? muiTableToolbarTopProps({ table })
48
48
  : muiTableToolbarTopProps;
49
49
 
50
50
  const stackAlertBanner =
@@ -69,7 +69,7 @@ export const MRT_ToolbarTop: FC<Props> = ({ instance }) => {
69
69
  {positionToolbarAlertBanner === 'top' && (
70
70
  <MRT_ToolbarAlertBanner
71
71
  stackAlertBanner={stackAlertBanner}
72
- instance={instance}
72
+ table={table}
73
73
  />
74
74
  )}
75
75
  <Box
@@ -86,24 +86,24 @@ export const MRT_ToolbarTop: FC<Props> = ({ instance }) => {
86
86
  }}
87
87
  >
88
88
  {enableGlobalFilter && positionGlobalFilter === 'left' && (
89
- <MRT_GlobalFilterTextField instance={instance} />
89
+ <MRT_GlobalFilterTextField table={table} />
90
90
  )}
91
91
 
92
- {renderToolbarTopCustomActions?.({ instance }) ?? <span />}
92
+ {renderToolbarTopCustomActions?.({ table }) ?? <span />}
93
93
  {enableToolbarInternalActions ? (
94
- <MRT_ToolbarInternalButtons instance={instance} />
94
+ <MRT_ToolbarInternalButtons table={table} />
95
95
  ) : (
96
96
  enableGlobalFilter &&
97
97
  positionGlobalFilter === 'right' && (
98
- <MRT_GlobalFilterTextField instance={instance} />
98
+ <MRT_GlobalFilterTextField table={table} />
99
99
  )
100
100
  )}
101
101
  </Box>
102
102
  {enablePagination &&
103
103
  ['top', 'both'].includes(positionPagination ?? '') && (
104
- <MRT_TablePagination instance={instance} position="top" />
104
+ <MRT_TablePagination table={table} position="top" />
105
105
  )}
106
- <MRT_LinearProgressBar alignTo="bottom" instance={instance} />
106
+ <MRT_LinearProgressBar alignTo="bottom" table={table} />
107
107
  </Toolbar>
108
108
  );
109
109
  };
package/src/utils.ts CHANGED
@@ -1,22 +1,29 @@
1
- import { ColumnDef, ColumnOrderState, Table } from '@tanstack/react-table';
1
+ import { ColumnOrderState } from '@tanstack/react-table';
2
2
  import {
3
3
  MaterialReactTableProps,
4
4
  MRT_Column,
5
5
  MRT_ColumnDef,
6
- MRT_FilterFn,
6
+ MRT_DefinedColumnDef,
7
+ MRT_FilterOption,
7
8
  } from '.';
8
9
  import { MRT_FilterFns } from './filtersFns';
10
+ import { MRT_SortingFns } from './sortingFns';
9
11
 
10
- export const getAllLeafColumnDefs = (
11
- columns: MRT_ColumnDef[],
12
- ): MRT_ColumnDef[] => {
13
- let lowestLevelColumns: MRT_ColumnDef[] = columns;
14
- let currentCols: MRT_ColumnDef[] | undefined = columns;
12
+ const getColumnId = <D extends Record<string, any> = {}>(
13
+ columnDef: MRT_ColumnDef<D>,
14
+ ): string =>
15
+ columnDef.id ?? columnDef.accessorKey?.toString?.() ?? columnDef.header;
16
+
17
+ export const getAllLeafColumnDefs = <D extends Record<string, any> = {}>(
18
+ columns: MRT_ColumnDef<D>[],
19
+ ): MRT_ColumnDef<D>[] => {
20
+ let lowestLevelColumns: MRT_ColumnDef<D>[] = columns;
21
+ let currentCols: MRT_ColumnDef<D>[] | undefined = columns;
15
22
  while (!!currentCols?.length && currentCols.some((col) => col.columns)) {
16
- const nextCols: MRT_ColumnDef[] = currentCols
23
+ const nextCols: MRT_ColumnDef<D>[] = currentCols
17
24
  .filter((col) => !!col.columns)
18
25
  .map((col) => col.columns)
19
- .flat() as MRT_ColumnDef[];
26
+ .flat() as MRT_ColumnDef<D>[];
20
27
  if (nextCols.every((col) => !col?.columns)) {
21
28
  lowestLevelColumns = [...lowestLevelColumns, ...nextCols];
22
29
  }
@@ -25,42 +32,37 @@ export const getAllLeafColumnDefs = (
25
32
  return lowestLevelColumns.filter((col) => !col.columns);
26
33
  };
27
34
 
28
- export const createGroup = <D extends Record<string, any> = {}>(
29
- table: Table<D>,
30
- column: MRT_ColumnDef<D>,
31
- currentFilterFns: { [key: string]: MRT_FilterFn },
32
- ): ColumnDef<D> =>
33
- table.createGroup({
34
- ...column,
35
- columns: column?.columns?.map?.((col) =>
36
- col.columns
37
- ? createGroup<D>(table, col, currentFilterFns)
38
- : createDataColumn(table, col, currentFilterFns),
39
- ),
40
- } as any);
41
-
42
- export const createDataColumn = <D extends Record<string, any> = {}>(
43
- table: Table<D>,
44
- column: MRT_ColumnDef<D>,
45
- currentFilterFns: { [key: string]: MRT_FilterFn },
46
- ): ColumnDef<D> => // @ts-ignore
47
- table.createDataColumn(column.id, {
48
- filterFn:
49
- currentFilterFns[column.id] instanceof Function
50
- ? currentFilterFns[column.id]
51
- : // @ts-ignore
52
- MRT_FilterFns[currentFilterFns[column.id]],
53
- ...column,
54
- }) as any;
55
-
56
- export const createDisplayColumn = <D extends Record<string, any> = {}>(
57
- table: Table<D>,
58
- column: Omit<MRT_ColumnDef<D>, 'header'> & { header?: string },
59
- ): ColumnDef<D> => table.createDisplayColumn(column as ColumnDef<D>);
35
+ export const prepareColumns = <D extends Record<string, any> = {}>(
36
+ columnDefs: MRT_ColumnDef<D>[],
37
+ currentFilterFns: { [key: string]: MRT_FilterOption },
38
+ ): MRT_DefinedColumnDef<D>[] =>
39
+ columnDefs.map((columnDef) => {
40
+ if (!columnDef.id) columnDef.id = getColumnId(columnDef);
41
+ if (process.env.NODE_ENV !== 'production' && !columnDef.id) {
42
+ console.error(
43
+ 'Column definitions must have a valid `accessorKey` or `id` property',
44
+ );
45
+ }
46
+ if (!columnDef.columnDefType) columnDef.columnDefType = 'data';
47
+ if (!!columnDef.columns?.length) {
48
+ columnDef.columnDefType = 'group';
49
+ columnDef.columns = prepareColumns(columnDef.columns, currentFilterFns);
50
+ } else if (columnDef.columnDefType === 'data') {
51
+ if (Object.keys(MRT_FilterFns).includes(currentFilterFns[columnDef.id])) {
52
+ columnDef.filterFn =
53
+ MRT_FilterFns[currentFilterFns[columnDef.id]] ?? MRT_FilterFns.fuzzy;
54
+ }
55
+ if (Object.keys(MRT_SortingFns).includes(columnDef.sortingFn as string)) {
56
+ // @ts-ignore
57
+ columnDef.sortingFn = MRT_SortingFns[columnDef.sortingFn];
58
+ }
59
+ }
60
+ return columnDef;
61
+ }) as MRT_DefinedColumnDef<D>[];
60
62
 
61
- export const reorderColumn = (
62
- movingColumn: MRT_Column,
63
- receivingColumn: MRT_Column,
63
+ export const reorderColumn = <D extends Record<string, any> = {}>(
64
+ movingColumn: MRT_Column<D>,
65
+ receivingColumn: MRT_Column<D>,
64
66
  columnOrder: ColumnOrderState,
65
67
  ): ColumnOrderState => {
66
68
  if (movingColumn.getCanPin()) {
@@ -74,8 +76,8 @@ export const reorderColumn = (
74
76
  return [...columnOrder];
75
77
  };
76
78
 
77
- export const getLeadingDisplayColumnIds = (
78
- props: MaterialReactTableProps<any>,
79
+ export const getLeadingDisplayColumnIds = <D extends Record<string, any> = {}>(
80
+ props: MaterialReactTableProps<D>,
79
81
  ) =>
80
82
  [
81
83
  ((props.positionActionsColumn === 'first' && props.enableRowActions) ||
@@ -86,17 +88,21 @@ export const getLeadingDisplayColumnIds = (
86
88
  props.enableRowNumbers && 'mrt-row-numbers',
87
89
  ].filter(Boolean) as string[];
88
90
 
89
- export const getTrailingDisplayColumnIds = (
90
- props: MaterialReactTableProps<any>,
91
+ export const getTrailingDisplayColumnIds = <D extends Record<string, any> = {}>(
92
+ props: MaterialReactTableProps<D>,
91
93
  ) => [
92
94
  ((props.positionActionsColumn === 'last' && props.enableRowActions) ||
93
95
  (props.enableEditing && props.editingMode === 'row')) &&
94
96
  'mrt-row-actions',
95
97
  ];
96
98
 
97
- export const getDefaultColumnOrderIds = (props: MaterialReactTableProps<any>) =>
99
+ export const getDefaultColumnOrderIds = <D extends Record<string, any> = {}>(
100
+ props: MaterialReactTableProps<D>,
101
+ ) =>
98
102
  [
99
103
  ...getLeadingDisplayColumnIds(props),
100
- ...getAllLeafColumnDefs(props.columns as MRT_ColumnDef[]).map((c) => c.id),
104
+ ...getAllLeafColumnDefs(props.columns).map((columnDef) =>
105
+ getColumnId(columnDef),
106
+ ),
101
107
  ...getTrailingDisplayColumnIds(props),
102
108
  ].filter(Boolean) as string[];