@cutting/material-react-table 5.0.0-beta.2 → 5.1.0
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 +1 -4
- package/dist/index.d.ts +189 -524
- package/dist/index.js +329 -345
- package/dist/index.js.map +1 -1
- package/locales/ar/index.mjs +1 -2
- package/locales/az/index.mjs +1 -2
- package/locales/bg/index.mjs +1 -2
- package/locales/cs/index.mjs +1 -2
- package/locales/da/index.mjs +1 -2
- package/locales/de/index.mjs +1 -2
- package/locales/el/index.mjs +1 -2
- package/locales/en/index.mjs +1 -2
- package/locales/es/index.mjs +1 -2
- package/locales/et/index.mjs +1 -2
- package/locales/fa/index.mjs +1 -2
- package/locales/fi/index.mjs +1 -2
- package/locales/fr/index.mjs +1 -2
- package/locales/he/index.mjs +1 -2
- package/locales/hr/index.mjs +1 -2
- package/locales/hu/index.mjs +1 -2
- package/locales/hy/index.mjs +1 -2
- package/locales/id/index.mjs +1 -2
- package/locales/it/index.mjs +1 -2
- package/locales/ja/index.mjs +1 -2
- package/locales/ko/index.mjs +1 -2
- package/locales/nl/index.mjs +1 -2
- package/locales/no/index.mjs +1 -2
- package/locales/np/index.mjs +1 -2
- package/locales/pl/index.mjs +1 -2
- package/locales/pt/index.mjs +1 -2
- package/locales/pt-BR/index.mjs +1 -2
- package/locales/ro/index.mjs +1 -2
- package/locales/ru/index.mjs +1 -2
- package/locales/sk/index.mjs +1 -2
- package/locales/sr-Cyrl-RS/index.mjs +1 -2
- package/locales/sr-Latn-RS/index.mjs +1 -2
- package/locales/sv/index.mjs +1 -2
- package/locales/tr/index.mjs +1 -2
- package/locales/uk/index.mjs +1 -2
- package/locales/vi/index.mjs +1 -2
- package/locales/zh-Hans/index.mjs +1 -2
- package/locales/zh-Hant/index.mjs +1 -2
- package/package.json +32 -40
- package/src/MaterialReactTable.smoke.test.tsx +3 -9
- package/src/components/MaterialReactTable.tsx +13 -21
- package/src/components/body/MRT_TableBody.tsx +67 -82
- package/src/components/body/MRT_TableBodyCell.tsx +38 -80
- package/src/components/body/MRT_TableBodyCellValue.tsx +5 -14
- package/src/components/body/MRT_TableBodyRow.tsx +55 -102
- package/src/components/body/MRT_TableBodyRowGrabHandle.test.tsx +2 -6
- package/src/components/body/MRT_TableBodyRowGrabHandle.tsx +4 -9
- package/src/components/body/MRT_TableBodyRowPinButton.tsx +8 -14
- package/src/components/body/MRT_TableDetailPanel.test.tsx +3 -9
- package/src/components/body/MRT_TableDetailPanel.tsx +8 -14
- package/src/components/buttons/MRT_ColumnPinningButtons.test.tsx +6 -16
- package/src/components/buttons/MRT_ColumnPinningButtons.tsx +6 -12
- package/src/components/buttons/MRT_CopyButton.tsx +7 -15
- package/src/components/buttons/MRT_EditActionButtons.test.tsx +2 -6
- package/src/components/buttons/MRT_EditActionButtons.tsx +15 -37
- package/src/components/buttons/MRT_ExpandAllButton.tsx +8 -16
- package/src/components/buttons/MRT_ExpandButton.tsx +9 -21
- package/src/components/buttons/MRT_GrabHandleButton.tsx +6 -10
- package/src/components/buttons/MRT_RowPinButton.tsx +8 -23
- package/src/components/buttons/MRT_ShowHideColumnsButton.tsx +5 -18
- package/src/components/buttons/MRT_ToggleDensePaddingButton.test.tsx +4 -12
- package/src/components/buttons/MRT_ToggleDensePaddingButton.tsx +4 -11
- package/src/components/buttons/MRT_ToggleFiltersButton.test.tsx +4 -13
- package/src/components/buttons/MRT_ToggleFiltersButton.tsx +3 -5
- package/src/components/buttons/MRT_ToggleFullScreenButton.test.tsx +3 -11
- package/src/components/buttons/MRT_ToggleFullScreenButton.tsx +4 -9
- package/src/components/buttons/MRT_ToggleGlobalFilterButton.tsx +3 -5
- package/src/components/buttons/MRT_ToggleRowActionMenuButton.tsx +7 -15
- package/src/components/footer/MRT_TableFooter.tsx +9 -16
- package/src/components/footer/MRT_TableFooterCell.tsx +9 -32
- package/src/components/footer/MRT_TableFooterRow.tsx +18 -32
- package/src/components/head/MRT_TableHead.tsx +8 -18
- package/src/components/head/MRT_TableHeadCell.tsx +46 -100
- package/src/components/head/MRT_TableHeadCellColumnActionsButton.tsx +10 -30
- package/src/components/head/MRT_TableHeadCellFilterContainer.tsx +4 -15
- package/src/components/head/MRT_TableHeadCellFilterLabel.tsx +20 -54
- package/src/components/head/MRT_TableHeadCellGrabHandle.test.tsx +5 -19
- package/src/components/head/MRT_TableHeadCellGrabHandle.tsx +9 -38
- package/src/components/head/MRT_TableHeadCellResizeHandle.test.tsx +3 -13
- package/src/components/head/MRT_TableHeadCellResizeHandle.tsx +10 -24
- package/src/components/head/MRT_TableHeadCellSortLabel.tsx +10 -26
- package/src/components/head/MRT_TableHeadRow.tsx +24 -36
- package/src/components/inputs/MRT_EditCellTextField.test.tsx +2 -9
- package/src/components/inputs/MRT_EditCellTextField.tsx +9 -28
- package/src/components/inputs/MRT_FilterCheckbox.tsx +9 -23
- package/src/components/inputs/MRT_FilterRangeFields.tsx +6 -15
- package/src/components/inputs/MRT_FilterRangeSlider.tsx +24 -32
- package/src/components/inputs/MRT_FilterTextField.test.tsx +72 -14
- package/src/components/inputs/MRT_FilterTextField.tsx +77 -138
- package/src/components/inputs/MRT_GlobalFilterTextField.tsx +10 -32
- package/src/components/inputs/MRT_SelectCheckbox.test.tsx +4 -11
- package/src/components/inputs/MRT_SelectCheckbox.tsx +17 -36
- package/src/components/menus/MRT_ActionMenuItem.tsx +6 -15
- package/src/components/menus/MRT_CellActionMenu.tsx +6 -9
- package/src/components/menus/MRT_ColumnActionMenu.tsx +22 -57
- package/src/components/menus/MRT_FilterOptionMenu.tsx +38 -65
- package/src/components/menus/MRT_RowActionMenu.tsx +33 -22
- package/src/components/menus/MRT_ShowHideColumnsMenu.tsx +29 -65
- package/src/components/menus/MRT_ShowHideColumnsMenuItems.test.tsx +43 -0
- package/src/components/menus/MRT_ShowHideColumnsMenuItems.tsx +14 -50
- package/src/components/modals/MRT_EditRowModal.test.tsx +5 -21
- package/src/components/modals/MRT_EditRowModal.tsx +8 -26
- package/src/components/table/MRT_Table.tsx +12 -20
- package/src/components/table/MRT_TableContainer.test.tsx +147 -0
- package/src/components/table/MRT_TableContainer.tsx +33 -37
- package/src/components/table/MRT_TableLoadingOverlay.tsx +3 -5
- package/src/components/table/MRT_TablePaper.tsx +7 -14
- package/src/components/toolbar/MRT_BottomToolbar.tsx +11 -23
- package/src/components/toolbar/MRT_LinearProgressBar.tsx +4 -11
- package/src/components/toolbar/MRT_TablePagination.tsx +33 -40
- package/src/components/toolbar/MRT_ToolbarAlertBanner.tsx +21 -50
- package/src/components/toolbar/MRT_ToolbarDropZone.test.tsx +26 -10
- package/src/components/toolbar/MRT_ToolbarDropZone.tsx +23 -21
- package/src/components/toolbar/MRT_ToolbarInternalButtons.tsx +11 -21
- package/src/components/toolbar/MRT_TopToolbar.tsx +12 -28
- package/src/fns/aggregationFns.test.tsx +1 -3
- package/src/fns/filterFns.test.tsx +9 -37
- package/src/fns/filterFns.ts +73 -96
- package/src/fns/sortingFns.test.tsx +39 -0
- package/src/fns/sortingFns.ts +15 -15
- package/src/fns/tableFeatures.test.tsx +6 -29
- package/src/fns/tableFeatures.ts +5 -4
- package/src/hooks/display-columns/getMRT_RowActionsColumnDef.tsx +2 -11
- package/src/hooks/display-columns/getMRT_RowDragColumnDef.tsx +2 -10
- package/src/hooks/display-columns/getMRT_RowExpandColumnDef.tsx +8 -17
- package/src/hooks/display-columns/getMRT_RowNumbersColumnDef.tsx +3 -8
- package/src/hooks/display-columns/getMRT_RowPinningColumnDef.tsx +2 -8
- package/src/hooks/display-columns/getMRT_RowSelectColumnDef.tsx +3 -13
- package/src/hooks/display-columns/getMRT_RowSpacerColumnDef.tsx +1 -5
- package/src/hooks/useMRT_ColumnVirtualizer.ts +28 -49
- package/src/hooks/useMRT_Effects.test.tsx +114 -0
- package/src/hooks/useMRT_Effects.ts +26 -27
- package/src/hooks/useMRT_RowVirtualizer.ts +18 -33
- package/src/hooks/useMRT_Rows.ts +3 -42
- package/src/hooks/useMRT_TableInstance.ts +63 -129
- package/src/hooks/useMRT_TableOptions.ts +15 -29
- package/src/hooks/useMaterialReactTable.ts +2 -7
- package/src/icons.ts +38 -1
- package/src/index.ts +0 -4
- package/src/locales/ar.ts +1 -2
- package/src/locales/az.ts +1 -2
- package/src/locales/bg.ts +1 -2
- package/src/locales/cs.ts +2 -4
- package/src/locales/da.ts +1 -2
- package/src/locales/de.ts +1 -2
- package/src/locales/el.ts +1 -2
- package/src/locales/en.ts +1 -2
- package/src/locales/es.ts +1 -2
- package/src/locales/et.ts +2 -4
- package/src/locales/fa.ts +1 -2
- package/src/locales/fi.ts +2 -4
- package/src/locales/fr.ts +1 -2
- package/src/locales/he.ts +1 -2
- package/src/locales/hr.ts +1 -2
- package/src/locales/hu.ts +1 -2
- package/src/locales/hy.ts +1 -2
- package/src/locales/id.ts +2 -4
- package/src/locales/it.ts +1 -2
- package/src/locales/ja.ts +1 -2
- package/src/locales/ko.ts +1 -2
- package/src/locales/nl.ts +1 -2
- package/src/locales/no.ts +2 -4
- package/src/locales/np.ts +2 -4
- package/src/locales/pl.ts +1 -2
- package/src/locales/pt-BR.ts +1 -2
- package/src/locales/pt.ts +1 -2
- package/src/locales/ro.ts +1 -2
- package/src/locales/ru.ts +1 -2
- package/src/locales/sk.ts +2 -4
- package/src/locales/sr-Cyrl-RS.ts +1 -2
- package/src/locales/sr-Latn-RS.ts +1 -2
- package/src/locales/sv.ts +1 -2
- package/src/locales/tr.ts +1 -2
- package/src/locales/uk.ts +1 -2
- package/src/locales/vi.ts +1 -2
- package/src/types.ts +156 -349
- package/src/utils/cell.utils.ts +30 -68
- package/src/utils/column.utils.ts +61 -49
- package/src/utils/displayColumn.utils.ts +16 -38
- package/src/utils/highlight.utils.ts +7 -11
- package/src/utils/row.utils.ts +40 -65
- package/src/utils/slotProps.utils.ts +1 -4
- package/src/utils/style.utils.ts +18 -46
- package/src/utils/tanstack.helpers.ts +10 -17
- package/src/utils/utils.ts +6 -10
- package/src/utils/virtualization.utils.ts +5 -9
package/src/utils/row.utils.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
import { type ChangeEvent, type MouseEvent } from 'react';
|
|
1
|
+
import { type ChangeEvent, type KeyboardEvent, type MouseEvent } from 'react';
|
|
2
2
|
|
|
3
3
|
import { rankGlobalFuzzy } from '../fns/sortingFns';
|
|
4
|
-
import {
|
|
5
|
-
type MRT_Row,
|
|
6
|
-
type MRT_RowData,
|
|
7
|
-
type MRT_TableInstance,
|
|
8
|
-
} from '../types';
|
|
4
|
+
import { type MRT_Row, type MRT_RowData, type MRT_TableInstance } from '../types';
|
|
9
5
|
import { parseFromValuesOrFunc } from './utils';
|
|
10
6
|
|
|
11
7
|
export const getMRT_Rows = <TData extends MRT_RowData>(
|
|
@@ -40,9 +36,7 @@ export const getMRT_Rows = <TData extends MRT_RowData>(
|
|
|
40
36
|
: getCenterRows();
|
|
41
37
|
} else {
|
|
42
38
|
// fuzzy ranking adjustments
|
|
43
|
-
rows = getPrePaginatedRowModel().rows.sort((a, b) =>
|
|
44
|
-
rankGlobalFuzzy(a, b),
|
|
45
|
-
);
|
|
39
|
+
rows = getPrePaginatedRowModel().rows.sort((a, b) => rankGlobalFuzzy(a, b));
|
|
46
40
|
if (enablePagination && !manualPagination && !all) {
|
|
47
41
|
const start = pagination.pageIndex * pagination.pageSize;
|
|
48
42
|
rows = rows.slice(start, start + pagination.pageSize);
|
|
@@ -54,47 +48,26 @@ export const getMRT_Rows = <TData extends MRT_RowData>(
|
|
|
54
48
|
}
|
|
55
49
|
// row pinning adjustments
|
|
56
50
|
if (enableRowPinning && rowPinningDisplayMode?.includes('sticky')) {
|
|
57
|
-
const centerPinnedRowIds = rows
|
|
58
|
-
.filter((row) => row.getIsPinned())
|
|
59
|
-
.map((r) => r.id);
|
|
51
|
+
const centerPinnedRowIds = rows.filter((row) => row.getIsPinned()).map((r) => r.id);
|
|
60
52
|
|
|
61
|
-
rows = [
|
|
62
|
-
...getTopRows().filter((row) => !centerPinnedRowIds.includes(row.id)),
|
|
63
|
-
...rows,
|
|
64
|
-
];
|
|
53
|
+
rows = [...getTopRows().filter((row) => !centerPinnedRowIds.includes(row.id)), ...rows];
|
|
65
54
|
}
|
|
66
55
|
// blank inserted creating row adjustments
|
|
67
|
-
if (
|
|
68
|
-
positionCreatingRow !== undefined &&
|
|
69
|
-
creatingRow &&
|
|
70
|
-
createDisplayMode === 'row'
|
|
71
|
-
) {
|
|
56
|
+
if (positionCreatingRow !== undefined && creatingRow && createDisplayMode === 'row') {
|
|
72
57
|
const creatingRowIndex = !isNaN(+positionCreatingRow)
|
|
73
58
|
? +positionCreatingRow
|
|
74
59
|
: positionCreatingRow === 'top'
|
|
75
60
|
? 0
|
|
76
61
|
: rows.length;
|
|
77
|
-
rows = [
|
|
78
|
-
...rows.slice(0, creatingRowIndex),
|
|
79
|
-
creatingRow,
|
|
80
|
-
...rows.slice(creatingRowIndex),
|
|
81
|
-
];
|
|
62
|
+
rows = [...rows.slice(0, creatingRowIndex), creatingRow, ...rows.slice(creatingRowIndex)];
|
|
82
63
|
}
|
|
83
64
|
|
|
84
65
|
return rows;
|
|
85
66
|
};
|
|
86
67
|
|
|
87
|
-
export const getCanRankRows = <TData extends MRT_RowData>(
|
|
88
|
-
table: MRT_TableInstance<TData>,
|
|
89
|
-
) => {
|
|
68
|
+
export const getCanRankRows = <TData extends MRT_RowData>(table: MRT_TableInstance<TData>): boolean | undefined => {
|
|
90
69
|
const {
|
|
91
|
-
options: {
|
|
92
|
-
enableGlobalFilterRankedResults,
|
|
93
|
-
manualExpanding,
|
|
94
|
-
manualFiltering,
|
|
95
|
-
manualGrouping,
|
|
96
|
-
manualSorting,
|
|
97
|
-
},
|
|
70
|
+
options: { enableGlobalFilterRankedResults, manualExpanding, manualFiltering, manualGrouping, manualSorting },
|
|
98
71
|
} = table;
|
|
99
72
|
const { expanded, globalFilterFn } = table.state;
|
|
100
73
|
|
|
@@ -110,16 +83,10 @@ export const getCanRankRows = <TData extends MRT_RowData>(
|
|
|
110
83
|
);
|
|
111
84
|
};
|
|
112
85
|
|
|
113
|
-
export const getIsRankingRows = <TData extends MRT_RowData>(
|
|
114
|
-
table: MRT_TableInstance<TData>,
|
|
115
|
-
) => {
|
|
86
|
+
export const getIsRankingRows = <TData extends MRT_RowData>(table: MRT_TableInstance<TData>): boolean => {
|
|
116
87
|
const { globalFilter, sorting } = table.state;
|
|
117
88
|
|
|
118
|
-
return (
|
|
119
|
-
getCanRankRows(table) &&
|
|
120
|
-
globalFilter &&
|
|
121
|
-
!Object.values(sorting).some(Boolean)
|
|
122
|
-
);
|
|
89
|
+
return Boolean(getCanRankRows(table) && globalFilter && !Object.values(sorting).some(Boolean));
|
|
123
90
|
};
|
|
124
91
|
|
|
125
92
|
export const getIsRowSelected = <TData extends MRT_RowData>({
|
|
@@ -128,16 +95,14 @@ export const getIsRowSelected = <TData extends MRT_RowData>({
|
|
|
128
95
|
}: {
|
|
129
96
|
row: MRT_Row<TData>;
|
|
130
97
|
table: MRT_TableInstance<TData>;
|
|
131
|
-
}) => {
|
|
98
|
+
}): boolean | undefined => {
|
|
132
99
|
const {
|
|
133
100
|
options: { enableRowSelection },
|
|
134
101
|
} = table;
|
|
135
102
|
|
|
136
103
|
return (
|
|
137
104
|
row.getIsSelected() ||
|
|
138
|
-
(parseFromValuesOrFunc(enableRowSelection, row) &&
|
|
139
|
-
row.getCanSelectSubRows() &&
|
|
140
|
-
row.getIsAllSubRowsSelected())
|
|
105
|
+
(parseFromValuesOrFunc(enableRowSelection, row) && row.getCanSelectSubRows() && row.getIsAllSubRowsSelected())
|
|
141
106
|
);
|
|
142
107
|
};
|
|
143
108
|
|
|
@@ -150,11 +115,14 @@ export const getMRT_RowSelectionHandler =
|
|
|
150
115
|
row: MRT_Row<TData>;
|
|
151
116
|
staticRowIndex?: number;
|
|
152
117
|
table: MRT_TableInstance<TData>;
|
|
153
|
-
})
|
|
118
|
+
}): ((
|
|
119
|
+
event: ChangeEvent<HTMLInputElement> | KeyboardEvent<HTMLTableCellElement> | MouseEvent<HTMLTableRowElement>,
|
|
120
|
+
value?: boolean,
|
|
121
|
+
) => void) =>
|
|
154
122
|
(
|
|
155
|
-
event: ChangeEvent<HTMLInputElement> | MouseEvent<HTMLTableRowElement>,
|
|
123
|
+
event: ChangeEvent<HTMLInputElement> | KeyboardEvent<HTMLTableCellElement> | MouseEvent<HTMLTableRowElement>,
|
|
156
124
|
value?: boolean,
|
|
157
|
-
) => {
|
|
125
|
+
): void => {
|
|
158
126
|
const {
|
|
159
127
|
options: {
|
|
160
128
|
enableBatchRowSelection,
|
|
@@ -182,14 +150,13 @@ export const getMRT_RowSelectionHandler =
|
|
|
182
150
|
if (
|
|
183
151
|
enableBatchRowSelection &&
|
|
184
152
|
enableMultiRowSelection &&
|
|
185
|
-
|
|
153
|
+
'shiftKey' in event.nativeEvent &&
|
|
154
|
+
event.nativeEvent.shiftKey &&
|
|
186
155
|
lastSelectedRowId.current !== null
|
|
187
156
|
) {
|
|
188
157
|
const rows = getMRT_Rows(table, true);
|
|
189
158
|
|
|
190
|
-
const lastIndex = rows.findIndex(
|
|
191
|
-
(r) => r.id === lastSelectedRowId.current,
|
|
192
|
-
);
|
|
159
|
+
const lastIndex = rows.findIndex((r) => r.id === lastSelectedRowId.current);
|
|
193
160
|
|
|
194
161
|
if (lastIndex !== -1) {
|
|
195
162
|
const isLastIndexChecked = getIsRowSelected({
|
|
@@ -198,10 +165,7 @@ export const getMRT_RowSelectionHandler =
|
|
|
198
165
|
});
|
|
199
166
|
|
|
200
167
|
const currentIndex = staticRowIndex + paginationOffset;
|
|
201
|
-
const [start, end] =
|
|
202
|
-
lastIndex < currentIndex
|
|
203
|
-
? [lastIndex, currentIndex]
|
|
204
|
-
: [currentIndex, lastIndex];
|
|
168
|
+
const [start, end] = lastIndex < currentIndex ? [lastIndex, currentIndex] : [currentIndex, lastIndex];
|
|
205
169
|
|
|
206
170
|
// toggle selection of all rows between last selected and this one
|
|
207
171
|
// but only if the last selected row is not the same as the current one
|
|
@@ -237,20 +201,31 @@ export const getMRT_RowSelectionHandler =
|
|
|
237
201
|
};
|
|
238
202
|
|
|
239
203
|
export const getMRT_SelectAllHandler =
|
|
240
|
-
<TData extends MRT_RowData>({
|
|
204
|
+
<TData extends MRT_RowData>({
|
|
205
|
+
table,
|
|
206
|
+
}: {
|
|
207
|
+
table: MRT_TableInstance<TData>;
|
|
208
|
+
}): ((
|
|
209
|
+
event: ChangeEvent<HTMLInputElement> | KeyboardEvent<HTMLTableCellElement> | MouseEvent<HTMLButtonElement>,
|
|
210
|
+
value?: boolean,
|
|
211
|
+
forceAll?: boolean,
|
|
212
|
+
) => void) =>
|
|
241
213
|
(
|
|
242
|
-
event: ChangeEvent<HTMLInputElement> | MouseEvent<HTMLButtonElement>,
|
|
214
|
+
event: ChangeEvent<HTMLInputElement> | KeyboardEvent<HTMLTableCellElement> | MouseEvent<HTMLButtonElement>,
|
|
243
215
|
value?: boolean,
|
|
244
216
|
forceAll?: boolean,
|
|
245
|
-
) => {
|
|
217
|
+
): void => {
|
|
246
218
|
const {
|
|
247
219
|
options: { enableRowPinning, rowPinningDisplayMode, selectAllMode },
|
|
248
220
|
refs: { lastSelectedRowId },
|
|
249
221
|
} = table;
|
|
250
222
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
223
|
+
const checked = value ?? (event.target as HTMLInputElement).checked;
|
|
224
|
+
if (selectAllMode === 'all' || forceAll) {
|
|
225
|
+
table.toggleAllRowsSelected(checked);
|
|
226
|
+
} else {
|
|
227
|
+
table.toggleAllPageRowsSelected(checked);
|
|
228
|
+
}
|
|
254
229
|
if (enableRowPinning && rowPinningDisplayMode?.includes('select')) {
|
|
255
230
|
table.setRowPinning({ bottom: [], top: [] });
|
|
256
231
|
}
|
|
@@ -13,13 +13,10 @@ export type TextFieldSlotProps = {
|
|
|
13
13
|
select?: Partial<SelectProps>;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
export const getTextFieldSlotProps = (
|
|
17
|
-
slotProps: TextFieldProps['slotProps'],
|
|
18
|
-
): TextFieldSlotProps => ({
|
|
16
|
+
export const getTextFieldSlotProps = (slotProps: TextFieldProps['slotProps']): TextFieldSlotProps => ({
|
|
19
17
|
formHelperText: slotProps?.formHelperText as Partial<FormHelperTextProps>,
|
|
20
18
|
htmlInput: slotProps?.htmlInput as InputBaseComponentProps,
|
|
21
19
|
input: slotProps?.input as Partial<InputProps>,
|
|
22
20
|
inputLabel: slotProps?.inputLabel as Partial<InputLabelProps>,
|
|
23
21
|
select: slotProps?.select as Partial<SelectProps>,
|
|
24
22
|
});
|
|
25
|
-
|
package/src/utils/style.utils.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { alpha, darken, lighten, type Theme } from '@mui/material/styles';
|
|
1
|
+
import { alpha, type CSSObject, darken, lighten, type Theme } from '@mui/material/styles';
|
|
2
2
|
import { type TableCellProps } from '@mui/material/TableCell';
|
|
3
3
|
import { type TooltipProps } from '@mui/material/Tooltip';
|
|
4
4
|
import { type CSSProperties } from 'react';
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from '../types';
|
|
14
14
|
import { parseFromValuesOrFunc } from './utils';
|
|
15
15
|
|
|
16
|
-
export const parseCSSVarId = (id: string) => id.replace(/[^a-zA-Z0-9]/g, '_');
|
|
16
|
+
export const parseCSSVarId = (id: string): string => id.replace(/[^a-zA-Z0-9]/g, '_');
|
|
17
17
|
|
|
18
18
|
export const getMRTTheme = <TData extends MRT_RowData>(
|
|
19
19
|
mrtTheme: MRT_TableOptions<TData>['mrtTheme'],
|
|
@@ -58,17 +58,14 @@ export const getCommonPinnedCellStyles = <TData extends MRT_RowData>({
|
|
|
58
58
|
column?: MRT_Column<TData>;
|
|
59
59
|
table: MRT_TableInstance<TData>;
|
|
60
60
|
theme: Theme;
|
|
61
|
-
}) => {
|
|
61
|
+
}): CSSObject => {
|
|
62
62
|
const { baseBackgroundColor } = table.options.mrtTheme;
|
|
63
63
|
const isPinned = column?.getIsPinned();
|
|
64
64
|
|
|
65
65
|
return {
|
|
66
66
|
'&[data-pinned="true"]': {
|
|
67
67
|
'&:before': {
|
|
68
|
-
backgroundColor: alpha(
|
|
69
|
-
darken(baseBackgroundColor, theme.palette.mode === 'dark' ? 0.05 : 0.01),
|
|
70
|
-
0.97
|
|
71
|
-
),
|
|
68
|
+
backgroundColor: alpha(darken(baseBackgroundColor, theme.palette.mode === 'dark' ? 0.05 : 0.01), 0.97),
|
|
72
69
|
boxShadow: column
|
|
73
70
|
? isPinned === 'start' && column.getIsLastColumn(isPinned)
|
|
74
71
|
? `-4px 0 4px -4px ${alpha(theme.palette.grey[700], 0.5)} inset`
|
|
@@ -94,7 +91,7 @@ export const getCommonMRTCellStyles = <TData extends MRT_RowData>({
|
|
|
94
91
|
table: MRT_TableInstance<TData>;
|
|
95
92
|
tableCellProps: TableCellProps;
|
|
96
93
|
theme: Theme;
|
|
97
|
-
}) => {
|
|
94
|
+
}): CSSObject => {
|
|
98
95
|
const {
|
|
99
96
|
options: { enableColumnVirtualization, layoutMode },
|
|
100
97
|
} = table;
|
|
@@ -102,25 +99,20 @@ export const getCommonMRTCellStyles = <TData extends MRT_RowData>({
|
|
|
102
99
|
const { columnDef } = column;
|
|
103
100
|
const { columnDefType } = columnDef;
|
|
104
101
|
|
|
105
|
-
const isColumnPinned =
|
|
106
|
-
columnDef.columnDefType !== 'group' && column.getIsPinned();
|
|
102
|
+
const isColumnPinned = columnDef.columnDefType !== 'group' && column.getIsPinned();
|
|
107
103
|
|
|
108
104
|
const widthStyles: CSSProperties = {
|
|
109
105
|
minWidth: `max(calc(var(--${header ? 'header' : 'col'}-${parseCSSVarId(
|
|
110
106
|
header?.id ?? column.id,
|
|
111
107
|
)}-size) * 1px), ${columnDef.minSize ?? 30}px)`,
|
|
112
|
-
width: `calc(var(--${header ? 'header' : 'col'}-${parseCSSVarId(
|
|
113
|
-
header?.id ?? column.id,
|
|
114
|
-
)}-size) * 1px)`,
|
|
108
|
+
width: `calc(var(--${header ? 'header' : 'col'}-${parseCSSVarId(header?.id ?? column.id)}-size) * 1px)`,
|
|
115
109
|
};
|
|
116
110
|
|
|
117
111
|
if (layoutMode === 'grid') {
|
|
118
112
|
widthStyles.flex = `${
|
|
119
113
|
[0, false].includes(columnDef.grow!)
|
|
120
114
|
? 0
|
|
121
|
-
: `var(--${header ? 'header' : 'col'}-${parseCSSVarId(
|
|
122
|
-
header?.id ?? column.id,
|
|
123
|
-
)}-size)`
|
|
115
|
+
: `var(--${header ? 'header' : 'col'}-${parseCSSVarId(header?.id ?? column.id)}-size)`
|
|
124
116
|
} 0 auto`;
|
|
125
117
|
} else if (layoutMode === 'grid-no-grow') {
|
|
126
118
|
widthStyles.flex = `${+(columnDef.grow || 0)} 0 auto`;
|
|
@@ -129,16 +121,10 @@ export const getCommonMRTCellStyles = <TData extends MRT_RowData>({
|
|
|
129
121
|
const pinnedStyles = isColumnPinned
|
|
130
122
|
? {
|
|
131
123
|
...getCommonPinnedCellStyles({ column, table, theme }),
|
|
132
|
-
left:
|
|
133
|
-
isColumnPinned === 'start'
|
|
134
|
-
? `${column.getStart('start')}px`
|
|
135
|
-
: undefined,
|
|
124
|
+
left: isColumnPinned === 'start' ? `${column.getStart('start')}px` : undefined,
|
|
136
125
|
opacity: 0.97,
|
|
137
126
|
position: 'sticky',
|
|
138
|
-
right:
|
|
139
|
-
isColumnPinned === 'end'
|
|
140
|
-
? `${column.getAfter('end')}px`
|
|
141
|
-
: undefined,
|
|
127
|
+
right: isColumnPinned === 'end' ? `${column.getAfter('end')}px` : undefined,
|
|
142
128
|
}
|
|
143
129
|
: {};
|
|
144
130
|
|
|
@@ -151,20 +137,10 @@ export const getCommonMRTCellStyles = <TData extends MRT_RowData>({
|
|
|
151
137
|
backgroundImage: 'inherit',
|
|
152
138
|
display: layoutMode?.startsWith('grid') ? 'flex' : undefined,
|
|
153
139
|
justifyContent:
|
|
154
|
-
columnDefType === 'group'
|
|
155
|
-
|
|
156
|
-
: layoutMode?.startsWith('grid')
|
|
157
|
-
? tableCellProps.align
|
|
158
|
-
: undefined,
|
|
159
|
-
opacity:
|
|
160
|
-
table.state.draggingColumn?.id === column.id ||
|
|
161
|
-
table.state.hoveredColumn?.id === column.id
|
|
162
|
-
? 0.5
|
|
163
|
-
: 1,
|
|
140
|
+
columnDefType === 'group' ? 'center' : layoutMode?.startsWith('grid') ? tableCellProps.align : undefined,
|
|
141
|
+
opacity: table.state.draggingColumn?.id === column.id || table.state.hoveredColumn?.id === column.id ? 0.5 : 1,
|
|
164
142
|
position: 'relative',
|
|
165
|
-
transition: enableColumnVirtualization
|
|
166
|
-
? 'none'
|
|
167
|
-
: `padding 150ms ease-in-out`,
|
|
143
|
+
transition: enableColumnVirtualization ? 'none' : `padding 150ms ease-in-out`,
|
|
168
144
|
zIndex:
|
|
169
145
|
column.getIsResizing() || draggingColumn?.id === column.id
|
|
170
146
|
? 2
|
|
@@ -173,7 +149,7 @@ export const getCommonMRTCellStyles = <TData extends MRT_RowData>({
|
|
|
173
149
|
: 0,
|
|
174
150
|
...pinnedStyles,
|
|
175
151
|
...widthStyles,
|
|
176
|
-
...(parseFromValuesOrFunc(tableCellProps?.sx, theme) as
|
|
152
|
+
...(parseFromValuesOrFunc(tableCellProps?.sx, theme) as CSSObject),
|
|
177
153
|
};
|
|
178
154
|
};
|
|
179
155
|
|
|
@@ -182,7 +158,7 @@ export const getCommonToolbarStyles = <TData extends MRT_RowData>({
|
|
|
182
158
|
}: {
|
|
183
159
|
table: MRT_TableInstance<TData>;
|
|
184
160
|
theme: Theme;
|
|
185
|
-
}) => ({
|
|
161
|
+
}): CSSObject => ({
|
|
186
162
|
alignItems: 'flex-start',
|
|
187
163
|
backgroundColor: table.options.mrtTheme.baseBackgroundColor,
|
|
188
164
|
display: 'grid',
|
|
@@ -194,14 +170,10 @@ export const getCommonToolbarStyles = <TData extends MRT_RowData>({
|
|
|
194
170
|
zIndex: 1,
|
|
195
171
|
});
|
|
196
172
|
|
|
197
|
-
export const flipIconStyles = (theme: Theme) =>
|
|
198
|
-
theme.direction === 'rtl'
|
|
199
|
-
? { style: { transform: 'scaleX(-1)' } }
|
|
200
|
-
: undefined;
|
|
173
|
+
export const flipIconStyles = (theme: Theme): { style: CSSProperties } | undefined =>
|
|
174
|
+
theme.direction === 'rtl' ? { style: { transform: 'scaleX(-1)' } } : undefined;
|
|
201
175
|
|
|
202
|
-
export const getCommonTooltipProps = (
|
|
203
|
-
placement?: TooltipProps['placement'],
|
|
204
|
-
): Partial<TooltipProps> => ({
|
|
176
|
+
export const getCommonTooltipProps = (placement?: TooltipProps['placement']): Partial<TooltipProps> => ({
|
|
205
177
|
disableInteractive: true,
|
|
206
178
|
enterDelay: 1000,
|
|
207
179
|
enterNextDelay: 1000,
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
flexRender as _flexRender,
|
|
4
|
-
type Renderable,
|
|
5
|
-
} from '@tanstack/react-table';
|
|
6
|
-
import { type JSX, type ReactNode } from 'react';
|
|
1
|
+
import { constructRow as _constructRow, flexRender as _flexRender, type Renderable } from '@tanstack/react-table';
|
|
2
|
+
import { type ReactNode } from 'react';
|
|
7
3
|
|
|
8
4
|
import {
|
|
9
5
|
type MRT_ColumnHelper,
|
|
@@ -15,21 +11,17 @@ import {
|
|
|
15
11
|
} from '../types';
|
|
16
12
|
import { getAllLeafColumnDefs, getColumnId } from './column.utils';
|
|
17
13
|
|
|
18
|
-
export const flexRender =
|
|
19
|
-
Comp
|
|
20
|
-
props: any,
|
|
21
|
-
) => JSX.Element | ReactNode;
|
|
14
|
+
export const flexRender = <TProps extends object>(Comp: Renderable<TProps>, props: TProps): ReactNode =>
|
|
15
|
+
_flexRender(Comp, props);
|
|
22
16
|
|
|
23
|
-
export function createMRTColumnHelper<
|
|
24
|
-
TData extends MRT_RowData,
|
|
25
|
-
>(): MRT_ColumnHelper<TData> {
|
|
17
|
+
export function createMRTColumnHelper<TData extends MRT_RowData>(): MRT_ColumnHelper<TData> {
|
|
26
18
|
return {
|
|
27
19
|
accessor: (accessor, column) => {
|
|
28
20
|
return typeof accessor === 'function'
|
|
29
|
-
?
|
|
21
|
+
? {
|
|
30
22
|
...column,
|
|
31
23
|
accessorFn: accessor,
|
|
32
|
-
}
|
|
24
|
+
}
|
|
33
25
|
: {
|
|
34
26
|
...column,
|
|
35
27
|
accessorKey: accessor,
|
|
@@ -49,7 +41,8 @@ export const createRow = <TData extends MRT_RowData>(
|
|
|
49
41
|
parentId?: string,
|
|
50
42
|
): MRT_Row<TData> =>
|
|
51
43
|
_constructRow(
|
|
52
|
-
table
|
|
44
|
+
// @ts-expect-error: MRT_TableInstance omits `options.features`, which the runtime table instance has
|
|
45
|
+
table,
|
|
53
46
|
'mrt-row-create',
|
|
54
47
|
originalRow ??
|
|
55
48
|
Object.assign(
|
|
@@ -60,6 +53,6 @@ export const createRow = <TData extends MRT_RowData>(
|
|
|
60
53
|
),
|
|
61
54
|
rowIndex,
|
|
62
55
|
depth,
|
|
63
|
-
subRows
|
|
56
|
+
subRows,
|
|
64
57
|
parentId,
|
|
65
58
|
) as MRT_Row<TData>;
|
package/src/utils/utils.ts
CHANGED
|
@@ -1,22 +1,18 @@
|
|
|
1
1
|
import { type DropdownOption } from '../types';
|
|
2
2
|
|
|
3
|
-
export const parseFromValuesOrFunc = <T, U>(
|
|
4
|
-
fn
|
|
5
|
-
arg: U,
|
|
6
|
-
): T | undefined => (fn instanceof Function ? fn(arg) : fn);
|
|
3
|
+
export const parseFromValuesOrFunc = <T, U>(fn: ((arg: U) => T) | T | undefined, arg: U): T | undefined =>
|
|
4
|
+
fn instanceof Function ? fn(arg) : fn;
|
|
7
5
|
|
|
8
|
-
export const getValueAndLabel = (
|
|
9
|
-
option?: DropdownOption | null,
|
|
10
|
-
): { label: string; value: string } => {
|
|
6
|
+
export const getValueAndLabel = (option?: DropdownOption | null): { label: string; value: number | string } => {
|
|
11
7
|
let label: string = '';
|
|
12
|
-
let value: string = '';
|
|
8
|
+
let value: number | string = '';
|
|
13
9
|
if (option) {
|
|
14
10
|
if (typeof option !== 'object') {
|
|
15
11
|
label = option;
|
|
16
12
|
value = option;
|
|
17
13
|
} else {
|
|
18
|
-
label = option.label ?? option.value;
|
|
19
|
-
value = option.value
|
|
14
|
+
label = option.label ?? String(option.value);
|
|
15
|
+
value = option.value;
|
|
20
16
|
}
|
|
21
17
|
}
|
|
22
18
|
return { label, value };
|
|
@@ -5,16 +5,12 @@ import { defaultRangeExtractor, type Range } from '@tanstack/react-virtual';
|
|
|
5
5
|
* then, the `dragEnd` event on `MRT_TableBodyRowGrabHandle` or `MRT_TableHeadCellGrabHandle` will not fire.
|
|
6
6
|
* We should keep the `draggingRow` or `draggingColumn` in `getVirtualItems()` to avoid this thing.
|
|
7
7
|
*/
|
|
8
|
-
export const extraIndexRangeExtractor = (
|
|
9
|
-
range: Range,
|
|
10
|
-
draggingIndex?: number,
|
|
11
|
-
) => {
|
|
8
|
+
export const extraIndexRangeExtractor = (range: Range, draggingIndex?: number): number[] => {
|
|
12
9
|
const newIndexes = defaultRangeExtractor(range);
|
|
13
|
-
if (draggingIndex === undefined)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
) {
|
|
10
|
+
if (draggingIndex === undefined) {
|
|
11
|
+
return newIndexes;
|
|
12
|
+
}
|
|
13
|
+
if (draggingIndex >= 0 && draggingIndex < Math.max(range.startIndex - range.overscan, 0)) {
|
|
18
14
|
newIndexes.unshift(draggingIndex);
|
|
19
15
|
}
|
|
20
16
|
if (draggingIndex >= 0 && draggingIndex > range.endIndex + range.overscan) {
|