material-react-table 2.0.0-alpha.0 → 2.0.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.
- package/dist/cjs/index.js +437 -384
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/body/MRT_TableBodyRow.d.ts +3 -2
- package/dist/cjs/types/body/MRT_TableBodyRowPinButton.d.ts +7 -0
- package/dist/cjs/types/body/index.d.ts +1 -0
- package/dist/cjs/types/buttons/MRT_RowPinButton.d.ts +9 -0
- package/dist/cjs/types/buttons/index.d.ts +2 -1
- package/dist/cjs/types/column.utils.d.ts +1 -0
- package/dist/cjs/types/types.d.ts +15 -9
- package/dist/esm/material-react-table.esm.js +433 -383
- package/dist/esm/material-react-table.esm.js.map +1 -1
- package/dist/esm/types/body/MRT_TableBodyRow.d.ts +3 -2
- package/dist/esm/types/body/MRT_TableBodyRowPinButton.d.ts +7 -0
- package/dist/esm/types/body/index.d.ts +1 -0
- package/dist/esm/types/buttons/MRT_RowPinButton.d.ts +9 -0
- package/dist/esm/types/buttons/index.d.ts +2 -1
- package/dist/esm/types/column.utils.d.ts +1 -0
- package/dist/esm/types/types.d.ts +15 -9
- package/dist/index.d.ts +68 -47
- package/locales/en.esm.js +1 -0
- package/locales/en.esm.js.map +1 -1
- package/locales/en.js +1 -0
- package/locales/en.js.map +1 -1
- package/package.json +9 -9
- package/src/body/MRT_TableBody.tsx +178 -74
- package/src/body/MRT_TableBodyCell.tsx +23 -21
- package/src/body/MRT_TableBodyRow.tsx +104 -16
- package/src/body/MRT_TableBodyRowGrabHandle.tsx +5 -4
- package/src/body/MRT_TableBodyRowPinButton.tsx +46 -0
- package/src/body/MRT_TableDetailPanel.tsx +13 -19
- package/src/body/index.ts +2 -1
- package/src/buttons/MRT_CopyButton.tsx +14 -20
- package/src/buttons/MRT_ExpandAllButton.tsx +5 -7
- package/src/buttons/MRT_ExpandButton.tsx +6 -7
- package/src/buttons/MRT_GrabHandleButton.tsx +2 -3
- package/src/buttons/MRT_RowPinButton.tsx +74 -0
- package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +2 -3
- package/src/buttons/index.ts +2 -1
- package/src/column.utils.ts +11 -5
- package/src/footer/MRT_TableFooter.tsx +13 -7
- package/src/footer/MRT_TableFooterCell.tsx +7 -20
- package/src/footer/MRT_TableFooterRow.tsx +6 -7
- package/src/head/MRT_TableHead.tsx +11 -7
- package/src/head/MRT_TableHeadCell.tsx +9 -20
- package/src/head/MRT_TableHeadCellColumnActionsButton.tsx +10 -18
- package/src/head/MRT_TableHeadCellGrabHandle.tsx +6 -13
- package/src/head/MRT_TableHeadRow.tsx +6 -7
- package/src/hooks/useMRT_DisplayColumns.tsx +13 -0
- package/src/hooks/useMRT_TableInstance.ts +6 -0
- package/src/hooks/useMRT_TableOptions.ts +6 -2
- package/src/inputs/MRT_EditCellTextField.tsx +14 -22
- package/src/inputs/MRT_FilterCheckbox.tsx +11 -23
- package/src/inputs/MRT_FilterRangeSlider.tsx +6 -23
- package/src/inputs/MRT_FilterTextField.tsx +9 -25
- package/src/inputs/MRT_GlobalFilterTextField.tsx +4 -4
- package/src/inputs/MRT_SelectCheckbox.tsx +31 -17
- package/src/locales/en.ts +1 -1
- package/src/menus/MRT_RowActionMenu.tsx +11 -12
- package/src/modals/MRT_EditRowModal.tsx +5 -13
- package/src/table/MRT_Table.tsx +8 -13
- package/src/table/MRT_TableContainer.tsx +6 -12
- package/src/table/MRT_TablePaper.tsx +9 -13
- package/src/toolbar/MRT_BottomToolbar.tsx +14 -20
- package/src/toolbar/MRT_LinearProgressBar.tsx +5 -4
- package/src/toolbar/MRT_TablePagination.tsx +5 -7
- package/src/toolbar/MRT_ToolbarAlertBanner.tsx +8 -11
- package/src/toolbar/MRT_TopToolbar.tsx +8 -14
- package/src/types.ts +25 -8
- package/locales/tr.d.ts +0 -2
- package/locales/tr.esm.d.ts +0 -2
- package/locales/tr.esm.js +0 -93
- package/locales/tr.esm.js.map +0 -1
- package/locales/tr.js +0 -97
- package/locales/tr.js.map +0 -1
- package/locales/uk.d.ts +0 -2
- package/locales/uk.esm.d.ts +0 -2
- package/locales/uk.esm.js +0 -93
- package/locales/uk.esm.js.map +0 -1
- package/locales/uk.js +0 -97
- package/locales/uk.js.map +0 -1
- package/locales/vi.d.ts +0 -2
- package/locales/vi.esm.d.ts +0 -2
- package/locales/vi.esm.js +0 -93
- package/locales/vi.esm.js.map +0 -1
- package/locales/vi.js +0 -97
- package/locales/vi.js.map +0 -1
- package/locales/zh-Hans.d.ts +0 -2
- package/locales/zh-Hans.esm.d.ts +0 -2
- package/locales/zh-Hans.esm.js +0 -93
- package/locales/zh-Hans.esm.js.map +0 -1
- package/locales/zh-Hans.js +0 -97
- package/locales/zh-Hans.js.map +0 -1
- package/locales/zh-Hant.d.ts +0 -2
- package/locales/zh-Hant.esm.d.ts +0 -2
- package/locales/zh-Hant.esm.js +0 -93
- package/locales/zh-Hant.esm.js.map +0 -1
- package/locales/zh-Hant.js +0 -97
- package/locales/zh-Hant.js.map +0 -1
@@ -7,6 +7,7 @@ import {
|
|
7
7
|
type MRT_HeaderGroup,
|
8
8
|
type MRT_TableInstance,
|
9
9
|
} from '../types';
|
10
|
+
import { parseFromValuesOrFunc } from '../column.utils';
|
10
11
|
|
11
12
|
interface Props<TData extends Record<string, any>> {
|
12
13
|
headerGroup: MRT_HeaderGroup<TData>;
|
@@ -27,10 +28,10 @@ export const MRT_TableHeadRow = <TData extends Record<string, any>>({
|
|
27
28
|
options: { layoutMode, muiTableHeadRowProps },
|
28
29
|
} = table;
|
29
30
|
|
30
|
-
const tableRowProps =
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
const tableRowProps = parseFromValuesOrFunc(muiTableHeadRowProps, {
|
32
|
+
headerGroup,
|
33
|
+
table,
|
34
|
+
});
|
34
35
|
|
35
36
|
return (
|
36
37
|
<TableRow
|
@@ -40,9 +41,7 @@ export const MRT_TableHeadRow = <TData extends Record<string, any>>({
|
|
40
41
|
boxShadow: `4px 0 8px ${alpha(theme.palette.common.black, 0.1)}`,
|
41
42
|
display: layoutMode === 'grid' ? 'flex' : 'table-row',
|
42
43
|
top: 0,
|
43
|
-
...(tableRowProps?.sx
|
44
|
-
? tableRowProps?.sx(theme)
|
45
|
-
: (tableRowProps?.sx as any)),
|
44
|
+
...(parseFromValuesOrFunc(tableRowProps?.sx, theme) as any),
|
46
45
|
})}
|
47
46
|
>
|
48
47
|
{virtualPaddingLeft ? (
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import { type RefObject, useMemo } from 'react';
|
2
2
|
import { showExpandColumn } from '../column.utils';
|
3
|
+
import { MRT_TableBodyRowPinButton } from '../body/MRT_TableBodyRowPinButton';
|
3
4
|
import { MRT_TableBodyRowGrabHandle } from '../body';
|
4
5
|
import { MRT_ExpandAllButton } from '../buttons/MRT_ExpandAllButton';
|
5
6
|
import { MRT_ExpandButton } from '../buttons/MRT_ExpandButton';
|
@@ -30,6 +31,18 @@ export const useMRT_DisplayColumns = <TData extends Record<string, any>>({
|
|
30
31
|
() =>
|
31
32
|
(
|
32
33
|
[
|
34
|
+
(tableOptions.state?.columnOrder ?? columnOrder).includes(
|
35
|
+
'mrt-row-pin',
|
36
|
+
) && {
|
37
|
+
Cell: ({ row, table }) => (
|
38
|
+
<MRT_TableBodyRowPinButton row={row} table={table} />
|
39
|
+
),
|
40
|
+
header: tableOptions.localization.pin,
|
41
|
+
size: 60,
|
42
|
+
...tableOptions.defaultDisplayColumn,
|
43
|
+
...tableOptions.displayColumnDefOptions?.['mrt-row-pin'],
|
44
|
+
id: 'mrt-row-pin',
|
45
|
+
},
|
33
46
|
(tableOptions.state?.columnOrder ?? columnOrder).includes(
|
34
47
|
'mrt-row-drag',
|
35
48
|
) && {
|
@@ -50,6 +50,8 @@ export const useMRT_TableInstance: <TData extends Record<string, any>>(
|
|
50
50
|
const tableHeadCellRefs = useRef<Record<string, HTMLTableCellElement>>({});
|
51
51
|
const tablePaperRef = useRef<HTMLDivElement>(null);
|
52
52
|
const topToolbarRef = useRef<HTMLDivElement>(null);
|
53
|
+
const tableHeadRef = useRef<HTMLTableSectionElement>(null);
|
54
|
+
const tableFooterRef = useRef<HTMLTableSectionElement>(null);
|
53
55
|
|
54
56
|
const initialState: Partial<MRT_TableState<TData>> = useMemo(() => {
|
55
57
|
const initState = tableOptions.initialState ?? {};
|
@@ -251,6 +253,10 @@ export const useMRT_TableInstance: <TData extends Record<string, any>>(
|
|
251
253
|
tablePaperRef,
|
252
254
|
// @ts-ignore
|
253
255
|
topToolbarRef,
|
256
|
+
// @ts-ignore
|
257
|
+
tableFooterRef,
|
258
|
+
// @ts-ignore
|
259
|
+
tableHeadRef,
|
254
260
|
};
|
255
261
|
|
256
262
|
const setCreatingRow = (row: MRT_Updater<MRT_Row<TData> | null | true>) => {
|
@@ -22,6 +22,7 @@ export const useMRT_TableOptions: <TData extends Record<string, any>>(
|
|
22
22
|
enableColumnActions = true,
|
23
23
|
enableColumnFilters = true,
|
24
24
|
enableColumnOrdering = false,
|
25
|
+
enableColumnPinning = false,
|
25
26
|
enableColumnResizing = false,
|
26
27
|
enableDensityToggle = true,
|
27
28
|
enableExpandAll = true,
|
@@ -36,7 +37,7 @@ export const useMRT_TableOptions: <TData extends Record<string, any>>(
|
|
36
37
|
enableMultiRowSelection = true,
|
37
38
|
enableMultiSort = true,
|
38
39
|
enablePagination = true,
|
39
|
-
|
40
|
+
enableRowPinning = false,
|
40
41
|
enableRowSelection = false,
|
41
42
|
enableSelectAll = true,
|
42
43
|
enableSorting = true,
|
@@ -61,6 +62,7 @@ export const useMRT_TableOptions: <TData extends Record<string, any>>(
|
|
61
62
|
positionToolbarAlertBanner = 'top',
|
62
63
|
positionToolbarDropZone = 'top',
|
63
64
|
rowNumberMode = 'static',
|
65
|
+
rowPinningDisplayMode = 'sticky',
|
64
66
|
selectAllMode = 'page',
|
65
67
|
sortingFns,
|
66
68
|
...rest
|
@@ -123,6 +125,7 @@ export const useMRT_TableOptions: <TData extends Record<string, any>>(
|
|
123
125
|
enableColumnActions,
|
124
126
|
enableColumnFilters,
|
125
127
|
enableColumnOrdering,
|
128
|
+
enableColumnPinning,
|
126
129
|
enableColumnResizing,
|
127
130
|
enableDensityToggle,
|
128
131
|
enableExpandAll,
|
@@ -137,7 +140,7 @@ export const useMRT_TableOptions: <TData extends Record<string, any>>(
|
|
137
140
|
enableMultiRowSelection,
|
138
141
|
enableMultiSort,
|
139
142
|
enablePagination,
|
140
|
-
|
143
|
+
enableRowPinning,
|
141
144
|
enableRowSelection,
|
142
145
|
enableSelectAll,
|
143
146
|
enableSorting,
|
@@ -162,6 +165,7 @@ export const useMRT_TableOptions: <TData extends Record<string, any>>(
|
|
162
165
|
positionToolbarAlertBanner,
|
163
166
|
positionToolbarDropZone,
|
164
167
|
rowNumberMode,
|
168
|
+
rowPinningDisplayMode,
|
165
169
|
selectAllMode,
|
166
170
|
sortingFns: _sortingFns,
|
167
171
|
...rest,
|
@@ -7,6 +7,7 @@ import {
|
|
7
7
|
import TextField from '@mui/material/TextField';
|
8
8
|
import MenuItem from '@mui/material/MenuItem';
|
9
9
|
import { type TextFieldProps } from '@mui/material/TextField';
|
10
|
+
import { parseFromValuesOrFunc } from '../column.utils';
|
10
11
|
import { type MRT_Cell, type MRT_TableInstance } from '../types';
|
11
12
|
|
12
13
|
interface Props<TData extends Record<string, any>> {
|
@@ -36,24 +37,19 @@ export const MRT_EditCellTextField = <TData extends Record<string, any>>({
|
|
36
37
|
|
37
38
|
const [value, setValue] = useState(() => cell.getValue<string>());
|
38
39
|
|
39
|
-
const mTableBodyCellEditTextFieldProps =
|
40
|
-
muiEditTextFieldProps instanceof Function
|
41
|
-
? muiEditTextFieldProps({ cell, column, row, table })
|
42
|
-
: muiEditTextFieldProps;
|
43
|
-
|
44
|
-
const mcTableBodyCellEditTextFieldProps =
|
45
|
-
columnDef.muiEditTextFieldProps instanceof Function
|
46
|
-
? columnDef.muiEditTextFieldProps({
|
47
|
-
cell,
|
48
|
-
column,
|
49
|
-
row,
|
50
|
-
table,
|
51
|
-
})
|
52
|
-
: columnDef.muiEditTextFieldProps;
|
53
|
-
|
54
40
|
const textFieldProps: TextFieldProps = {
|
55
|
-
...
|
56
|
-
|
41
|
+
...parseFromValuesOrFunc(muiEditTextFieldProps, {
|
42
|
+
cell,
|
43
|
+
column,
|
44
|
+
row,
|
45
|
+
table,
|
46
|
+
}),
|
47
|
+
...parseFromValuesOrFunc(columnDef.muiEditTextFieldProps, {
|
48
|
+
cell,
|
49
|
+
column,
|
50
|
+
row,
|
51
|
+
table,
|
52
|
+
}),
|
57
53
|
};
|
58
54
|
|
59
55
|
const saveInputValueToRowCache = (newValue: string) => {
|
@@ -93,11 +89,7 @@ export const MRT_EditCellTextField = <TData extends Record<string, any>>({
|
|
93
89
|
|
94
90
|
return (
|
95
91
|
<TextField
|
96
|
-
disabled={
|
97
|
-
(columnDef.enableEditing instanceof Function
|
98
|
-
? columnDef.enableEditing(row)
|
99
|
-
: columnDef.enableEditing) === false
|
100
|
-
}
|
92
|
+
disabled={parseFromValuesOrFunc(columnDef.enableEditing, row) === false}
|
101
93
|
fullWidth
|
102
94
|
inputRef={(inputRef) => {
|
103
95
|
if (inputRef) {
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import Checkbox from '@mui/material/Checkbox';
|
2
2
|
import FormControlLabel from '@mui/material/FormControlLabel';
|
3
3
|
import Tooltip from '@mui/material/Tooltip';
|
4
|
-
import { type CheckboxProps } from '@mui/material/Checkbox';
|
5
4
|
import { type MRT_Column, type MRT_TableInstance } from '../types';
|
5
|
+
import { parseFromValuesOrFunc } from '../column.utils';
|
6
6
|
|
7
7
|
interface Props<TData extends Record<string, any>> {
|
8
8
|
column: MRT_Column<TData>;
|
@@ -20,26 +20,16 @@ export const MRT_FilterCheckbox = <TData extends Record<string, any>>({
|
|
20
20
|
const { density } = getState();
|
21
21
|
const { columnDef } = column;
|
22
22
|
|
23
|
-
const mTableHeadCellFilterCheckboxProps =
|
24
|
-
muiFilterCheckboxProps instanceof Function
|
25
|
-
? muiFilterCheckboxProps({
|
26
|
-
column,
|
27
|
-
table,
|
28
|
-
})
|
29
|
-
: muiFilterCheckboxProps;
|
30
|
-
|
31
|
-
const mcTableHeadCellFilterCheckboxProps =
|
32
|
-
columnDef.muiFilterCheckboxProps instanceof Function
|
33
|
-
? columnDef.muiFilterCheckboxProps({
|
34
|
-
column,
|
35
|
-
table,
|
36
|
-
})
|
37
|
-
: columnDef.muiFilterCheckboxProps;
|
38
|
-
|
39
23
|
const checkboxProps = {
|
40
|
-
...
|
41
|
-
|
42
|
-
|
24
|
+
...parseFromValuesOrFunc(muiFilterCheckboxProps, {
|
25
|
+
column,
|
26
|
+
table,
|
27
|
+
}),
|
28
|
+
...parseFromValuesOrFunc(columnDef.muiFilterCheckboxProps, {
|
29
|
+
column,
|
30
|
+
table,
|
31
|
+
}),
|
32
|
+
};
|
43
33
|
|
44
34
|
const filterLabel = localization.filterByColumn?.replace(
|
45
35
|
'{column}',
|
@@ -80,9 +70,7 @@ export const MRT_FilterCheckbox = <TData extends Record<string, any>>({
|
|
80
70
|
sx={(theme) => ({
|
81
71
|
height: '2.5rem',
|
82
72
|
width: '2.5rem',
|
83
|
-
...(checkboxProps?.sx
|
84
|
-
? checkboxProps.sx(theme)
|
85
|
-
: (checkboxProps?.sx as any)),
|
73
|
+
...(parseFromValuesOrFunc(checkboxProps?.sx, theme) as any),
|
86
74
|
})}
|
87
75
|
/>
|
88
76
|
}
|
@@ -1,8 +1,9 @@
|
|
1
|
-
import Slider
|
1
|
+
import Slider from '@mui/material/Slider';
|
2
2
|
import Stack from '@mui/material/Stack';
|
3
3
|
import FormHelperText from '@mui/material/FormHelperText';
|
4
4
|
import { type MRT_TableInstance, type MRT_Header } from '../types';
|
5
5
|
import { useEffect, useRef, useState } from 'react';
|
6
|
+
import { parseFromValuesOrFunc } from '../column.utils';
|
6
7
|
|
7
8
|
interface Props<TData extends Record<string, any>> {
|
8
9
|
header: MRT_Header<TData>;
|
@@ -25,26 +26,10 @@ export const MRT_FilterRangeSlider = <TData extends Record<string, any>>({
|
|
25
26
|
const showChangeModeButton =
|
26
27
|
enableColumnFilterModes && columnDef.enableColumnFilterModes !== false;
|
27
28
|
|
28
|
-
const mFilterSliderProps =
|
29
|
-
muiFilterSliderProps instanceof Function
|
30
|
-
? muiFilterSliderProps({
|
31
|
-
column,
|
32
|
-
table,
|
33
|
-
})
|
34
|
-
: muiFilterSliderProps;
|
35
|
-
|
36
|
-
const mcFilterSliderProps =
|
37
|
-
columnDef.muiFilterSliderProps instanceof Function
|
38
|
-
? columnDef.muiFilterSliderProps({
|
39
|
-
column,
|
40
|
-
table,
|
41
|
-
})
|
42
|
-
: columnDef.muiFilterSliderProps;
|
43
|
-
|
44
29
|
const sliderProps = {
|
45
|
-
...
|
46
|
-
...
|
47
|
-
}
|
30
|
+
...parseFromValuesOrFunc(muiFilterSliderProps, { column, table }),
|
31
|
+
...parseFromValuesOrFunc(columnDef.muiFilterSliderProps, { column, table }),
|
32
|
+
};
|
48
33
|
|
49
34
|
let [min, max] =
|
50
35
|
sliderProps.min !== undefined && sliderProps.max !== undefined
|
@@ -114,9 +99,7 @@ export const MRT_FilterRangeSlider = <TData extends Record<string, any>>({
|
|
114
99
|
mt: !showChangeModeButton ? '10px' : '6px',
|
115
100
|
px: '4px',
|
116
101
|
width: 'calc(100% - 8px)',
|
117
|
-
...(sliderProps?.sx
|
118
|
-
? sliderProps.sx(theme)
|
119
|
-
: (sliderProps?.sx as any)),
|
102
|
+
...(parseFromValuesOrFunc(sliderProps?.sx, theme) as any),
|
120
103
|
})}
|
121
104
|
/>
|
122
105
|
{showChangeModeButton ? (
|
@@ -19,6 +19,7 @@ import { debounce } from '@mui/material/utils';
|
|
19
19
|
import { MRT_FilterOptionMenu } from '../menus/MRT_FilterOptionMenu';
|
20
20
|
import { type TextFieldProps } from '@mui/material/TextField';
|
21
21
|
import { type MRT_Header, type MRT_TableInstance } from '../types';
|
22
|
+
import { parseFromValuesOrFunc } from '../column.utils';
|
22
23
|
|
23
24
|
interface Props<TData extends Record<string, any>> {
|
24
25
|
header: MRT_Header<TData>;
|
@@ -46,28 +47,13 @@ export const MRT_FilterTextField = <TData extends Record<string, any>>({
|
|
46
47
|
const { column } = header;
|
47
48
|
const { columnDef } = column;
|
48
49
|
|
49
|
-
const
|
50
|
-
muiFilterTextFieldProps
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
: muiFilterTextFieldProps;
|
57
|
-
|
58
|
-
const mcTableHeadCellFilterTextFieldProps =
|
59
|
-
columnDef.muiFilterTextFieldProps instanceof Function
|
60
|
-
? columnDef.muiFilterTextFieldProps({
|
61
|
-
column,
|
62
|
-
table,
|
63
|
-
rangeFilterIndex,
|
64
|
-
})
|
65
|
-
: columnDef.muiFilterTextFieldProps;
|
66
|
-
|
67
|
-
const textFieldProps = {
|
68
|
-
...mTableHeadCellFilterTextFieldProps,
|
69
|
-
...mcTableHeadCellFilterTextFieldProps,
|
70
|
-
} as TextFieldProps;
|
50
|
+
const textFieldProps: TextFieldProps = {
|
51
|
+
...parseFromValuesOrFunc(muiFilterTextFieldProps, { column, table }),
|
52
|
+
...parseFromValuesOrFunc(columnDef.muiFilterTextFieldProps, {
|
53
|
+
column,
|
54
|
+
table,
|
55
|
+
}),
|
56
|
+
};
|
71
57
|
|
72
58
|
const isRangeFilter =
|
73
59
|
columnDef.filterVariant === 'range' || rangeFilterIndex !== undefined;
|
@@ -358,9 +344,7 @@ export const MRT_FilterTextField = <TData extends Record<string, any>>({
|
|
358
344
|
'& .MuiSelect-icon': {
|
359
345
|
mr: '1.5rem',
|
360
346
|
},
|
361
|
-
...(textFieldProps?.sx
|
362
|
-
? textFieldProps.sx(theme)
|
363
|
-
: (textFieldProps?.sx as any)),
|
347
|
+
...(parseFromValuesOrFunc(textFieldProps?.sx, theme) as any),
|
364
348
|
})}
|
365
349
|
>
|
366
350
|
{(isSelectFilter || isMultiSelectFilter) && (
|
@@ -14,6 +14,7 @@ import Tooltip from '@mui/material/Tooltip';
|
|
14
14
|
import { debounce } from '@mui/material/utils';
|
15
15
|
import { MRT_FilterOptionMenu } from '../menus/MRT_FilterOptionMenu';
|
16
16
|
import { type MRT_TableInstance } from '../types';
|
17
|
+
import { parseFromValuesOrFunc } from '../column.utils';
|
17
18
|
|
18
19
|
interface Props<TData extends Record<string, any>> {
|
19
20
|
table: MRT_TableInstance<TData>;
|
@@ -36,10 +37,9 @@ export const MRT_GlobalFilterTextField = <TData extends Record<string, any>>({
|
|
36
37
|
} = table;
|
37
38
|
const { globalFilter, showGlobalFilter } = getState();
|
38
39
|
|
39
|
-
const textFieldProps =
|
40
|
-
|
41
|
-
|
42
|
-
: muiSearchTextFieldProps;
|
40
|
+
const textFieldProps = parseFromValuesOrFunc(muiSearchTextFieldProps, {
|
41
|
+
table,
|
42
|
+
});
|
43
43
|
|
44
44
|
const isMounted = useRef(false);
|
45
45
|
const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
|
@@ -1,9 +1,10 @@
|
|
1
1
|
import { type MouseEvent } from 'react';
|
2
|
-
import Checkbox from '@mui/material/Checkbox';
|
2
|
+
import Checkbox, { type CheckboxProps } from '@mui/material/Checkbox';
|
3
3
|
import Tooltip from '@mui/material/Tooltip';
|
4
|
-
import Radio from '@mui/material/Radio';
|
4
|
+
import Radio, { type RadioProps } from '@mui/material/Radio';
|
5
5
|
import { type Theme } from '@mui/material/styles';
|
6
6
|
import { type MRT_Row, type MRT_TableInstance } from '../types';
|
7
|
+
import { parseFromValuesOrFunc } from '../column.utils';
|
7
8
|
|
8
9
|
interface Props<TData extends Record<string, any>> {
|
9
10
|
row?: MRT_Row<TData>;
|
@@ -21,6 +22,8 @@ export const MRT_SelectCheckbox = <TData extends Record<string, any>>({
|
|
21
22
|
options: {
|
22
23
|
localization,
|
23
24
|
enableMultiRowSelection,
|
25
|
+
rowPinningDisplayMode,
|
26
|
+
enableRowPinning,
|
24
27
|
muiSelectCheckboxProps,
|
25
28
|
muiSelectAllCheckboxProps,
|
26
29
|
selectAllMode,
|
@@ -29,12 +32,8 @@ export const MRT_SelectCheckbox = <TData extends Record<string, any>>({
|
|
29
32
|
const { density, isLoading } = getState();
|
30
33
|
|
31
34
|
const checkboxProps = !row
|
32
|
-
? muiSelectAllCheckboxProps
|
33
|
-
|
34
|
-
: muiSelectAllCheckboxProps
|
35
|
-
: muiSelectCheckboxProps instanceof Function
|
36
|
-
? muiSelectCheckboxProps({ row, table })
|
37
|
-
: muiSelectCheckboxProps;
|
35
|
+
? parseFromValuesOrFunc(muiSelectAllCheckboxProps, { table })
|
36
|
+
: parseFromValuesOrFunc(muiSelectCheckboxProps, { row, table });
|
38
37
|
|
39
38
|
const allRowsSelected = selectAll
|
40
39
|
? selectAllMode === 'page'
|
@@ -50,11 +49,27 @@ export const MRT_SelectCheckbox = <TData extends Record<string, any>>({
|
|
50
49
|
? localization.toggleSelectAll
|
51
50
|
: localization.toggleSelectRow,
|
52
51
|
},
|
53
|
-
onChange:
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
52
|
+
onChange: (event) => {
|
53
|
+
event.stopPropagation();
|
54
|
+
row
|
55
|
+
? row.getToggleSelectedHandler()(event)
|
56
|
+
: selectAllMode === 'all'
|
57
|
+
? table.getToggleAllRowsSelectedHandler()(event)
|
58
|
+
: table.getToggleAllPageRowsSelectedHandler()(event);
|
59
|
+
if (enableRowPinning && rowPinningDisplayMode?.includes('select')) {
|
60
|
+
if (row) {
|
61
|
+
row.pin(
|
62
|
+
!row.getIsPinned() && event.target.checked
|
63
|
+
? rowPinningDisplayMode?.includes('bottom')
|
64
|
+
? 'bottom'
|
65
|
+
: 'top'
|
66
|
+
: false,
|
67
|
+
);
|
68
|
+
} else {
|
69
|
+
table.setRowPinning({ bottom: [], top: [] });
|
70
|
+
}
|
71
|
+
}
|
72
|
+
},
|
58
73
|
size: (density === 'compact' ? 'small' : 'medium') as 'small' | 'medium',
|
59
74
|
...checkboxProps,
|
60
75
|
onClick: (e: MouseEvent<HTMLButtonElement>) => {
|
@@ -65,12 +80,11 @@ export const MRT_SelectCheckbox = <TData extends Record<string, any>>({
|
|
65
80
|
height: density === 'compact' ? '1.75rem' : '2.5rem',
|
66
81
|
width: density === 'compact' ? '1.75rem' : '2.5rem',
|
67
82
|
m: density !== 'compact' ? '-0.4rem' : undefined,
|
68
|
-
|
69
|
-
|
70
|
-
: (checkboxProps?.sx as any)),
|
83
|
+
zIndex: 0,
|
84
|
+
...parseFromValuesOrFunc(checkboxProps?.sx, theme),
|
71
85
|
}),
|
72
86
|
title: undefined,
|
73
|
-
};
|
87
|
+
} as CheckboxProps | RadioProps;
|
74
88
|
|
75
89
|
return (
|
76
90
|
<Tooltip
|
package/src/locales/en.ts
CHANGED
@@ -14,7 +14,6 @@ export const MRT_Localization_EN: MRT_Localization = {
|
|
14
14
|
collapseAll: 'Collapse all',
|
15
15
|
columnActions: 'Column Actions',
|
16
16
|
copiedToClipboard: 'Copied to clipboard',
|
17
|
-
|
18
17
|
dropToGroupBy: 'Drop to group by {column}',
|
19
18
|
edit: 'Edit',
|
20
19
|
expand: 'Expand',
|
@@ -60,6 +59,7 @@ export const MRT_Localization_EN: MRT_Localization = {
|
|
60
59
|
noResultsFound: 'No results found',
|
61
60
|
of: 'of',
|
62
61
|
or: 'or',
|
62
|
+
pin: 'Pin',
|
63
63
|
pinToLeft: 'Pin to left',
|
64
64
|
pinToRight: 'Pin to right',
|
65
65
|
resetColumnSize: 'Reset column size',
|
@@ -8,6 +8,7 @@ import {
|
|
8
8
|
commonMenuItemStyles,
|
9
9
|
} from './MRT_ColumnActionMenu';
|
10
10
|
import { type MRT_Row, type MRT_TableInstance } from '../types';
|
11
|
+
import { parseFromValuesOrFunc } from '../column.utils';
|
11
12
|
|
12
13
|
interface Props<TData extends Record<string, any>> {
|
13
14
|
anchorEl: HTMLElement | null;
|
@@ -45,18 +46,16 @@ export const MRT_RowActionMenu = <TData extends Record<string, any>>({
|
|
45
46
|
dense: density === 'compact',
|
46
47
|
}}
|
47
48
|
>
|
48
|
-
{enableEditing
|
49
|
-
|
50
|
-
|
51
|
-
<
|
52
|
-
<
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
</MenuItem>
|
59
|
-
)}
|
49
|
+
{parseFromValuesOrFunc(enableEditing, row) && (
|
50
|
+
<MenuItem onClick={handleEdit} sx={commonMenuItemStyles}>
|
51
|
+
<Box sx={commonListItemStyles}>
|
52
|
+
<ListItemIcon>
|
53
|
+
<EditIcon />
|
54
|
+
</ListItemIcon>
|
55
|
+
{localization.edit}
|
56
|
+
</Box>
|
57
|
+
</MenuItem>
|
58
|
+
)}
|
60
59
|
{renderRowActionMenuItems?.({
|
61
60
|
row,
|
62
61
|
table,
|
@@ -6,6 +6,7 @@ import Stack from '@mui/material/Stack';
|
|
6
6
|
import { MRT_EditActionButtons } from '../buttons/MRT_EditActionButtons';
|
7
7
|
import { MRT_EditCellTextField } from '../inputs/MRT_EditCellTextField';
|
8
8
|
import { type MRT_Row, type MRT_TableInstance } from '../types';
|
9
|
+
import { parseFromValuesOrFunc } from '../column.utils';
|
9
10
|
|
10
11
|
interface Props<TData extends Record<string, any>> {
|
11
12
|
open: boolean;
|
@@ -33,19 +34,10 @@ export const MRT_EditRowModal = <TData extends Record<string, any>>({
|
|
33
34
|
const { creatingRow, editingRow } = getState();
|
34
35
|
const row = (creatingRow ?? editingRow) as MRT_Row<TData>;
|
35
36
|
|
36
|
-
const createModalProps =
|
37
|
-
muiCreateRowModalProps instanceof Function
|
38
|
-
? muiCreateRowModalProps({ row, table })
|
39
|
-
: muiCreateRowModalProps;
|
40
|
-
|
41
|
-
const editModalProps =
|
42
|
-
muiEditRowModalProps instanceof Function
|
43
|
-
? muiEditRowModalProps({ row, table })
|
44
|
-
: muiEditRowModalProps;
|
45
|
-
|
46
37
|
const dialogProps = {
|
47
|
-
...
|
48
|
-
...(creatingRow &&
|
38
|
+
...parseFromValuesOrFunc(muiEditRowModalProps, { row, table }),
|
39
|
+
...(creatingRow &&
|
40
|
+
parseFromValuesOrFunc(muiCreateRowModalProps, { row, table })),
|
49
41
|
};
|
50
42
|
|
51
43
|
const internalEditComponents = row
|
@@ -90,7 +82,7 @@ export const MRT_EditRowModal = <TData extends Record<string, any>>({
|
|
90
82
|
})) ?? (
|
91
83
|
<>
|
92
84
|
<DialogTitle sx={{ textAlign: 'center' }}>
|
93
|
-
{
|
85
|
+
{localization.edit}
|
94
86
|
</DialogTitle>
|
95
87
|
<DialogContent>
|
96
88
|
<form onSubmit={(e) => e.preventDefault()}>
|
package/src/table/MRT_Table.tsx
CHANGED
@@ -9,7 +9,7 @@ import Table from '@mui/material/Table';
|
|
9
9
|
import { MRT_TableHead } from '../head/MRT_TableHead';
|
10
10
|
import { Memo_MRT_TableBody, MRT_TableBody } from '../body/MRT_TableBody';
|
11
11
|
import { MRT_TableFooter } from '../footer/MRT_TableFooter';
|
12
|
-
import { parseCSSVarId } from '../column.utils';
|
12
|
+
import { parseCSSVarId, parseFromValuesOrFunc } from '../column.utils';
|
13
13
|
import { type MRT_TableInstance } from '../types';
|
14
14
|
|
15
15
|
interface Props<TData extends Record<string, any>> {
|
@@ -46,15 +46,12 @@ export const MRT_Table = <TData extends Record<string, any>>({
|
|
46
46
|
isFullScreen,
|
47
47
|
} = getState();
|
48
48
|
|
49
|
-
const tableProps =
|
50
|
-
muiTableProps instanceof Function
|
51
|
-
? muiTableProps({ table })
|
52
|
-
: muiTableProps;
|
49
|
+
const tableProps = parseFromValuesOrFunc(muiTableProps, { table });
|
53
50
|
|
54
|
-
const
|
55
|
-
columnVirtualizerOptions
|
56
|
-
|
57
|
-
|
51
|
+
const columnVirtualizerProps = parseFromValuesOrFunc(
|
52
|
+
columnVirtualizerOptions,
|
53
|
+
{ table },
|
54
|
+
);
|
58
55
|
|
59
56
|
const columnSizeVars = useMemo(() => {
|
60
57
|
const headers = getFlatHeaders();
|
@@ -115,7 +112,7 @@ export const MRT_Table = <TData extends Record<string, any>>({
|
|
115
112
|
],
|
116
113
|
[leftPinnedIndexes, rightPinnedIndexes],
|
117
114
|
),
|
118
|
-
...
|
115
|
+
...columnVirtualizerProps,
|
119
116
|
})
|
120
117
|
: undefined;
|
121
118
|
|
@@ -155,9 +152,7 @@ export const MRT_Table = <TData extends Record<string, any>>({
|
|
155
152
|
display: layoutMode === 'grid' ? 'grid' : 'table',
|
156
153
|
tableLayout:
|
157
154
|
layoutMode !== 'grid' && enableColumnResizing ? 'fixed' : undefined,
|
158
|
-
...(tableProps?.sx
|
159
|
-
? tableProps.sx(theme)
|
160
|
-
: (tableProps?.sx as any)),
|
155
|
+
...(parseFromValuesOrFunc(tableProps?.sx, theme) as any),
|
161
156
|
})}
|
162
157
|
style={{ ...columnSizeVars, ...tableProps?.style }}
|
163
158
|
>
|
@@ -3,6 +3,7 @@ import TableContainer from '@mui/material/TableContainer';
|
|
3
3
|
import { MRT_Table } from './MRT_Table';
|
4
4
|
import { MRT_EditRowModal } from '../modals';
|
5
5
|
import { type MRT_TableInstance } from '../types';
|
6
|
+
import { parseFromValuesOrFunc } from '../column.utils';
|
6
7
|
|
7
8
|
const useIsomorphicLayoutEffect =
|
8
9
|
typeof window !== 'undefined' ? useLayoutEffect : useEffect;
|
@@ -24,18 +25,13 @@ export const MRT_TableContainer = <TData extends Record<string, any>>({
|
|
24
25
|
},
|
25
26
|
refs: { tableContainerRef, bottomToolbarRef, topToolbarRef },
|
26
27
|
} = table;
|
27
|
-
const {
|
28
|
-
isFullScreen,
|
29
|
-
creatingRow,
|
30
|
-
editingRow,
|
31
|
-
} = getState();
|
28
|
+
const { isFullScreen, creatingRow, editingRow } = getState();
|
32
29
|
|
33
30
|
const [totalToolbarHeight, setTotalToolbarHeight] = useState(0);
|
34
31
|
|
35
|
-
const tableContainerProps =
|
36
|
-
|
37
|
-
|
38
|
-
: muiTableContainerProps;
|
32
|
+
const tableContainerProps = parseFromValuesOrFunc(muiTableContainerProps, {
|
33
|
+
table,
|
34
|
+
});
|
39
35
|
|
40
36
|
useIsomorphicLayoutEffect(() => {
|
41
37
|
const topToolbarHeight =
|
@@ -72,9 +68,7 @@ export const MRT_TableContainer = <TData extends Record<string, any>>({
|
|
72
68
|
? `clamp(350px, calc(100vh - ${totalToolbarHeight}px), 9999px)`
|
73
69
|
: undefined,
|
74
70
|
overflow: 'auto',
|
75
|
-
...(tableContainerProps?.sx
|
76
|
-
? tableContainerProps.sx(theme)
|
77
|
-
: (tableContainerProps?.sx as any)),
|
71
|
+
...(parseFromValuesOrFunc(tableContainerProps?.sx, theme) as any),
|
78
72
|
})}
|
79
73
|
style={{
|
80
74
|
maxHeight: isFullScreen
|