material-react-table 2.0.0-alpha.0 → 2.0.0-alpha.2
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/README.md +2 -2
- package/dist/cjs/index.js +2480 -2392
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/MaterialReactTable.d.ts +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_GrabHandleButton.d.ts +1 -1
- 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 +7 -6
- package/dist/cjs/types/filterFns.d.ts +14 -14
- package/dist/cjs/types/head/MRT_TableHeadCellFilterLabel.d.ts +1 -1
- package/dist/cjs/types/head/MRT_TableHeadCellSortLabel.d.ts +1 -1
- package/dist/cjs/types/hooks/useMRT_DisplayColumns.d.ts +3 -3
- package/dist/cjs/types/icons.d.ts +1 -1
- package/dist/cjs/types/inputs/MRT_FilterRangeSlider.d.ts +1 -1
- package/dist/cjs/types/menus/MRT_ColumnActionMenu.d.ts +4 -4
- package/dist/cjs/types/menus/MRT_ShowHideColumnsMenuItems.d.ts +1 -1
- package/dist/cjs/types/toolbar/MRT_TablePagination.d.ts +2 -2
- package/dist/cjs/types/toolbar/MRT_TopToolbar.d.ts +1 -1
- package/dist/cjs/types/types.d.ts +203 -197
- package/dist/esm/material-react-table.esm.js +2442 -2358
- package/dist/esm/material-react-table.esm.js.map +1 -1
- package/dist/esm/types/MaterialReactTable.d.ts +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_GrabHandleButton.d.ts +1 -1
- 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 +7 -6
- package/dist/esm/types/filterFns.d.ts +14 -14
- package/dist/esm/types/head/MRT_TableHeadCellFilterLabel.d.ts +1 -1
- package/dist/esm/types/head/MRT_TableHeadCellSortLabel.d.ts +1 -1
- package/dist/esm/types/hooks/useMRT_DisplayColumns.d.ts +3 -3
- package/dist/esm/types/icons.d.ts +1 -1
- package/dist/esm/types/inputs/MRT_FilterRangeSlider.d.ts +1 -1
- package/dist/esm/types/menus/MRT_ColumnActionMenu.d.ts +4 -4
- package/dist/esm/types/menus/MRT_ShowHideColumnsMenuItems.d.ts +1 -1
- package/dist/esm/types/toolbar/MRT_TablePagination.d.ts +2 -2
- package/dist/esm/types/toolbar/MRT_TopToolbar.d.ts +1 -1
- package/dist/esm/types/types.d.ts +203 -197
- package/dist/index.d.ts +293 -272
- 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/locales/fr.esm.js +1 -1
- package/locales/fr.esm.js.map +1 -1
- package/locales/fr.js +1 -1
- package/locales/fr.js.map +1 -1
- package/package.json +10 -9
- package/src/MaterialReactTable.tsx +2 -2
- package/src/body/MRT_TableBody.tsx +180 -76
- package/src/body/MRT_TableBodyCell.tsx +45 -43
- package/src/body/MRT_TableBodyCellValue.tsx +5 -5
- package/src/body/MRT_TableBodyRow.tsx +117 -29
- package/src/body/MRT_TableBodyRowGrabHandle.tsx +6 -5
- package/src/body/MRT_TableBodyRowPinButton.tsx +46 -0
- package/src/body/MRT_TableDetailPanel.tsx +16 -22
- package/src/body/index.ts +2 -1
- package/src/buttons/MRT_CopyButton.tsx +14 -20
- package/src/buttons/MRT_EditActionButtons.tsx +4 -4
- package/src/buttons/MRT_ExpandAllButton.tsx +7 -9
- package/src/buttons/MRT_ExpandButton.tsx +6 -7
- package/src/buttons/MRT_GrabHandleButton.tsx +12 -13
- package/src/buttons/MRT_RowPinButton.tsx +74 -0
- package/src/buttons/MRT_ShowHideColumnsButton.tsx +1 -1
- package/src/buttons/MRT_ToggleFullScreenButton.tsx +2 -2
- package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +9 -10
- package/src/buttons/index.ts +2 -1
- package/src/column.utils.ts +33 -21
- package/src/filterFns.ts +29 -29
- package/src/footer/MRT_TableFooter.tsx +14 -8
- package/src/footer/MRT_TableFooterCell.tsx +8 -21
- package/src/footer/MRT_TableFooterRow.tsx +7 -8
- package/src/head/MRT_TableHead.tsx +12 -8
- package/src/head/MRT_TableHeadCell.tsx +18 -25
- package/src/head/MRT_TableHeadCellColumnActionsButton.tsx +18 -23
- package/src/head/MRT_TableHeadCellFilterContainer.tsx +11 -4
- package/src/head/MRT_TableHeadCellFilterLabel.tsx +106 -61
- package/src/head/MRT_TableHeadCellGrabHandle.tsx +8 -15
- package/src/head/MRT_TableHeadCellResizeHandle.tsx +11 -11
- package/src/head/MRT_TableHeadCellSortLabel.tsx +8 -8
- package/src/head/MRT_TableHeadRow.tsx +7 -8
- package/src/hooks/useMRT_DisplayColumns.tsx +17 -4
- package/src/hooks/useMRT_Effects.ts +3 -3
- package/src/hooks/useMRT_TableInstance.ts +17 -10
- package/src/hooks/useMRT_TableOptions.ts +9 -5
- package/src/icons.ts +2 -2
- package/src/inputs/MRT_EditCellTextField.tsx +23 -31
- package/src/inputs/MRT_FilterCheckbox.tsx +17 -29
- package/src/inputs/MRT_FilterRangeFields.tsx +1 -1
- package/src/inputs/MRT_FilterRangeSlider.tsx +12 -29
- package/src/inputs/MRT_FilterTextField.tsx +83 -99
- package/src/inputs/MRT_GlobalFilterTextField.tsx +29 -29
- package/src/inputs/MRT_SelectCheckbox.tsx +35 -21
- package/src/locales/en.ts +1 -1
- package/src/locales/fr.ts +1 -1
- package/src/menus/MRT_ColumnActionMenu.tsx +14 -14
- package/src/menus/MRT_FilterOptionMenu.tsx +35 -35
- package/src/menus/MRT_RowActionMenu.tsx +17 -18
- package/src/menus/MRT_ShowHideColumnsMenu.tsx +6 -6
- package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +5 -5
- package/src/modals/MRT_EditRowModal.tsx +12 -20
- package/src/sortingFns.ts +1 -1
- package/src/table/MRT_Table.tsx +14 -19
- package/src/table/MRT_TableContainer.tsx +14 -20
- package/src/table/MRT_TablePaper.tsx +16 -20
- package/src/toolbar/MRT_BottomToolbar.tsx +18 -24
- package/src/toolbar/MRT_LinearProgressBar.tsx +8 -7
- package/src/toolbar/MRT_TablePagination.tsx +23 -25
- package/src/toolbar/MRT_ToolbarAlertBanner.tsx +11 -14
- package/src/toolbar/MRT_ToolbarDropZone.tsx +6 -6
- package/src/toolbar/MRT_ToolbarInternalButtons.tsx +8 -5
- package/src/toolbar/MRT_TopToolbar.tsx +14 -20
- package/src/types.ts +269 -252
- package/src/useMaterialReactTable.ts +1 -1
@@ -33,23 +33,23 @@ export const MRT_TableHeadCellResizeHandle = <
|
|
33
33
|
}}
|
34
34
|
onMouseDown={header.getResizeHandler()}
|
35
35
|
onTouchStart={header.getResizeHandler()}
|
36
|
-
sx={(theme) => ({
|
37
|
-
cursor: 'col-resize',
|
38
|
-
mr: density === 'compact' ? '-0.75rem' : '-1rem',
|
39
|
-
position: 'absolute',
|
40
|
-
right: '4px',
|
41
|
-
px: '4px',
|
42
|
-
'&:active > hr': {
|
43
|
-
backgroundColor: theme.palette.info.main,
|
44
|
-
opacity: 1,
|
45
|
-
},
|
46
|
-
})}
|
47
36
|
style={{
|
48
37
|
transform:
|
49
38
|
column.getIsResizing() && columnResizeMode === 'onEnd'
|
50
39
|
? `translateX(${getState().columnSizingInfo.deltaOffset ?? 0}px)`
|
51
40
|
: undefined,
|
52
41
|
}}
|
42
|
+
sx={(theme) => ({
|
43
|
+
'&:active > hr': {
|
44
|
+
backgroundColor: theme.palette.info.main,
|
45
|
+
opacity: 1,
|
46
|
+
},
|
47
|
+
cursor: 'col-resize',
|
48
|
+
mr: density === 'compact' ? '-0.75rem' : '-1rem',
|
49
|
+
position: 'absolute',
|
50
|
+
px: '4px',
|
51
|
+
right: '4px',
|
52
|
+
})}
|
53
53
|
>
|
54
54
|
<Divider
|
55
55
|
className="Mui-TableHeadCell-ResizeHandle-Divider"
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import Badge from '@mui/material/Badge';
|
2
|
+
import { type TableCellProps } from '@mui/material/TableCell';
|
2
3
|
import TableSortLabel from '@mui/material/TableSortLabel';
|
3
4
|
import Tooltip from '@mui/material/Tooltip';
|
4
5
|
import { type MRT_Header, type MRT_TableInstance } from '../types';
|
5
|
-
import { type TableCellProps } from '@mui/material/TableCell';
|
6
6
|
|
7
7
|
interface Props<TData extends Record<string, any>> {
|
8
8
|
header: MRT_Header<TData>;
|
@@ -41,25 +41,25 @@ export const MRT_TableHeadCellSortLabel = <TData extends Record<string, any>>({
|
|
41
41
|
overlap="circular"
|
42
42
|
>
|
43
43
|
<TableSortLabel
|
44
|
-
|
44
|
+
IconComponent={ArrowDownwardIcon}
|
45
45
|
active={!!column.getIsSorted()}
|
46
|
+
aria-label={sortTooltip}
|
46
47
|
direction={
|
47
48
|
column.getIsSorted()
|
48
49
|
? (column.getIsSorted() as 'asc' | 'desc')
|
49
50
|
: undefined
|
50
51
|
}
|
52
|
+
onClick={(e) => {
|
53
|
+
e.stopPropagation();
|
54
|
+
header.column.getToggleSortingHandler()?.(e);
|
55
|
+
}}
|
51
56
|
sx={{
|
52
57
|
flex: '0 0',
|
53
|
-
width: '2.4ch',
|
54
58
|
transform:
|
55
59
|
tableCellProps?.align !== 'right'
|
56
60
|
? 'translateX(-0.5ch)'
|
57
61
|
: undefined,
|
58
|
-
|
59
|
-
IconComponent={ArrowDownwardIcon}
|
60
|
-
onClick={(e) => {
|
61
|
-
e.stopPropagation();
|
62
|
-
header.column.getToggleSortingHandler()?.(e);
|
62
|
+
width: '2.4ch',
|
63
63
|
}}
|
64
64
|
/>
|
65
65
|
</Badge>
|
@@ -1,7 +1,8 @@
|
|
1
|
+
import { type VirtualItem } from '@tanstack/react-virtual';
|
1
2
|
import TableRow from '@mui/material/TableRow';
|
2
3
|
import { alpha, lighten } from '@mui/material/styles';
|
3
4
|
import { MRT_TableHeadCell } from './MRT_TableHeadCell';
|
4
|
-
import {
|
5
|
+
import { parseFromValuesOrFunc } from '../column.utils';
|
5
6
|
import {
|
6
7
|
type MRT_Header,
|
7
8
|
type MRT_HeaderGroup,
|
@@ -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,28 +1,29 @@
|
|
1
1
|
import { type RefObject, useMemo } from 'react';
|
2
|
-
import { showExpandColumn } from '../column.utils';
|
3
2
|
import { MRT_TableBodyRowGrabHandle } from '../body';
|
3
|
+
import { MRT_TableBodyRowPinButton } from '../body/MRT_TableBodyRowPinButton';
|
4
4
|
import { MRT_ExpandAllButton } from '../buttons/MRT_ExpandAllButton';
|
5
5
|
import { MRT_ExpandButton } from '../buttons/MRT_ExpandButton';
|
6
6
|
import { MRT_ToggleRowActionMenuButton } from '../buttons/MRT_ToggleRowActionMenuButton';
|
7
|
+
import { showExpandColumn } from '../column.utils';
|
7
8
|
import { MRT_SelectCheckbox } from '../inputs/MRT_SelectCheckbox';
|
8
9
|
import {
|
9
10
|
type MRT_ColumnDef,
|
10
11
|
type MRT_ColumnOrderState,
|
11
|
-
type MRT_GroupingState,
|
12
12
|
type MRT_DefinedTableOptions,
|
13
|
+
type MRT_GroupingState,
|
13
14
|
type MRT_Row,
|
14
15
|
} from '../types';
|
15
16
|
|
16
17
|
interface Params<TData extends Record<string, any>> {
|
17
|
-
creatingRow: MRT_Row<TData> | null;
|
18
18
|
columnOrder: MRT_ColumnOrderState;
|
19
|
+
creatingRow: MRT_Row<TData> | null;
|
19
20
|
grouping: MRT_GroupingState;
|
20
21
|
tableOptions: MRT_DefinedTableOptions<TData>;
|
21
22
|
}
|
22
23
|
|
23
24
|
export const useMRT_DisplayColumns = <TData extends Record<string, any>>({
|
24
|
-
creatingRow,
|
25
25
|
columnOrder,
|
26
|
+
creatingRow,
|
26
27
|
grouping,
|
27
28
|
tableOptions,
|
28
29
|
}: Params<TData>) => {
|
@@ -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
|
) && {
|
@@ -12,10 +12,10 @@ export const useMRT_Effects = <TData extends Record<string, any> = {}>(
|
|
12
12
|
const {
|
13
13
|
globalFilter,
|
14
14
|
isFullScreen,
|
15
|
-
pagination,
|
16
|
-
sorting,
|
17
15
|
isLoading,
|
16
|
+
pagination,
|
18
17
|
showSkeletons,
|
18
|
+
sorting,
|
19
19
|
} = getState();
|
20
20
|
|
21
21
|
const isMounted = useRef(false);
|
@@ -38,8 +38,8 @@ export const useMRT_Effects = <TData extends Record<string, any> = {}>(
|
|
38
38
|
if (!previousTop.current) return;
|
39
39
|
//restore scroll position
|
40
40
|
window.scrollTo({
|
41
|
-
top: -1 * (previousTop.current as number),
|
42
41
|
behavior: 'instant',
|
42
|
+
top: -1 * (previousTop.current as number),
|
43
43
|
});
|
44
44
|
}
|
45
45
|
}
|
@@ -19,16 +19,14 @@ import {
|
|
19
19
|
getDefaultColumnOrderIds,
|
20
20
|
prepareColumns,
|
21
21
|
} from '../column.utils';
|
22
|
-
import { useMRT_DisplayColumns } from './useMRT_DisplayColumns';
|
23
|
-
import { useMRT_Effects } from './useMRT_Effects';
|
24
22
|
import {
|
25
23
|
type MRT_Cell,
|
26
24
|
type MRT_Column,
|
27
25
|
type MRT_ColumnDef,
|
26
|
+
type MRT_ColumnFilterFnsState,
|
28
27
|
type MRT_ColumnOrderState,
|
29
28
|
type MRT_DefinedTableOptions,
|
30
29
|
type MRT_DensityState,
|
31
|
-
type MRT_ColumnFilterFnsState,
|
32
30
|
type MRT_FilterOption,
|
33
31
|
type MRT_GroupingState,
|
34
32
|
type MRT_Row,
|
@@ -36,6 +34,8 @@ import {
|
|
36
34
|
type MRT_TableState,
|
37
35
|
type MRT_Updater,
|
38
36
|
} from '../types';
|
37
|
+
import { useMRT_DisplayColumns } from './useMRT_DisplayColumns';
|
38
|
+
import { useMRT_Effects } from './useMRT_Effects';
|
39
39
|
|
40
40
|
export const useMRT_TableInstance: <TData extends Record<string, any>>(
|
41
41
|
tableOptions: MRT_DefinedTableOptions<TData>,
|
@@ -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 ?? {};
|
@@ -102,10 +104,10 @@ export const useMRT_TableInstance: <TData extends Record<string, any>>(
|
|
102
104
|
initialState.grouping ?? [],
|
103
105
|
);
|
104
106
|
const [hoveredColumn, setHoveredColumn] = useState<
|
105
|
-
|
107
|
+
{ id: string } | MRT_Column<TData> | null
|
106
108
|
>(initialState.hoveredColumn ?? null);
|
107
109
|
const [hoveredRow, setHoveredRow] = useState<
|
108
|
-
|
110
|
+
{ id: string } | MRT_Row<TData> | null
|
109
111
|
>(initialState.hoveredRow ?? null);
|
110
112
|
const [isFullScreen, setIsFullScreen] = useState<boolean>(
|
111
113
|
initialState?.isFullScreen ?? false,
|
@@ -205,9 +207,9 @@ export const useMRT_TableInstance: <TData extends Record<string, any>>(
|
|
205
207
|
getSortedRowModel: tableOptions.enableSorting
|
206
208
|
? getSortedRowModel()
|
207
209
|
: undefined,
|
210
|
+
getSubRows: (row) => row?.subRows,
|
208
211
|
onColumnOrderChange: setColumnOrder,
|
209
212
|
onGroupingChange: setGrouping,
|
210
|
-
getSubRows: (row) => row?.subRows,
|
211
213
|
...tableOptions,
|
212
214
|
//@ts-ignore
|
213
215
|
columns: columnDefs,
|
@@ -215,9 +217,9 @@ export const useMRT_TableInstance: <TData extends Record<string, any>>(
|
|
215
217
|
globalFilterFn: tableOptions.filterFns?.[globalFilterFn ?? 'fuzzy'],
|
216
218
|
initialState,
|
217
219
|
state: {
|
218
|
-
creatingRow,
|
219
220
|
columnFilterFns,
|
220
221
|
columnOrder,
|
222
|
+
creatingRow,
|
221
223
|
density,
|
222
224
|
draggingColumn,
|
223
225
|
draggingRow,
|
@@ -246,19 +248,24 @@ export const useMRT_TableInstance: <TData extends Record<string, any>>(
|
|
246
248
|
searchInputRef,
|
247
249
|
// @ts-ignore
|
248
250
|
tableContainerRef,
|
251
|
+
// @ts-ignore
|
252
|
+
tableFooterRef,
|
249
253
|
tableHeadCellRefs,
|
250
254
|
// @ts-ignore
|
255
|
+
tableHeadRef,
|
256
|
+
// @ts-ignore
|
251
257
|
tablePaperRef,
|
252
258
|
// @ts-ignore
|
253
259
|
topToolbarRef,
|
254
260
|
};
|
255
261
|
|
256
262
|
const setCreatingRow = (row: MRT_Updater<MRT_Row<TData> | null | true>) => {
|
263
|
+
let _row = row;
|
257
264
|
if (row === true) {
|
258
|
-
|
259
|
-
} else {
|
260
|
-
_setCreatingRow(row as MRT_Row<TData> | null);
|
265
|
+
_row = createRow(table);
|
261
266
|
}
|
267
|
+
tableOptions?.onCreatingRowChange?.(_row as MRT_Row<TData> | null) ??
|
268
|
+
_setCreatingRow(_row as MRT_Row<TData> | null);
|
262
269
|
};
|
263
270
|
|
264
271
|
table.setCreatingRow = setCreatingRow;
|
@@ -1,10 +1,10 @@
|
|
1
1
|
import { useMemo } from 'react';
|
2
2
|
import { MRT_AggregationFns } from '../aggregationFns';
|
3
|
-
import { MRT_FilterFns } from '../filterFns';
|
4
|
-
import { MRT_SortingFns } from '../sortingFns';
|
5
3
|
import { MRT_DefaultColumn, MRT_DefaultDisplayColumn } from '../column.utils';
|
6
|
-
import {
|
4
|
+
import { MRT_FilterFns } from '../filterFns';
|
7
5
|
import { MRT_Default_Icons } from '../icons';
|
6
|
+
import { MRT_Localization_EN } from '../locales/en';
|
7
|
+
import { MRT_SortingFns } from '../sortingFns';
|
8
8
|
import { type MRT_DefinedTableOptions, type MRT_TableOptions } from '../types';
|
9
9
|
|
10
10
|
export const useMRT_TableOptions: <TData extends Record<string, any>>(
|
@@ -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,
|
package/src/icons.ts
CHANGED
@@ -13,8 +13,8 @@ import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
|
|
13
13
|
import FilterAltIcon from '@mui/icons-material/FilterAlt';
|
14
14
|
import FilterListIcon from '@mui/icons-material/FilterList';
|
15
15
|
import FilterListOffIcon from '@mui/icons-material/FilterListOff';
|
16
|
-
import FullscreenExitIcon from '@mui/icons-material/FullscreenExit';
|
17
16
|
import FullscreenIcon from '@mui/icons-material/Fullscreen';
|
17
|
+
import FullscreenExitIcon from '@mui/icons-material/FullscreenExit';
|
18
18
|
import KeyboardDoubleArrowDownIcon from '@mui/icons-material/KeyboardDoubleArrowDown';
|
19
19
|
import MoreHorizIcon from '@mui/icons-material/MoreHoriz';
|
20
20
|
import MoreVertIcon from '@mui/icons-material/MoreVert';
|
@@ -36,7 +36,6 @@ export interface MRT_Icons {
|
|
36
36
|
DensityLargeIcon: any;
|
37
37
|
DensityMediumIcon: any;
|
38
38
|
DensitySmallIcon: any;
|
39
|
-
KeyboardDoubleArrowDownIcon: any;
|
40
39
|
DragHandleIcon: any;
|
41
40
|
DynamicFeedIcon: any;
|
42
41
|
EditIcon: any;
|
@@ -46,6 +45,7 @@ export interface MRT_Icons {
|
|
46
45
|
FilterListOffIcon: any;
|
47
46
|
FullscreenExitIcon: any;
|
48
47
|
FullscreenIcon: any;
|
48
|
+
KeyboardDoubleArrowDownIcon: any;
|
49
49
|
MoreHorizIcon: any;
|
50
50
|
MoreVertIcon: any;
|
51
51
|
PushPinIcon: any;
|
@@ -4,9 +4,10 @@ import {
|
|
4
4
|
type KeyboardEvent,
|
5
5
|
useState,
|
6
6
|
} from 'react';
|
7
|
-
import TextField from '@mui/material/TextField';
|
8
7
|
import MenuItem from '@mui/material/MenuItem';
|
8
|
+
import TextField from '@mui/material/TextField';
|
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>> {
|
@@ -22,9 +23,9 @@ export const MRT_EditCellTextField = <TData extends Record<string, any>>({
|
|
22
23
|
getState,
|
23
24
|
options: { createDisplayMode, editDisplayMode, muiEditTextFieldProps },
|
24
25
|
refs: { editInputRefs },
|
26
|
+
setCreatingRow,
|
25
27
|
setEditingCell,
|
26
28
|
setEditingRow,
|
27
|
-
setCreatingRow,
|
28
29
|
} = table;
|
29
30
|
const { column, row } = cell;
|
30
31
|
const { columnDef } = column;
|
@@ -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) {
|
@@ -108,7 +100,7 @@ export const MRT_EditCellTextField = <TData extends Record<string, any>>({
|
|
108
100
|
}
|
109
101
|
}}
|
110
102
|
label={
|
111
|
-
['
|
103
|
+
['custom', 'modal'].includes(
|
112
104
|
(isCreating ? createDisplayMode : editDisplayMode) as string,
|
113
105
|
)
|
114
106
|
? column.columnDef.header
|
@@ -117,7 +109,7 @@ export const MRT_EditCellTextField = <TData extends Record<string, any>>({
|
|
117
109
|
margin="none"
|
118
110
|
name={column.id}
|
119
111
|
placeholder={
|
120
|
-
!['
|
112
|
+
!['custom', 'modal'].includes(
|
121
113
|
(isCreating ? createDisplayMode : editDisplayMode) as string,
|
122
114
|
)
|
123
115
|
? columnDef.header
|
@@ -127,17 +119,17 @@ export const MRT_EditCellTextField = <TData extends Record<string, any>>({
|
|
127
119
|
value={value}
|
128
120
|
variant="standard"
|
129
121
|
{...textFieldProps}
|
122
|
+
onBlur={handleBlur}
|
123
|
+
onChange={handleChange}
|
130
124
|
onClick={(e) => {
|
131
125
|
e.stopPropagation();
|
132
126
|
textFieldProps?.onClick?.(e);
|
133
127
|
}}
|
134
|
-
onBlur={handleBlur}
|
135
|
-
onChange={handleChange}
|
136
128
|
onKeyDown={handleEnterKeyDown}
|
137
129
|
>
|
138
130
|
{textFieldProps.children ??
|
139
131
|
columnDef?.editSelectOptions?.map(
|
140
|
-
(option:
|
132
|
+
(option: { text: string; value: string } | string) => {
|
141
133
|
let value: string;
|
142
134
|
let text: string;
|
143
135
|
if (typeof option !== 'object') {
|
@@ -151,10 +143,10 @@ export const MRT_EditCellTextField = <TData extends Record<string, any>>({
|
|
151
143
|
<MenuItem
|
152
144
|
key={value}
|
153
145
|
sx={{
|
154
|
-
display: 'flex',
|
155
|
-
m: 0,
|
156
146
|
alignItems: 'center',
|
147
|
+
display: 'flex',
|
157
148
|
gap: '0.5rem',
|
149
|
+
m: 0,
|
158
150
|
}}
|
159
151
|
value={value}
|
160
152
|
>
|
@@ -1,7 +1,7 @@
|
|
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 {
|
4
|
+
import { parseFromValuesOrFunc } from '../column.utils';
|
5
5
|
import { type MRT_Column, type MRT_TableInstance } from '../types';
|
6
6
|
|
7
7
|
interface Props<TData extends Record<string, any>> {
|
@@ -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}',
|
@@ -57,16 +47,12 @@ export const MRT_FilterCheckbox = <TData extends Record<string, any>>({
|
|
57
47
|
control={
|
58
48
|
<Checkbox
|
59
49
|
checked={column.getFilterValue() === 'true'}
|
60
|
-
indeterminate={column.getFilterValue() === undefined}
|
61
50
|
color={
|
62
51
|
column.getFilterValue() === undefined ? 'default' : 'primary'
|
63
52
|
}
|
53
|
+
indeterminate={column.getFilterValue() === undefined}
|
64
54
|
size={density === 'compact' ? 'small' : 'medium'}
|
65
55
|
{...checkboxProps}
|
66
|
-
onClick={(e) => {
|
67
|
-
e.stopPropagation();
|
68
|
-
checkboxProps?.onClick?.(e);
|
69
|
-
}}
|
70
56
|
onChange={(e, checked) => {
|
71
57
|
column.setFilterValue(
|
72
58
|
column.getFilterValue() === undefined
|
@@ -77,18 +63,20 @@ export const MRT_FilterCheckbox = <TData extends Record<string, any>>({
|
|
77
63
|
);
|
78
64
|
checkboxProps?.onChange?.(e, checked);
|
79
65
|
}}
|
66
|
+
onClick={(e) => {
|
67
|
+
e.stopPropagation();
|
68
|
+
checkboxProps?.onClick?.(e);
|
69
|
+
}}
|
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
|
}
|
89
77
|
disableTypography
|
90
78
|
label={checkboxProps.title ?? filterLabel}
|
91
|
-
sx={{ color: 'text.secondary',
|
79
|
+
sx={{ color: 'text.secondary', fontWeight: 'normal', mt: '-4px' }}
|
92
80
|
title={undefined}
|
93
81
|
/>
|
94
82
|
</Tooltip>
|
@@ -12,7 +12,7 @@ export const MRT_FilterRangeFields = <TData extends Record<string, any>>({
|
|
12
12
|
table,
|
13
13
|
}: Props<TData>) => {
|
14
14
|
return (
|
15
|
-
<Box sx={{ display: 'grid',
|
15
|
+
<Box sx={{ display: 'grid', gap: '1rem', gridTemplateColumns: '1fr 1fr' }}>
|
16
16
|
<MRT_FilterTextField header={header} rangeFilterIndex={0} table={table} />
|
17
17
|
<MRT_FilterTextField header={header} rangeFilterIndex={1} table={table} />
|
18
18
|
</Box>
|
@@ -1,8 +1,9 @@
|
|
1
|
-
import Slider, { type SliderProps } from '@mui/material/Slider';
|
2
|
-
import Stack from '@mui/material/Stack';
|
3
|
-
import FormHelperText from '@mui/material/FormHelperText';
|
4
|
-
import { type MRT_TableInstance, type MRT_Header } from '../types';
|
5
1
|
import { useEffect, useRef, useState } from 'react';
|
2
|
+
import FormHelperText from '@mui/material/FormHelperText';
|
3
|
+
import Slider from '@mui/material/Slider';
|
4
|
+
import Stack from '@mui/material/Stack';
|
5
|
+
import { parseFromValuesOrFunc } from '../column.utils';
|
6
|
+
import { type MRT_Header, type MRT_TableInstance } from '../types';
|
6
7
|
|
7
8
|
interface Props<TData extends Record<string, any>> {
|
8
9
|
header: MRT_Header<TData>;
|
@@ -14,7 +15,7 @@ export const MRT_FilterRangeSlider = <TData extends Record<string, any>>({
|
|
14
15
|
table,
|
15
16
|
}: Props<TData>) => {
|
16
17
|
const {
|
17
|
-
options: { localization, muiFilterSliderProps
|
18
|
+
options: { enableColumnFilterModes, localization, muiFilterSliderProps },
|
18
19
|
refs: { filterInputRefs },
|
19
20
|
} = table;
|
20
21
|
const { column } = header;
|
@@ -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
|
@@ -77,8 +62,8 @@ export const MRT_FilterRangeSlider = <TData extends Record<string, any>>({
|
|
77
62
|
<Stack>
|
78
63
|
<Slider
|
79
64
|
disableSwap
|
80
|
-
min={min}
|
81
65
|
max={max}
|
66
|
+
min={min}
|
82
67
|
onChange={(_event, values) => {
|
83
68
|
setFilterValues(values as [number, number]);
|
84
69
|
}}
|
@@ -114,17 +99,15 @@ 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 ? (
|
123
106
|
<FormHelperText
|
124
107
|
sx={{
|
125
|
-
m: '-3px -6px',
|
126
108
|
fontSize: '0.75rem',
|
127
109
|
lineHeight: '0.8rem',
|
110
|
+
m: '-3px -6px',
|
128
111
|
whiteSpace: 'nowrap',
|
129
112
|
}}
|
130
113
|
>
|