material-react-table 0.3.0 → 0.3.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 (61) hide show
  1. package/dist/MaterialReactTable.d.ts +46 -44
  2. package/dist/buttons/MRT_EditActionButtons.d.ts +7 -0
  3. package/dist/buttons/MRT_ToggleFiltersButton.d.ts +4 -0
  4. package/dist/buttons/MRT_ToggleRowActionMenuButton.d.ts +7 -0
  5. package/dist/head/MRT_TableHeadCell.d.ts +1 -0
  6. package/dist/index.d.ts +2 -2
  7. package/dist/inputs/MRT_DensePaddingSwitch.d.ts +5 -0
  8. package/dist/material-react-table.cjs.development.js +1459 -412
  9. package/dist/material-react-table.cjs.development.js.map +1 -1
  10. package/dist/material-react-table.cjs.production.min.js +1 -1
  11. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  12. package/dist/material-react-table.esm.js +1474 -427
  13. package/dist/material-react-table.esm.js.map +1 -1
  14. package/dist/menus/MRT_RowActionMenu.d.ts +9 -0
  15. package/dist/{footer → toolbar}/MRT_TablePagination.d.ts +0 -0
  16. package/dist/toolbar/MRT_ToolbarBottom.d.ts +5 -0
  17. package/dist/toolbar/MRT_ToolbarButtons.d.ts +5 -0
  18. package/dist/toolbar/{MRT_Toolbar.d.ts → MRT_ToolbarTop.d.ts} +1 -1
  19. package/dist/useMaterialReactTable.d.ts +7 -1
  20. package/dist/utils/localization.d.ts +22 -14
  21. package/package.json +15 -13
  22. package/src/MaterialReactTable.tsx +117 -100
  23. package/src/body/MRT_TableBody.tsx +26 -27
  24. package/src/body/MRT_TableBodyCell.tsx +17 -6
  25. package/src/body/MRT_TableBodyRow.tsx +39 -23
  26. package/src/body/MRT_TableDetailPanel.tsx +38 -14
  27. package/src/buttons/MRT_EditActionButtons.tsx +51 -0
  28. package/src/buttons/MRT_ExpandAllButton.tsx +9 -4
  29. package/src/buttons/MRT_ExpandButton.tsx +12 -6
  30. package/src/buttons/MRT_ShowHideColumnsButton.tsx +12 -12
  31. package/src/buttons/MRT_ToggleColumnActionMenuButton.tsx +1 -1
  32. package/src/buttons/MRT_ToggleFiltersButton.tsx +23 -0
  33. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +65 -0
  34. package/src/footer/MRT_TableFooter.tsx +2 -17
  35. package/src/footer/MRT_TableFooterCell.tsx +18 -7
  36. package/src/footer/MRT_TableFooterRow.tsx +28 -14
  37. package/src/head/MRT_TableHead.tsx +6 -18
  38. package/src/head/MRT_TableHeadCell.tsx +37 -17
  39. package/src/head/MRT_TableHeadRow.tsx +42 -14
  40. package/src/index.tsx +2 -5
  41. package/src/inputs/MRT_DensePaddingSwitch.tsx +21 -0
  42. package/src/inputs/MRT_FilterTextField.tsx +5 -0
  43. package/src/inputs/MRT_SearchTextField.tsx +4 -4
  44. package/src/inputs/MRT_SelectAllCheckbox.tsx +11 -3
  45. package/src/inputs/MRT_SelectCheckbox.tsx +9 -2
  46. package/src/menus/MRT_ColumnActionMenu.tsx +29 -24
  47. package/src/menus/MRT_RowActionMenu.tsx +52 -0
  48. package/src/menus/MRT_ShowHideColumnsMenu.tsx +2 -2
  49. package/src/table/MRT_Table.tsx +13 -4
  50. package/src/table/MRT_TableContainer.tsx +9 -5
  51. package/src/table/MRT_TableSpacerCell.tsx +17 -1
  52. package/src/toolbar/MRT_TablePagination.tsx +37 -0
  53. package/src/toolbar/MRT_ToolbarBottom.tsx +58 -0
  54. package/src/toolbar/MRT_ToolbarButtons.tsx +27 -0
  55. package/src/toolbar/MRT_ToolbarTop.tsx +81 -0
  56. package/src/useMaterialReactTable.tsx +36 -32
  57. package/src/utils/localization.ts +32 -16
  58. package/dist/utils/overrideWarnings.d.ts +0 -1
  59. package/src/footer/MRT_TablePagination.tsx +0 -42
  60. package/src/toolbar/MRT_Toolbar.tsx +0 -39
  61. package/src/utils/overrideWarnings.ts +0 -41
@@ -0,0 +1,9 @@
1
+ import { FC } from 'react';
2
+ import { Row } from 'react-table';
3
+ interface Props {
4
+ anchorEl: HTMLElement | null;
5
+ row: Row;
6
+ setAnchorEl: (anchorEl: HTMLElement | null) => void;
7
+ }
8
+ export declare const MRT_RowActionMenu: FC<Props>;
9
+ export {};
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ interface Props {
3
+ }
4
+ export declare const MRT_ToolbarBottom: FC<Props>;
5
+ export {};
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ interface Props {
3
+ }
4
+ export declare const MRT_ToolbarButtons: FC<Props>;
5
+ export {};
@@ -1,5 +1,5 @@
1
1
  import { FC } from 'react';
2
2
  interface Props {
3
3
  }
4
- export declare const MRT_Toolbar: FC<Props>;
4
+ export declare const MRT_ToolbarTop: FC<Props>;
5
5
  export {};
@@ -3,7 +3,13 @@ import { TableInstance } from 'react-table';
3
3
  import { MaterialReactTableProps } from './MaterialReactTable';
4
4
  import { UseMRTCalcs } from './utils/useMRTCalcs';
5
5
  export interface UseMaterialReactTable<D extends {}> extends MaterialReactTableProps<D>, UseMRTCalcs {
6
+ currentEditingRowId: string | null;
7
+ densePadding: boolean;
8
+ setCurrentEditingRowId: (currentRowEditingId: string | null) => void;
9
+ setDensePadding: (densePadding: boolean) => void;
10
+ setShowFilters: (showFilters: boolean) => void;
11
+ showFilters: boolean;
6
12
  tableInstance: TableInstance<D>;
7
13
  }
8
- export declare const MaterialReactTableProvider: <D extends {}>({ children, columns, data, defaultColumn, getRowId, getSubRows, initialState, stateReducer, surpressoverrideWarnings, ...rest }: React.PropsWithChildren<MaterialReactTableProps<D>>) => JSX.Element;
14
+ export declare const MaterialReactTableProvider: <D extends {}>(props: React.PropsWithChildren<MaterialReactTableProps<D>>) => JSX.Element;
9
15
  export declare const useMaterialReactTable: <D extends {}>() => UseMaterialReactTable<D>;
@@ -1,17 +1,25 @@
1
1
  export interface MRT_Localization {
2
- columnActionMenuButtonTitle?: string;
3
- columnActionMenuItemHideColumn?: string;
4
- columnActionMenuItemSortAsc?: string;
5
- columnActionMenuItemClearSort?: string;
6
- columnActionMenuItemSortDesc?: string;
7
- columnActionMenuItemGroupBy?: string;
8
- columnActionMenuItemUnGroupBy?: string;
9
- expandAllButtonTitle?: string;
10
- expandButtonTitle?: string;
11
- filterTextFieldClearButtonTitle?: string;
12
- filterTextFieldPlaceholder?: string;
13
- searchTextFieldClearButtonTitle?: string;
14
- searchTextFieldPlaceholder?: string;
15
- showHideColumnsButtonTitle?: string;
2
+ actionsHeadColumnTitle: string;
3
+ columnActionMenuButtonTitle: string;
4
+ columnActionMenuItemClearSort: string;
5
+ columnActionMenuItemGroupBy: string;
6
+ columnActionMenuItemHideColumn: string;
7
+ columnActionMenuItemSortAsc: string;
8
+ columnActionMenuItemSortDesc: string;
9
+ columnActionMenuItemUnGroupBy: string;
10
+ expandAllButtonTitle: string;
11
+ expandButtonTitle: string;
12
+ filterTextFieldClearButtonTitle: string;
13
+ filterTextFieldPlaceholder: string;
14
+ rowActionMenuButtonTitle: string;
15
+ rowActionsColumnTitle: string;
16
+ rowActionButtonSave: string;
17
+ rowActionButtonCancel: string;
18
+ rowActionMenuItemEdit: string;
19
+ searchTextFieldClearButtonTitle: string;
20
+ searchTextFieldPlaceholder: string;
21
+ showHideColumnsButtonTitle: string;
22
+ toggleDensePaddingSwitchTitle: string;
23
+ toggleFilterButtonTitle: string;
16
24
  }
17
25
  export declare const defaultLocalization: MRT_Localization;
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.3.0",
2
+ "version": "0.3.1",
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.",
@@ -35,7 +35,8 @@
35
35
  "size": "size-limit",
36
36
  "analyze": "size-limit --why",
37
37
  "storybook": "start-storybook -p 6006",
38
- "build-storybook": "build-storybook"
38
+ "build-storybook": "build-storybook",
39
+ "upgrade": "ncu -u && npm i"
39
40
  },
40
41
  "husky": {
41
42
  "hooks": {
@@ -54,22 +55,22 @@
54
55
  }
55
56
  ],
56
57
  "devDependencies": {
57
- "@babel/core": "^7.16.10",
58
+ "@babel/core": "^7.16.12",
58
59
  "@emotion/react": "^11.7.1",
59
60
  "@emotion/styled": "^11.6.0",
60
- "@faker-js/faker": "^6.0.0-alpha.3",
61
- "@mui/icons-material": "^5.3.0",
62
- "@mui/material": "^5.3.0",
61
+ "@faker-js/faker": "^6.0.0-alpha.5",
62
+ "@mui/icons-material": "^5.3.1",
63
+ "@mui/material": "^5.3.1",
63
64
  "@size-limit/preset-small-lib": "^7.0.5",
64
- "@storybook/addon-a11y": "^6.4.13",
65
- "@storybook/addon-actions": "^6.4.13",
65
+ "@storybook/addon-a11y": "^6.4.16",
66
+ "@storybook/addon-actions": "^6.4.16",
66
67
  "@storybook/addon-console": "^1.2.3",
67
- "@storybook/addon-essentials": "^6.4.13",
68
+ "@storybook/addon-essentials": "^6.4.16",
68
69
  "@storybook/addon-info": "^5.3.21",
69
- "@storybook/addon-links": "^6.4.13",
70
- "@storybook/addon-storysource": "^6.4.13",
71
- "@storybook/addons": "^6.4.13",
72
- "@storybook/react": "^6.4.13",
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",
73
74
  "@types/faker": "^6.6.8",
74
75
  "@types/react": "^17.0.38",
75
76
  "@types/react-dom": "^17.0.11",
@@ -83,6 +84,7 @@
83
84
  "react-table": "^7.7.0",
84
85
  "size-limit": "^7.0.5",
85
86
  "storybook-addon-performance": "^0.16.1",
87
+ "storybook-dark-mode": "^1.0.8",
86
88
  "tsdx": "^0.14.1",
87
89
  "tslib": "^2.3.1",
88
90
  "typescript": "^4.5.5"
@@ -7,131 +7,148 @@ import {
7
7
  TableHeadProps,
8
8
  TablePaginationProps,
9
9
  TableProps,
10
+ TableRowProps,
10
11
  TextFieldProps,
11
12
  ToolbarProps,
12
13
  TypographyProps,
13
14
  } from '@mui/material';
14
15
  import {
15
16
  Cell,
17
+ Column,
16
18
  HeaderGroup,
17
19
  Row,
18
20
  TableInstance,
19
21
  TableOptions,
22
+ UseExpandedOptions,
23
+ UseFiltersOptions,
24
+ UseGlobalFiltersOptions,
25
+ UseGroupByOptions,
26
+ UsePaginationOptions,
27
+ UseResizeColumnsOptions,
28
+ UseRowSelectOptions,
29
+ UseRowStateOptions,
30
+ UseSortByOptions,
20
31
  } from 'react-table';
21
32
  import { MaterialReactTableProvider } from './useMaterialReactTable';
22
33
  import { MRT_TableContainer } from './table/MRT_TableContainer';
23
34
  import { defaultLocalization, MRT_Localization } from './utils/localization';
24
35
 
25
- export interface MaterialReactTableProps<D extends {} = {}>
26
- extends TableOptions<D> {
27
- enableColumnActions?: boolean;
28
- enableColumnGrouping?: boolean;
29
- enableColumnHiding?: boolean;
30
- enableColumnReordering?: boolean;
31
- enableColumnResizing?: boolean;
32
- enableExpandAll?: boolean;
33
- enableFiltering?: boolean;
34
- enablePagination?: boolean;
35
- enableSearch?: boolean;
36
- enableSelectAll?: boolean;
37
- enableSelection?: boolean;
38
- enableSorting?: boolean;
39
- enableSubRowTree?: boolean;
40
- isFetching?: boolean;
41
- isLoading?: boolean;
42
- localization?: Partial<MRT_Localization>;
43
- onCellClick?: (
44
- event: MouseEvent<HTMLTableCellElement>,
45
- cell: Cell<D>,
46
- ) => void;
47
- onRowClick?: (event: MouseEvent<HTMLTableRowElement>, row: Row<D>) => void;
48
- onRowExpandChange?: (
49
- event: MouseEvent<HTMLButtonElement>,
50
- row: Row<D>,
51
- ) => void;
52
- onRowSelectChange?: (
53
- event: ChangeEvent,
54
- row: Row<D>,
55
- selectedRows: Row<D>[],
56
- ) => void;
57
- onSearchChange?: (event: ChangeEvent<HTMLInputElement>) => void;
58
- overrideTableBodyCellComponent?(
59
- cell: Cell<D>,
60
- tableInstance: TableInstance<D>,
61
- ): ReactNode;
62
- overrideTableBodyComponent?(tableInstance: TableInstance<D>): ReactNode;
63
- overrideTableBodyRowComponent?(
64
- row: Row<D>,
65
- tableInstance: TableInstance<D>,
66
- ): ReactNode;
67
- overrideTableDetailPanelComponent?(
68
- row: Row<D>,
69
- tableInstance: TableInstance<D>,
70
- ): ReactNode;
71
- overrideTableFooterCellComponent?(
72
- column: HeaderGroup<D>,
73
- tableInstance: TableInstance<D>,
74
- ): ReactNode;
75
- overrideTableFooterComponent?(tableInstance: TableInstance<D>): ReactNode;
76
- overrideTableFooterRowComponent?(
77
- footerGroup: HeaderGroup<D>,
78
- tableInstance: TableInstance<D>,
79
- ): ReactNode;
80
- overrideTableHeadCellComponent?(
81
- column: HeaderGroup<D>,
82
- tableInstance: TableInstance<D>,
83
- ): ReactNode;
84
- overrideTableHeadComponent?(tableInstance: TableInstance<D>): ReactNode;
85
- overrideTableHeadRowComponent?(
86
- headerGroup: HeaderGroup<D>,
87
- tableInstance: TableInstance<D>,
88
- ): ReactNode;
89
- overrideTablePaginationComponent?(tableInstance: TableInstance<D>): ReactNode;
90
- overrideTableToolbarComponent?(tableInstance: TableInstance<D>): ReactNode;
91
- positionPagination?: 'bottom' | 'top' | 'both';
92
- renderDetailPanel?: (rowData: Row<D>) => ReactNode;
93
- showFiltersInColumnHead?: boolean;
94
- showFooter?: boolean;
95
- showHead?: boolean;
96
- showToolbar?: boolean;
97
- surpressoverrideWarnings?: boolean;
98
- tableBodyProps?: TableBodyProps;
99
- tableContainerProps?: TableContainerProps;
100
- tableDetailPanelProps?: TableCellProps;
101
- tableFooterProps?: TableFooterProps;
102
- tableHeadProps?: TableHeadProps;
103
- tablePaginationProps?: TablePaginationProps;
104
- tableProps?: TableProps;
105
- tableSearchTextfieldProps?: TextFieldProps;
106
- tableTitleProps?: TypographyProps;
107
- tableToolbarProps?: ToolbarProps;
108
- title?: string | ReactNode;
109
- }
36
+ export type MaterialReactTableProps<D extends {} = {}> = TableOptions<D> &
37
+ UseExpandedOptions<D> &
38
+ UseFiltersOptions<D> &
39
+ UseGlobalFiltersOptions<D> &
40
+ UseGroupByOptions<D> &
41
+ UsePaginationOptions<D> &
42
+ UseResizeColumnsOptions<D> &
43
+ UseRowSelectOptions<D> &
44
+ UseRowStateOptions<D> &
45
+ UseSortByOptions<D> & {
46
+ defaultDensePadding?: boolean;
47
+ defaultShowFilters?: boolean;
48
+ disableColumnActions?: boolean;
49
+ disableColumnHiding?: boolean;
50
+ disableDensePaddingToggle?: boolean;
51
+ disableExpandAll?: boolean;
52
+ disableSelectAll?: boolean;
53
+ disableSubRowTree?: boolean;
54
+ enableColumnGrouping?: boolean;
55
+ enableColumnResizing?: boolean;
56
+ enableRowActions?: boolean;
57
+ enableRowEditing?: boolean;
58
+ enableSelection?: boolean;
59
+ hideTableFooter?: boolean;
60
+ hideTableHead?: boolean;
61
+ hideToolbarActions?: boolean;
62
+ hideToolbarBottom?: boolean;
63
+ hideToolbarTop?: boolean;
64
+ isFetching?: boolean;
65
+ isLoading?: boolean;
66
+ localization?: Partial<MRT_Localization>;
67
+ muiSearchTextFieldProps?: TextFieldProps;
68
+ muiTableBodyCellProps?:
69
+ | TableCellProps
70
+ | ((cell?: Cell<D>) => TableCellProps);
71
+ muiTableBodyProps?: TableBodyProps;
72
+ muiTableBodyRowProps?: TableRowProps | ((row: Row<D>) => TableRowProps);
73
+ muiTableContainerProps?: TableContainerProps;
74
+ muiTableDetailPanelProps?:
75
+ | TableCellProps
76
+ | ((row: Row<D>) => TableCellProps);
77
+ muiTableFooterCellProps?:
78
+ | TableCellProps
79
+ | ((column: Column<D>) => TableCellProps);
80
+ muiTableFooterProps?: TableFooterProps;
81
+ muiTableFooterRowProps?:
82
+ | TableRowProps
83
+ | ((footerGroup: HeaderGroup<D>) => TableRowProps);
84
+ muiTableHeadCellProps?:
85
+ | TableCellProps
86
+ | ((column: Column<D>) => TableCellProps);
87
+ muiTableHeadProps?: TableHeadProps;
88
+ muiTableHeadRowProps?:
89
+ | TableRowProps
90
+ | ((row: HeaderGroup<D>) => TableRowProps);
91
+ muiTablePaginationProps?:
92
+ | Partial<TablePaginationProps>
93
+ | ((tableInstance: TableInstance<D>) => Partial<TablePaginationProps>);
94
+ muiTableProps?: TableProps;
95
+ muiTableTitleProps?: TypographyProps;
96
+ muiTableToolbarBottomProps?:
97
+ | ToolbarProps
98
+ | ((tableInstance: TableInstance<D>) => ToolbarProps);
99
+ muiTableToolbarTopProps?:
100
+ | ToolbarProps
101
+ | ((tableInstance: TableInstance<D>) => ToolbarProps);
102
+ onCellClick?: (
103
+ event: MouseEvent<HTMLTableCellElement>,
104
+ cell: Cell<D>,
105
+ ) => void;
106
+ onDetailPanelClick?: (
107
+ event: MouseEvent<HTMLTableCellElement>,
108
+ row: Row<D>,
109
+ ) => void;
110
+ onGlobalFilterChange?: (event: ChangeEvent<HTMLInputElement>) => void;
111
+ onRowClick?: (event: MouseEvent<HTMLTableRowElement>, row: Row<D>) => void;
112
+ onRowEditSubmit?: (row: Row<D>) => Promise<void> | void;
113
+ onRowExpandChange?: (
114
+ event: MouseEvent<HTMLButtonElement>,
115
+ row: Row<D>,
116
+ ) => void;
117
+ onRowSelectChange?: (
118
+ event: ChangeEvent,
119
+ row: Row<D>,
120
+ selectedRows: Row<D>[],
121
+ ) => void;
122
+ positionActionsColumn?: 'first' | 'last';
123
+ positionPagination?: 'bottom' | 'top' | 'both';
124
+ positionToolbarActions?: 'bottom' | 'top';
125
+ renderRowActions?: (
126
+ row: Row<D>,
127
+ tableInstance: TableInstance<D>,
128
+ ) => ReactNode;
129
+ renderDetailPanel?: (row: Row<D>) => ReactNode;
130
+ renderRowActionMenuItems?: (
131
+ rowData: Row<D>,
132
+ tableInstance: TableInstance<D>,
133
+ closeMenu: () => void,
134
+ ) => ReactNode[];
135
+ title?: string | ReactNode;
136
+ };
110
137
 
111
- export const MaterialReactTable = <D extends {}>({
138
+ export default <D extends {}>({
112
139
  defaultColumn = { minWidth: 50, maxWidth: 1000 },
113
- enablePagination = true,
114
- enableSorting = true,
115
- enableSubRowTree = true,
116
140
  localization = defaultLocalization,
141
+ positionActionsColumn = 'first',
117
142
  positionPagination = 'bottom',
118
- showFiltersInColumnHead = true,
119
- showFooter = true,
120
- showHead = true,
121
- showToolbar = true,
143
+ positionToolbarActions = 'top',
122
144
  ...rest
123
145
  }: MaterialReactTableProps<D>) => (
124
146
  <MaterialReactTableProvider
125
147
  defaultColumn={defaultColumn}
126
- enablePagination={enablePagination}
127
- enableSorting={enableSorting}
128
- enableSubRowTree={enableSubRowTree}
129
148
  localization={{ ...defaultLocalization, ...localization }}
130
149
  positionPagination={positionPagination}
131
- showFiltersInColumnHead={showFiltersInColumnHead}
132
- showFooter={showFooter}
133
- showHead={showHead}
134
- showToolbar={showToolbar}
150
+ positionActionsColumn={positionActionsColumn}
151
+ positionToolbarActions={positionToolbarActions}
135
152
  {...rest}
136
153
  >
137
154
  <MRT_TableContainer />
@@ -1,5 +1,6 @@
1
1
  import React, { FC } from 'react';
2
2
  import {
3
+ alpha,
3
4
  CircularProgress,
4
5
  styled,
5
6
  TableBody as MuiTableBody,
@@ -11,8 +12,8 @@ const TableBody = styled(MuiTableBody)({
11
12
  overflowY: 'hidden',
12
13
  });
13
14
 
14
- const CircularProgressWrapper = styled('div')({
15
- backgroundColor: 'rgba(255, 255, 255, 0.5)',
15
+ const CircularProgressWrapper = styled('div')(({ theme }) => ({
16
+ backgroundColor: alpha(theme.palette.background.paper, 0.5),
16
17
  display: 'grid',
17
18
  height: '100%',
18
19
  justifyContent: 'center',
@@ -20,38 +21,36 @@ const CircularProgressWrapper = styled('div')({
20
21
  paddingTop: '5rem',
21
22
  position: 'fixed',
22
23
  width: 'calc(100% - 2rem)',
23
- });
24
+ }));
24
25
 
25
26
  interface Props {}
26
27
 
27
28
  export const MRT_TableBody: FC<Props> = () => {
28
- const {
29
- tableInstance,
30
- tableBodyProps,
31
- isLoading,
32
- enablePagination,
33
- overrideTableBodyComponent,
34
- } = useMaterialReactTable();
29
+ const { tableInstance, muiTableBodyProps, isLoading, manualPagination } =
30
+ useMaterialReactTable();
35
31
 
36
- if (overrideTableBodyComponent) {
37
- return <>{overrideTableBodyComponent(tableInstance)}</>;
38
- }
32
+ const rows = manualPagination ? tableInstance.rows : tableInstance.page;
39
33
 
40
- const rows = enablePagination ? tableInstance.page : tableInstance.rows;
34
+ const tableBodyProps = {
35
+ ...muiTableBodyProps,
36
+ ...tableInstance.getTableBodyProps(),
37
+ style: {
38
+ ...tableInstance.getTableBodyProps().style,
39
+ ...(muiTableBodyProps?.style ?? {}),
40
+ },
41
+ };
41
42
 
42
43
  return (
43
- <>
44
- <TableBody {...tableBodyProps} {...tableInstance.getTableBodyProps()}>
45
- {isLoading && (
46
- <CircularProgressWrapper>
47
- <CircularProgress />
48
- </CircularProgressWrapper>
49
- )}
50
- {rows.map((row, index) => {
51
- tableInstance.prepareRow(row);
52
- return <MRT_TableBodyRow key={`${index}-${row.id}`} row={row} />;
53
- })}
54
- </TableBody>
55
- </>
44
+ <TableBody {...tableBodyProps}>
45
+ {isLoading && (
46
+ <CircularProgressWrapper>
47
+ <CircularProgress />
48
+ </CircularProgressWrapper>
49
+ )}
50
+ {rows.map((row) => {
51
+ tableInstance.prepareRow(row);
52
+ return <MRT_TableBodyRow key={row.getRowProps().key} row={row} />;
53
+ })}
54
+ </TableBody>
56
55
  );
57
56
  };
@@ -8,20 +8,31 @@ interface Props {
8
8
  }
9
9
 
10
10
  export const MRT_TableBodyCell: FC<Props> = ({ cell }) => {
11
- const { tableInstance, overrideTableBodyCellComponent, onCellClick } =
11
+ const { onCellClick, muiTableBodyCellProps, densePadding } =
12
12
  useMaterialReactTable();
13
13
 
14
- if (overrideTableBodyCellComponent) {
15
- return <>{overrideTableBodyCellComponent(cell, tableInstance)}</>;
16
- }
14
+ const mTableCellBodyProps =
15
+ muiTableBodyCellProps instanceof Function
16
+ ? muiTableBodyCellProps(cell)
17
+ : muiTableBodyCellProps;
18
+
19
+ const tableCellProps = {
20
+ ...mTableCellBodyProps,
21
+ ...cell.getCellProps(),
22
+ style: {
23
+ padding: densePadding ? '0.5rem' : '1rem',
24
+ transition: 'all 0.2s ease-in-out',
25
+ ...cell.getCellProps().style,
26
+ ...(mTableCellBodyProps?.style ?? {}),
27
+ },
28
+ };
17
29
 
18
30
  return (
19
31
  <TableCell
20
32
  onClick={(event: MouseEvent<HTMLTableCellElement>) =>
21
33
  onCellClick?.(event, cell)
22
34
  }
23
- variant="body"
24
- {...cell.getCellProps()}
35
+ {...tableCellProps}
25
36
  >
26
37
  {cell.isPlaceholder ? null : cell.isAggregated ? (
27
38
  cell.render('Aggregated')
@@ -1,12 +1,12 @@
1
1
  import React, { FC, MouseEvent } from 'react';
2
- import { TableRow } from '@mui/material';
2
+ import { alpha, TableCell, TableRow, useTheme } from '@mui/material';
3
3
  import { Row } from 'react-table';
4
4
  import { MRT_TableBodyCell } from './MRT_TableBodyCell';
5
5
  import { useMaterialReactTable } from '../useMaterialReactTable';
6
6
  import { MRT_TableDetailPanel } from './MRT_TableDetailPanel';
7
7
  import { MRT_ExpandButton } from '../buttons/MRT_ExpandButton';
8
8
  import { MRT_SelectCheckbox } from '../inputs/MRT_SelectCheckbox';
9
- import { MRT_TableSpacerCell } from '../table/MRT_TableSpacerCell';
9
+ import { MRT_ToggleRowActionMenuButton } from '../buttons/MRT_ToggleRowActionMenuButton';
10
10
 
11
11
  interface Props {
12
12
  row: Row;
@@ -14,43 +14,59 @@ interface Props {
14
14
 
15
15
  export const MRT_TableBodyRow: FC<Props> = ({ row }) => {
16
16
  const {
17
- overrideTableBodyRowComponent,
18
17
  anyRowsCanExpand,
18
+ enableRowActions,
19
19
  enableSelection,
20
- enableSubRowTree,
21
- enableColumnHiding,
20
+ muiTableBodyRowProps,
22
21
  onRowClick,
22
+ positionActionsColumn,
23
23
  renderDetailPanel,
24
- tableInstance,
25
24
  } = useMaterialReactTable();
25
+ const theme = useTheme();
26
26
 
27
- if (overrideTableBodyRowComponent) {
28
- return <>{overrideTableBodyRowComponent(row, tableInstance)}</>;
29
- }
27
+ const mTableBodyRowProps =
28
+ muiTableBodyRowProps instanceof Function
29
+ ? muiTableBodyRowProps(row)
30
+ : muiTableBodyRowProps;
31
+
32
+ const tableRowProps = {
33
+ ...mTableBodyRowProps,
34
+ ...row.getRowProps(),
35
+ style: {
36
+ backgroundColor: row.isSelected
37
+ ? alpha(theme.palette.primary.light, 0.1)
38
+ : 'transparent',
39
+ ...row.getRowProps().style,
40
+ ...(mTableBodyRowProps?.style ?? {}),
41
+ },
42
+ };
30
43
 
31
44
  return (
32
45
  <>
33
46
  <TableRow
47
+ hover
34
48
  onClick={(event: MouseEvent<HTMLTableRowElement>) =>
35
49
  onRowClick?.(event, row)
36
50
  }
37
- {...row.getRowProps()}
51
+ {...tableRowProps}
38
52
  >
39
- {((enableSubRowTree && anyRowsCanExpand) || renderDetailPanel) &&
40
- (row.canExpand || renderDetailPanel ? (
41
- <MRT_ExpandButton row={row} />
42
- ) : (
43
- <MRT_TableSpacerCell
44
- width={`${
45
- renderDetailPanel ? 2 : tableInstance.expandedDepth + 0.5
46
- }rem`}
47
- />
48
- ))}
53
+ {enableRowActions && positionActionsColumn === 'first' && (
54
+ <TableCell>
55
+ <MRT_ToggleRowActionMenuButton row={row} />
56
+ </TableCell>
57
+ )}
58
+ {(anyRowsCanExpand || renderDetailPanel) && (
59
+ <MRT_ExpandButton row={row} />
60
+ )}
49
61
  {enableSelection && <MRT_SelectCheckbox row={row} />}
50
- {row.cells.map((cell, index) => (
51
- <MRT_TableBodyCell key={`${index}-${cell.value}`} cell={cell} />
62
+ {row.cells.map((cell) => (
63
+ <MRT_TableBodyCell key={cell.getCellProps().key} cell={cell} />
52
64
  ))}
53
- {enableColumnHiding && <MRT_TableSpacerCell />}
65
+ {enableRowActions && positionActionsColumn === 'last' && (
66
+ <TableCell>
67
+ <MRT_ToggleRowActionMenuButton row={row} />
68
+ </TableCell>
69
+ )}
54
70
  </TableRow>
55
71
  {renderDetailPanel && <MRT_TableDetailPanel row={row} />}
56
72
  </>