material-react-table 0.8.0 → 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 (33) hide show
  1. package/dist/MaterialReactTable.d.ts +3 -1
  2. package/dist/head/MRT_DraggableTableHeadCell.d.ts +8 -0
  3. package/dist/head/MRT_TableHeadCell.d.ts +5 -1
  4. package/dist/head/MRT_TableHeadCellFilterContainer.d.ts +8 -0
  5. package/dist/head/MRT_TableHeadCellFilterLabel.d.ts +8 -0
  6. package/dist/head/MRT_TableHeadCellGrabHandle.d.ts +9 -0
  7. package/dist/head/MRT_TableHeadCellResizeHandle.d.ts +8 -0
  8. package/dist/head/MRT_TableHeadCellSortLabel.d.ts +8 -0
  9. package/dist/icons.d.ts +1 -0
  10. package/dist/inputs/MRT_FilterRangeFields.d.ts +2 -2
  11. package/dist/localization.d.ts +1 -0
  12. package/dist/material-react-table.cjs.development.js +307 -111
  13. package/dist/material-react-table.cjs.development.js.map +1 -1
  14. package/dist/material-react-table.cjs.production.min.js +1 -1
  15. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  16. package/dist/material-react-table.esm.js +309 -113
  17. package/dist/material-react-table.esm.js.map +1 -1
  18. package/dist/utils.d.ts +1 -1
  19. package/package.json +8 -5
  20. package/src/MaterialReactTable.tsx +6 -0
  21. package/src/head/MRT_DraggableTableHeadCell.tsx +52 -0
  22. package/src/head/MRT_TableHeadCell.tsx +62 -154
  23. package/src/head/MRT_TableHeadCellFilterContainer.tsx +32 -0
  24. package/src/head/MRT_TableHeadCellFilterLabel.tsx +82 -0
  25. package/src/head/MRT_TableHeadCellGrabHandle.tsx +52 -0
  26. package/src/head/MRT_TableHeadCellResizeHandle.tsx +52 -0
  27. package/src/head/MRT_TableHeadCellSortLabel.tsx +45 -0
  28. package/src/head/MRT_TableHeadRow.tsx +17 -8
  29. package/src/icons.ts +3 -0
  30. package/src/inputs/MRT_FilterRangeFields.tsx +1 -3
  31. package/src/localization.ts +2 -0
  32. package/src/table/MRT_TablePaper.tsx +26 -22
  33. package/src/table/MRT_TableRoot.tsx +8 -0
@@ -0,0 +1,45 @@
1
+ import React, { FC } from 'react';
2
+ import { TableSortLabel, Tooltip } from '@mui/material';
3
+ import { MRT_Header, MRT_TableInstance } from '..';
4
+
5
+ interface Props {
6
+ header: MRT_Header;
7
+ tableInstance: MRT_TableInstance;
8
+ }
9
+
10
+ export const MRT_TableHeadCellSortLabel: FC<Props> = ({
11
+ header,
12
+ tableInstance,
13
+ }) => {
14
+ const {
15
+ options: { localization },
16
+ } = tableInstance;
17
+
18
+ const { column } = header;
19
+
20
+ const sortTooltip = !!column.getIsSorted()
21
+ ? column.getIsSorted() === 'desc'
22
+ ? localization.sortedByColumnDesc.replace(
23
+ '{column}',
24
+ column.columnDef.header,
25
+ )
26
+ : localization.sortedByColumnAsc.replace(
27
+ '{column}',
28
+ column.columnDef.header,
29
+ )
30
+ : localization.unsorted;
31
+
32
+ return (
33
+ <Tooltip arrow placement="top" title={sortTooltip}>
34
+ <TableSortLabel
35
+ aria-label={sortTooltip}
36
+ active={!!column.getIsSorted()}
37
+ direction={
38
+ column.getIsSorted()
39
+ ? (column.getIsSorted() as 'asc' | 'desc')
40
+ : undefined
41
+ }
42
+ />
43
+ </Tooltip>
44
+ );
45
+ };
@@ -1,6 +1,7 @@
1
1
  import React, { FC } from 'react';
2
2
  import { alpha, lighten, TableRow } from '@mui/material';
3
3
  import { MRT_TableHeadCell } from './MRT_TableHeadCell';
4
+ import { MRT_DraggableTableHeadCell } from './MRT_DraggableTableHeadCell';
4
5
  import type { MRT_Header, MRT_HeaderGroup, MRT_TableInstance } from '..';
5
6
 
6
7
  interface Props {
@@ -10,7 +11,7 @@ interface Props {
10
11
 
11
12
  export const MRT_TableHeadRow: FC<Props> = ({ headerGroup, tableInstance }) => {
12
13
  const {
13
- options: { muiTableHeadRowProps },
14
+ options: { enableColumnOrdering, enableGrouping, muiTableHeadRowProps },
14
15
  } = tableInstance;
15
16
 
16
17
  const tableRowProps =
@@ -27,13 +28,21 @@ export const MRT_TableHeadRow: FC<Props> = ({ headerGroup, tableInstance }) => {
27
28
  ...(tableRowProps?.sx as any),
28
29
  })}
29
30
  >
30
- {headerGroup.headers.map((header: MRT_Header, index) => (
31
- <MRT_TableHeadCell
32
- header={header}
33
- key={header.id || index}
34
- tableInstance={tableInstance}
35
- />
36
- ))}
31
+ {headerGroup.headers.map((header: MRT_Header, index) =>
32
+ enableColumnOrdering || enableGrouping ? (
33
+ <MRT_DraggableTableHeadCell
34
+ header={header}
35
+ key={header.id || index}
36
+ tableInstance={tableInstance}
37
+ />
38
+ ) : (
39
+ <MRT_TableHeadCell
40
+ header={header}
41
+ key={header.id || index}
42
+ tableInstance={tableInstance}
43
+ />
44
+ ),
45
+ )}
37
46
  </TableRow>
38
47
  );
39
48
  };
package/src/icons.ts CHANGED
@@ -6,6 +6,7 @@ import CloseIcon from '@mui/icons-material/Close';
6
6
  import DensityMediumIcon from '@mui/icons-material/DensityMedium';
7
7
  import DensitySmallIcon from '@mui/icons-material/DensitySmall';
8
8
  import DoubleArrowDownIcon from '@mui/icons-material/KeyboardDoubleArrowDown';
9
+ import DragHandleIcon from '@mui/icons-material/DragHandle';
9
10
  import DynamicFeedIcon from '@mui/icons-material/DynamicFeed';
10
11
  import EditIcon from '@mui/icons-material/Edit';
11
12
  import ExpandLessIcon from '@mui/icons-material/ExpandLess';
@@ -36,6 +37,7 @@ export interface MRT_Icons {
36
37
  DensityMediumIcon: any;
37
38
  DensitySmallIcon: any;
38
39
  DoubleArrowDownIcon: any;
40
+ DragHandleIcon: any;
39
41
  DynamicFeedIcon: any;
40
42
  EditIcon: any;
41
43
  ExpandLessIcon: any;
@@ -67,6 +69,7 @@ export const MRT_Default_Icons: MRT_Icons = {
67
69
  DensityMediumIcon,
68
70
  DensitySmallIcon,
69
71
  DoubleArrowDownIcon,
72
+ DragHandleIcon,
70
73
  DynamicFeedIcon,
71
74
  EditIcon,
72
75
  ExpandLessIcon,
@@ -8,7 +8,7 @@ interface Props {
8
8
  tableInstance: MRT_TableInstance;
9
9
  }
10
10
 
11
- const MRT_FilterRangeFields: FC<Props> = ({ header, tableInstance }) => {
11
+ export const MRT_FilterRangeFields: FC<Props> = ({ header, tableInstance }) => {
12
12
  const {
13
13
  options: { localization },
14
14
  } = tableInstance;
@@ -37,5 +37,3 @@ const MRT_FilterRangeFields: FC<Props> = ({ header, tableInstance }) => {
37
37
  </Box>
38
38
  );
39
39
  };
40
-
41
- export default MRT_FilterRangeFields;
@@ -27,6 +27,7 @@ export interface MRT_Localization {
27
27
  filterNotEquals: string;
28
28
  filterStartsWith: string;
29
29
  filteringByColumn: string;
30
+ grab: string;
30
31
  groupByColumn: string;
31
32
  groupedBy: string;
32
33
  hideAll: string;
@@ -93,6 +94,7 @@ export const MRT_DefaultLocalization_EN: MRT_Localization = {
93
94
  filterNotEquals: 'Not Equals',
94
95
  filterStartsWith: 'Starts With',
95
96
  filteringByColumn: 'Filtering by {column} - {filterType} {filterValue}',
97
+ grab: 'Grab',
96
98
  groupByColumn: 'Group by {column}',
97
99
  groupedBy: 'Grouped by ',
98
100
  hideAll: 'Hide all',
@@ -1,5 +1,7 @@
1
1
  import React, { FC, useEffect } from 'react';
2
2
  import { Paper } from '@mui/material';
3
+ import { DndProvider } from 'react-dnd';
4
+ import { HTML5Backend } from 'react-dnd-html5-backend';
3
5
  import { MRT_ToolbarTop } from '../toolbar/MRT_ToolbarTop';
4
6
  import { MRT_ToolbarBottom } from '../toolbar/MRT_ToolbarBottom';
5
7
  import { MRT_TableContainer } from './MRT_TableContainer';
@@ -35,27 +37,29 @@ export const MRT_TablePaper: FC<Props> = ({ tableInstance }) => {
35
37
  : muiTablePaperProps;
36
38
 
37
39
  return (
38
- <Paper
39
- elevation={2}
40
- {...tablePaperProps}
41
- sx={{
42
- transition: 'all 0.2s ease-in-out',
43
- ...tablePaperProps?.sx,
44
- }}
45
- style={{
46
- height: isFullScreen ? '100vh' : undefined,
47
- margin: isFullScreen ? '0' : undefined,
48
- maxHeight: isFullScreen ? '100vh' : undefined,
49
- maxWidth: isFullScreen ? '100vw' : undefined,
50
- padding: isFullScreen ? '0' : undefined,
51
- width: isFullScreen ? '100vw' : undefined,
52
- }}
53
- >
54
- {enableToolbarTop && <MRT_ToolbarTop tableInstance={tableInstance} />}
55
- <MRT_TableContainer tableInstance={tableInstance} />
56
- {enableToolbarBottom && (
57
- <MRT_ToolbarBottom tableInstance={tableInstance} />
58
- )}
59
- </Paper>
40
+ <DndProvider backend={HTML5Backend}>
41
+ <Paper
42
+ elevation={2}
43
+ {...tablePaperProps}
44
+ sx={{
45
+ transition: 'all 0.2s ease-in-out',
46
+ ...tablePaperProps?.sx,
47
+ }}
48
+ style={{
49
+ height: isFullScreen ? '100vh' : undefined,
50
+ margin: isFullScreen ? '0' : undefined,
51
+ maxHeight: isFullScreen ? '100vh' : undefined,
52
+ maxWidth: isFullScreen ? '100vw' : undefined,
53
+ padding: isFullScreen ? '0' : undefined,
54
+ width: isFullScreen ? '100vw' : undefined,
55
+ }}
56
+ >
57
+ {enableToolbarTop && <MRT_ToolbarTop tableInstance={tableInstance} />}
58
+ <MRT_TableContainer tableInstance={tableInstance} />
59
+ {enableToolbarBottom && (
60
+ <MRT_ToolbarBottom tableInstance={tableInstance} />
61
+ )}
62
+ </Paper>
63
+ </DndProvider>
60
64
  );
61
65
  };
@@ -222,6 +222,12 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
222
222
  [props.data, props.state?.isLoading, props.state?.showSkeletons],
223
223
  );
224
224
 
225
+ const [columnOrder, setColumnOrder] = useState<string[]>(() =>
226
+ initialState?.columnOrder ?? props.enableColumnOrdering
227
+ ? getAllLeafColumnDefs(columns as MRT_ColumnDef[]).map((c) => c.id)
228
+ : [],
229
+ );
230
+
225
231
  //@ts-ignore
226
232
  const tableInstance = {
227
233
  //@ts-ignore
@@ -237,6 +243,7 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
237
243
  getSubRows: (row) => (row as MRT_Row)?.subRows,
238
244
  //@ts-ignore
239
245
  globalFilterFn: currentGlobalFilterFn,
246
+ onColumnOrderChange: setColumnOrder,
240
247
  onPaginationChange: (updater: any) =>
241
248
  setPagination((old) => functionalUpdate(updater, old)),
242
249
  ...props,
@@ -246,6 +253,7 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
246
253
  idPrefix,
247
254
  initialState,
248
255
  state: {
256
+ columnOrder,
249
257
  currentEditingCell,
250
258
  currentEditingRow,
251
259
  currentFilterFns,