@mui/x-data-grid 7.0.0-beta.0 → 7.0.0-beta.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/CHANGELOG.md +247 -0
- package/DataGrid/useDataGridComponent.js +1 -1
- package/colDef/gridBooleanColDef.js +3 -6
- package/colDef/gridCheckboxSelectionColDef.js +4 -3
- package/colDef/gridDateColDef.d.ts +3 -4
- package/colDef/gridDateColDef.js +10 -16
- package/colDef/gridNumericColDef.js +1 -3
- package/colDef/gridSingleSelectColDef.js +7 -12
- package/components/cell/GridEditInputCell.js +1 -1
- package/components/columnsManagement/GridColumnsManagement.d.ts +7 -0
- package/components/columnsManagement/GridColumnsManagement.js +26 -21
- package/hooks/features/columns/useGridColumnSpanning.js +3 -1
- package/hooks/features/editing/useGridCellEditing.js +2 -5
- package/hooks/features/editing/useGridRowEditing.js +2 -5
- package/hooks/features/filter/gridFilterUtils.js +1 -1
- package/hooks/features/rows/useGridParamsApi.d.ts +1 -2
- package/hooks/features/rows/useGridParamsApi.js +14 -49
- package/index.js +1 -1
- package/legacy/DataGrid/useDataGridComponent.js +1 -1
- package/legacy/colDef/gridBooleanColDef.js +3 -5
- package/legacy/colDef/gridCheckboxSelectionColDef.js +4 -3
- package/legacy/colDef/gridDateColDef.js +10 -14
- package/legacy/colDef/gridNumericColDef.js +1 -2
- package/legacy/colDef/gridSingleSelectColDef.js +7 -10
- package/legacy/components/cell/GridEditInputCell.js +1 -1
- package/legacy/components/columnsManagement/GridColumnsManagement.js +38 -31
- package/legacy/hooks/features/columns/useGridColumnSpanning.js +3 -1
- package/legacy/hooks/features/editing/useGridCellEditing.js +2 -5
- package/legacy/hooks/features/editing/useGridRowEditing.js +2 -5
- package/legacy/hooks/features/filter/gridFilterUtils.js +2 -2
- package/legacy/hooks/features/rows/useGridParamsApi.js +14 -47
- package/legacy/index.js +1 -1
- package/legacy/locales/heIL.js +7 -8
- package/locales/heIL.js +7 -8
- package/models/colDef/gridColDef.d.ts +11 -17
- package/models/colDef/index.d.ts +1 -1
- package/models/params/gridCellParams.d.ts +0 -26
- package/modern/DataGrid/useDataGridComponent.js +1 -1
- package/modern/colDef/gridBooleanColDef.js +3 -6
- package/modern/colDef/gridCheckboxSelectionColDef.js +4 -3
- package/modern/colDef/gridDateColDef.js +10 -16
- package/modern/colDef/gridNumericColDef.js +1 -3
- package/modern/colDef/gridSingleSelectColDef.js +7 -12
- package/modern/components/cell/GridEditInputCell.js +1 -1
- package/modern/components/columnsManagement/GridColumnsManagement.js +26 -21
- package/modern/hooks/features/columns/useGridColumnSpanning.js +3 -1
- package/modern/hooks/features/editing/useGridCellEditing.js +2 -5
- package/modern/hooks/features/editing/useGridRowEditing.js +2 -5
- package/modern/hooks/features/filter/gridFilterUtils.js +1 -1
- package/modern/hooks/features/rows/useGridParamsApi.js +14 -47
- package/modern/index.js +1 -1
- package/modern/locales/heIL.js +7 -8
- package/node/DataGrid/useDataGridComponent.js +1 -1
- package/node/colDef/gridBooleanColDef.js +3 -6
- package/node/colDef/gridCheckboxSelectionColDef.js +4 -3
- package/node/colDef/gridDateColDef.js +13 -19
- package/node/colDef/gridNumericColDef.js +1 -3
- package/node/colDef/gridSingleSelectColDef.js +7 -12
- package/node/components/cell/GridEditInputCell.js +1 -1
- package/node/components/columnsManagement/GridColumnsManagement.js +26 -21
- package/node/hooks/features/columns/useGridColumnSpanning.js +3 -1
- package/node/hooks/features/editing/useGridCellEditing.js +2 -5
- package/node/hooks/features/editing/useGridRowEditing.js +2 -5
- package/node/hooks/features/filter/gridFilterUtils.js +1 -1
- package/node/hooks/features/rows/useGridParamsApi.js +14 -47
- package/node/index.js +1 -1
- package/node/locales/heIL.js +7 -8
- package/package.json +4 -4
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import { GridCellClassNamePropType } from '../gridCellClass';
|
|
3
3
|
import { GridColumnHeaderClassNamePropType } from '../gridColumnHeaderClass';
|
|
4
4
|
import type { GridFilterOperator } from '../gridFilterOperator';
|
|
5
|
-
import {
|
|
5
|
+
import { GridRenderCellParams, GridRenderEditCellParams, GridPreProcessEditCellProps } from '../params/gridCellParams';
|
|
6
6
|
import { GridColumnHeaderParams } from '../params/gridColumnHeaderParams';
|
|
7
7
|
import { GridComparatorFn, GridSortDirection } from '../gridSortModel';
|
|
8
8
|
import { GridColType } from './gridColType';
|
|
@@ -26,6 +26,11 @@ export type ValueOptions = string | number | {
|
|
|
26
26
|
export type GridKeyValue = string | number | boolean;
|
|
27
27
|
export type GridApplyQuickFilter<R extends GridValidRowModel = GridValidRowModel, V = any> = (value: V, row: R, column: GridColDef, apiRef: React.MutableRefObject<GridApiCommunity>) => boolean;
|
|
28
28
|
export type GetApplyQuickFilterFn<R extends GridValidRowModel = GridValidRowModel, V = any> = (value: any, colDef: GridStateColDef<R, V>, apiRef: React.MutableRefObject<GridApiCommunity>) => null | GridApplyQuickFilter<R, V>;
|
|
29
|
+
export type GridValueGetter<R extends GridValidRowModel = GridValidRowModel, V = any, F = V, TValue = never> = (value: TValue, row: R, column: GridColDef<R, V, F>, apiRef: React.MutableRefObject<GridApiCommunity>) => V;
|
|
30
|
+
export type GridValueFormatter<R extends GridValidRowModel = GridValidRowModel, V = any, F = V, TValue = never> = (value: TValue, row: R, column: GridColDef<R, V, F>, apiRef: React.MutableRefObject<GridApiCommunity>) => F;
|
|
31
|
+
export type GridValueSetter<R extends GridValidRowModel = GridValidRowModel, V = any, F = V> = (value: V, row: R, column: GridColDef<R, V, F>, apiRef: React.MutableRefObject<GridApiCommunity>) => R;
|
|
32
|
+
export type GridValueParser<R extends GridValidRowModel = GridValidRowModel, V = any, F = V> = (value: F | undefined, row: R | undefined, column: GridColDef<R, V, F>, apiRef: React.MutableRefObject<GridApiCommunity>) => V;
|
|
33
|
+
export type GridColSpanFn<R extends GridValidRowModel = GridValidRowModel, V = any, F = V> = (value: V, row: R, column: GridColDef<R, V, F>, apiRef: React.MutableRefObject<GridApiCommunity>) => number | undefined;
|
|
29
34
|
/**
|
|
30
35
|
* Column Definition base interface.
|
|
31
36
|
*/
|
|
@@ -115,34 +120,23 @@ export interface GridBaseColDef<R extends GridValidRowModel = GridValidRowModel,
|
|
|
115
120
|
align?: GridAlignment;
|
|
116
121
|
/**
|
|
117
122
|
* Function that allows to get a specific data instead of field to render in the cell.
|
|
118
|
-
* @template R, V
|
|
119
|
-
* @param {GridValueGetterParams<R, any>} params Object containing parameters for the getter.
|
|
120
|
-
* @returns {V} The cell value.
|
|
121
123
|
*/
|
|
122
|
-
valueGetter?:
|
|
124
|
+
valueGetter?: GridValueGetter<R, V, F>;
|
|
123
125
|
/**
|
|
124
126
|
* Function that allows to customize how the entered value is stored in the row.
|
|
125
127
|
* It only works with cell/row editing.
|
|
126
|
-
* @template R, V
|
|
127
|
-
* @param {GridValueSetterParams<R, V>} params Object containing parameters for the setter.
|
|
128
128
|
* @returns {R} The row with the updated field.
|
|
129
129
|
*/
|
|
130
|
-
valueSetter?:
|
|
130
|
+
valueSetter?: GridValueSetter<R, V, F>;
|
|
131
131
|
/**
|
|
132
132
|
* Function that allows to apply a formatter before rendering its value.
|
|
133
|
-
* @template V, F
|
|
134
|
-
* @param {GridValueFormatterParams<V>} params Object containing parameters for the formatter.
|
|
135
|
-
* @returns {F} The formatted value.
|
|
136
133
|
*/
|
|
137
|
-
valueFormatter?:
|
|
134
|
+
valueFormatter?: GridValueFormatter<R, V, F>;
|
|
138
135
|
/**
|
|
139
136
|
* Function that takes the user-entered value and converts it to a value used internally.
|
|
140
|
-
* @template R, V, F
|
|
141
|
-
* @param {F | undefined} value The user-entered value.
|
|
142
|
-
* @param {GridCellParams<R, V, F>} params The params when called before saving the value.
|
|
143
137
|
* @returns {V} The converted value to use internally.
|
|
144
138
|
*/
|
|
145
|
-
valueParser?:
|
|
139
|
+
valueParser?: GridValueParser<R, V, F>;
|
|
146
140
|
/**
|
|
147
141
|
* Class name that will be added in cells for that column.
|
|
148
142
|
*/
|
|
@@ -224,7 +218,7 @@ export interface GridBaseColDef<R extends GridValidRowModel = GridValidRowModel,
|
|
|
224
218
|
* Number of columns a cell should span.
|
|
225
219
|
* @default 1
|
|
226
220
|
*/
|
|
227
|
-
colSpan?: number |
|
|
221
|
+
colSpan?: number | GridColSpanFn<R, V, F>;
|
|
228
222
|
}
|
|
229
223
|
/**
|
|
230
224
|
* Column Definition interface used for columns with the `actions` type.
|
package/models/colDef/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type { GridAlignment, ValueOptions, GridKeyValue, GridColDef, GridColTypeDef, GridColumnsMeta, GridSingleSelectColDef, GridActionsColDef, GetApplyQuickFilterFn, } from './gridColDef';
|
|
1
|
+
export type { GridAlignment, ValueOptions, GridKeyValue, GridColDef, GridColTypeDef, GridColumnsMeta, GridSingleSelectColDef, GridActionsColDef, GetApplyQuickFilterFn, GridValueGetter, GridValueFormatter, GridValueSetter, GridValueParser, GridColSpanFn, } from './gridColDef';
|
|
2
2
|
export * from './gridColType';
|
|
3
3
|
export * from './gridColumnTypesRecord';
|
|
@@ -81,32 +81,6 @@ export interface GridRenderEditCellParams<R extends GridValidRowModel = any, V =
|
|
|
81
81
|
*/
|
|
82
82
|
api: GridApiCommunity;
|
|
83
83
|
}
|
|
84
|
-
/**
|
|
85
|
-
* Parameters passed to `colDef.valueGetter`.
|
|
86
|
-
*/
|
|
87
|
-
export interface GridValueGetterParams<R extends GridValidRowModel = any, V = any, N extends GridTreeNodeWithRender = GridTreeNodeWithRender> extends Omit<GridCellParams<R, V, any, N>, 'formattedValue' | 'isEditable'> {
|
|
88
|
-
/**
|
|
89
|
-
* GridApi that let you manipulate the grid.
|
|
90
|
-
*/
|
|
91
|
-
api: GridApiCommunity;
|
|
92
|
-
/**
|
|
93
|
-
* The default value for the cell that the `valueGetter` is overriding.
|
|
94
|
-
*/
|
|
95
|
-
value: GridCellParams<R, V, any>['value'];
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Object passed as parameter in the column [[GridColDef]] value setter callback.
|
|
99
|
-
*/
|
|
100
|
-
export interface GridValueSetterParams<R extends GridValidRowModel = any, V = any> {
|
|
101
|
-
/**
|
|
102
|
-
* The new cell value.
|
|
103
|
-
*/
|
|
104
|
-
value: V;
|
|
105
|
-
/**
|
|
106
|
-
* The row that is being edited.
|
|
107
|
-
*/
|
|
108
|
-
row: R;
|
|
109
|
-
}
|
|
110
84
|
/**
|
|
111
85
|
* Object passed as parameter in the column [[GridColDef]] value formatter callback.
|
|
112
86
|
*/
|
|
@@ -57,7 +57,7 @@ export const useDataGridComponent = (inputApiRef, props) => {
|
|
|
57
57
|
useGridRowSelection(apiRef, props);
|
|
58
58
|
useGridColumns(apiRef, props);
|
|
59
59
|
useGridRows(apiRef, props);
|
|
60
|
-
useGridParamsApi(apiRef
|
|
60
|
+
useGridParamsApi(apiRef);
|
|
61
61
|
useGridColumnSpanning(apiRef);
|
|
62
62
|
useGridColumnGrouping(apiRef, props);
|
|
63
63
|
useGridEditing(apiRef, props);
|
|
@@ -4,12 +4,9 @@ import { renderBooleanCell } from '../components/cell/GridBooleanCell';
|
|
|
4
4
|
import { renderEditBooleanCell } from '../components/cell/GridEditBooleanCell';
|
|
5
5
|
import { gridNumberComparator } from '../hooks/features/sorting/gridSortingUtils';
|
|
6
6
|
import { getGridBooleanOperators } from './gridBooleanOperators';
|
|
7
|
-
|
|
8
|
-
value
|
|
9
|
-
|
|
10
|
-
}) {
|
|
11
|
-
return value ? api.getLocaleText('booleanCellTrueLabel') : api.getLocaleText('booleanCellFalseLabel');
|
|
12
|
-
}
|
|
7
|
+
const gridBooleanFormatter = (value, row, column, apiRef) => {
|
|
8
|
+
return value ? apiRef.current.getLocaleText('booleanCellTrueLabel') : apiRef.current.getLocaleText('booleanCellFalseLabel');
|
|
9
|
+
};
|
|
13
10
|
const stringToBoolean = value => {
|
|
14
11
|
switch (value.toLowerCase().trim()) {
|
|
15
12
|
case 'true':
|
|
@@ -19,9 +19,10 @@ export const GRID_CHECKBOX_SELECTION_COL_DEF = _extends({}, GRID_BOOLEAN_COL_DEF
|
|
|
19
19
|
disableReorder: true,
|
|
20
20
|
disableExport: true,
|
|
21
21
|
getApplyQuickFilterFn: undefined,
|
|
22
|
-
valueGetter:
|
|
23
|
-
const selectionLookup = selectedIdsLookupSelector(
|
|
24
|
-
|
|
22
|
+
valueGetter: (value, row, column, apiRef) => {
|
|
23
|
+
const selectionLookup = selectedIdsLookupSelector(apiRef);
|
|
24
|
+
const rowId = apiRef.current.getRowId(row);
|
|
25
|
+
return selectionLookup[rowId] !== undefined;
|
|
25
26
|
},
|
|
26
27
|
renderHeader: params => /*#__PURE__*/_jsx(GridHeaderCheckbox, _extends({}, params)),
|
|
27
28
|
renderCell: params => /*#__PURE__*/_jsx(GridCellCheckboxRenderer, _extends({}, params))
|
|
@@ -13,38 +13,32 @@ function throwIfNotDateObject({
|
|
|
13
13
|
throw new Error([`MUI X: \`${columnType}\` column type only accepts \`Date\` objects as values.`, 'Use `valueGetter` to transform the value into a `Date` object.', `Row ID: ${rowId}, field: "${field}".`].join('\n'));
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
export
|
|
17
|
-
value,
|
|
18
|
-
field,
|
|
19
|
-
id
|
|
20
|
-
}) {
|
|
16
|
+
export const gridDateFormatter = (value, row, column, apiRef) => {
|
|
21
17
|
if (!value) {
|
|
22
18
|
return '';
|
|
23
19
|
}
|
|
20
|
+
const rowId = apiRef.current.getRowId(row);
|
|
24
21
|
throwIfNotDateObject({
|
|
25
22
|
value,
|
|
26
23
|
columnType: 'date',
|
|
27
|
-
rowId
|
|
28
|
-
field
|
|
24
|
+
rowId,
|
|
25
|
+
field: column.field
|
|
29
26
|
});
|
|
30
27
|
return value.toLocaleDateString();
|
|
31
|
-
}
|
|
32
|
-
export
|
|
33
|
-
value,
|
|
34
|
-
field,
|
|
35
|
-
id
|
|
36
|
-
}) {
|
|
28
|
+
};
|
|
29
|
+
export const gridDateTimeFormatter = (value, row, column, apiRef) => {
|
|
37
30
|
if (!value) {
|
|
38
31
|
return '';
|
|
39
32
|
}
|
|
33
|
+
const rowId = apiRef.current.getRowId(row);
|
|
40
34
|
throwIfNotDateObject({
|
|
41
35
|
value,
|
|
42
36
|
columnType: 'dateTime',
|
|
43
|
-
rowId
|
|
44
|
-
field
|
|
37
|
+
rowId,
|
|
38
|
+
field: column.field
|
|
45
39
|
});
|
|
46
40
|
return value.toLocaleString();
|
|
47
|
-
}
|
|
41
|
+
};
|
|
48
42
|
export const GRID_DATE_COL_DEF = _extends({}, GRID_STRING_COL_DEF, {
|
|
49
43
|
type: 'date',
|
|
50
44
|
sortComparator: gridDateComparator,
|
|
@@ -9,9 +9,7 @@ export const GRID_NUMERIC_COL_DEF = _extends({}, GRID_STRING_COL_DEF, {
|
|
|
9
9
|
headerAlign: 'right',
|
|
10
10
|
sortComparator: gridNumberComparator,
|
|
11
11
|
valueParser: value => value === '' ? null : Number(value),
|
|
12
|
-
valueFormatter: (
|
|
13
|
-
value
|
|
14
|
-
}) => isNumber(value) ? value.toLocaleString() : value || '',
|
|
12
|
+
valueFormatter: value => isNumber(value) ? value.toLocaleString() : value || '',
|
|
15
13
|
filterOperators: getGridNumericOperators(),
|
|
16
14
|
getApplyQuickFilterFn: getGridNumericQuickFilterFn
|
|
17
15
|
});
|
|
@@ -17,20 +17,15 @@ export const GRID_SINGLE_SELECT_COL_DEF = _extends({}, GRID_STRING_COL_DEF, {
|
|
|
17
17
|
type: 'singleSelect',
|
|
18
18
|
getOptionLabel: defaultGetOptionLabel,
|
|
19
19
|
getOptionValue: defaultGetOptionValue,
|
|
20
|
-
valueFormatter(
|
|
21
|
-
const {
|
|
22
|
-
|
|
23
|
-
field,
|
|
24
|
-
value,
|
|
25
|
-
api
|
|
26
|
-
} = params;
|
|
27
|
-
const colDef = params.api.getColumn(field);
|
|
20
|
+
valueFormatter(value, row, colDef, apiRef) {
|
|
21
|
+
// const { id, field, value, api } = params;
|
|
22
|
+
const rowId = apiRef.current.getRowId(row);
|
|
28
23
|
if (!isSingleSelectColDef(colDef)) {
|
|
29
24
|
return '';
|
|
30
25
|
}
|
|
31
26
|
const valueOptions = getValueOptions(colDef, {
|
|
32
|
-
id,
|
|
33
|
-
row
|
|
27
|
+
id: rowId,
|
|
28
|
+
row
|
|
34
29
|
});
|
|
35
30
|
if (value == null) {
|
|
36
31
|
return '';
|
|
@@ -47,8 +42,8 @@ export const GRID_SINGLE_SELECT_COL_DEF = _extends({}, GRID_STRING_COL_DEF, {
|
|
|
47
42
|
renderEditCell: renderEditSingleSelectCell,
|
|
48
43
|
filterOperators: getGridSingleSelectOperators(),
|
|
49
44
|
// @ts-ignore
|
|
50
|
-
pastedValueParser: (value,
|
|
51
|
-
const colDef =
|
|
45
|
+
pastedValueParser: (value, row, column) => {
|
|
46
|
+
const colDef = column;
|
|
52
47
|
const valueOptions = getValueOptions(colDef) || [];
|
|
53
48
|
const getOptionValue = colDef.getOptionValue;
|
|
54
49
|
const valueOption = valueOptions.find(option => {
|
|
@@ -57,7 +57,7 @@ const GridEditInputCell = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
57
57
|
const column = apiRef.current.getColumn(field);
|
|
58
58
|
let parsedValue = newValue;
|
|
59
59
|
if (column.valueParser) {
|
|
60
|
-
parsedValue = column.valueParser(newValue, apiRef.current.
|
|
60
|
+
parsedValue = column.valueParser(newValue, apiRef.current.getRow(id), column, apiRef);
|
|
61
61
|
}
|
|
62
62
|
setValueState(parsedValue);
|
|
63
63
|
apiRef.current.setEditCellValue({
|
|
@@ -42,6 +42,7 @@ function GridColumnsManagement(props) {
|
|
|
42
42
|
autoFocusSearchField = true,
|
|
43
43
|
disableShowHideToggle = false,
|
|
44
44
|
disableResetButton = false,
|
|
45
|
+
toggleAllMode = 'all',
|
|
45
46
|
getTogglableColumns
|
|
46
47
|
} = props;
|
|
47
48
|
const isResetDisabled = React.useMemo(() => checkColumnVisibilityModelsSame(columnVisibilityModel, initialColumnVisibilityModel), [columnVisibilityModel, initialColumnVisibilityModel]);
|
|
@@ -61,11 +62,21 @@ function GridColumnsManagement(props) {
|
|
|
61
62
|
} = event.target;
|
|
62
63
|
apiRef.current.setColumnVisibility(field, columnVisibilityModel[field] === false);
|
|
63
64
|
};
|
|
65
|
+
const currentColumns = React.useMemo(() => {
|
|
66
|
+
const togglableColumns = getTogglableColumns ? getTogglableColumns(sortedColumns) : null;
|
|
67
|
+
const togglableSortedColumns = togglableColumns ? sortedColumns.filter(({
|
|
68
|
+
field
|
|
69
|
+
}) => togglableColumns.includes(field)) : sortedColumns;
|
|
70
|
+
if (!searchValue) {
|
|
71
|
+
return togglableSortedColumns;
|
|
72
|
+
}
|
|
73
|
+
return togglableSortedColumns.filter(column => searchPredicate(column, searchValue.toLowerCase()));
|
|
74
|
+
}, [sortedColumns, searchValue, searchPredicate, getTogglableColumns]);
|
|
64
75
|
const toggleAllColumns = React.useCallback(isVisible => {
|
|
65
76
|
const currentModel = gridColumnVisibilityModelSelector(apiRef);
|
|
66
77
|
const newModel = _extends({}, currentModel);
|
|
67
78
|
const togglableColumns = getTogglableColumns ? getTogglableColumns(columns) : null;
|
|
68
|
-
columns.forEach(col => {
|
|
79
|
+
(toggleAllMode === 'filteredOnly' ? currentColumns : columns).forEach(col => {
|
|
69
80
|
if (col.hideable && (togglableColumns == null || togglableColumns.includes(col.field))) {
|
|
70
81
|
if (isVisible) {
|
|
71
82
|
// delete the key from the model instead of setting it to `true`
|
|
@@ -76,20 +87,10 @@ function GridColumnsManagement(props) {
|
|
|
76
87
|
}
|
|
77
88
|
});
|
|
78
89
|
return apiRef.current.setColumnVisibilityModel(newModel);
|
|
79
|
-
}, [apiRef, columns, getTogglableColumns]);
|
|
90
|
+
}, [apiRef, columns, getTogglableColumns, toggleAllMode, currentColumns]);
|
|
80
91
|
const handleSearchValueChange = React.useCallback(event => {
|
|
81
92
|
setSearchValue(event.target.value);
|
|
82
93
|
}, []);
|
|
83
|
-
const currentColumns = React.useMemo(() => {
|
|
84
|
-
const togglableColumns = getTogglableColumns ? getTogglableColumns(sortedColumns) : null;
|
|
85
|
-
const togglableSortedColumns = togglableColumns ? sortedColumns.filter(({
|
|
86
|
-
field
|
|
87
|
-
}) => togglableColumns.includes(field)) : sortedColumns;
|
|
88
|
-
if (!searchValue) {
|
|
89
|
-
return togglableSortedColumns;
|
|
90
|
-
}
|
|
91
|
-
return togglableSortedColumns.filter(column => searchPredicate(column, searchValue.toLowerCase()));
|
|
92
|
-
}, [sortedColumns, searchValue, searchPredicate, getTogglableColumns]);
|
|
93
94
|
const hideableColumns = React.useMemo(() => currentColumns.filter(col => col.hideable), [currentColumns]);
|
|
94
95
|
const allHideableColumnsVisible = React.useMemo(() => hideableColumns.every(column => columnVisibilityModel[column.field] == null || columnVisibilityModel[column.field] !== false), [columnVisibilityModel, hideableColumns]);
|
|
95
96
|
const allHideableColumnsHidden = React.useMemo(() => hideableColumns.every(column => columnVisibilityModel[column.field] === false), [columnVisibilityModel, hideableColumns]);
|
|
@@ -160,14 +161,11 @@ function GridColumnsManagement(props) {
|
|
|
160
161
|
checked: allHideableColumnsVisible,
|
|
161
162
|
indeterminate: !allHideableColumnsVisible && !allHideableColumnsHidden,
|
|
162
163
|
onClick: () => toggleAllColumns(!allHideableColumnsVisible),
|
|
163
|
-
name: apiRef.current.getLocaleText('columnsManagementShowHideAllText')
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
[`.MuiFormControlLabel-label`]: {
|
|
167
|
-
textTransform: 'uppercase',
|
|
168
|
-
fontSize: '14px'
|
|
164
|
+
name: apiRef.current.getLocaleText('columnsManagementShowHideAllText'),
|
|
165
|
+
sx: {
|
|
166
|
+
p: 0.5
|
|
169
167
|
}
|
|
170
|
-
},
|
|
168
|
+
}, rootProps.slotProps?.baseCheckbox)),
|
|
171
169
|
label: apiRef.current.getLocaleText('columnsManagementShowHideAllText')
|
|
172
170
|
}) : /*#__PURE__*/_jsx("span", {}), !disableResetButton ? /*#__PURE__*/_jsx(rootProps.slots.baseButton, _extends({
|
|
173
171
|
onClick: () => apiRef.current.setColumnVisibilityModel(initialColumnVisibilityModel),
|
|
@@ -209,7 +207,14 @@ process.env.NODE_ENV !== "production" ? GridColumnsManagement.propTypes = {
|
|
|
209
207
|
*/
|
|
210
208
|
getTogglableColumns: PropTypes.func,
|
|
211
209
|
searchPredicate: PropTypes.func,
|
|
212
|
-
sort: PropTypes.oneOf(['asc', 'desc'])
|
|
210
|
+
sort: PropTypes.oneOf(['asc', 'desc']),
|
|
211
|
+
/**
|
|
212
|
+
* Changes the behavior of the `Show/Hide All` toggle when the search field is used:
|
|
213
|
+
* - `all`: Will toggle all columns.
|
|
214
|
+
* - `filteredOnly`: Will only toggle columns that match the search criteria.
|
|
215
|
+
* @default 'all'
|
|
216
|
+
*/
|
|
217
|
+
toggleAllMode: PropTypes.oneOf(['all', 'filteredOnly'])
|
|
213
218
|
} : void 0;
|
|
214
219
|
const GridColumnsManagementBody = styled('div', {
|
|
215
220
|
name: 'MuiDataGrid',
|
|
@@ -242,7 +247,7 @@ const GridColumnsManagementFooter = styled('div', {
|
|
|
242
247
|
})(({
|
|
243
248
|
theme
|
|
244
249
|
}) => ({
|
|
245
|
-
padding: theme.spacing(0.5, 1, 0.5,
|
|
250
|
+
padding: theme.spacing(0.5, 1, 0.5, 3),
|
|
246
251
|
display: 'flex',
|
|
247
252
|
justifyContent: 'space-between',
|
|
248
253
|
borderTop: `1px solid ${theme.palette.divider}`
|
|
@@ -59,7 +59,9 @@ function calculateCellColSpan(params) {
|
|
|
59
59
|
} = params;
|
|
60
60
|
const columnsLength = columns.length;
|
|
61
61
|
const column = columns[columnIndex];
|
|
62
|
-
const
|
|
62
|
+
const row = apiRef.current.getRow(rowId);
|
|
63
|
+
const value = apiRef.current.getRowValue(row, column);
|
|
64
|
+
const colSpan = typeof column.colSpan === 'function' ? column.colSpan(value, row, column, apiRef) : column.colSpan;
|
|
63
65
|
if (!colSpan || colSpan === 1) {
|
|
64
66
|
setCellColSpanInfo(lookup, rowId, columnIndex, {
|
|
65
67
|
spannedByColSpan: false,
|
|
@@ -334,7 +334,7 @@ export const useGridCellEditing = (apiRef, props) => {
|
|
|
334
334
|
const row = apiRef.current.getRow(id);
|
|
335
335
|
let parsedValue = value;
|
|
336
336
|
if (column.valueParser && !skipValueParser) {
|
|
337
|
-
parsedValue = column.valueParser(value,
|
|
337
|
+
parsedValue = column.valueParser(value, row, column, apiRef);
|
|
338
338
|
}
|
|
339
339
|
let editingState = gridEditRowsStateSelector(apiRef.current.state);
|
|
340
340
|
let newProps = _extends({}, editingState[id][field], {
|
|
@@ -382,10 +382,7 @@ export const useGridCellEditing = (apiRef, props) => {
|
|
|
382
382
|
const {
|
|
383
383
|
value
|
|
384
384
|
} = editingState[id][field];
|
|
385
|
-
return column.valueSetter ? column.valueSetter({
|
|
386
|
-
value,
|
|
387
|
-
row
|
|
388
|
-
}) : _extends({}, row, {
|
|
385
|
+
return column.valueSetter ? column.valueSetter(value, row, column, apiRef) : _extends({}, row, {
|
|
389
386
|
[field]: value
|
|
390
387
|
});
|
|
391
388
|
}, [apiRef]);
|
|
@@ -409,7 +409,7 @@ export const useGridRowEditing = (apiRef, props) => {
|
|
|
409
409
|
const row = apiRef.current.getRow(id);
|
|
410
410
|
let parsedValue = value;
|
|
411
411
|
if (column.valueParser && !skipValueParser) {
|
|
412
|
-
parsedValue = column.valueParser(value,
|
|
412
|
+
parsedValue = column.valueParser(value, row, column, apiRef);
|
|
413
413
|
}
|
|
414
414
|
let editingState = gridEditRowsStateSelector(apiRef.current.state);
|
|
415
415
|
let newProps = _extends({}, editingState[id][field], {
|
|
@@ -509,10 +509,7 @@ export const useGridRowEditing = (apiRef, props) => {
|
|
|
509
509
|
Object.entries(editingState[id]).forEach(([field, fieldProps]) => {
|
|
510
510
|
const column = apiRef.current.getColumn(field);
|
|
511
511
|
if (column.valueSetter) {
|
|
512
|
-
rowUpdate = column.valueSetter(
|
|
513
|
-
value: fieldProps.value,
|
|
514
|
-
row: rowUpdate
|
|
515
|
-
});
|
|
512
|
+
rowUpdate = column.valueSetter(fieldProps.value, rowUpdate, column, apiRef);
|
|
516
513
|
} else {
|
|
517
514
|
rowUpdate[field] = fieldProps.value;
|
|
518
515
|
}
|
|
@@ -88,7 +88,7 @@ const getFilterCallbackFromItem = (filterItem, apiRef) => {
|
|
|
88
88
|
let parsedValue;
|
|
89
89
|
if (column.valueParser) {
|
|
90
90
|
const parser = column.valueParser;
|
|
91
|
-
parsedValue = Array.isArray(filterItem.value) ? filterItem.value?.map(x => parser(x)) : parser(filterItem.value);
|
|
91
|
+
parsedValue = Array.isArray(filterItem.value) ? filterItem.value?.map(x => parser(x, undefined, column, apiRef)) : parser(filterItem.value, undefined, column, apiRef);
|
|
92
92
|
} else {
|
|
93
93
|
parsedValue = filterItem.value;
|
|
94
94
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { getGridCellElement, getGridColumnHeaderElement, getGridRowElement } from '../../../utils/domUtils';
|
|
3
|
-
import { GRID_ID_AUTOGENERATED } from './gridRowsUtils';
|
|
4
3
|
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
5
4
|
import { gridFocusCellSelector, gridTabIndexCellSelector } from '../focus/gridFocusStateSelector';
|
|
6
5
|
export class MissingRowIdError extends Error {}
|
|
@@ -13,10 +12,7 @@ export class MissingRowIdError extends Error {}
|
|
|
13
12
|
* TODO: Impossible priority - useGridEditing also needs to be after useGridParamsApi
|
|
14
13
|
* TODO: Impossible priority - useGridFocus also needs to be after useGridParamsApi
|
|
15
14
|
*/
|
|
16
|
-
export function useGridParamsApi(apiRef
|
|
17
|
-
const {
|
|
18
|
-
getRowId
|
|
19
|
-
} = props;
|
|
15
|
+
export function useGridParamsApi(apiRef) {
|
|
20
16
|
const getColumnHeaderParams = React.useCallback(field => ({
|
|
21
17
|
field,
|
|
22
18
|
colDef: apiRef.current.getColumn(field)
|
|
@@ -33,28 +29,6 @@ export function useGridParamsApi(apiRef, props) {
|
|
|
33
29
|
};
|
|
34
30
|
return params;
|
|
35
31
|
}, [apiRef]);
|
|
36
|
-
const getBaseCellParams = React.useCallback((id, field) => {
|
|
37
|
-
const row = apiRef.current.getRow(id);
|
|
38
|
-
const rowNode = apiRef.current.getRowNode(id);
|
|
39
|
-
if (!row || !rowNode) {
|
|
40
|
-
throw new MissingRowIdError(`No row with id #${id} found`);
|
|
41
|
-
}
|
|
42
|
-
const cellFocus = gridFocusCellSelector(apiRef);
|
|
43
|
-
const cellTabIndex = gridTabIndexCellSelector(apiRef);
|
|
44
|
-
const params = {
|
|
45
|
-
id,
|
|
46
|
-
field,
|
|
47
|
-
row,
|
|
48
|
-
rowNode,
|
|
49
|
-
value: row[field],
|
|
50
|
-
colDef: apiRef.current.getColumn(field),
|
|
51
|
-
cellMode: apiRef.current.getCellMode(id, field),
|
|
52
|
-
api: apiRef.current,
|
|
53
|
-
hasFocus: cellFocus !== null && cellFocus.field === field && cellFocus.id === id,
|
|
54
|
-
tabIndex: cellTabIndex && cellTabIndex.field === field && cellTabIndex.id === id ? 0 : -1
|
|
55
|
-
};
|
|
56
|
-
return params;
|
|
57
|
-
}, [apiRef]);
|
|
58
32
|
const getCellParams = React.useCallback((id, field) => {
|
|
59
33
|
const colDef = apiRef.current.getColumn(field);
|
|
60
34
|
const value = apiRef.current.getCellValue(id, field);
|
|
@@ -79,12 +53,7 @@ export function useGridParamsApi(apiRef, props) {
|
|
|
79
53
|
isEditable: false
|
|
80
54
|
};
|
|
81
55
|
if (colDef && colDef.valueFormatter) {
|
|
82
|
-
params.formattedValue = colDef.valueFormatter(
|
|
83
|
-
id,
|
|
84
|
-
field: params.field,
|
|
85
|
-
value: params.value,
|
|
86
|
-
api: apiRef.current
|
|
87
|
-
});
|
|
56
|
+
params.formattedValue = colDef.valueFormatter(value, row, colDef, apiRef);
|
|
88
57
|
}
|
|
89
58
|
params.isEditable = colDef && apiRef.current.isCellEditable(params);
|
|
90
59
|
return params;
|
|
@@ -98,30 +67,28 @@ export function useGridParamsApi(apiRef, props) {
|
|
|
98
67
|
}
|
|
99
68
|
return rowModel[field];
|
|
100
69
|
}
|
|
101
|
-
|
|
102
|
-
|
|
70
|
+
const row = apiRef.current.getRow(id);
|
|
71
|
+
if (!row) {
|
|
72
|
+
throw new MissingRowIdError(`No row with id #${id} found`);
|
|
73
|
+
}
|
|
74
|
+
const value = row[colDef.field];
|
|
75
|
+
return colDef.valueGetter(value, row, colDef, apiRef);
|
|
76
|
+
}, [apiRef]);
|
|
103
77
|
const getRowValue = React.useCallback((row, colDef) => {
|
|
104
|
-
const id = GRID_ID_AUTOGENERATED in row ? row[GRID_ID_AUTOGENERATED] : getRowId?.(row) ?? row.id;
|
|
105
78
|
const field = colDef.field;
|
|
106
79
|
if (!colDef || !colDef.valueGetter) {
|
|
107
80
|
return row[field];
|
|
108
81
|
}
|
|
109
|
-
|
|
110
|
-
|
|
82
|
+
const value = row[colDef.field];
|
|
83
|
+
return colDef.valueGetter(value, row, colDef, apiRef);
|
|
84
|
+
}, [apiRef]);
|
|
111
85
|
const getRowFormattedValue = React.useCallback((row, colDef) => {
|
|
112
86
|
const value = getRowValue(row, colDef);
|
|
113
87
|
if (!colDef || !colDef.valueFormatter) {
|
|
114
88
|
return value;
|
|
115
89
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
return colDef.valueFormatter({
|
|
119
|
-
id,
|
|
120
|
-
field,
|
|
121
|
-
value,
|
|
122
|
-
api: apiRef.current
|
|
123
|
-
});
|
|
124
|
-
}, [apiRef, getRowId, getRowValue]);
|
|
90
|
+
return colDef.valueFormatter(value, row, colDef, apiRef);
|
|
91
|
+
}, [apiRef, getRowValue]);
|
|
125
92
|
const getColumnHeaderElement = React.useCallback(field => {
|
|
126
93
|
if (!apiRef.current.rootElementRef.current) {
|
|
127
94
|
return null;
|
package/modern/index.js
CHANGED
package/modern/locales/heIL.js
CHANGED
|
@@ -59,13 +59,12 @@ const heILGrid = {
|
|
|
59
59
|
filterOperatorIsEmpty: 'ריק',
|
|
60
60
|
filterOperatorIsNotEmpty: 'אינו ריק',
|
|
61
61
|
filterOperatorIsAnyOf: 'הוא אחד מ-',
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
62
|
+
'filterOperator=': '=',
|
|
63
|
+
'filterOperator!=': '!=',
|
|
64
|
+
'filterOperator>': '>',
|
|
65
|
+
'filterOperator>=': '>=',
|
|
66
|
+
'filterOperator<': '<',
|
|
67
|
+
'filterOperator<=': '<=',
|
|
69
68
|
// Header filter operators text
|
|
70
69
|
headerFilterOperatorContains: 'מכיל',
|
|
71
70
|
headerFilterOperatorEquals: 'שווה',
|
|
@@ -133,7 +132,7 @@ const heILGrid = {
|
|
|
133
132
|
groupColumn: name => `קבץ לפי ${name}`,
|
|
134
133
|
unGroupColumn: name => `הפסק לקבץ לפי ${name}`,
|
|
135
134
|
// Master/detail
|
|
136
|
-
|
|
135
|
+
detailPanelToggle: 'הצג/הסתר פרטים',
|
|
137
136
|
expandDetailPanel: 'הרחב',
|
|
138
137
|
collapseDetailPanel: 'כווץ',
|
|
139
138
|
// Row reordering text
|
|
@@ -63,7 +63,7 @@ const useDataGridComponent = (inputApiRef, props) => {
|
|
|
63
63
|
(0, _useGridRowSelection.useGridRowSelection)(apiRef, props);
|
|
64
64
|
(0, _useGridColumns.useGridColumns)(apiRef, props);
|
|
65
65
|
(0, _useGridRows.useGridRows)(apiRef, props);
|
|
66
|
-
(0, _useGridParamsApi.useGridParamsApi)(apiRef
|
|
66
|
+
(0, _useGridParamsApi.useGridParamsApi)(apiRef);
|
|
67
67
|
(0, _useGridColumnSpanning.useGridColumnSpanning)(apiRef);
|
|
68
68
|
(0, _useGridColumnGrouping.useGridColumnGrouping)(apiRef, props);
|
|
69
69
|
(0, _useGridEditing.useGridEditing)(apiRef, props);
|
|
@@ -11,12 +11,9 @@ var _GridBooleanCell = require("../components/cell/GridBooleanCell");
|
|
|
11
11
|
var _GridEditBooleanCell = require("../components/cell/GridEditBooleanCell");
|
|
12
12
|
var _gridSortingUtils = require("../hooks/features/sorting/gridSortingUtils");
|
|
13
13
|
var _gridBooleanOperators = require("./gridBooleanOperators");
|
|
14
|
-
|
|
15
|
-
value
|
|
16
|
-
|
|
17
|
-
}) {
|
|
18
|
-
return value ? api.getLocaleText('booleanCellTrueLabel') : api.getLocaleText('booleanCellFalseLabel');
|
|
19
|
-
}
|
|
14
|
+
const gridBooleanFormatter = (value, row, column, apiRef) => {
|
|
15
|
+
return value ? apiRef.current.getLocaleText('booleanCellTrueLabel') : apiRef.current.getLocaleText('booleanCellFalseLabel');
|
|
16
|
+
};
|
|
20
17
|
const stringToBoolean = value => {
|
|
21
18
|
switch (value.toLowerCase().trim()) {
|
|
22
19
|
case 'true':
|
|
@@ -28,9 +28,10 @@ const GRID_CHECKBOX_SELECTION_COL_DEF = exports.GRID_CHECKBOX_SELECTION_COL_DEF
|
|
|
28
28
|
disableReorder: true,
|
|
29
29
|
disableExport: true,
|
|
30
30
|
getApplyQuickFilterFn: undefined,
|
|
31
|
-
valueGetter:
|
|
32
|
-
const selectionLookup = (0, _gridRowSelectionSelector.selectedIdsLookupSelector)(
|
|
33
|
-
|
|
31
|
+
valueGetter: (value, row, column, apiRef) => {
|
|
32
|
+
const selectionLookup = (0, _gridRowSelectionSelector.selectedIdsLookupSelector)(apiRef);
|
|
33
|
+
const rowId = apiRef.current.getRowId(row);
|
|
34
|
+
return selectionLookup[rowId] !== undefined;
|
|
34
35
|
},
|
|
35
36
|
renderHeader: params => /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridHeaderCheckbox.GridHeaderCheckbox, (0, _extends2.default)({}, params)),
|
|
36
37
|
renderCell: params => /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridCellCheckboxRenderer.GridCellCheckboxRenderer, (0, _extends2.default)({}, params))
|