material-react-table 0.3.1 → 0.3.5

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 (72) hide show
  1. package/README.md +32 -162
  2. package/dist/MaterialReactTable.d.ts +17 -7
  3. package/dist/body/MRT_TableBodyCell.d.ts +3 -0
  4. package/dist/body/MRT_TableBodyRow.d.ts +16 -1
  5. package/dist/buttons/MRT_FullScreenToggleButton.d.ts +4 -0
  6. package/dist/buttons/MRT_ToggleSearchButton.d.ts +4 -0
  7. package/dist/head/MRT_TableHeadCell.d.ts +4 -1
  8. package/dist/head/MRT_TableHeadCellActions.d.ts +5 -0
  9. package/dist/inputs/MRT_EditCellTextField.d.ts +7 -0
  10. package/dist/inputs/MRT_FilterTextField.d.ts +1 -1
  11. package/dist/material-react-table.cjs.development.js +799 -441
  12. package/dist/material-react-table.cjs.development.js.map +1 -1
  13. package/dist/material-react-table.cjs.production.min.js +1 -1
  14. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  15. package/dist/material-react-table.esm.js +800 -442
  16. package/dist/material-react-table.esm.js.map +1 -1
  17. package/dist/menus/MRT_ColumnActionMenu.d.ts +2 -2
  18. package/dist/menus/MRT_RowActionMenu.d.ts +1 -0
  19. package/dist/table/MRT_TableButtonCell.d.ts +3 -0
  20. package/dist/toolbar/MRT_ToolbarAlertBanner.d.ts +5 -0
  21. package/dist/toolbar/MRT_ToolbarInternalButtons.d.ts +5 -0
  22. package/dist/useMRT.d.ts +20 -0
  23. package/dist/utils/localization.d.ts +12 -3
  24. package/package.json +26 -23
  25. package/src/@types/faker.d.ts +4 -0
  26. package/src/@types/react-table-config.d.ts +156 -0
  27. package/src/MaterialReactTable.tsx +29 -9
  28. package/src/body/MRT_TableBody.tsx +3 -25
  29. package/src/body/MRT_TableBodyCell.tsx +30 -9
  30. package/src/body/MRT_TableBodyRow.tsx +22 -14
  31. package/src/body/MRT_TableDetailPanel.tsx +19 -8
  32. package/src/buttons/MRT_EditActionButtons.tsx +11 -6
  33. package/src/buttons/MRT_ExpandAllButton.tsx +19 -25
  34. package/src/buttons/MRT_ExpandButton.tsx +28 -26
  35. package/src/buttons/MRT_FullScreenToggleButton.tsx +23 -0
  36. package/src/buttons/MRT_ShowHideColumnsButton.tsx +34 -3
  37. package/src/buttons/MRT_ToggleColumnActionMenuButton.tsx +5 -5
  38. package/src/buttons/MRT_ToggleFiltersButton.tsx +2 -2
  39. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +48 -26
  40. package/src/buttons/MRT_ToggleSearchButton.tsx +33 -0
  41. package/src/footer/MRT_TableFooter.tsx +4 -4
  42. package/src/footer/MRT_TableFooterCell.tsx +23 -7
  43. package/src/footer/MRT_TableFooterRow.tsx +9 -4
  44. package/src/head/MRT_TableHead.tsx +4 -4
  45. package/src/head/MRT_TableHeadCell.tsx +41 -20
  46. package/src/head/MRT_TableHeadCellActions.tsx +18 -0
  47. package/src/head/MRT_TableHeadRow.tsx +17 -11
  48. package/src/inputs/MRT_DensePaddingSwitch.tsx +5 -3
  49. package/src/inputs/MRT_EditCellTextField.tsx +64 -0
  50. package/src/inputs/MRT_FilterTextField.tsx +43 -18
  51. package/src/inputs/MRT_SearchTextField.tsx +39 -34
  52. package/src/inputs/MRT_SelectAllCheckbox.tsx +10 -14
  53. package/src/inputs/MRT_SelectCheckbox.tsx +11 -13
  54. package/src/menus/MRT_ColumnActionMenu.tsx +66 -23
  55. package/src/menus/MRT_RowActionMenu.tsx +4 -8
  56. package/src/menus/MRT_ShowHideColumnsMenu.tsx +24 -15
  57. package/src/table/MRT_Table.tsx +2 -2
  58. package/src/table/MRT_TableButtonCell.tsx +9 -0
  59. package/src/table/MRT_TableContainer.tsx +52 -5
  60. package/src/table/MRT_TableSpacerCell.tsx +5 -5
  61. package/src/toolbar/MRT_TablePagination.tsx +3 -2
  62. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +102 -0
  63. package/src/toolbar/MRT_ToolbarBottom.tsx +11 -22
  64. package/src/toolbar/{MRT_ToolbarButtons.tsx → MRT_ToolbarInternalButtons.tsx} +13 -4
  65. package/src/toolbar/MRT_ToolbarTop.tsx +16 -30
  66. package/src/useMRT.tsx +112 -0
  67. package/src/utils/localization.ts +30 -12
  68. package/dist/toolbar/MRT_ToolbarButtons.d.ts +0 -5
  69. package/dist/useMaterialReactTable.d.ts +0 -15
  70. package/dist/utils/useMRTCalcs.d.ts +0 -11
  71. package/src/useMaterialReactTable.tsx +0 -96
  72. package/src/utils/useMRTCalcs.tsx +0 -42
@@ -1,8 +1,8 @@
1
1
  import { FC } from 'react';
2
- import { ColumnInstance } from 'react-table';
2
+ import { HeaderGroup } from 'react-table';
3
3
  interface Props {
4
4
  anchorEl: HTMLElement | null;
5
- column: ColumnInstance;
5
+ column: HeaderGroup;
6
6
  setAnchorEl: (anchorEl: HTMLElement | null) => void;
7
7
  }
8
8
  export declare const MRT_ColumnActionMenu: FC<Props>;
@@ -4,6 +4,7 @@ interface Props {
4
4
  anchorEl: HTMLElement | null;
5
5
  row: Row;
6
6
  setAnchorEl: (anchorEl: HTMLElement | null) => void;
7
+ handleEdit: () => void;
7
8
  }
8
9
  export declare const MRT_RowActionMenu: FC<Props>;
9
10
  export {};
@@ -0,0 +1,3 @@
1
+ export declare const MRT_TableButtonCell: import("@emotion/styled").StyledComponent<import("@mui/material").TableCellProps & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme> & {
2
+ densePadding?: boolean | undefined;
3
+ }, {}, {}>;
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ interface Props {
3
+ }
4
+ export declare const MRT_ToolbarAlertBanner: FC<Props>;
5
+ export {};
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ interface Props {
3
+ }
4
+ export declare const MRT_ToolbarInternalButtons: FC<Props>;
5
+ export {};
@@ -0,0 +1,20 @@
1
+ import React, { PropsWithChildren } from 'react';
2
+ import { Row, TableInstance } from 'react-table';
3
+ import { MaterialReactTableProps } from './MaterialReactTable';
4
+ export interface UseMRT<D extends {} = {}> extends MaterialReactTableProps<D> {
5
+ anyRowsCanExpand: boolean;
6
+ anyRowsExpanded: boolean;
7
+ currentEditingRow: Row<D> | null;
8
+ densePadding: boolean;
9
+ fullScreen: boolean;
10
+ setCurrentEditingRow: (currentRowEditingId: Row<D> | null) => void;
11
+ setDensePadding: (densePadding: boolean) => void;
12
+ setFullScreen: (fullScreen: boolean) => void;
13
+ setShowFilters: (showFilters: boolean) => void;
14
+ setShowSearch: (showSearch: boolean) => void;
15
+ showFilters: boolean;
16
+ showSearch: boolean;
17
+ tableInstance: TableInstance<D>;
18
+ }
19
+ export declare const MaterialReactTableProvider: <D extends {}>(props: React.PropsWithChildren<MaterialReactTableProps<D>>) => JSX.Element;
20
+ export declare const useMRT: <D extends {}>() => UseMRT<D>;
@@ -7,19 +7,28 @@ export interface MRT_Localization {
7
7
  columnActionMenuItemSortAsc: string;
8
8
  columnActionMenuItemSortDesc: string;
9
9
  columnActionMenuItemUnGroupBy: string;
10
+ columnShowHideMenuHideAll: string;
11
+ columnShowHideMenuShowAll: string;
10
12
  expandAllButtonTitle: string;
11
13
  expandButtonTitle: string;
12
14
  filterTextFieldClearButtonTitle: string;
13
15
  filterTextFieldPlaceholder: string;
14
- rowActionMenuButtonTitle: string;
15
- rowActionsColumnTitle: string;
16
- rowActionButtonSave: string;
17
16
  rowActionButtonCancel: string;
17
+ rowActionButtonSave: string;
18
+ rowActionMenuButtonTitle: string;
18
19
  rowActionMenuItemEdit: string;
20
+ rowActionsColumnTitle: string;
19
21
  searchTextFieldClearButtonTitle: string;
20
22
  searchTextFieldPlaceholder: string;
23
+ selectAllCheckboxTitle: string;
24
+ selectCheckboxTitle: string;
21
25
  showHideColumnsButtonTitle: string;
22
26
  toggleDensePaddingSwitchTitle: string;
23
27
  toggleFilterButtonTitle: string;
28
+ toggleFullScreenButtonTitle: string;
29
+ toggleSearchButtonTitle: string;
30
+ toolbarAlertSelectionMessage: string;
31
+ toolbarAlertGroupedByMessage: string;
32
+ toolbarAlertGroupedThenByMessage: string;
24
33
  }
25
34
  export declare const defaultLocalization: MRT_Localization;
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.3.1",
2
+ "version": "0.3.5",
3
3
  "license": "MIT",
4
4
  "name": "material-react-table",
5
5
  "description": "A fully featured Material-UI implementation of react-table, inspired by material-table and the mui DataGrid, written from the ground up in TypeScript.",
@@ -13,7 +13,7 @@
13
13
  "type": "git",
14
14
  "url": "https://github.com/KevinVandy/material-react-table"
15
15
  },
16
- "homepage": "https://github.com/KevinVandy/material-react-table#readme",
16
+ "homepage": "https://www.material-react-table.com/",
17
17
  "bugs": {
18
18
  "url": "https://github.com/KevinVandy/material-react-table/issues"
19
19
  },
@@ -24,23 +24,24 @@
24
24
  "src"
25
25
  ],
26
26
  "engines": {
27
- "node": ">=14"
27
+ "node": ">=12"
28
28
  },
29
29
  "scripts": {
30
- "start": "tsdx watch",
30
+ "analyze": "size-limit --why",
31
31
  "build": "tsdx build && size-limit",
32
- "test": "tsdx test --passWithNoTests",
32
+ "build-storybook": "build-storybook",
33
+ "format": "prettier -w .",
33
34
  "lint": "tsdx lint",
34
35
  "prepare": "tsdx build",
35
36
  "size": "size-limit",
36
- "analyze": "size-limit --why",
37
+ "start": "tsdx watch",
37
38
  "storybook": "start-storybook -p 6006",
38
- "build-storybook": "build-storybook",
39
+ "test": "tsdx test --passWithNoTests",
39
40
  "upgrade": "ncu -u && npm i"
40
41
  },
41
42
  "husky": {
42
43
  "hooks": {
43
- "pre-commit": "tsdx lint"
44
+ "pre-commit": "tsdx lint && format"
44
45
  }
45
46
  },
46
47
  "module": "dist/material-react-table.esm.js",
@@ -55,24 +56,25 @@
55
56
  }
56
57
  ],
57
58
  "devDependencies": {
58
- "@babel/core": "^7.16.12",
59
+ "@babel/core": "^7.17.2",
59
60
  "@emotion/react": "^11.7.1",
60
61
  "@emotion/styled": "^11.6.0",
61
- "@faker-js/faker": "^6.0.0-alpha.5",
62
- "@mui/icons-material": "^5.3.1",
63
- "@mui/material": "^5.3.1",
64
- "@size-limit/preset-small-lib": "^7.0.5",
65
- "@storybook/addon-a11y": "^6.4.16",
66
- "@storybook/addon-actions": "^6.4.16",
62
+ "@etchteam/storybook-addon-status": "^4.2.0",
63
+ "@faker-js/faker": "^6.0.0-alpha.6",
64
+ "@mui/icons-material": "^5.4.1",
65
+ "@mui/material": "^5.4.1",
66
+ "@size-limit/preset-small-lib": "^7.0.8",
67
+ "@storybook/addon-a11y": "^6.4.19",
68
+ "@storybook/addon-actions": "^6.4.19",
67
69
  "@storybook/addon-console": "^1.2.3",
68
- "@storybook/addon-essentials": "^6.4.16",
70
+ "@storybook/addon-essentials": "^6.4.19",
69
71
  "@storybook/addon-info": "^5.3.21",
70
- "@storybook/addon-links": "^6.4.16",
71
- "@storybook/addon-storysource": "^6.4.16",
72
- "@storybook/addons": "^6.4.16",
73
- "@storybook/react": "^6.4.16",
72
+ "@storybook/addon-links": "^6.4.19",
73
+ "@storybook/addon-storysource": "^6.4.19",
74
+ "@storybook/addons": "^6.4.19",
75
+ "@storybook/react": "^6.4.19",
74
76
  "@types/faker": "^6.6.8",
75
- "@types/react": "^17.0.38",
77
+ "@types/react": "^17.0.39",
76
78
  "@types/react-dom": "^17.0.11",
77
79
  "@types/react-table": "^7.7.9",
78
80
  "babel-loader": "^8.2.3",
@@ -82,7 +84,8 @@
82
84
  "react-dom": "^17.0.2",
83
85
  "react-is": "^17.0.2",
84
86
  "react-table": "^7.7.0",
85
- "size-limit": "^7.0.5",
87
+ "size-limit": "^7.0.8",
88
+ "storybook-addon-paddings": "^4.2.1",
86
89
  "storybook-addon-performance": "^0.16.1",
87
90
  "storybook-dark-mode": "^1.0.8",
88
91
  "tsdx": "^0.14.1",
@@ -93,7 +96,7 @@
93
96
  "@emotion/react": ">=11",
94
97
  "@mui/icons-material": ">=5",
95
98
  "@mui/material": ">=5",
96
- "react": ">=17",
99
+ "react": ">=16.8",
97
100
  "react-table": ">=7"
98
101
  }
99
102
  }
@@ -0,0 +1,4 @@
1
+ declare module '@faker-js/faker' {
2
+ import faker from 'faker';
3
+ export default faker;
4
+ }
@@ -0,0 +1,156 @@
1
+ import { ChangeEvent, ReactNode } from 'react';
2
+ import { TableCellProps, TextFieldProps } from '@mui/material';
3
+ import {
4
+ UseColumnOrderInstanceProps,
5
+ UseColumnOrderState,
6
+ UseExpandedHooks,
7
+ UseExpandedInstanceProps,
8
+ UseExpandedOptions,
9
+ UseExpandedRowProps,
10
+ UseExpandedState,
11
+ UseFiltersColumnOptions,
12
+ UseFiltersColumnProps,
13
+ UseFiltersInstanceProps,
14
+ UseFiltersOptions,
15
+ UseFiltersState,
16
+ UseGlobalFiltersColumnOptions,
17
+ UseGlobalFiltersInstanceProps,
18
+ UseGlobalFiltersOptions,
19
+ UseGlobalFiltersState,
20
+ UseGroupByCellProps,
21
+ UseGroupByColumnOptions,
22
+ UseGroupByColumnProps,
23
+ UseGroupByHooks,
24
+ UseGroupByInstanceProps,
25
+ UseGroupByOptions,
26
+ UseGroupByRowProps,
27
+ UseGroupByState,
28
+ UsePaginationInstanceProps,
29
+ UsePaginationOptions,
30
+ UsePaginationState,
31
+ UseResizeColumnsColumnOptions,
32
+ UseResizeColumnsColumnProps,
33
+ UseResizeColumnsOptions,
34
+ UseResizeColumnsState,
35
+ UseRowSelectHooks,
36
+ UseRowSelectInstanceProps,
37
+ UseRowSelectOptions,
38
+ UseRowSelectRowProps,
39
+ UseRowSelectState,
40
+ UseRowStateCellProps,
41
+ UseRowStateInstanceProps,
42
+ UseRowStateOptions,
43
+ UseRowStateRowProps,
44
+ UseRowStateState,
45
+ UseSortByColumnOptions,
46
+ UseSortByColumnProps,
47
+ UseSortByHooks,
48
+ UseSortByInstanceProps,
49
+ UseSortByOptions,
50
+ UseSortByState,
51
+ } from 'react-table';
52
+
53
+ export type MRT_ColumnInterface<D extends {} = {}> =
54
+ UseFiltersColumnOptions<D> &
55
+ UseGlobalFiltersColumnOptions<D> &
56
+ UseGroupByColumnOptions<D> &
57
+ UseResizeColumnsColumnOptions<D> &
58
+ UseSortByColumnOptions<D> & {
59
+ disableFilters?: boolean;
60
+ Filter?: ({ column }: { column: HeaderGroup<D> }) => ReactNode;
61
+ editable?: boolean;
62
+ Edit?: ({ cell, onChange }: { cell: Cell<D> }) => ReactNode;
63
+ muiTableBodyCellProps?:
64
+ | TableCellProps
65
+ | ((cell: Cell<D>) => TableCellProps);
66
+ muiTableHeadCellProps?:
67
+ | TableCellProps
68
+ | ((column: Column<D>) => TableCellProps);
69
+ muiTableFooterCellProps?:
70
+ | TableCellProps
71
+ | ((column: Column<D>) => TableCellProps);
72
+ muiTableBodyCellEditTextFieldProps?:
73
+ | TextFieldProps
74
+ | ((cell: Cell<D>) => TextFieldProps);
75
+ muiTableHeadCellFilterTextFieldProps?:
76
+ | TextFieldProps
77
+ | ((column: Column<D>) => TextFieldProps);
78
+ onCellEditChange?: (
79
+ event: ChangeEvent<HTMLInputElement>,
80
+ cell: Cell<D>,
81
+ ) => void;
82
+ onFilterChange?: (
83
+ event: ChangeEvent<HTMLInputElement>,
84
+ filterValue: any,
85
+ ) => void;
86
+ };
87
+
88
+ declare module 'react-table' {
89
+ export interface TableOptions<D extends Record<string, unknown>>
90
+ extends UseExpandedOptions<D>,
91
+ UseFiltersOptions<D>,
92
+ UseGlobalFiltersOptions<D>,
93
+ UseGroupByOptions<D>,
94
+ UsePaginationOptions<D>,
95
+ UseResizeColumnsOptions<D>,
96
+ UseRowSelectOptions<D>,
97
+ UseRowStateOptions<D>,
98
+ UseSortByOptions<D>,
99
+ Record<string, any> {}
100
+
101
+ export interface Hooks<
102
+ D extends Record<string, unknown> = Record<string, unknown>,
103
+ > extends UseExpandedHooks<D>,
104
+ UseGroupByHooks<D>,
105
+ UseRowSelectHooks<D>,
106
+ UseSortByHooks<D> {}
107
+
108
+ export interface TableInstance<
109
+ D extends Record<string, unknown> = Record<string, unknown>,
110
+ > extends UseColumnOrderInstanceProps<D>,
111
+ UseExpandedInstanceProps<D>,
112
+ UseFiltersInstanceProps<D>,
113
+ UseGlobalFiltersInstanceProps<D>,
114
+ UseGroupByInstanceProps<D>,
115
+ UsePaginationInstanceProps<D>,
116
+ UseRowSelectInstanceProps<D>,
117
+ UseRowStateInstanceProps<D>,
118
+ UseSortByInstanceProps<D> {}
119
+
120
+ export interface TableState<
121
+ D extends Record<string, unknown> = Record<string, unknown>,
122
+ > extends UseColumnOrderState<D>,
123
+ UseExpandedState<D>,
124
+ UseFiltersState<D>,
125
+ UseGlobalFiltersState<D>,
126
+ UseGroupByState<D>,
127
+ UsePaginationState<D>,
128
+ UseResizeColumnsState<D>,
129
+ UseRowSelectState<D>,
130
+ UseRowStateState<D>,
131
+ UseSortByState<D> {}
132
+
133
+ export interface ColumnInterface<
134
+ D extends Record<string, unknown> = Record<string, unknown>,
135
+ > extends MRT_ColumnInterface {}
136
+
137
+ export interface ColumnInstance<
138
+ D extends Record<string, unknown> = Record<string, unknown>,
139
+ > extends UseFiltersColumnProps<D>,
140
+ UseGroupByColumnProps<D>,
141
+ UseResizeColumnsColumnProps<D>,
142
+ UseSortByColumnProps<D> {}
143
+
144
+ export interface Cell<
145
+ D extends Record<string, unknown> = Record<string, unknown>,
146
+ V = any,
147
+ > extends UseGroupByCellProps<D>,
148
+ UseRowStateCellProps<D> {}
149
+
150
+ export interface Row<
151
+ D extends Record<string, unknown> = Record<string, unknown>,
152
+ > extends UseExpandedRowProps<D>,
153
+ UseGroupByRowProps<D>,
154
+ UseRowSelectRowProps<D>,
155
+ UseRowStateRowProps<D> {}
156
+ }
@@ -1,5 +1,6 @@
1
1
  import React, { ChangeEvent, MouseEvent, ReactNode } from 'react';
2
2
  import {
3
+ AlertProps,
3
4
  TableBodyProps,
4
5
  TableCellProps,
5
6
  TableContainerProps,
@@ -10,7 +11,6 @@ import {
10
11
  TableRowProps,
11
12
  TextFieldProps,
12
13
  ToolbarProps,
13
- TypographyProps,
14
14
  } from '@mui/material';
15
15
  import {
16
16
  Cell,
@@ -28,12 +28,15 @@ import {
28
28
  UseRowSelectOptions,
29
29
  UseRowStateOptions,
30
30
  UseSortByOptions,
31
+ UseTableOptions,
31
32
  } from 'react-table';
32
- import { MaterialReactTableProvider } from './useMaterialReactTable';
33
+ import { MaterialReactTableProvider } from './useMRT';
33
34
  import { MRT_TableContainer } from './table/MRT_TableContainer';
34
35
  import { defaultLocalization, MRT_Localization } from './utils/localization';
36
+ import { MRT_ColumnInterface } from './@types/react-table-config';
35
37
 
36
38
  export type MaterialReactTableProps<D extends {} = {}> = TableOptions<D> &
39
+ UseTableOptions<D> &
37
40
  UseExpandedOptions<D> &
38
41
  UseFiltersOptions<D> &
39
42
  UseGlobalFiltersOptions<D> &
@@ -43,14 +46,19 @@ export type MaterialReactTableProps<D extends {} = {}> = TableOptions<D> &
43
46
  UseRowSelectOptions<D> &
44
47
  UseRowStateOptions<D> &
45
48
  UseSortByOptions<D> & {
49
+ columns: (Column<D> & MRT_ColumnInterface)[];
46
50
  defaultDensePadding?: boolean;
51
+ defaultFullScreen?: boolean;
47
52
  defaultShowFilters?: boolean;
53
+ defaultShowSearchTextField?: boolean;
48
54
  disableColumnActions?: boolean;
49
55
  disableColumnHiding?: boolean;
50
56
  disableDensePaddingToggle?: boolean;
51
57
  disableExpandAll?: boolean;
58
+ disableFullScreenToggle?: boolean;
52
59
  disableSelectAll?: boolean;
53
60
  disableSubRowTree?: boolean;
61
+ enableRowNumbers?: boolean;
54
62
  enableColumnGrouping?: boolean;
55
63
  enableColumnResizing?: boolean;
56
64
  enableRowActions?: boolean;
@@ -65,6 +73,9 @@ export type MaterialReactTableProps<D extends {} = {}> = TableOptions<D> &
65
73
  isLoading?: boolean;
66
74
  localization?: Partial<MRT_Localization>;
67
75
  muiSearchTextFieldProps?: TextFieldProps;
76
+ muiTableBodyCellEditTextFieldProps?:
77
+ | TextFieldProps
78
+ | ((cell?: Cell<D>) => TextFieldProps);
68
79
  muiTableBodyCellProps?:
69
80
  | TableCellProps
70
81
  | ((cell?: Cell<D>) => TableCellProps);
@@ -81,6 +92,9 @@ export type MaterialReactTableProps<D extends {} = {}> = TableOptions<D> &
81
92
  muiTableFooterRowProps?:
82
93
  | TableRowProps
83
94
  | ((footerGroup: HeaderGroup<D>) => TableRowProps);
95
+ muiTableHeadCellFilterTextFieldProps?:
96
+ | TextFieldProps
97
+ | ((column: Column<D>) => TextFieldProps);
84
98
  muiTableHeadCellProps?:
85
99
  | TableCellProps
86
100
  | ((column: Column<D>) => TableCellProps);
@@ -92,7 +106,9 @@ export type MaterialReactTableProps<D extends {} = {}> = TableOptions<D> &
92
106
  | Partial<TablePaginationProps>
93
107
  | ((tableInstance: TableInstance<D>) => Partial<TablePaginationProps>);
94
108
  muiTableProps?: TableProps;
95
- muiTableTitleProps?: TypographyProps;
109
+ muiTableToolbarAlertBannerProps?:
110
+ | AlertProps
111
+ | ((tableInstance: TableInstance<D>) => AlertProps);
96
112
  muiTableToolbarBottomProps?:
97
113
  | ToolbarProps
98
114
  | ((tableInstance: TableInstance<D>) => ToolbarProps);
@@ -103,6 +119,7 @@ export type MaterialReactTableProps<D extends {} = {}> = TableOptions<D> &
103
119
  event: MouseEvent<HTMLTableCellElement>,
104
120
  cell: Cell<D>,
105
121
  ) => void;
122
+ onColumnHide?: (column: Column<D>, visibleColumns: Column<D>[]) => void;
106
123
  onDetailPanelClick?: (
107
124
  event: MouseEvent<HTMLTableCellElement>,
108
125
  row: Row<D>,
@@ -122,17 +139,18 @@ export type MaterialReactTableProps<D extends {} = {}> = TableOptions<D> &
122
139
  positionActionsColumn?: 'first' | 'last';
123
140
  positionPagination?: 'bottom' | 'top' | 'both';
124
141
  positionToolbarActions?: 'bottom' | 'top';
125
- renderRowActions?: (
126
- row: Row<D>,
127
- tableInstance: TableInstance<D>,
128
- ) => ReactNode;
142
+ positionToolbarAlertBanner?: 'bottom' | 'top';
129
143
  renderDetailPanel?: (row: Row<D>) => ReactNode;
130
144
  renderRowActionMenuItems?: (
131
145
  rowData: Row<D>,
132
146
  tableInstance: TableInstance<D>,
133
147
  closeMenu: () => void,
134
148
  ) => ReactNode[];
135
- title?: string | ReactNode;
149
+ renderRowActions?: (
150
+ row: Row<D>,
151
+ tableInstance: TableInstance<D>,
152
+ ) => ReactNode;
153
+ renderToolbarCustomActions?: (tableInstance: TableInstance<D>) => ReactNode;
136
154
  };
137
155
 
138
156
  export default <D extends {}>({
@@ -141,14 +159,16 @@ export default <D extends {}>({
141
159
  positionActionsColumn = 'first',
142
160
  positionPagination = 'bottom',
143
161
  positionToolbarActions = 'top',
162
+ positionToolbarAlertBanner = 'top',
144
163
  ...rest
145
164
  }: MaterialReactTableProps<D>) => (
146
165
  <MaterialReactTableProvider
147
166
  defaultColumn={defaultColumn}
148
167
  localization={{ ...defaultLocalization, ...localization }}
149
- positionPagination={positionPagination}
150
168
  positionActionsColumn={positionActionsColumn}
169
+ positionPagination={positionPagination}
151
170
  positionToolbarActions={positionToolbarActions}
171
+ positionToolbarAlertBanner={positionToolbarAlertBanner}
152
172
  {...rest}
153
173
  >
154
174
  <MRT_TableContainer />
@@ -1,33 +1,16 @@
1
1
  import React, { FC } from 'react';
2
- import {
3
- alpha,
4
- CircularProgress,
5
- styled,
6
- TableBody as MuiTableBody,
7
- } from '@mui/material';
2
+ import { styled, TableBody as MuiTableBody } from '@mui/material';
8
3
  import { MRT_TableBodyRow } from './MRT_TableBodyRow';
9
- import { useMaterialReactTable } from '../useMaterialReactTable';
4
+ import { useMRT } from '../useMRT';
10
5
 
11
6
  const TableBody = styled(MuiTableBody)({
12
7
  overflowY: 'hidden',
13
8
  });
14
9
 
15
- const CircularProgressWrapper = styled('div')(({ theme }) => ({
16
- backgroundColor: alpha(theme.palette.background.paper, 0.5),
17
- display: 'grid',
18
- height: '100%',
19
- justifyContent: 'center',
20
- margin: 'auto',
21
- paddingTop: '5rem',
22
- position: 'fixed',
23
- width: 'calc(100% - 2rem)',
24
- }));
25
-
26
10
  interface Props {}
27
11
 
28
12
  export const MRT_TableBody: FC<Props> = () => {
29
- const { tableInstance, muiTableBodyProps, isLoading, manualPagination } =
30
- useMaterialReactTable();
13
+ const { tableInstance, muiTableBodyProps, manualPagination } = useMRT();
31
14
 
32
15
  const rows = manualPagination ? tableInstance.rows : tableInstance.page;
33
16
 
@@ -42,11 +25,6 @@ export const MRT_TableBody: FC<Props> = () => {
42
25
 
43
26
  return (
44
27
  <TableBody {...tableBodyProps}>
45
- {isLoading && (
46
- <CircularProgressWrapper>
47
- <CircularProgress />
48
- </CircularProgressWrapper>
49
- )}
50
28
  {rows.map((row) => {
51
29
  tableInstance.prepareRow(row);
52
30
  return <MRT_TableBodyRow key={row.getRowProps().key} row={row} />;
@@ -1,40 +1,61 @@
1
1
  import React, { FC, MouseEvent } from 'react';
2
- import { TableCell } from '@mui/material';
2
+ import { styled, TableCell as MuiTableCell } from '@mui/material';
3
3
  import { Cell } from 'react-table';
4
- import { useMaterialReactTable } from '../useMaterialReactTable';
4
+ import { useMRT } from '../useMRT';
5
+ import { MRT_EditCellTextField } from '../inputs/MRT_EditCellTextField';
6
+
7
+ export const MRT_StyledTableBodyCell = styled(MuiTableCell, {
8
+ shouldForwardProp: (prop) => prop !== 'densePadding',
9
+ })<{ densePadding?: boolean }>(({ densePadding }) => ({
10
+ padding: densePadding ? '0.5rem' : '1rem',
11
+ transition: 'all 0.2s ease-in-out',
12
+ whiteSpace: densePadding ? 'nowrap' : 'normal',
13
+ }));
5
14
 
6
15
  interface Props {
7
16
  cell: Cell;
8
17
  }
9
18
 
10
19
  export const MRT_TableBodyCell: FC<Props> = ({ cell }) => {
11
- const { onCellClick, muiTableBodyCellProps, densePadding } =
12
- useMaterialReactTable();
20
+ const {
21
+ onCellClick,
22
+ muiTableBodyCellProps,
23
+ densePadding,
24
+ currentEditingRow,
25
+ } = useMRT();
13
26
 
14
27
  const mTableCellBodyProps =
15
28
  muiTableBodyCellProps instanceof Function
16
29
  ? muiTableBodyCellProps(cell)
17
30
  : muiTableBodyCellProps;
18
31
 
32
+ const mcTableCellBodyProps =
33
+ cell.column.muiTableBodyCellProps instanceof Function
34
+ ? cell.column.muiTableBodyCellProps(cell)
35
+ : cell.column.muiTableBodyCellProps;
36
+
19
37
  const tableCellProps = {
20
38
  ...mTableCellBodyProps,
39
+ ...mcTableCellBodyProps,
21
40
  ...cell.getCellProps(),
22
41
  style: {
23
- padding: densePadding ? '0.5rem' : '1rem',
24
- transition: 'all 0.2s ease-in-out',
25
42
  ...cell.getCellProps().style,
26
43
  ...(mTableCellBodyProps?.style ?? {}),
44
+ ...(mcTableCellBodyProps?.style ?? {}),
27
45
  },
28
46
  };
29
47
 
30
48
  return (
31
- <TableCell
49
+ <MRT_StyledTableBodyCell
50
+ densePadding={densePadding}
32
51
  onClick={(event: MouseEvent<HTMLTableCellElement>) =>
33
52
  onCellClick?.(event, cell)
34
53
  }
35
54
  {...tableCellProps}
36
55
  >
37
- {cell.isPlaceholder ? null : cell.isAggregated ? (
56
+ {currentEditingRow?.id === cell.row.id ? (
57
+ <MRT_EditCellTextField cell={cell} />
58
+ ) : cell.isPlaceholder ? null : cell.isAggregated ? (
38
59
  cell.render('Aggregated')
39
60
  ) : cell.isGrouped ? (
40
61
  <span>
@@ -43,6 +64,6 @@ export const MRT_TableBodyCell: FC<Props> = ({ cell }) => {
43
64
  ) : (
44
65
  cell.render('Cell')
45
66
  )}
46
- </TableCell>
67
+ </MRT_StyledTableBodyCell>
47
68
  );
48
69
  };