@mui/x-data-grid 6.9.2 → 6.10.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/CHANGELOG.md +232 -114
- package/DataGrid/DataGrid.js +1 -0
- package/components/toolbar/GridToolbarQuickFilter.d.ts +1 -1
- package/components/toolbar/GridToolbarQuickFilter.js +12 -9
- package/hooks/core/pipeProcessing/useGridPipeProcessing.js +4 -1
- package/hooks/core/useGridApiInitialization.d.ts +1 -0
- package/hooks/core/useGridApiInitialization.js +59 -36
- package/hooks/features/export/serializers/csvSerializer.d.ts +9 -6
- package/hooks/features/export/serializers/csvSerializer.js +78 -15
- package/hooks/features/export/useGridCsvExport.js +4 -3
- package/hooks/features/filter/gridFilterUtils.js +6 -5
- package/hooks/features/filter/useGridFilter.js +8 -0
- package/hooks/features/rows/gridRowsUtils.js +1 -1
- package/hooks/utils/useGridApiMethod.js +7 -23
- package/index.js +1 -1
- package/internals/index.d.ts +1 -0
- package/internals/index.js +1 -0
- package/legacy/DataGrid/DataGrid.js +1 -0
- package/legacy/components/toolbar/GridToolbarQuickFilter.js +12 -12
- package/legacy/hooks/core/pipeProcessing/useGridPipeProcessing.js +4 -1
- package/legacy/hooks/core/useGridApiInitialization.js +62 -39
- package/legacy/hooks/features/export/serializers/csvSerializer.js +84 -11
- package/legacy/hooks/features/export/useGridCsvExport.js +4 -3
- package/legacy/hooks/features/filter/gridFilterUtils.js +6 -5
- package/legacy/hooks/features/filter/useGridFilter.js +8 -0
- package/legacy/hooks/features/rows/gridRowsUtils.js +1 -1
- package/legacy/hooks/utils/useGridApiMethod.js +7 -25
- package/legacy/index.js +1 -1
- package/legacy/internals/index.js +1 -0
- package/legacy/locales/plPL.js +7 -7
- package/locales/plPL.js +7 -7
- package/models/events/gridEventLookup.d.ts +0 -1
- package/models/gridExport.d.ts +8 -1
- package/models/gridFilterModel.d.ts +5 -0
- package/modern/DataGrid/DataGrid.js +1 -0
- package/modern/components/toolbar/GridToolbarQuickFilter.js +12 -9
- package/modern/hooks/core/pipeProcessing/useGridPipeProcessing.js +4 -1
- package/modern/hooks/core/useGridApiInitialization.js +58 -36
- package/modern/hooks/features/export/serializers/csvSerializer.js +78 -15
- package/modern/hooks/features/export/useGridCsvExport.js +3 -2
- package/modern/hooks/features/filter/gridFilterUtils.js +3 -2
- package/modern/hooks/features/filter/useGridFilter.js +8 -0
- package/modern/hooks/features/rows/gridRowsUtils.js +1 -1
- package/modern/hooks/utils/useGridApiMethod.js +7 -23
- package/modern/index.js +1 -1
- package/modern/internals/index.js +1 -0
- package/modern/locales/plPL.js +7 -7
- package/node/DataGrid/DataGrid.js +1 -0
- package/node/components/toolbar/GridToolbarQuickFilter.js +12 -9
- package/node/hooks/core/pipeProcessing/useGridPipeProcessing.js +4 -1
- package/node/hooks/core/useGridApiInitialization.js +59 -36
- package/node/hooks/features/export/serializers/csvSerializer.js +78 -15
- package/node/hooks/features/export/useGridCsvExport.js +3 -2
- package/node/hooks/features/filter/gridFilterUtils.js +2 -1
- package/node/hooks/features/filter/useGridFilter.js +8 -0
- package/node/hooks/features/rows/gridRowsUtils.js +1 -1
- package/node/hooks/utils/useGridApiMethod.js +7 -23
- package/node/index.js +1 -1
- package/node/internals/index.js +8 -0
- package/node/locales/plPL.js +7 -7
- package/package.json +1 -1
|
@@ -1,64 +1,84 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
1
2
|
import * as React from 'react';
|
|
2
3
|
import { Store } from '../../utils/Store';
|
|
3
4
|
import { useGridApiMethod } from '../utils/useGridApiMethod';
|
|
4
5
|
import { GridSignature } from '../utils/useGridApiEventHandler';
|
|
5
6
|
import { EventManager } from '../../utils/EventManager';
|
|
7
|
+
var SYMBOL_API_PRIVATE = Symbol('mui.api_private');
|
|
6
8
|
var isSyntheticEvent = function isSyntheticEvent(event) {
|
|
7
9
|
return event.isPropagationStopped !== undefined;
|
|
8
10
|
};
|
|
11
|
+
export function unwrapPrivateAPI(publicApi) {
|
|
12
|
+
return publicApi[SYMBOL_API_PRIVATE];
|
|
13
|
+
}
|
|
9
14
|
var globalId = 0;
|
|
10
|
-
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
|
|
15
|
+
function createPrivateAPI(publicApiRef) {
|
|
16
|
+
var _publicApiRef$current;
|
|
17
|
+
var existingPrivateApi = (_publicApiRef$current = publicApiRef.current) == null ? void 0 : _publicApiRef$current[SYMBOL_API_PRIVATE];
|
|
18
|
+
if (existingPrivateApi) {
|
|
19
|
+
return existingPrivateApi;
|
|
20
|
+
}
|
|
21
|
+
var state = {};
|
|
22
|
+
var privateApi = {
|
|
23
|
+
state: state,
|
|
24
|
+
store: Store.create(state),
|
|
25
|
+
instanceId: {
|
|
26
|
+
id: globalId
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
globalId += 1;
|
|
30
|
+
privateApi.getPublicApi = function () {
|
|
31
|
+
return publicApiRef.current;
|
|
14
32
|
};
|
|
15
|
-
|
|
33
|
+
privateApi.register = function (visibility, methods) {
|
|
16
34
|
Object.keys(methods).forEach(function (methodName) {
|
|
17
|
-
|
|
18
|
-
|
|
35
|
+
var method = methods[methodName];
|
|
36
|
+
var currentPrivateMethod = privateApi[methodName];
|
|
37
|
+
if ((currentPrivateMethod == null ? void 0 : currentPrivateMethod.spying) === true) {
|
|
38
|
+
currentPrivateMethod.target = method;
|
|
19
39
|
} else {
|
|
20
|
-
|
|
40
|
+
privateApi[methodName] = method;
|
|
41
|
+
}
|
|
42
|
+
if (visibility === 'public') {
|
|
43
|
+
var publicApi = publicApiRef.current;
|
|
44
|
+
var currentPublicMethod = publicApi[methodName];
|
|
45
|
+
if ((currentPublicMethod == null ? void 0 : currentPublicMethod.spying) === true) {
|
|
46
|
+
currentPublicMethod.target = method;
|
|
47
|
+
} else {
|
|
48
|
+
publicApi[methodName] = method;
|
|
49
|
+
}
|
|
21
50
|
}
|
|
22
51
|
});
|
|
23
52
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
53
|
+
privateApi.register('private', {
|
|
54
|
+
caches: {},
|
|
55
|
+
eventManager: new EventManager()
|
|
56
|
+
});
|
|
57
|
+
return privateApi;
|
|
58
|
+
}
|
|
59
|
+
function createPublicAPI(privateApiRef) {
|
|
60
|
+
var publicApi = _defineProperty({
|
|
61
|
+
get state() {
|
|
62
|
+
return privateApiRef.current.state;
|
|
63
|
+
},
|
|
64
|
+
get store() {
|
|
65
|
+
return privateApiRef.current.store;
|
|
30
66
|
},
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return true;
|
|
67
|
+
get instanceId() {
|
|
68
|
+
return privateApiRef.current.instanceId;
|
|
34
69
|
}
|
|
35
|
-
};
|
|
36
|
-
return
|
|
37
|
-
}
|
|
70
|
+
}, SYMBOL_API_PRIVATE, privateApiRef.current);
|
|
71
|
+
return publicApi;
|
|
72
|
+
}
|
|
38
73
|
export function useGridApiInitialization(inputApiRef, props) {
|
|
39
74
|
var publicApiRef = React.useRef();
|
|
40
|
-
if (!publicApiRef.current) {
|
|
41
|
-
var state = {};
|
|
42
|
-
publicApiRef.current = {
|
|
43
|
-
state: state,
|
|
44
|
-
store: Store.create(state),
|
|
45
|
-
instanceId: {
|
|
46
|
-
id: globalId
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
globalId += 1;
|
|
50
|
-
}
|
|
51
75
|
var privateApiRef = React.useRef();
|
|
52
76
|
if (!privateApiRef.current) {
|
|
53
|
-
privateApiRef.current =
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
});
|
|
77
|
+
privateApiRef.current = createPrivateAPI(publicApiRef);
|
|
78
|
+
}
|
|
79
|
+
if (!publicApiRef.current) {
|
|
80
|
+
publicApiRef.current = createPublicAPI(privateApiRef);
|
|
58
81
|
}
|
|
59
|
-
React.useImperativeHandle(inputApiRef, function () {
|
|
60
|
-
return publicApiRef.current;
|
|
61
|
-
}, [publicApiRef]);
|
|
62
82
|
var publishEvent = React.useCallback(function () {
|
|
63
83
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
64
84
|
args[_key] = arguments[_key];
|
|
@@ -87,6 +107,9 @@ export function useGridApiInitialization(inputApiRef, props) {
|
|
|
87
107
|
subscribeEvent: subscribeEvent,
|
|
88
108
|
publishEvent: publishEvent
|
|
89
109
|
}, 'public');
|
|
110
|
+
React.useImperativeHandle(inputApiRef, function () {
|
|
111
|
+
return publicApiRef.current;
|
|
112
|
+
}, [publicApiRef]);
|
|
90
113
|
React.useEffect(function () {
|
|
91
114
|
var api = privateApiRef.current;
|
|
92
115
|
return function () {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
2
|
+
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
1
3
|
import { GRID_CHECKBOX_SELECTION_COL_DEF } from '../../../../colDef';
|
|
2
4
|
import { buildWarning } from '../../../../utils/warning';
|
|
3
5
|
function sanitizeCellValue(value, delimiterCharacter) {
|
|
@@ -37,48 +39,119 @@ export var serializeCellValue = function serializeCellValue(cellParams, options)
|
|
|
37
39
|
return sanitizeCellValue(value, delimiterCharacter);
|
|
38
40
|
};
|
|
39
41
|
var objectFormattedValueWarning = buildWarning(['MUI: When the value of a field is an object or a `renderCell` is provided, the CSV export might not display the value correctly.', 'You can provide a `valueFormatter` with a string representation to be used.']);
|
|
42
|
+
var CSVRow = /*#__PURE__*/function () {
|
|
43
|
+
function CSVRow(options) {
|
|
44
|
+
_classCallCheck(this, CSVRow);
|
|
45
|
+
this.options = void 0;
|
|
46
|
+
this.rowString = '';
|
|
47
|
+
this.isEmpty = true;
|
|
48
|
+
this.options = options;
|
|
49
|
+
}
|
|
50
|
+
_createClass(CSVRow, [{
|
|
51
|
+
key: "addValue",
|
|
52
|
+
value: function addValue(value) {
|
|
53
|
+
if (!this.isEmpty) {
|
|
54
|
+
this.rowString += this.options.delimiterCharacter;
|
|
55
|
+
}
|
|
56
|
+
if (value === null || value === undefined) {
|
|
57
|
+
this.rowString += '';
|
|
58
|
+
} else if (typeof this.options.sanitizeCellValue === 'function') {
|
|
59
|
+
this.rowString += this.options.sanitizeCellValue(value, this.options.delimiterCharacter);
|
|
60
|
+
} else {
|
|
61
|
+
this.rowString += value;
|
|
62
|
+
}
|
|
63
|
+
this.isEmpty = false;
|
|
64
|
+
}
|
|
65
|
+
}, {
|
|
66
|
+
key: "getRowString",
|
|
67
|
+
value: function getRowString() {
|
|
68
|
+
return this.rowString;
|
|
69
|
+
}
|
|
70
|
+
}]);
|
|
71
|
+
return CSVRow;
|
|
72
|
+
}();
|
|
40
73
|
var serializeRow = function serializeRow(_ref) {
|
|
41
74
|
var id = _ref.id,
|
|
42
75
|
columns = _ref.columns,
|
|
43
76
|
getCellParams = _ref.getCellParams,
|
|
44
77
|
delimiterCharacter = _ref.delimiterCharacter,
|
|
45
78
|
ignoreValueFormatter = _ref.ignoreValueFormatter;
|
|
46
|
-
|
|
79
|
+
var row = new CSVRow({
|
|
80
|
+
delimiterCharacter: delimiterCharacter
|
|
81
|
+
});
|
|
82
|
+
columns.forEach(function (column) {
|
|
47
83
|
var cellParams = getCellParams(id, column.field);
|
|
48
84
|
if (process.env.NODE_ENV !== 'production') {
|
|
49
85
|
if (String(cellParams.formattedValue) === '[object Object]') {
|
|
50
86
|
objectFormattedValueWarning();
|
|
51
87
|
}
|
|
52
88
|
}
|
|
53
|
-
|
|
89
|
+
row.addValue(serializeCellValue(cellParams, {
|
|
54
90
|
delimiterCharacter: delimiterCharacter,
|
|
55
91
|
ignoreValueFormatter: ignoreValueFormatter
|
|
56
|
-
});
|
|
92
|
+
}));
|
|
57
93
|
});
|
|
94
|
+
return row.getRowString();
|
|
58
95
|
};
|
|
59
96
|
export function buildCSV(options) {
|
|
60
97
|
var columns = options.columns,
|
|
61
98
|
rowIds = options.rowIds,
|
|
62
|
-
getCellParams = options.getCellParams,
|
|
63
99
|
delimiterCharacter = options.delimiterCharacter,
|
|
64
100
|
includeHeaders = options.includeHeaders,
|
|
65
|
-
|
|
101
|
+
includeColumnGroupsHeaders = options.includeColumnGroupsHeaders,
|
|
102
|
+
ignoreValueFormatter = options.ignoreValueFormatter,
|
|
103
|
+
apiRef = options.apiRef;
|
|
66
104
|
var CSVBody = rowIds.reduce(function (acc, id) {
|
|
67
105
|
return "".concat(acc).concat(serializeRow({
|
|
68
106
|
id: id,
|
|
69
107
|
columns: columns,
|
|
70
|
-
getCellParams: getCellParams,
|
|
108
|
+
getCellParams: apiRef.current.getCellParams,
|
|
71
109
|
delimiterCharacter: delimiterCharacter,
|
|
72
110
|
ignoreValueFormatter: ignoreValueFormatter
|
|
73
|
-
})
|
|
111
|
+
}), "\r\n");
|
|
74
112
|
}, '').trim();
|
|
75
113
|
if (!includeHeaders) {
|
|
76
114
|
return CSVBody;
|
|
77
115
|
}
|
|
78
|
-
var
|
|
116
|
+
var filteredColumns = columns.filter(function (column) {
|
|
79
117
|
return column.field !== GRID_CHECKBOX_SELECTION_COL_DEF.field;
|
|
80
|
-
})
|
|
81
|
-
|
|
82
|
-
|
|
118
|
+
});
|
|
119
|
+
var headerRows = [];
|
|
120
|
+
if (includeColumnGroupsHeaders) {
|
|
121
|
+
var columnGroupLookup = apiRef.current.unstable_getAllGroupDetails();
|
|
122
|
+
var maxColumnGroupsDepth = 0;
|
|
123
|
+
var columnGroupPathsLookup = filteredColumns.reduce(function (acc, column) {
|
|
124
|
+
var columnGroupPath = apiRef.current.unstable_getColumnGroupPath(column.field);
|
|
125
|
+
acc[column.field] = columnGroupPath;
|
|
126
|
+
maxColumnGroupsDepth = Math.max(maxColumnGroupsDepth, columnGroupPath.length);
|
|
127
|
+
return acc;
|
|
128
|
+
}, {});
|
|
129
|
+
var _loop = function _loop(i) {
|
|
130
|
+
var headerGroupRow = new CSVRow({
|
|
131
|
+
delimiterCharacter: delimiterCharacter,
|
|
132
|
+
sanitizeCellValue: sanitizeCellValue
|
|
133
|
+
});
|
|
134
|
+
headerRows.push(headerGroupRow);
|
|
135
|
+
filteredColumns.forEach(function (column) {
|
|
136
|
+
var columnGroupId = (columnGroupPathsLookup[column.field] || [])[i];
|
|
137
|
+
var columnGroup = columnGroupLookup[columnGroupId];
|
|
138
|
+
headerGroupRow.addValue(columnGroup ? columnGroup.headerName || columnGroup.groupId : '');
|
|
139
|
+
});
|
|
140
|
+
};
|
|
141
|
+
for (var i = 0; i < maxColumnGroupsDepth; i += 1) {
|
|
142
|
+
_loop(i);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
var mainHeaderRow = new CSVRow({
|
|
146
|
+
delimiterCharacter: delimiterCharacter,
|
|
147
|
+
sanitizeCellValue: sanitizeCellValue
|
|
148
|
+
});
|
|
149
|
+
filteredColumns.forEach(function (column) {
|
|
150
|
+
mainHeaderRow.addValue(column.headerName || column.field);
|
|
151
|
+
});
|
|
152
|
+
headerRows.push(mainHeaderRow);
|
|
153
|
+
var CSVHead = "".concat(headerRows.map(function (row) {
|
|
154
|
+
return row.getRowString();
|
|
155
|
+
}).join('\r\n'), "\r\n");
|
|
83
156
|
return "".concat(CSVHead).concat(CSVBody).trim();
|
|
84
157
|
}
|
|
@@ -21,7 +21,7 @@ export var useGridCsvExport = function useGridCsvExport(apiRef, props) {
|
|
|
21
21
|
var ignoreValueFormatterProp = props.unstable_ignoreValueFormatterDuringExport;
|
|
22
22
|
var ignoreValueFormatter = (_typeof(ignoreValueFormatterProp) === 'object' ? ignoreValueFormatterProp == null ? void 0 : ignoreValueFormatterProp.csvExport : ignoreValueFormatterProp) || false;
|
|
23
23
|
var getDataAsCsv = React.useCallback(function () {
|
|
24
|
-
var _options$getRowsToExp, _options$includeHeade;
|
|
24
|
+
var _options$getRowsToExp, _options$includeHeade, _options$includeColum;
|
|
25
25
|
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
26
26
|
logger.debug("Get data as CSV");
|
|
27
27
|
var exportedColumns = getColumnsToExport({
|
|
@@ -35,10 +35,11 @@ export var useGridCsvExport = function useGridCsvExport(apiRef, props) {
|
|
|
35
35
|
return buildCSV({
|
|
36
36
|
columns: exportedColumns,
|
|
37
37
|
rowIds: exportedRowIds,
|
|
38
|
-
getCellParams: apiRef.current.getCellParams,
|
|
39
38
|
delimiterCharacter: options.delimiter || ',',
|
|
40
39
|
includeHeaders: (_options$includeHeade = options.includeHeaders) != null ? _options$includeHeade : true,
|
|
41
|
-
|
|
40
|
+
includeColumnGroupsHeaders: (_options$includeColum = options.includeColumnGroupsHeaders) != null ? _options$includeColum : true,
|
|
41
|
+
ignoreValueFormatter: ignoreValueFormatter,
|
|
42
|
+
apiRef: apiRef
|
|
42
43
|
});
|
|
43
44
|
}, [logger, apiRef, ignoreValueFormatter]);
|
|
44
45
|
var exportDataAsCsv = React.useCallback(function (options) {
|
|
@@ -3,7 +3,7 @@ import { GridLogicOperator } from '../../../models';
|
|
|
3
3
|
import { GLOBAL_API_REF, isInternalFilter } from '../../../colDef/utils';
|
|
4
4
|
import { getDefaultGridFilterModel } from './gridFilterState';
|
|
5
5
|
import { buildWarning } from '../../../utils/warning';
|
|
6
|
-
import { gridColumnFieldsSelector, gridColumnLookupSelector } from '../columns';
|
|
6
|
+
import { gridColumnFieldsSelector, gridColumnLookupSelector, gridVisibleColumnFieldsSelector } from '../columns';
|
|
7
7
|
/**
|
|
8
8
|
* Adds default values to the optional fields of a filter items.
|
|
9
9
|
* @param {GridFilterItem} item The raw filter item.
|
|
@@ -170,12 +170,13 @@ export var buildAggregatedFilterItemsApplier = function buildAggregatedFilterIte
|
|
|
170
170
|
* @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters.
|
|
171
171
|
*/
|
|
172
172
|
export var buildAggregatedQuickFilterApplier = function buildAggregatedQuickFilterApplier(getRowId, filterModel, apiRef) {
|
|
173
|
-
var _filterModel$quickFil, _filterModel$quickFil2;
|
|
173
|
+
var _filterModel$quickFil, _filterModel$quickFil2, _filterModel$quickFil3;
|
|
174
174
|
var quickFilterValues = (_filterModel$quickFil = (_filterModel$quickFil2 = filterModel.quickFilterValues) == null ? void 0 : _filterModel$quickFil2.filter(Boolean)) != null ? _filterModel$quickFil : [];
|
|
175
175
|
if (quickFilterValues.length === 0) {
|
|
176
176
|
return null;
|
|
177
177
|
}
|
|
178
|
-
var
|
|
178
|
+
var quickFilterExcludeHiddenColumns = (_filterModel$quickFil3 = filterModel.quickFilterExcludeHiddenColumns) != null ? _filterModel$quickFil3 : false;
|
|
179
|
+
var columnFields = quickFilterExcludeHiddenColumns ? gridVisibleColumnFieldsSelector(apiRef) : gridColumnFieldsSelector(apiRef);
|
|
179
180
|
var appliersPerField = [];
|
|
180
181
|
columnFields.forEach(function (field) {
|
|
181
182
|
var column = apiRef.current.getColumn(field);
|
|
@@ -299,14 +300,14 @@ export var passFilterLogic = function passFilterLogic(allFilterItemResults, allQ
|
|
|
299
300
|
|
|
300
301
|
// get result for quick filter model
|
|
301
302
|
if (cleanedQuickFilterResults.length > 0 && filterModel.quickFilterValues != null) {
|
|
302
|
-
var _filterModel$
|
|
303
|
+
var _filterModel$quickFil4;
|
|
303
304
|
// Return true if the item pass with one of the rows
|
|
304
305
|
var quickFilterValuePredicate = function quickFilterValuePredicate(value) {
|
|
305
306
|
return cleanedQuickFilterResults.some(function (quickFilterValueResult) {
|
|
306
307
|
return quickFilterValueResult[value];
|
|
307
308
|
});
|
|
308
309
|
};
|
|
309
|
-
var quickFilterLogicOperator = (_filterModel$
|
|
310
|
+
var quickFilterLogicOperator = (_filterModel$quickFil4 = filterModel.quickFilterLogicOperator) != null ? _filterModel$quickFil4 : getDefaultGridFilterModel().quickFilterLogicOperator;
|
|
310
311
|
if (quickFilterLogicOperator === GridLogicOperator.And) {
|
|
311
312
|
var passesAllQuickFilterValues = filterModel.quickFilterValues.every(quickFilterValuePredicate);
|
|
312
313
|
if (!passesAllQuickFilterValues) {
|
|
@@ -22,6 +22,7 @@ export var filterStateInitializer = function filterStateInitializer(state, props
|
|
|
22
22
|
return _extends({}, state, {
|
|
23
23
|
filter: {
|
|
24
24
|
filterModel: sanitizeFilterModel(filterModel, props.disableMultipleColumnsFiltering, apiRef),
|
|
25
|
+
filteredRowsLookup: {},
|
|
25
26
|
filteredDescendantCountLookup: {}
|
|
26
27
|
},
|
|
27
28
|
visibleRowsLookup: {}
|
|
@@ -347,6 +348,13 @@ export var useGridFilter = function useGridFilter(apiRef, props) {
|
|
|
347
348
|
useGridApiEventHandler(apiRef, 'columnsChange', handleColumnsChange);
|
|
348
349
|
useGridApiEventHandler(apiRef, 'activeStrategyProcessorChange', handleStrategyProcessorChange);
|
|
349
350
|
useGridApiEventHandler(apiRef, 'rowExpansionChange', updateVisibleRowsLookupState);
|
|
351
|
+
useGridApiEventHandler(apiRef, 'columnVisibilityModelChange', function () {
|
|
352
|
+
var filterModel = gridFilterModelSelector(apiRef);
|
|
353
|
+
if (filterModel.quickFilterValues && filterModel.quickFilterExcludeHiddenColumns) {
|
|
354
|
+
// re-apply filters because the quick filter results may have changed
|
|
355
|
+
apiRef.current.unstable_applyFilters();
|
|
356
|
+
}
|
|
357
|
+
});
|
|
350
358
|
|
|
351
359
|
/**
|
|
352
360
|
* 1ST RENDER
|
|
@@ -3,7 +3,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
3
3
|
import { gridPinnedRowsSelector } from './gridRowsSelector';
|
|
4
4
|
import { gridDensityFactorSelector } from '../density/densitySelector';
|
|
5
5
|
export var GRID_ROOT_GROUP_ID = "auto-generated-group-node-root";
|
|
6
|
-
export var GRID_ID_AUTOGENERATED = Symbol('mui
|
|
6
|
+
export var GRID_ID_AUTOGENERATED = Symbol('mui.id_autogenerated');
|
|
7
7
|
export var buildRootGroup = function buildRootGroup() {
|
|
8
8
|
return {
|
|
9
9
|
type: 'group',
|
|
@@ -1,29 +1,11 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
-
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
1
|
import * as React from 'react';
|
|
4
2
|
export function useGridApiMethod(privateApiRef, apiMethods, visibility) {
|
|
5
|
-
var
|
|
6
|
-
var _React$useState = React.useState(Object.keys(apiMethods)),
|
|
7
|
-
_React$useState2 = _slicedToArray(_React$useState, 1),
|
|
8
|
-
apiMethodsNames = _React$useState2[0];
|
|
9
|
-
var installMethods = React.useCallback(function () {
|
|
10
|
-
if (!privateApiRef.current) {
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
apiMethodsNames.forEach(function (methodName) {
|
|
14
|
-
if (!privateApiRef.current.hasOwnProperty(methodName)) {
|
|
15
|
-
privateApiRef.current.register(visibility, _defineProperty({}, methodName, function () {
|
|
16
|
-
var fn = apiMethodsRef.current[methodName];
|
|
17
|
-
return fn.apply(void 0, arguments);
|
|
18
|
-
}));
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
}, [apiMethodsNames, privateApiRef, visibility]);
|
|
3
|
+
var isFirstRender = React.useRef(true);
|
|
22
4
|
React.useEffect(function () {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
5
|
+
isFirstRender.current = false;
|
|
6
|
+
privateApiRef.current.register(visibility, apiMethods);
|
|
7
|
+
}, [privateApiRef, visibility, apiMethods]);
|
|
8
|
+
if (isFirstRender.current) {
|
|
9
|
+
privateApiRef.current.register(visibility, apiMethods);
|
|
10
|
+
}
|
|
29
11
|
}
|
package/legacy/index.js
CHANGED
|
@@ -8,6 +8,7 @@ export { getGridFilter } from '../components/panel/filterPanel/GridFilterPanel';
|
|
|
8
8
|
export { useGridRegisterPipeProcessor } from '../hooks/core/pipeProcessing';
|
|
9
9
|
export { useGridRegisterStrategyProcessor, GRID_DEFAULT_STRATEGY } from '../hooks/core/strategyProcessing';
|
|
10
10
|
export { useGridInitialization } from '../hooks/core/useGridInitialization';
|
|
11
|
+
export { unwrapPrivateAPI } from '../hooks/core/useGridApiInitialization';
|
|
11
12
|
export { useGridClipboard } from '../hooks/features/clipboard/useGridClipboard';
|
|
12
13
|
export { useGridColumnHeaders } from '../hooks/features/columnHeaders/useGridColumnHeaders';
|
|
13
14
|
export { unstable_gridHeaderFilteringEditFieldSelector, unstable_gridHeaderFilteringMenuSelector } from '../hooks/features/headerFiltering/gridHeaderFilteringSelectors';
|
package/legacy/locales/plPL.js
CHANGED
|
@@ -39,7 +39,7 @@ var plPLGrid = {
|
|
|
39
39
|
columnsPanelHideAllButton: 'Ukryj wszystko',
|
|
40
40
|
// Filter panel text
|
|
41
41
|
filterPanelAddFilter: 'Dodaj filtr',
|
|
42
|
-
|
|
42
|
+
filterPanelRemoveAll: 'Usuń wszystkie',
|
|
43
43
|
filterPanelDeleteIconLabel: 'Usuń',
|
|
44
44
|
filterPanelLogicOperator: 'Operator logiczny',
|
|
45
45
|
filterPanelOperator: 'Operator',
|
|
@@ -70,12 +70,12 @@ var plPLGrid = {
|
|
|
70
70
|
// 'filterOperator<=': '<=',
|
|
71
71
|
|
|
72
72
|
// Header filter operators text
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
73
|
+
headerFilterOperatorContains: 'Zawiera',
|
|
74
|
+
headerFilterOperatorEquals: 'Równa się',
|
|
75
|
+
headerFilterOperatorStartsWith: 'Zaczyna się od',
|
|
76
|
+
headerFilterOperatorEndsWith: 'Kończy się na',
|
|
77
77
|
// headerFilterOperatorIs: 'Is',
|
|
78
|
-
|
|
78
|
+
headerFilterOperatorNot: 'Niepuste',
|
|
79
79
|
// headerFilterOperatorAfter: 'Is after',
|
|
80
80
|
// headerFilterOperatorOnOrAfter: 'Is on or after',
|
|
81
81
|
// headerFilterOperatorBefore: 'Is before',
|
|
@@ -97,7 +97,7 @@ var plPLGrid = {
|
|
|
97
97
|
// Column menu text
|
|
98
98
|
columnMenuLabel: 'Menu',
|
|
99
99
|
columnMenuShowColumns: 'Pokaż wszystkie kolumny',
|
|
100
|
-
|
|
100
|
+
columnMenuManageColumns: 'Zarządzaj kolumnami',
|
|
101
101
|
columnMenuFilter: 'Filtr',
|
|
102
102
|
columnMenuHideColumn: 'Ukryj',
|
|
103
103
|
columnMenuUnsort: 'Anuluj sortowanie',
|
package/locales/plPL.js
CHANGED
|
@@ -37,7 +37,7 @@ const plPLGrid = {
|
|
|
37
37
|
columnsPanelHideAllButton: 'Ukryj wszystko',
|
|
38
38
|
// Filter panel text
|
|
39
39
|
filterPanelAddFilter: 'Dodaj filtr',
|
|
40
|
-
|
|
40
|
+
filterPanelRemoveAll: 'Usuń wszystkie',
|
|
41
41
|
filterPanelDeleteIconLabel: 'Usuń',
|
|
42
42
|
filterPanelLogicOperator: 'Operator logiczny',
|
|
43
43
|
filterPanelOperator: 'Operator',
|
|
@@ -68,12 +68,12 @@ const plPLGrid = {
|
|
|
68
68
|
// 'filterOperator<=': '<=',
|
|
69
69
|
|
|
70
70
|
// Header filter operators text
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
headerFilterOperatorContains: 'Zawiera',
|
|
72
|
+
headerFilterOperatorEquals: 'Równa się',
|
|
73
|
+
headerFilterOperatorStartsWith: 'Zaczyna się od',
|
|
74
|
+
headerFilterOperatorEndsWith: 'Kończy się na',
|
|
75
75
|
// headerFilterOperatorIs: 'Is',
|
|
76
|
-
|
|
76
|
+
headerFilterOperatorNot: 'Niepuste',
|
|
77
77
|
// headerFilterOperatorAfter: 'Is after',
|
|
78
78
|
// headerFilterOperatorOnOrAfter: 'Is on or after',
|
|
79
79
|
// headerFilterOperatorBefore: 'Is before',
|
|
@@ -95,7 +95,7 @@ const plPLGrid = {
|
|
|
95
95
|
// Column menu text
|
|
96
96
|
columnMenuLabel: 'Menu',
|
|
97
97
|
columnMenuShowColumns: 'Pokaż wszystkie kolumny',
|
|
98
|
-
|
|
98
|
+
columnMenuManageColumns: 'Zarządzaj kolumnami',
|
|
99
99
|
columnMenuFilter: 'Filtr',
|
|
100
100
|
columnMenuHideColumn: 'Ukryj',
|
|
101
101
|
columnMenuUnsort: 'Anuluj sortowanie',
|
|
@@ -452,7 +452,6 @@ export interface GridEventLookup extends GridRowEventLookup, GridColumnHeaderEve
|
|
|
452
452
|
sortedRowsSet: {};
|
|
453
453
|
/**
|
|
454
454
|
* Fired when the expansion of a row is changed. Called with a [[GridGroupNode]] object.
|
|
455
|
-
* @ignore - do not document.
|
|
456
455
|
*/
|
|
457
456
|
rowExpansionChange: {
|
|
458
457
|
params: GridGroupNode;
|
package/models/gridExport.d.ts
CHANGED
|
@@ -69,10 +69,17 @@ export interface GridCsvExportOptions extends GridFileExportOptions {
|
|
|
69
69
|
*/
|
|
70
70
|
utf8WithBom?: boolean;
|
|
71
71
|
/**
|
|
72
|
-
* If `true`, the
|
|
72
|
+
* If `true`, the CSV will include the column headers and column groups.
|
|
73
|
+
* Use `includeColumnGroupsHeaders` to control whether the column groups are included.
|
|
73
74
|
* @default true
|
|
74
75
|
*/
|
|
75
76
|
includeHeaders?: boolean;
|
|
77
|
+
/**
|
|
78
|
+
* If `true`, the CSV will include the column groups.
|
|
79
|
+
* @see See {@link https://mui.com/x/react-data-grid/column-groups/ column groups docs} for more details.
|
|
80
|
+
* @default true
|
|
81
|
+
*/
|
|
82
|
+
includeColumnGroupsHeaders?: boolean;
|
|
76
83
|
/**
|
|
77
84
|
* Function that returns the id of the rows to export on the order they should be exported.
|
|
78
85
|
* @param {GridCsvGetRowsToExportParams} params With all properties from [[GridCsvGetRowsToExportParams]].
|
|
@@ -26,4 +26,9 @@ export interface GridFilterModel {
|
|
|
26
26
|
* @default `GridLogicOperator.And`
|
|
27
27
|
*/
|
|
28
28
|
quickFilterLogicOperator?: GridLogicOperator;
|
|
29
|
+
/**
|
|
30
|
+
* If `true`, the quick filter will skip cell values from hidden columns.
|
|
31
|
+
* @default false
|
|
32
|
+
*/
|
|
33
|
+
quickFilterExcludeHiddenColumns?: boolean;
|
|
29
34
|
}
|
|
@@ -181,6 +181,7 @@ DataGridRaw.propTypes = {
|
|
|
181
181
|
value: PropTypes.any
|
|
182
182
|
})).isRequired,
|
|
183
183
|
logicOperator: PropTypes.oneOf(['and', 'or']),
|
|
184
|
+
quickFilterExcludeHiddenColumns: PropTypes.bool,
|
|
184
185
|
quickFilterLogicOperator: PropTypes.oneOf(['and', 'or']),
|
|
185
186
|
quickFilterValues: PropTypes.array
|
|
186
187
|
}),
|
|
@@ -55,18 +55,20 @@ function GridToolbarQuickFilter(props) {
|
|
|
55
55
|
const rootProps = useGridRootProps();
|
|
56
56
|
const quickFilterValues = useGridSelector(apiRef, gridQuickFilterValuesSelector);
|
|
57
57
|
const [searchValue, setSearchValue] = React.useState(() => quickFilterFormatter(quickFilterValues ?? []));
|
|
58
|
-
const
|
|
58
|
+
const prevQuickFilterValuesRef = React.useRef(quickFilterValues);
|
|
59
59
|
React.useEffect(() => {
|
|
60
|
-
if (!isDeepEqual(
|
|
60
|
+
if (!isDeepEqual(prevQuickFilterValuesRef.current, quickFilterValues)) {
|
|
61
61
|
// The model of quick filter value has been updated
|
|
62
|
-
|
|
62
|
+
prevQuickFilterValuesRef.current = quickFilterValues;
|
|
63
63
|
|
|
64
64
|
// Update the input value if needed to match the new model
|
|
65
65
|
setSearchValue(prevSearchValue => isDeepEqual(quickFilterParser(prevSearchValue), quickFilterValues) ? prevSearchValue : quickFilterFormatter(quickFilterValues ?? []));
|
|
66
66
|
}
|
|
67
|
-
}, [
|
|
67
|
+
}, [quickFilterValues, quickFilterFormatter, quickFilterParser]);
|
|
68
68
|
const updateSearchValue = React.useCallback(newSearchValue => {
|
|
69
|
-
|
|
69
|
+
const newQuickFilterValues = quickFilterParser(newSearchValue);
|
|
70
|
+
prevQuickFilterValuesRef.current = newQuickFilterValues;
|
|
71
|
+
apiRef.current.setQuickFilterValues(newQuickFilterValues);
|
|
70
72
|
}, [apiRef, quickFilterParser]);
|
|
71
73
|
const debouncedUpdateSearchValue = React.useMemo(() => debounce(updateSearchValue, debounceMs), [updateSearchValue, debounceMs]);
|
|
72
74
|
const handleSearchValueChange = React.useCallback(event => {
|
|
@@ -86,8 +88,9 @@ function GridToolbarQuickFilter(props) {
|
|
|
86
88
|
onChange: handleSearchValueChange,
|
|
87
89
|
placeholder: apiRef.current.getLocaleText('toolbarQuickFilterPlaceholder'),
|
|
88
90
|
"aria-label": apiRef.current.getLocaleText('toolbarQuickFilterLabel'),
|
|
89
|
-
type: "search"
|
|
90
|
-
|
|
91
|
+
type: "search"
|
|
92
|
+
}, other, {
|
|
93
|
+
InputProps: _extends({
|
|
91
94
|
startAdornment: /*#__PURE__*/_jsx(rootProps.slots.quickFilterIcon, {
|
|
92
95
|
fontSize: "small"
|
|
93
96
|
}),
|
|
@@ -103,8 +106,8 @@ function GridToolbarQuickFilter(props) {
|
|
|
103
106
|
fontSize: "small"
|
|
104
107
|
})
|
|
105
108
|
}))
|
|
106
|
-
}
|
|
107
|
-
},
|
|
109
|
+
}, other.InputProps)
|
|
110
|
+
}, rootProps.slotProps?.baseTextField));
|
|
108
111
|
}
|
|
109
112
|
process.env.NODE_ENV !== "production" ? GridToolbarQuickFilter.propTypes = {
|
|
110
113
|
// ----------------------------- Warning --------------------------------
|
|
@@ -33,13 +33,16 @@ import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
|
33
33
|
*/
|
|
34
34
|
export const useGridPipeProcessing = apiRef => {
|
|
35
35
|
const processorsCache = React.useRef({});
|
|
36
|
+
const isRunning = React.useRef(false);
|
|
36
37
|
const runAppliers = React.useCallback(groupCache => {
|
|
37
|
-
if (!groupCache) {
|
|
38
|
+
if (isRunning.current || !groupCache) {
|
|
38
39
|
return;
|
|
39
40
|
}
|
|
41
|
+
isRunning.current = true;
|
|
40
42
|
Object.values(groupCache.appliers).forEach(callback => {
|
|
41
43
|
callback();
|
|
42
44
|
});
|
|
45
|
+
isRunning.current = false;
|
|
43
46
|
}, []);
|
|
44
47
|
const registerPipeProcessor = React.useCallback((group, id, processor) => {
|
|
45
48
|
if (!processorsCache.current[group]) {
|