material-react-table 0.7.0-alpha.1 → 0.7.0-alpha.12

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 (53) hide show
  1. package/README.md +29 -21
  2. package/dist/MaterialReactTable.d.ts +236 -75
  3. package/dist/buttons/MRT_CopyButton.d.ts +1 -2
  4. package/dist/buttons/{MRT_ToggleSearchButton.d.ts → MRT_ToggleGlobalFilterButton.d.ts} +1 -1
  5. package/dist/localization.d.ts +1 -0
  6. package/dist/material-react-table.cjs.development.js +399 -1011
  7. package/dist/material-react-table.cjs.development.js.map +1 -1
  8. package/dist/material-react-table.cjs.production.min.js +1 -1
  9. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  10. package/dist/material-react-table.esm.js +400 -1012
  11. package/dist/material-react-table.esm.js.map +1 -1
  12. package/dist/utils.d.ts +1 -1
  13. package/package.json +7 -7
  14. package/src/MaterialReactTable.tsx +436 -143
  15. package/src/body/MRT_TableBody.tsx +1 -1
  16. package/src/body/MRT_TableBodyCell.tsx +11 -8
  17. package/src/body/MRT_TableBodyRow.tsx +2 -2
  18. package/src/body/MRT_TableDetailPanel.tsx +6 -4
  19. package/src/buttons/MRT_CopyButton.tsx +3 -4
  20. package/src/buttons/MRT_EditActionButtons.tsx +6 -4
  21. package/src/buttons/MRT_ExpandButton.tsx +1 -1
  22. package/src/buttons/MRT_FullScreenToggleButton.tsx +13 -3
  23. package/src/buttons/MRT_ToggleColumnActionMenuButton.tsx +5 -2
  24. package/src/buttons/MRT_ToggleDensePaddingButton.tsx +13 -3
  25. package/src/buttons/MRT_ToggleFiltersButton.tsx +13 -3
  26. package/src/buttons/MRT_ToggleGlobalFilterButton.tsx +57 -0
  27. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +7 -7
  28. package/src/footer/MRT_TableFooter.tsx +1 -1
  29. package/src/footer/MRT_TableFooterCell.tsx +2 -2
  30. package/src/footer/MRT_TableFooterRow.tsx +1 -1
  31. package/src/head/MRT_TableHead.tsx +1 -1
  32. package/src/head/MRT_TableHeadCell.tsx +23 -30
  33. package/src/head/MRT_TableHeadRow.tsx +1 -1
  34. package/src/inputs/MRT_EditCellTextField.tsx +27 -14
  35. package/src/inputs/MRT_FilterTextField.tsx +3 -3
  36. package/src/inputs/MRT_SearchTextField.tsx +10 -5
  37. package/src/inputs/MRT_SelectCheckbox.tsx +9 -7
  38. package/src/localization.ts +2 -1
  39. package/src/menus/MRT_ColumnActionMenu.tsx +4 -4
  40. package/src/menus/MRT_FilterTypeMenu.tsx +3 -6
  41. package/src/menus/MRT_RowActionMenu.tsx +7 -5
  42. package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +5 -6
  43. package/src/table/MRT_Table.tsx +1 -1
  44. package/src/table/MRT_TableContainer.tsx +20 -24
  45. package/src/table/MRT_TablePaper.tsx +9 -5
  46. package/src/table/MRT_TableRoot.tsx +44 -40
  47. package/src/toolbar/MRT_LinearProgressBar.tsx +1 -1
  48. package/src/toolbar/MRT_TablePagination.tsx +6 -2
  49. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +2 -1
  50. package/src/toolbar/MRT_ToolbarBottom.tsx +1 -1
  51. package/src/toolbar/MRT_ToolbarInternalButtons.tsx +12 -10
  52. package/src/toolbar/MRT_ToolbarTop.tsx +2 -2
  53. package/src/buttons/MRT_ToggleSearchButton.tsx +0 -46
@@ -22,7 +22,7 @@ export const MRT_TableBody: FC<Props> = ({ pinned, tableInstance }) => {
22
22
 
23
23
  const mTableBodyProps =
24
24
  muiTableBodyProps instanceof Function
25
- ? muiTableBodyProps(tableInstance)
25
+ ? muiTableBodyProps({ tableInstance })
26
26
  : muiTableBodyProps;
27
27
 
28
28
  const tableBodyProps = {
@@ -15,7 +15,8 @@ export const MRT_TableBodyCell: FC<Props> = ({ cell, tableInstance }) => {
15
15
  getState,
16
16
  options: {
17
17
  enableClickToCopy,
18
- enableColumnPinning,
18
+ enablePinning,
19
+ enableEditing,
19
20
  isLoading,
20
21
  muiTableBodyCellProps,
21
22
  muiTableBodyCellSkeletonProps,
@@ -29,12 +30,12 @@ export const MRT_TableBodyCell: FC<Props> = ({ cell, tableInstance }) => {
29
30
 
30
31
  const mTableCellBodyProps =
31
32
  muiTableBodyCellProps instanceof Function
32
- ? muiTableBodyCellProps(cell)
33
+ ? muiTableBodyCellProps({ cell, tableInstance })
33
34
  : muiTableBodyCellProps;
34
35
 
35
36
  const mcTableCellBodyProps =
36
37
  column.muiTableBodyCellProps instanceof Function
37
- ? column.muiTableBodyCellProps(cell)
38
+ ? column.muiTableBodyCellProps({ cell, tableInstance })
38
39
  : column.muiTableBodyCellProps;
39
40
 
40
41
  const tableCellProps = {
@@ -55,7 +56,7 @@ export const MRT_TableBodyCell: FC<Props> = ({ cell, tableInstance }) => {
55
56
  return (
56
57
  <TableCell
57
58
  onClick={(event: MouseEvent<HTMLTableCellElement>) =>
58
- onCellClick?.(event, cell)
59
+ onCellClick?.({ event, cell, tableInstance })
59
60
  }
60
61
  {...tableCellProps}
61
62
  sx={{
@@ -72,7 +73,7 @@ export const MRT_TableBodyCell: FC<Props> = ({ cell, tableInstance }) => {
72
73
  : undefined,
73
74
  transition: 'all 0.2s ease-in-out',
74
75
  whiteSpace:
75
- isDensePadding || (enableColumnPinning && getIsSomeColumnsPinned())
76
+ isDensePadding || (enablePinning && getIsSomeColumnsPinned())
76
77
  ? 'nowrap'
77
78
  : 'normal',
78
79
  //@ts-ignore
@@ -93,19 +94,21 @@ export const MRT_TableBodyCell: FC<Props> = ({ cell, tableInstance }) => {
93
94
  column.id !==
94
95
  row.groupingColumnId) ? null : cell.getIsAggregated() ? (
95
96
  cell.renderAggregatedCell()
96
- ) : column.enableEditing && currentEditingRow?.id === row.id ? (
97
+ ) : enableEditing &&
98
+ column.enableEditing !== false &&
99
+ currentEditingRow?.id === row.id ? (
97
100
  <MRT_EditCellTextField cell={cell} tableInstance={tableInstance} />
98
101
  ) : (enableClickToCopy || column.enableClickToCopy) &&
99
102
  column.enableClickToCopy !== false ? (
100
103
  <>
101
104
  <MRT_CopyButton cell={cell} tableInstance={tableInstance}>
102
- {cell.renderCell()}
105
+ {cell.column?.Cell?.({ cell, tableInstance }) ?? cell.renderCell()}
103
106
  </MRT_CopyButton>
104
107
  {row.getIsGrouped() && <> ({row.subRows?.length})</>}
105
108
  </>
106
109
  ) : (
107
110
  <>
108
- {cell.renderCell()}
111
+ {cell.column?.Cell?.({ cell, tableInstance }) ?? cell.renderCell()}
109
112
  {row.getIsGrouped() && <> ({row.subRows?.length})</>}
110
113
  </>
111
114
  )}
@@ -27,7 +27,7 @@ export const MRT_TableBodyRow: FC<Props> = ({ pinned, row, tableInstance }) => {
27
27
 
28
28
  const mTableBodyRowProps =
29
29
  muiTableBodyRowProps instanceof Function
30
- ? muiTableBodyRowProps(row)
30
+ ? muiTableBodyRowProps({ row, tableInstance })
31
31
  : muiTableBodyRowProps;
32
32
 
33
33
  const tableRowProps = {
@@ -47,7 +47,7 @@ export const MRT_TableBodyRow: FC<Props> = ({ pinned, row, tableInstance }) => {
47
47
  <TableRow
48
48
  hover
49
49
  onClick={(event: MouseEvent<HTMLTableRowElement>) =>
50
- onRowClick?.(event, row)
50
+ onRowClick?.({ event, row, tableInstance })
51
51
  }
52
52
  selected={getIsSelected()}
53
53
  {...tableRowProps}
@@ -20,12 +20,12 @@ export const MRT_TableDetailPanel: FC<Props> = ({ row, tableInstance }) => {
20
20
 
21
21
  const tableRowProps =
22
22
  muiTableBodyRowProps instanceof Function
23
- ? muiTableBodyRowProps(row)
23
+ ? muiTableBodyRowProps({ row, tableInstance })
24
24
  : muiTableBodyRowProps;
25
25
 
26
26
  const tableCellProps =
27
27
  muiTableDetailPanelProps instanceof Function
28
- ? muiTableDetailPanelProps(row)
28
+ ? muiTableDetailPanelProps({ row, tableInstance })
29
29
  : muiTableDetailPanelProps;
30
30
 
31
31
  return (
@@ -33,7 +33,7 @@ export const MRT_TableDetailPanel: FC<Props> = ({ row, tableInstance }) => {
33
33
  <TableCell
34
34
  colSpan={getVisibleFlatColumns().length + 10}
35
35
  onClick={(event: MouseEvent<HTMLTableCellElement>) =>
36
- onDetailPanelClick?.(event, row)
36
+ onDetailPanelClick?.({ event, row, tableInstance })
37
37
  }
38
38
  {...tableCellProps}
39
39
  sx={{
@@ -44,7 +44,9 @@ export const MRT_TableDetailPanel: FC<Props> = ({ row, tableInstance }) => {
44
44
  ...tableCellProps?.sx,
45
45
  }}
46
46
  >
47
- <Collapse in={row.getIsExpanded()}>{renderDetailPanel?.(row)}</Collapse>
47
+ <Collapse in={row.getIsExpanded()}>
48
+ {renderDetailPanel?.({ row, tableInstance })}
49
+ </Collapse>
48
50
  </TableCell>
49
51
  </TableRow>
50
52
  );
@@ -1,10 +1,9 @@
1
- import React, { FC, ReactNode, useState } from 'react';
1
+ import React, { FC, useState } from 'react';
2
2
  import { Button, Tooltip } from '@mui/material';
3
3
  import { MRT_Cell, MRT_TableInstance } from '..';
4
4
 
5
5
  interface Props {
6
6
  cell: MRT_Cell;
7
- children: ReactNode;
8
7
  tableInstance: MRT_TableInstance;
9
8
  }
10
9
 
@@ -27,12 +26,12 @@ export const MRT_CopyButton: FC<Props> = ({
27
26
 
28
27
  const mTableBodyCellCopyButtonProps =
29
28
  muiTableBodyCellCopyButtonProps instanceof Function
30
- ? muiTableBodyCellCopyButtonProps(cell)
29
+ ? muiTableBodyCellCopyButtonProps({ cell, tableInstance })
31
30
  : muiTableBodyCellCopyButtonProps;
32
31
 
33
32
  const mcTableBodyCellCopyButtonProps =
34
33
  cell.column.muiTableBodyCellCopyButtonProps instanceof Function
35
- ? cell.column.muiTableBodyCellCopyButtonProps(cell)
34
+ ? cell.column.muiTableBodyCellCopyButtonProps({ cell, tableInstance })
36
35
  : cell.column.muiTableBodyCellCopyButtonProps;
37
36
 
38
37
  const buttonProps = {
@@ -14,18 +14,20 @@ export const MRT_EditActionButtons: FC<Props> = ({ row, tableInstance }) => {
14
14
  options: {
15
15
  icons: { CancelIcon, SaveIcon },
16
16
  localization,
17
- onRowEditSubmit,
18
- setCurrentEditingRow,
17
+ onEditSubmit,
19
18
  },
19
+ setCurrentEditingRow,
20
20
  } = tableInstance;
21
21
 
22
+ const { currentEditingRow } = getState();
23
+
22
24
  const handleCancel = () => {
23
25
  row.values = (row.original as RowValues) ?? {};
24
26
  setCurrentEditingRow(null);
25
27
  };
26
28
 
27
- const handleSave = async () => {
28
- await onRowEditSubmit?.(getState().currentEditingRow ?? row);
29
+ const handleSave = () => {
30
+ onEditSubmit?.({ row: currentEditingRow ?? row, tableInstance });
29
31
  setCurrentEditingRow(null);
30
32
  };
31
33
 
@@ -22,7 +22,7 @@ export const MRT_ExpandButton: FC<Props> = ({ row, tableInstance }) => {
22
22
 
23
23
  const handleToggleExpand = (event: MouseEvent<HTMLButtonElement>) => {
24
24
  row.toggleExpanded();
25
- onRowExpandChange?.(event, row);
25
+ onRowExpandChange?.({ event, row, tableInstance });
26
26
  };
27
27
 
28
28
  return (
@@ -1,4 +1,4 @@
1
- import React, { FC } from 'react';
1
+ import React, { FC, MouseEvent } from 'react';
2
2
  import { IconButton, IconButtonProps, Tooltip } from '@mui/material';
3
3
  import { MRT_TableInstance } from '..';
4
4
 
@@ -15,17 +15,27 @@ export const MRT_FullScreenToggleButton: FC<Props> = ({
15
15
  options: {
16
16
  icons: { FullscreenExitIcon, FullscreenIcon },
17
17
  localization,
18
- setIsFullScreen,
18
+ onToggleFullScreen,
19
19
  },
20
+ setIsFullScreen,
20
21
  } = tableInstance;
21
22
 
22
23
  const { isFullScreen } = getState();
23
24
 
25
+ const handleToggleFullScreen = (event: MouseEvent<HTMLButtonElement>) => {
26
+ onToggleFullScreen?.({
27
+ event,
28
+ isFullScreen: !isFullScreen,
29
+ tableInstance,
30
+ });
31
+ setIsFullScreen(!isFullScreen);
32
+ };
33
+
24
34
  return (
25
35
  <Tooltip arrow title={localization.toggleFullScreen}>
26
36
  <IconButton
27
37
  aria-label={localization.showHideFilters}
28
- onClick={() => setIsFullScreen(!isFullScreen)}
38
+ onClick={handleToggleFullScreen}
29
39
  size="small"
30
40
  {...rest}
31
41
  >
@@ -32,12 +32,15 @@ export const MRT_ToggleColumnActionMenuButton: FC<Props> = ({
32
32
 
33
33
  const mTableHeadCellColumnActionsButtonProps =
34
34
  muiTableHeadCellColumnActionsButtonProps instanceof Function
35
- ? muiTableHeadCellColumnActionsButtonProps(column)
35
+ ? muiTableHeadCellColumnActionsButtonProps({ column, tableInstance })
36
36
  : muiTableHeadCellColumnActionsButtonProps;
37
37
 
38
38
  const mcTableHeadCellColumnActionsButtonProps =
39
39
  column.muiTableHeadCellColumnActionsButtonProps instanceof Function
40
- ? column.muiTableHeadCellColumnActionsButtonProps(column)
40
+ ? column.muiTableHeadCellColumnActionsButtonProps({
41
+ column,
42
+ tableInstance,
43
+ })
41
44
  : column.muiTableHeadCellColumnActionsButtonProps;
42
45
 
43
46
  const iconButtonProps = {
@@ -1,4 +1,4 @@
1
- import React, { FC } from 'react';
1
+ import React, { FC, MouseEvent } from 'react';
2
2
  import { IconButton, IconButtonProps, Tooltip } from '@mui/material';
3
3
  import { MRT_TableInstance } from '..';
4
4
 
@@ -15,17 +15,27 @@ export const MRT_ToggleDensePaddingButton: FC<Props> = ({
15
15
  options: {
16
16
  icons: { DensityMediumIcon, DensitySmallIcon },
17
17
  localization,
18
- setIsDensePadding,
18
+ onToggleDensePadding,
19
19
  },
20
+ setIsDensePadding,
20
21
  } = tableInstance;
21
22
 
22
23
  const { isDensePadding } = getState();
23
24
 
25
+ const handleToggleDensePadding = (event: MouseEvent<HTMLButtonElement>) => {
26
+ onToggleDensePadding?.({
27
+ event,
28
+ isDensePadding: !isDensePadding,
29
+ tableInstance,
30
+ });
31
+ setIsDensePadding(!isDensePadding);
32
+ };
33
+
24
34
  return (
25
35
  <Tooltip arrow title={localization.toggleDensePadding}>
26
36
  <IconButton
27
37
  aria-label={localization.toggleDensePadding}
28
- onClick={() => setIsDensePadding(!isDensePadding)}
38
+ onClick={handleToggleDensePadding}
29
39
  size="small"
30
40
  {...rest}
31
41
  >
@@ -1,4 +1,4 @@
1
- import React, { FC } from 'react';
1
+ import React, { FC, MouseEvent } from 'react';
2
2
  import { IconButton, IconButtonProps, Tooltip } from '@mui/material';
3
3
  import { MRT_TableInstance } from '..';
4
4
 
@@ -15,17 +15,27 @@ export const MRT_ToggleFiltersButton: FC<Props> = ({
15
15
  options: {
16
16
  icons: { FilterListIcon, FilterListOffIcon },
17
17
  localization,
18
- setShowFilters,
18
+ onToggleShowFilters,
19
19
  },
20
+ setShowFilters,
20
21
  } = tableInstance;
21
22
 
22
23
  const { showFilters } = getState();
23
24
 
25
+ const handleToggleShowFilters = (event: MouseEvent<HTMLButtonElement>) => {
26
+ onToggleShowFilters?.({
27
+ event,
28
+ showFilters: !showFilters,
29
+ tableInstance,
30
+ });
31
+ setShowFilters(!showFilters);
32
+ };
33
+
24
34
  return (
25
35
  <Tooltip arrow title={localization.showHideFilters}>
26
36
  <IconButton
27
37
  aria-label={localization.showHideFilters}
28
- onClick={() => setShowFilters(!showFilters)}
38
+ onClick={handleToggleShowFilters}
29
39
  size="small"
30
40
  {...rest}
31
41
  >
@@ -0,0 +1,57 @@
1
+ import React, { FC, MouseEvent } from 'react';
2
+ import { IconButton, IconButtonProps, Tooltip } from '@mui/material';
3
+ import { MRT_TableInstance } from '..';
4
+
5
+ interface Props extends IconButtonProps {
6
+ tableInstance: MRT_TableInstance;
7
+ }
8
+
9
+ export const MRT_ToggleGlobalFilterButton: FC<Props> = ({
10
+ tableInstance,
11
+ ...rest
12
+ }) => {
13
+ const {
14
+ getState,
15
+ options: {
16
+ icons: { SearchIcon, SearchOffIcon },
17
+ idPrefix,
18
+ localization,
19
+ muiSearchTextFieldProps,
20
+ onToggleShowGlobalFilter,
21
+ },
22
+ setShowGlobalFilter,
23
+ } = tableInstance;
24
+
25
+ const { showGlobalFilter } = getState();
26
+
27
+ const textFieldProps =
28
+ muiSearchTextFieldProps instanceof Function
29
+ ? muiSearchTextFieldProps({ tableInstance })
30
+ : muiSearchTextFieldProps;
31
+
32
+ const handleToggleSearch = (event: MouseEvent<HTMLButtonElement>) => {
33
+ onToggleShowGlobalFilter?.({
34
+ event,
35
+ showGlobalFilter: !showGlobalFilter,
36
+ tableInstance,
37
+ });
38
+ setShowGlobalFilter(!showGlobalFilter);
39
+ setTimeout(
40
+ () =>
41
+ document
42
+ .getElementById(
43
+ textFieldProps?.id ?? `mrt-${idPrefix}-search-text-field`,
44
+ )
45
+ ?.focus(),
46
+ 200,
47
+ );
48
+ };
49
+
50
+ return (
51
+ <Tooltip arrow title={localization.showHideSearch}>
52
+ <IconButton size="small" onClick={handleToggleSearch} {...rest}>
53
+ {showGlobalFilter ? <SearchOffIcon /> : <SearchIcon />}
54
+ </IconButton>
55
+ </Tooltip>
56
+ );
57
+ };
@@ -27,13 +27,13 @@ export const MRT_ToggleRowActionMenuButton: FC<Props> = ({
27
27
  const {
28
28
  getState,
29
29
  options: {
30
- enableRowEditing,
30
+ enableEditing,
31
31
  icons: { EditIcon, MoreHorizIcon },
32
32
  localization,
33
33
  renderRowActionMenuItems,
34
34
  renderRowActions,
35
- setCurrentEditingRow,
36
35
  },
36
+ setCurrentEditingRow,
37
37
  } = tableInstance;
38
38
 
39
39
  const { currentEditingRow } = getState();
@@ -46,7 +46,7 @@ export const MRT_ToggleRowActionMenuButton: FC<Props> = ({
46
46
  setAnchorEl(event.currentTarget);
47
47
  };
48
48
 
49
- const handleEdit = () => {
49
+ const handleStartEditMode = () => {
50
50
  setCurrentEditingRow({ ...row });
51
51
  setAnchorEl(null);
52
52
  };
@@ -54,12 +54,12 @@ export const MRT_ToggleRowActionMenuButton: FC<Props> = ({
54
54
  return (
55
55
  <>
56
56
  {renderRowActions ? (
57
- <>{renderRowActions(row, tableInstance)}</>
57
+ <>{renderRowActions({ row, tableInstance })}</>
58
58
  ) : row.id === currentEditingRow?.id ? (
59
59
  <MRT_EditActionButtons row={row} tableInstance={tableInstance} />
60
- ) : !renderRowActionMenuItems && enableRowEditing ? (
60
+ ) : !renderRowActionMenuItems && enableEditing ? (
61
61
  <Tooltip placement="right" arrow title={localization.edit}>
62
- <IconButton sx={commonIconButtonStyles} onClick={handleEdit}>
62
+ <IconButton sx={commonIconButtonStyles} onClick={handleStartEditMode}>
63
63
  <EditIcon />
64
64
  </IconButton>
65
65
  </Tooltip>
@@ -82,7 +82,7 @@ export const MRT_ToggleRowActionMenuButton: FC<Props> = ({
82
82
  </Tooltip>
83
83
  <MRT_RowActionMenu
84
84
  anchorEl={anchorEl}
85
- handleEdit={handleEdit}
85
+ handleEdit={handleStartEditMode}
86
86
  row={row}
87
87
  setAnchorEl={setAnchorEl}
88
88
  tableInstance={tableInstance}
@@ -19,7 +19,7 @@ export const MRT_TableFooter: FC<Props> = ({ pinned, tableInstance }) => {
19
19
 
20
20
  const tableFooterProps =
21
21
  muiTableFooterProps instanceof Function
22
- ? muiTableFooterProps(tableInstance)
22
+ ? muiTableFooterProps({ tableInstance })
23
23
  : muiTableFooterProps;
24
24
 
25
25
  const getFooterGroupsMap = {
@@ -19,12 +19,12 @@ export const MRT_TableFooterCell: FC<Props> = ({ footer, tableInstance }) => {
19
19
 
20
20
  const mTableFooterCellProps =
21
21
  muiTableFooterCellProps instanceof Function
22
- ? muiTableFooterCellProps(column)
22
+ ? muiTableFooterCellProps({ column, tableInstance })
23
23
  : muiTableFooterCellProps;
24
24
 
25
25
  const mcTableFooterCellProps =
26
26
  column.muiTableFooterCellProps instanceof Function
27
- ? column.muiTableFooterCellProps(column)
27
+ ? column.muiTableFooterCellProps({ column, tableInstance })
28
28
  : column.muiTableFooterCellProps;
29
29
 
30
30
  const tableCellProps = {
@@ -26,7 +26,7 @@ export const MRT_TableFooterRow: FC<Props> = ({
26
26
 
27
27
  const mTableFooterRowProps =
28
28
  muiTableFooterRowProps instanceof Function
29
- ? muiTableFooterRowProps(footerGroup)
29
+ ? muiTableFooterRowProps({ footerGroup, tableInstance })
30
30
  : muiTableFooterRowProps;
31
31
 
32
32
  const tableRowProps = {
@@ -19,7 +19,7 @@ export const MRT_TableHead: FC<Props> = ({ pinned, tableInstance }) => {
19
19
 
20
20
  const tableHeadProps =
21
21
  muiTableHeadProps instanceof Function
22
- ? muiTableHeadProps(tableInstance)
22
+ ? muiTableHeadProps({ tableInstance })
23
23
  : muiTableHeadProps;
24
24
 
25
25
  const getHeaderGroupsMap = {
@@ -30,8 +30,8 @@ export const MRT_TableHeadCell: FC<Props> = ({ header, tableInstance }) => {
30
30
  icons: { FilterAltIcon, FilterAltOff },
31
31
  localization,
32
32
  muiTableHeadCellProps,
33
- setShowFilters,
34
33
  },
34
+ setShowFilters,
35
35
  } = tableInstance;
36
36
 
37
37
  const { isDensePadding, showFilters } = getState();
@@ -40,12 +40,12 @@ export const MRT_TableHeadCell: FC<Props> = ({ header, tableInstance }) => {
40
40
 
41
41
  const mTableHeadCellProps =
42
42
  muiTableHeadCellProps instanceof Function
43
- ? muiTableHeadCellProps(column)
43
+ ? muiTableHeadCellProps({ column, tableInstance })
44
44
  : muiTableHeadCellProps;
45
45
 
46
46
  const mcTableHeadCellProps =
47
47
  column.muiTableHeadCellProps instanceof Function
48
- ? column.muiTableHeadCellProps(column)
48
+ ? column.muiTableHeadCellProps({ column, tableInstance })
49
49
  : column.muiTableHeadCellProps;
50
50
 
51
51
  const tableCellProps = {
@@ -57,35 +57,28 @@ export const MRT_TableHeadCell: FC<Props> = ({ header, tableInstance }) => {
57
57
  const sortTooltip = !!column.getIsSorted()
58
58
  ? column.getIsSorted() === 'desc'
59
59
  ? localization.clearSort
60
- : localization.sortByColumnDesc.replace(
61
- '{column}',
62
- column.header as string,
63
- )
64
- : localization.sortByColumnAsc.replace('{column}', column.header as string);
60
+ : localization.sortByColumnDesc.replace('{column}', column.header)
61
+ : localization.sortByColumnAsc.replace('{column}', column.header);
65
62
 
66
- // const filterType = getState()?.currentFilterTypes?.[id];
63
+ const filterType = getState()?.currentFilterTypes?.[header.id];
67
64
 
68
- const filterTooltip = '';
69
- // !!getColumnFilterValue()
70
- // ? localization.filteringByColumn
71
- // .replace('{column}', String(headerString))
72
- // .replace(
73
- // '{filterType}',
74
- // filterType instanceof Function
75
- // ? ''
76
- // : // @ts-ignore
77
- // localization[
78
- // `filter${
79
- // filterType.charAt(0).toUpperCase() + filterType.slice(1)
80
- // }`
81
- // ],
82
- // )
83
- // .replace(
84
- // '{filterValue}',
85
- // getColumnFilterValue() as string,
86
- // )
87
- // .replace('" "', '')
88
- // : localization.showHideFilters;
65
+ const filterTooltip = !!column.getColumnFilterValue()
66
+ ? localization.filteringByColumn
67
+ .replace('{column}', String(column.header))
68
+ .replace(
69
+ '{filterType}',
70
+ filterType instanceof Function
71
+ ? ''
72
+ : // @ts-ignore
73
+ localization[
74
+ `filter${
75
+ filterType.charAt(0).toUpperCase() + filterType.slice(1)
76
+ }`
77
+ ],
78
+ )
79
+ .replace('{filterValue}', column.getColumnFilterValue() as string)
80
+ .replace('" "', '')
81
+ : localization.showHideFilters;
89
82
 
90
83
  const headerElement =
91
84
  column?.Header?.({
@@ -15,7 +15,7 @@ export const MRT_TableHeadRow: FC<Props> = ({ headerGroup, tableInstance }) => {
15
15
 
16
16
  const mTableHeadRowProps =
17
17
  muiTableHeadRowProps instanceof Function
18
- ? muiTableHeadRowProps(headerGroup)
18
+ ? muiTableHeadRowProps({ headerGroup, tableInstance })
19
19
  : muiTableHeadRowProps;
20
20
 
21
21
  const tableRowProps = {
@@ -1,6 +1,12 @@
1
- import React, { ChangeEvent, FC, MouseEvent } from 'react';
1
+ import React, {
2
+ ChangeEvent,
3
+ FC,
4
+ FocusEvent,
5
+ MouseEvent,
6
+ useState,
7
+ } from 'react';
2
8
  import { TextField } from '@mui/material';
3
- import type { MRT_Cell, MRT_TableInstance } from '..';
9
+ import type { MRT_Cell, MRT_Row, MRT_TableInstance } from '..';
4
10
 
5
11
  interface Props {
6
12
  cell: MRT_Cell;
@@ -10,29 +16,35 @@ interface Props {
10
16
  export const MRT_EditCellTextField: FC<Props> = ({ cell, tableInstance }) => {
11
17
  const {
12
18
  getState,
13
- options: { muiTableBodyCellEditTextFieldProps },
19
+ options: { enableEditing, muiTableBodyCellEditTextFieldProps },
20
+ setCurrentEditingRow,
14
21
  } = tableInstance;
15
22
 
23
+ const [value, setValue] = useState(cell.value);
24
+
16
25
  const { column, row } = cell;
17
26
 
18
27
  const handleChange = (event: ChangeEvent<HTMLInputElement>) => {
28
+ setValue(event.target.value);
29
+ column.onCellEditChange?.({ event, cell, tableInstance });
30
+ };
31
+
32
+ const handleBlur = (event: FocusEvent<HTMLInputElement>) => {
19
33
  if (getState().currentEditingRow) {
20
- row.values[column.id] = event.target.value;
21
- // setCurrentEditingRow({
22
- // ...getState().currentEditingRow,
23
- // });
34
+ row.values[column.id] = value;
35
+ setCurrentEditingRow({ ...getState().currentEditingRow } as MRT_Row);
24
36
  }
25
- column.onCellEditChange?.(event, cell);
37
+ column.onCellEditBlur?.({ event, cell, tableInstance });
26
38
  };
27
39
 
28
40
  const mTableBodyCellEditTextFieldProps =
29
41
  muiTableBodyCellEditTextFieldProps instanceof Function
30
- ? muiTableBodyCellEditTextFieldProps(cell)
42
+ ? muiTableBodyCellEditTextFieldProps({ cell, tableInstance })
31
43
  : muiTableBodyCellEditTextFieldProps;
32
44
 
33
45
  const mcTableBodyCellEditTextFieldProps =
34
46
  column.muiTableBodyCellEditTextFieldProps instanceof Function
35
- ? column.muiTableBodyCellEditTextFieldProps(cell)
47
+ ? column.muiTableBodyCellEditTextFieldProps({ cell, tableInstance })
36
48
  : column.muiTableBodyCellEditTextFieldProps;
37
49
 
38
50
  const textFieldProps = {
@@ -40,17 +52,18 @@ export const MRT_EditCellTextField: FC<Props> = ({ cell, tableInstance }) => {
40
52
  ...mcTableBodyCellEditTextFieldProps,
41
53
  };
42
54
 
43
- // if (enableEditing && Edit) {
44
- // return <>{Edit({ ...textFieldProps, cell })}</>;
45
- // }
55
+ if (enableEditing && column.enableEditing !== false && column.Edit) {
56
+ return <>{column.Edit?.({ cell, tableInstance })}</>;
57
+ }
46
58
 
47
59
  return (
48
60
  <TextField
49
61
  margin="dense"
62
+ onBlur={handleBlur}
50
63
  onChange={handleChange}
51
64
  onClick={(e: MouseEvent<HTMLInputElement>) => e.stopPropagation()}
52
65
  placeholder={column.header}
53
- value={cell.value}
66
+ value={value}
54
67
  variant="standard"
55
68
  {...textFieldProps}
56
69
  />