@mui/x-data-grid 6.3.0 → 6.4.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 +105 -2
- package/DataGrid/DataGrid.js +20 -1
- package/DataGrid/useDataGridComponent.js +2 -2
- package/DataGrid/useDataGridProps.js +3 -1
- package/colDef/gridBooleanColDef.js +19 -1
- package/colDef/gridDateColDef.js +6 -2
- package/colDef/gridSingleSelectColDef.js +21 -1
- package/components/GridPagination.js +3 -1
- package/components/base/GridBody.d.ts +1 -0
- package/components/base/GridBody.js +6 -3
- package/components/containers/GridRootStyles.js +1 -0
- package/components/panel/GridPanel.d.ts +2 -1
- package/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -2
- package/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -2
- package/components/toolbar/GridToolbarFilterButton.js +3 -1
- package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +12 -1
- package/hooks/features/clipboard/useGridClipboard.d.ts +2 -1
- package/hooks/features/clipboard/useGridClipboard.js +43 -26
- package/hooks/features/dimensions/useGridDimensions.js +2 -4
- package/hooks/features/editing/useGridCellEditing.js +7 -3
- package/hooks/features/editing/useGridRowEditing.js +7 -3
- package/hooks/features/export/serializers/csvSerializer.d.ts +5 -0
- package/hooks/features/export/serializers/csvSerializer.js +46 -6
- package/hooks/features/export/useGridCsvExport.d.ts +2 -1
- package/hooks/features/export/useGridCsvExport.js +7 -5
- package/hooks/features/focus/useGridFocus.js +2 -2
- package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +11 -0
- package/index.js +1 -1
- package/internals/index.d.ts +3 -2
- package/internals/index.js +3 -2
- package/joy/icons.d.ts +33 -0
- package/joy/icons.js +433 -0
- package/joy/joySlots.js +254 -42
- package/legacy/DataGrid/DataGrid.js +20 -1
- package/legacy/DataGrid/useDataGridComponent.js +2 -2
- package/legacy/DataGrid/useDataGridProps.js +3 -1
- package/legacy/colDef/gridBooleanColDef.js +21 -1
- package/legacy/colDef/gridDateColDef.js +10 -2
- package/legacy/colDef/gridSingleSelectColDef.js +21 -1
- package/legacy/components/GridPagination.js +3 -1
- package/legacy/components/base/GridBody.js +6 -3
- package/legacy/components/containers/GridRootStyles.js +1 -0
- package/legacy/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -2
- package/legacy/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -2
- package/legacy/components/toolbar/GridToolbarFilterButton.js +3 -1
- package/legacy/hooks/features/clipboard/useGridClipboard.js +44 -26
- package/legacy/hooks/features/dimensions/useGridDimensions.js +2 -4
- package/legacy/hooks/features/editing/useGridCellEditing.js +7 -3
- package/legacy/hooks/features/editing/useGridRowEditing.js +7 -3
- package/legacy/hooks/features/export/serializers/csvSerializer.js +43 -6
- package/legacy/hooks/features/export/useGridCsvExport.js +8 -5
- package/legacy/hooks/features/focus/useGridFocus.js +2 -2
- package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +10 -0
- package/legacy/index.js +1 -1
- package/legacy/internals/index.js +3 -2
- package/legacy/joy/icons.js +432 -0
- package/legacy/joy/joySlots.js +273 -54
- package/legacy/locales/deDE.js +2 -2
- package/legacy/locales/frFR.js +6 -6
- package/legacy/locales/ptBR.js +1 -1
- package/legacy/locales/ukUA.js +8 -9
- package/legacy/material/index.js +3 -1
- package/legacy/models/api/index.js +0 -1
- package/legacy/utils/domUtils.js +14 -1
- package/locales/deDE.js +2 -2
- package/locales/frFR.js +6 -6
- package/locales/ptBR.js +1 -1
- package/locales/ukUA.js +8 -9
- package/material/index.d.ts +3 -1
- package/material/index.js +3 -1
- package/models/api/gridApiCommon.d.ts +1 -2
- package/models/api/gridCoreApi.d.ts +4 -0
- package/models/api/index.d.ts +0 -1
- package/models/api/index.js +0 -1
- package/models/events/gridEventLookup.d.ts +6 -0
- package/models/gridSlotsComponent.d.ts +5 -0
- package/models/gridSlotsComponentsProps.d.ts +4 -0
- package/models/props/DataGridProps.d.ts +19 -0
- package/modern/DataGrid/DataGrid.js +20 -1
- package/modern/DataGrid/useDataGridComponent.js +2 -2
- package/modern/DataGrid/useDataGridProps.js +3 -1
- package/modern/colDef/gridBooleanColDef.js +19 -1
- package/modern/colDef/gridDateColDef.js +6 -2
- package/modern/colDef/gridSingleSelectColDef.js +21 -1
- package/modern/components/GridPagination.js +2 -1
- package/modern/components/base/GridBody.js +6 -3
- package/modern/components/containers/GridRootStyles.js +1 -0
- package/modern/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -2
- package/modern/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -2
- package/modern/components/toolbar/GridToolbarFilterButton.js +3 -1
- package/modern/hooks/features/clipboard/useGridClipboard.js +43 -26
- package/modern/hooks/features/dimensions/useGridDimensions.js +1 -3
- package/modern/hooks/features/editing/useGridCellEditing.js +7 -3
- package/modern/hooks/features/editing/useGridRowEditing.js +7 -3
- package/modern/hooks/features/export/serializers/csvSerializer.js +44 -6
- package/modern/hooks/features/export/useGridCsvExport.js +7 -5
- package/modern/hooks/features/focus/useGridFocus.js +2 -2
- package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +11 -0
- package/modern/index.js +1 -1
- package/modern/internals/index.js +3 -2
- package/modern/joy/icons.js +433 -0
- package/modern/joy/joySlots.js +248 -41
- package/modern/locales/deDE.js +2 -2
- package/modern/locales/frFR.js +6 -6
- package/modern/locales/ptBR.js +1 -1
- package/modern/locales/ukUA.js +8 -9
- package/modern/material/index.js +3 -1
- package/modern/models/api/index.js +0 -1
- package/modern/utils/domUtils.js +13 -1
- package/node/DataGrid/DataGrid.js +20 -1
- package/node/DataGrid/useDataGridComponent.js +2 -2
- package/node/DataGrid/useDataGridProps.js +3 -1
- package/node/colDef/gridBooleanColDef.js +19 -1
- package/node/colDef/gridDateColDef.js +6 -2
- package/node/colDef/gridSingleSelectColDef.js +21 -1
- package/node/components/GridPagination.js +2 -1
- package/node/components/base/GridBody.js +6 -3
- package/node/components/containers/GridRootStyles.js +1 -0
- package/node/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -2
- package/node/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -2
- package/node/components/toolbar/GridToolbarFilterButton.js +3 -1
- package/node/hooks/features/clipboard/useGridClipboard.js +42 -25
- package/node/hooks/features/dimensions/useGridDimensions.js +1 -3
- package/node/hooks/features/editing/useGridCellEditing.js +7 -3
- package/node/hooks/features/editing/useGridRowEditing.js +7 -3
- package/node/hooks/features/export/serializers/csvSerializer.js +46 -6
- package/node/hooks/features/export/useGridCsvExport.js +6 -3
- package/node/hooks/features/focus/useGridFocus.js +2 -2
- package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +11 -0
- package/node/index.js +1 -1
- package/node/internals/index.js +23 -1
- package/node/joy/icons.js +471 -0
- package/node/joy/joySlots.js +248 -40
- package/node/locales/deDE.js +2 -2
- package/node/locales/frFR.js +6 -6
- package/node/locales/ptBR.js +1 -1
- package/node/locales/ukUA.js +8 -9
- package/node/material/index.js +3 -1
- package/node/models/api/index.js +0 -11
- package/node/utils/domUtils.js +15 -1
- package/package.json +2 -2
- package/utils/domUtils.d.ts +1 -0
- package/utils/domUtils.js +13 -1
- package/legacy/models/api/gridClipboardApi.js +0 -1
- package/models/api/gridClipboardApi.d.ts +0 -11
- package/models/api/gridClipboardApi.js +0 -1
- package/modern/models/api/gridClipboardApi.js +0 -1
- package/node/models/api/gridClipboardApi.js +0 -5
|
@@ -58,6 +58,26 @@ const GRID_SINGLE_SELECT_COL_DEF = (0, _extends2.default)({}, _gridStringColDef.
|
|
|
58
58
|
return valueOption ? colDef.getOptionLabel(valueOption) : '';
|
|
59
59
|
},
|
|
60
60
|
renderEditCell: _GridEditSingleSelectCell.renderEditSingleSelectCell,
|
|
61
|
-
filterOperators: (0, _gridSingleSelectOperators.getGridSingleSelectOperators)()
|
|
61
|
+
filterOperators: (0, _gridSingleSelectOperators.getGridSingleSelectOperators)(),
|
|
62
|
+
// @ts-ignore
|
|
63
|
+
pastedValueParser: (value, params) => {
|
|
64
|
+
const colDef = params.colDef;
|
|
65
|
+
const colDefValueOptions = colDef.valueOptions;
|
|
66
|
+
const valueOptions = typeof colDefValueOptions === 'function' ? colDefValueOptions({
|
|
67
|
+
field: colDef.field
|
|
68
|
+
}) : colDefValueOptions || [];
|
|
69
|
+
const getOptionValue = colDef.getOptionValue;
|
|
70
|
+
const valueOption = valueOptions.find(option => {
|
|
71
|
+
if (getOptionValue(option) === value) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
});
|
|
76
|
+
if (valueOption) {
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
// do not paste the value if it is not in the valueOptions
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
62
82
|
});
|
|
63
83
|
exports.GRID_SINGLE_SELECT_COL_DEF = GRID_SINGLE_SELECT_COL_DEF;
|
|
@@ -50,7 +50,8 @@ const GridPagination = /*#__PURE__*/React.forwardRef(function GridPagination(pro
|
|
|
50
50
|
if (process.env.NODE_ENV !== 'production') {
|
|
51
51
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
52
52
|
const warnedOnceMissingInPageSizeOptions = React.useRef(false);
|
|
53
|
-
|
|
53
|
+
const pageSize = rootProps.paginationModel?.pageSize ?? paginationModel.pageSize;
|
|
54
|
+
if (!warnedOnceMissingInPageSizeOptions.current && !rootProps.autoPageSize && !rootProps.pageSizeOptions.includes(pageSize)) {
|
|
54
55
|
console.warn([`MUI: The page size \`${paginationModel.pageSize}\` is not preset in the \`pageSizeOptions\``, `Add it to show the pagination select.`].join('\n'));
|
|
55
56
|
warnedOnceMissingInPageSizeOptions.current = true;
|
|
56
57
|
}
|
|
@@ -26,7 +26,8 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
26
26
|
function GridBody(props) {
|
|
27
27
|
const {
|
|
28
28
|
VirtualScrollerComponent,
|
|
29
|
-
ColumnHeadersProps
|
|
29
|
+
ColumnHeadersProps,
|
|
30
|
+
children
|
|
30
31
|
} = props;
|
|
31
32
|
const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
|
|
32
33
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
@@ -96,7 +97,8 @@ function GridBody(props) {
|
|
|
96
97
|
apiRef.current.register('private', {
|
|
97
98
|
columnHeadersContainerElementRef: columnsContainerRef,
|
|
98
99
|
columnHeadersElementRef: columnHeadersRef,
|
|
99
|
-
virtualScrollerRef
|
|
100
|
+
virtualScrollerRef,
|
|
101
|
+
mainElementRef: rootRef
|
|
100
102
|
});
|
|
101
103
|
const hasDimensions = !!apiRef.current.getRootDimensions();
|
|
102
104
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridMainContainer.GridMainContainer, {
|
|
@@ -127,7 +129,7 @@ function GridBody(props) {
|
|
|
127
129
|
, {
|
|
128
130
|
ref: virtualScrollerRef,
|
|
129
131
|
disableVirtualization: isVirtualizationDisabled
|
|
130
|
-
})]
|
|
132
|
+
}), children]
|
|
131
133
|
});
|
|
132
134
|
}
|
|
133
135
|
process.env.NODE_ENV !== "production" ? GridBody.propTypes = {
|
|
@@ -135,6 +137,7 @@ process.env.NODE_ENV !== "production" ? GridBody.propTypes = {
|
|
|
135
137
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
136
138
|
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
137
139
|
// ----------------------------------------------------------------------
|
|
140
|
+
children: _propTypes.default.node,
|
|
138
141
|
ColumnHeadersProps: _propTypes.default.object,
|
|
139
142
|
VirtualScrollerComponent: _propTypes.default.elementType.isRequired
|
|
140
143
|
} : void 0;
|
|
@@ -10,7 +10,6 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
|
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
12
|
var _Autocomplete = _interopRequireWildcard(require("@mui/material/Autocomplete"));
|
|
13
|
-
var _Chip = _interopRequireDefault(require("@mui/material/Chip"));
|
|
14
13
|
var _utils = require("@mui/utils");
|
|
15
14
|
var _filterPanelUtils = require("./filterPanelUtils");
|
|
16
15
|
var _useGridRootProps = require("../../../hooks/utils/useGridRootProps");
|
|
@@ -105,7 +104,7 @@ function GridFilterInputMultipleSingleSelect(props) {
|
|
|
105
104
|
value: filteredValues,
|
|
106
105
|
onChange: handleChange,
|
|
107
106
|
getOptionLabel: getOptionLabel,
|
|
108
|
-
renderTags: (value, getTagProps) => value.map((option, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
107
|
+
renderTags: (value, getTagProps) => value.map((option, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseChip, (0, _extends2.default)({
|
|
109
108
|
variant: "outlined",
|
|
110
109
|
size: "small",
|
|
111
110
|
label: getOptionLabel(option)
|
|
@@ -10,7 +10,6 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
|
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
12
|
var _Autocomplete = _interopRequireDefault(require("@mui/material/Autocomplete"));
|
|
13
|
-
var _Chip = _interopRequireDefault(require("@mui/material/Chip"));
|
|
14
13
|
var _utils = require("@mui/utils");
|
|
15
14
|
var _useGridRootProps = require("../../../hooks/utils/useGridRootProps");
|
|
16
15
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
@@ -64,7 +63,7 @@ function GridFilterInputMultipleValue(props) {
|
|
|
64
63
|
id: id,
|
|
65
64
|
value: filterValueState,
|
|
66
65
|
onChange: handleChange,
|
|
67
|
-
renderTags: (value, getTagProps) => value.map((option, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
66
|
+
renderTags: (value, getTagProps) => value.map((option, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseChip, (0, _extends2.default)({
|
|
68
67
|
variant: "outlined",
|
|
69
68
|
size: "small",
|
|
70
69
|
label: option
|
|
@@ -76,7 +76,9 @@ const GridToolbarFilterButton = /*#__PURE__*/React.forwardRef(function GridToolb
|
|
|
76
76
|
children: activeFilters.map((item, index) => (0, _extends2.default)({}, lookup[item.field] && /*#__PURE__*/(0, _jsxRuntime.jsx)("li", {
|
|
77
77
|
children: `${lookup[item.field].headerName || item.field}
|
|
78
78
|
${getOperatorLabel(item)}
|
|
79
|
-
${
|
|
79
|
+
${
|
|
80
|
+
// implicit check for null and undefined
|
|
81
|
+
item.value != null ? getFilterItemValue(item) : ''}`
|
|
80
82
|
}, index)))
|
|
81
83
|
})]
|
|
82
84
|
});
|
|
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.useGridClipboard = void 0;
|
|
7
7
|
var React = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _utils = require("../../utils");
|
|
9
|
+
var _gridFocusStateSelector = require("../focus/gridFocusStateSelector");
|
|
10
|
+
var _csvSerializer = require("../export/serializers/csvSerializer");
|
|
9
11
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
10
12
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
11
13
|
function writeToClipboardPolyfill(data) {
|
|
@@ -26,6 +28,15 @@ function writeToClipboardPolyfill(data) {
|
|
|
26
28
|
document.body.removeChild(span);
|
|
27
29
|
}
|
|
28
30
|
}
|
|
31
|
+
function copyToClipboard(data) {
|
|
32
|
+
if (navigator.clipboard) {
|
|
33
|
+
navigator.clipboard.writeText(data).catch(() => {
|
|
34
|
+
writeToClipboardPolyfill(data);
|
|
35
|
+
});
|
|
36
|
+
} else {
|
|
37
|
+
writeToClipboardPolyfill(data);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
29
40
|
function hasNativeSelection(element) {
|
|
30
41
|
// When getSelection is called on an <iframe> that is not displayed Firefox will return null.
|
|
31
42
|
if (window.getSelection()?.toString()) {
|
|
@@ -45,24 +56,11 @@ function hasNativeSelection(element) {
|
|
|
45
56
|
* @requires useGridCsvExport (method)
|
|
46
57
|
* @requires useGridSelection (method)
|
|
47
58
|
*/
|
|
48
|
-
const useGridClipboard = apiRef => {
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const data = apiRef.current.getDataAsCsv({
|
|
54
|
-
includeHeaders: false,
|
|
55
|
-
delimiter: '\t'
|
|
56
|
-
});
|
|
57
|
-
if (navigator.clipboard) {
|
|
58
|
-
navigator.clipboard.writeText(data).catch(() => {
|
|
59
|
-
writeToClipboardPolyfill(data);
|
|
60
|
-
});
|
|
61
|
-
} else {
|
|
62
|
-
writeToClipboardPolyfill(data);
|
|
63
|
-
}
|
|
64
|
-
}, [apiRef]);
|
|
65
|
-
const handleKeydown = React.useCallback(event => {
|
|
59
|
+
const useGridClipboard = (apiRef, props) => {
|
|
60
|
+
const ignoreValueFormatterProp = props.unstable_ignoreValueFormatterDuringExport;
|
|
61
|
+
const ignoreValueFormatter = (typeof ignoreValueFormatterProp === 'object' ? ignoreValueFormatterProp?.clipboardExport : ignoreValueFormatterProp) || false;
|
|
62
|
+
const clipboardCopyCellDelimiter = props.clipboardCopyCellDelimiter;
|
|
63
|
+
const handleCopy = React.useCallback(event => {
|
|
66
64
|
const isModifierKeyPressed = event.ctrlKey || event.metaKey;
|
|
67
65
|
// event.code === 'KeyC' is not enough as event.code assume a QWERTY keyboard layout which would
|
|
68
66
|
// be wrong with a Dvorak keyboard (as if pressing J).
|
|
@@ -74,12 +72,31 @@ const useGridClipboard = apiRef => {
|
|
|
74
72
|
if (hasNativeSelection(event.target)) {
|
|
75
73
|
return;
|
|
76
74
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
75
|
+
let textToCopy = '';
|
|
76
|
+
const selectedRows = apiRef.current.getSelectedRows();
|
|
77
|
+
if (selectedRows.size > 0) {
|
|
78
|
+
textToCopy = apiRef.current.getDataAsCsv({
|
|
79
|
+
includeHeaders: false,
|
|
80
|
+
// TODO: make it configurable
|
|
81
|
+
delimiter: clipboardCopyCellDelimiter
|
|
82
|
+
});
|
|
83
|
+
} else {
|
|
84
|
+
const focusedCell = (0, _gridFocusStateSelector.gridFocusCellSelector)(apiRef);
|
|
85
|
+
if (focusedCell) {
|
|
86
|
+
const cellParams = apiRef.current.getCellParams(focusedCell.id, focusedCell.field);
|
|
87
|
+
textToCopy = (0, _csvSerializer.serializeCellValue)(cellParams, {
|
|
88
|
+
delimiterCharacter: clipboardCopyCellDelimiter,
|
|
89
|
+
ignoreValueFormatter
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
textToCopy = apiRef.current.unstable_applyPipeProcessors('clipboardCopy', textToCopy);
|
|
94
|
+
if (textToCopy) {
|
|
95
|
+
copyToClipboard(textToCopy);
|
|
96
|
+
apiRef.current.publishEvent('clipboardCopy', textToCopy);
|
|
97
|
+
}
|
|
98
|
+
}, [apiRef, ignoreValueFormatter, clipboardCopyCellDelimiter]);
|
|
99
|
+
(0, _utils.useGridNativeEventListener)(apiRef, apiRef.current.rootElementRef, 'keydown', handleCopy);
|
|
100
|
+
(0, _utils.useGridApiOptionHandler)(apiRef, 'clipboardCopy', props.onClipboardCopy);
|
|
84
101
|
};
|
|
85
102
|
exports.useGridClipboard = useGridClipboard;
|
|
@@ -16,7 +16,6 @@ var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
|
|
|
16
16
|
var _gridRowsMetaSelector = require("../rows/gridRowsMetaSelector");
|
|
17
17
|
var _gridRowsUtils = require("../rows/gridRowsUtils");
|
|
18
18
|
var _gridColumnsUtils = require("../columns/gridColumnsUtils");
|
|
19
|
-
var _gridClasses = require("../../../constants/gridClasses");
|
|
20
19
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
21
20
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
22
21
|
const isTestEnvironment = process.env.NODE_ENV === 'test';
|
|
@@ -158,8 +157,7 @@ function useGridDimensions(apiRef, props) {
|
|
|
158
157
|
return Math.min(maximumPageSizeWithoutScrollBar, currentPage.rows.length);
|
|
159
158
|
}, [apiRef, props.pagination, props.paginationMode, props.getRowHeight, rowHeight]);
|
|
160
159
|
const computeSizeAndPublishResizeEvent = React.useCallback(() => {
|
|
161
|
-
const
|
|
162
|
-
const mainEl = rootEl?.querySelector(`.${_gridClasses.gridClasses.main}`);
|
|
160
|
+
const mainEl = apiRef.current.mainElementRef?.current;
|
|
163
161
|
if (!mainEl) {
|
|
164
162
|
return;
|
|
165
163
|
}
|
|
@@ -99,10 +99,14 @@ const useGridCellEditing = (apiRef, props) => {
|
|
|
99
99
|
}
|
|
100
100
|
} else if (params.isEditable) {
|
|
101
101
|
let reason;
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
const canStartEditing = apiRef.current.unstable_applyPipeProcessors('canStartEditing', true, {
|
|
103
|
+
event,
|
|
104
|
+
cellParams: params,
|
|
105
|
+
editMode: 'cell'
|
|
106
|
+
});
|
|
107
|
+
if (!canStartEditing) {
|
|
108
|
+
return;
|
|
104
109
|
}
|
|
105
|
-
|
|
106
110
|
if ((0, _keyboardUtils.isPrintableKey)(event)) {
|
|
107
111
|
reason = _gridEditCellParams.GridCellEditStartReasons.printableKeyDown;
|
|
108
112
|
} else if ((event.ctrlKey || event.metaKey) && event.key === 'v') {
|
|
@@ -152,10 +152,14 @@ const useGridRowEditing = (apiRef, props) => {
|
|
|
152
152
|
}
|
|
153
153
|
} else if (params.isEditable) {
|
|
154
154
|
let reason;
|
|
155
|
-
|
|
156
|
-
|
|
155
|
+
const canStartEditing = apiRef.current.unstable_applyPipeProcessors('canStartEditing', true, {
|
|
156
|
+
event,
|
|
157
|
+
cellParams: params,
|
|
158
|
+
editMode: 'row'
|
|
159
|
+
});
|
|
160
|
+
if (!canStartEditing) {
|
|
161
|
+
return;
|
|
157
162
|
}
|
|
158
|
-
|
|
159
163
|
if ((0, _keyboardUtils.isPrintableKey)(event)) {
|
|
160
164
|
reason = _gridRowParams.GridRowEditStartReasons.printableKeyDown;
|
|
161
165
|
} else if ((event.ctrlKey || event.metaKey) && event.key === 'v') {
|
|
@@ -4,9 +4,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.buildCSV = buildCSV;
|
|
7
|
+
exports.serializeCellValue = void 0;
|
|
7
8
|
var _colDef = require("../../../../colDef");
|
|
8
9
|
var _warning = require("../../../../utils/warning");
|
|
9
|
-
|
|
10
|
+
function sanitizeCellValue(value, delimiterCharacter) {
|
|
10
11
|
if (typeof value === 'string') {
|
|
11
12
|
const formattedValue = value.replace(/"/g, '""');
|
|
12
13
|
|
|
@@ -17,16 +18,48 @@ const serializeCellValue = (value, delimiterCharacter) => {
|
|
|
17
18
|
return formattedValue;
|
|
18
19
|
}
|
|
19
20
|
return value;
|
|
21
|
+
}
|
|
22
|
+
const serializeCellValue = (cellParams, options) => {
|
|
23
|
+
const {
|
|
24
|
+
delimiterCharacter,
|
|
25
|
+
ignoreValueFormatter
|
|
26
|
+
} = options;
|
|
27
|
+
let value;
|
|
28
|
+
if (ignoreValueFormatter) {
|
|
29
|
+
const columnType = cellParams.colDef.type;
|
|
30
|
+
if (columnType === 'number') {
|
|
31
|
+
value = String(cellParams.value);
|
|
32
|
+
} else if (columnType === 'date' || columnType === 'dateTime') {
|
|
33
|
+
value = cellParams.value?.toISOString();
|
|
34
|
+
} else if (typeof cellParams.value?.toString === 'function') {
|
|
35
|
+
value = cellParams.value.toString();
|
|
36
|
+
} else {
|
|
37
|
+
value = cellParams.value;
|
|
38
|
+
}
|
|
39
|
+
} else {
|
|
40
|
+
value = cellParams.formattedValue;
|
|
41
|
+
}
|
|
42
|
+
return sanitizeCellValue(value, delimiterCharacter);
|
|
20
43
|
};
|
|
44
|
+
exports.serializeCellValue = serializeCellValue;
|
|
21
45
|
const objectFormattedValueWarning = (0, _warning.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.']);
|
|
22
|
-
const serializeRow = (
|
|
46
|
+
const serializeRow = ({
|
|
47
|
+
id,
|
|
48
|
+
columns,
|
|
49
|
+
getCellParams,
|
|
50
|
+
delimiterCharacter,
|
|
51
|
+
ignoreValueFormatter
|
|
52
|
+
}) => columns.map(column => {
|
|
23
53
|
const cellParams = getCellParams(id, column.field);
|
|
24
54
|
if (process.env.NODE_ENV !== 'production') {
|
|
25
55
|
if (String(cellParams.formattedValue) === '[object Object]') {
|
|
26
56
|
objectFormattedValueWarning();
|
|
27
57
|
}
|
|
28
58
|
}
|
|
29
|
-
return serializeCellValue(cellParams
|
|
59
|
+
return serializeCellValue(cellParams, {
|
|
60
|
+
delimiterCharacter,
|
|
61
|
+
ignoreValueFormatter
|
|
62
|
+
});
|
|
30
63
|
});
|
|
31
64
|
function buildCSV(options) {
|
|
32
65
|
const {
|
|
@@ -34,12 +67,19 @@ function buildCSV(options) {
|
|
|
34
67
|
rowIds,
|
|
35
68
|
getCellParams,
|
|
36
69
|
delimiterCharacter,
|
|
37
|
-
includeHeaders
|
|
70
|
+
includeHeaders,
|
|
71
|
+
ignoreValueFormatter
|
|
38
72
|
} = options;
|
|
39
|
-
const CSVBody = rowIds.reduce((acc, id) => `${acc}${serializeRow(
|
|
73
|
+
const CSVBody = rowIds.reduce((acc, id) => `${acc}${serializeRow({
|
|
74
|
+
id,
|
|
75
|
+
columns,
|
|
76
|
+
getCellParams,
|
|
77
|
+
delimiterCharacter,
|
|
78
|
+
ignoreValueFormatter
|
|
79
|
+
}).join(delimiterCharacter)}\r\n`, '').trim();
|
|
40
80
|
if (!includeHeaders) {
|
|
41
81
|
return CSVBody;
|
|
42
82
|
}
|
|
43
|
-
const CSVHead = `${columns.filter(column => column.field !== _colDef.GRID_CHECKBOX_SELECTION_COL_DEF.field).map(column =>
|
|
83
|
+
const CSVHead = `${columns.filter(column => column.field !== _colDef.GRID_CHECKBOX_SELECTION_COL_DEF.field).map(column => sanitizeCellValue(column.headerName || column.field, delimiterCharacter)).join(delimiterCharacter)}\r\n`;
|
|
44
84
|
return `${CSVHead}${CSVBody}`.trim();
|
|
45
85
|
}
|
|
@@ -22,8 +22,10 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
22
22
|
* @requires useGridSelection (state)
|
|
23
23
|
* @requires useGridParamsApi (method)
|
|
24
24
|
*/
|
|
25
|
-
const useGridCsvExport = apiRef => {
|
|
25
|
+
const useGridCsvExport = (apiRef, props) => {
|
|
26
26
|
const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useGridCsvExport');
|
|
27
|
+
const ignoreValueFormatterProp = props.unstable_ignoreValueFormatterDuringExport;
|
|
28
|
+
const ignoreValueFormatter = (typeof ignoreValueFormatterProp === 'object' ? ignoreValueFormatterProp?.csvExport : ignoreValueFormatterProp) || false;
|
|
27
29
|
const getDataAsCsv = React.useCallback((options = {}) => {
|
|
28
30
|
logger.debug(`Get data as CSV`);
|
|
29
31
|
const exportedColumns = (0, _utils.getColumnsToExport)({
|
|
@@ -39,9 +41,10 @@ const useGridCsvExport = apiRef => {
|
|
|
39
41
|
rowIds: exportedRowIds,
|
|
40
42
|
getCellParams: apiRef.current.getCellParams,
|
|
41
43
|
delimiterCharacter: options.delimiter || ',',
|
|
42
|
-
includeHeaders: options.includeHeaders ?? true
|
|
44
|
+
includeHeaders: options.includeHeaders ?? true,
|
|
45
|
+
ignoreValueFormatter
|
|
43
46
|
});
|
|
44
|
-
}, [logger, apiRef]);
|
|
47
|
+
}, [logger, apiRef, ignoreValueFormatter]);
|
|
45
48
|
const exportDataAsCsv = React.useCallback(options => {
|
|
46
49
|
logger.debug(`Export data as CSV`);
|
|
47
50
|
const csv = getDataAsCsv(options);
|
|
@@ -308,9 +308,9 @@ const useGridFocus = (apiRef, props) => {
|
|
|
308
308
|
(0, _useGridApiMethod.useGridApiMethod)(apiRef, focusPrivateApi, 'private');
|
|
309
309
|
React.useEffect(() => {
|
|
310
310
|
const doc = (0, _utils.unstable_ownerDocument)(apiRef.current.rootElementRef.current);
|
|
311
|
-
doc.addEventListener('
|
|
311
|
+
doc.addEventListener('mouseup', handleDocumentClick);
|
|
312
312
|
return () => {
|
|
313
|
-
doc.removeEventListener('
|
|
313
|
+
doc.removeEventListener('mouseup', handleDocumentClick);
|
|
314
314
|
};
|
|
315
315
|
}, [apiRef, handleDocumentClick]);
|
|
316
316
|
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnHeaderBlur', handleBlur);
|
|
@@ -20,6 +20,7 @@ var _gridRowsSelector = require("../rows/gridRowsSelector");
|
|
|
20
20
|
var _focus = require("../focus");
|
|
21
21
|
var _gridColumnGroupsSelector = require("../columnGrouping/gridColumnGroupsSelector");
|
|
22
22
|
var _useGridSelector = require("../../utils/useGridSelector");
|
|
23
|
+
var _pipeProcessing = require("../../core/pipeProcessing");
|
|
23
24
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
24
25
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
25
26
|
function enrichPageRowsWithPinnedRows(apiRef, rows) {
|
|
@@ -458,6 +459,16 @@ const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
458
459
|
event.preventDefault();
|
|
459
460
|
}
|
|
460
461
|
}, [apiRef, currentPageRows, theme.direction, getRowIdFromIndex, goToCell, goToHeader]);
|
|
462
|
+
const checkIfCanStartEditing = React.useCallback((initialValue, {
|
|
463
|
+
event
|
|
464
|
+
}) => {
|
|
465
|
+
if (event.key === ' ') {
|
|
466
|
+
// Space scrolls to the last row
|
|
467
|
+
return false;
|
|
468
|
+
}
|
|
469
|
+
return initialValue;
|
|
470
|
+
}, []);
|
|
471
|
+
(0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'canStartEditing', checkIfCanStartEditing);
|
|
461
472
|
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnHeaderKeyDown', handleColumnHeaderKeyDown);
|
|
462
473
|
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnGroupHeaderKeyDown', handleColumnGroupHeaderKeyDown);
|
|
463
474
|
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'cellKeyDown', handleCellKeyDown);
|
package/node/index.js
CHANGED
package/node/internals/index.js
CHANGED
|
@@ -65,12 +65,14 @@ var _exportNames = {
|
|
|
65
65
|
useGridVirtualScroller: true,
|
|
66
66
|
getRenderableIndexes: true,
|
|
67
67
|
useGridVisibleRows: true,
|
|
68
|
+
getVisibleRows: true,
|
|
68
69
|
useGridInitializeState: true,
|
|
69
70
|
getColumnsToExport: true,
|
|
70
71
|
defaultGetRowsToExport: true,
|
|
71
72
|
createSelector: true,
|
|
72
73
|
unstable_resetCreateSelectorCache: true,
|
|
73
74
|
findParentElementFromClassName: true,
|
|
75
|
+
getActiveElement: true,
|
|
74
76
|
isNavigationKey: true,
|
|
75
77
|
clamp: true,
|
|
76
78
|
isDeepEqual: true,
|
|
@@ -79,7 +81,8 @@ var _exportNames = {
|
|
|
79
81
|
isObject: true,
|
|
80
82
|
buildWarning: true,
|
|
81
83
|
exportAs: true,
|
|
82
|
-
useGridPrivateApiContext: true
|
|
84
|
+
useGridPrivateApiContext: true,
|
|
85
|
+
serializeCellValue: true
|
|
83
86
|
};
|
|
84
87
|
Object.defineProperty(exports, "DATA_GRID_DEFAULT_SLOTS_COMPONENTS", {
|
|
85
88
|
enumerable: true,
|
|
@@ -213,6 +216,12 @@ Object.defineProperty(exports, "focusStateInitializer", {
|
|
|
213
216
|
return _useGridFocus.focusStateInitializer;
|
|
214
217
|
}
|
|
215
218
|
});
|
|
219
|
+
Object.defineProperty(exports, "getActiveElement", {
|
|
220
|
+
enumerable: true,
|
|
221
|
+
get: function () {
|
|
222
|
+
return _domUtils.getActiveElement;
|
|
223
|
+
}
|
|
224
|
+
});
|
|
216
225
|
Object.defineProperty(exports, "getColumnsToExport", {
|
|
217
226
|
enumerable: true,
|
|
218
227
|
get: function () {
|
|
@@ -237,6 +246,12 @@ Object.defineProperty(exports, "getTreeNodeDescendants", {
|
|
|
237
246
|
return _gridRowsUtils.getTreeNodeDescendants;
|
|
238
247
|
}
|
|
239
248
|
});
|
|
249
|
+
Object.defineProperty(exports, "getVisibleRows", {
|
|
250
|
+
enumerable: true,
|
|
251
|
+
get: function () {
|
|
252
|
+
return _useGridVisibleRows.getVisibleRows;
|
|
253
|
+
}
|
|
254
|
+
});
|
|
240
255
|
Object.defineProperty(exports, "gridAdditionalRowGroupsSelector", {
|
|
241
256
|
enumerable: true,
|
|
242
257
|
get: function () {
|
|
@@ -327,6 +342,12 @@ Object.defineProperty(exports, "rowsStateInitializer", {
|
|
|
327
342
|
return _useGridRows.rowsStateInitializer;
|
|
328
343
|
}
|
|
329
344
|
});
|
|
345
|
+
Object.defineProperty(exports, "serializeCellValue", {
|
|
346
|
+
enumerable: true,
|
|
347
|
+
get: function () {
|
|
348
|
+
return _csvSerializer.serializeCellValue;
|
|
349
|
+
}
|
|
350
|
+
});
|
|
330
351
|
Object.defineProperty(exports, "sortingStateInitializer", {
|
|
331
352
|
enumerable: true,
|
|
332
353
|
get: function () {
|
|
@@ -588,6 +609,7 @@ var _utils2 = require("../utils/utils");
|
|
|
588
609
|
var _warning = require("../utils/warning");
|
|
589
610
|
var _exportAs = require("../utils/exportAs");
|
|
590
611
|
var _useGridPrivateApiContext = require("../hooks/utils/useGridPrivateApiContext");
|
|
612
|
+
var _csvSerializer = require("../hooks/features/export/serializers/csvSerializer");
|
|
591
613
|
var _utils3 = require("./utils");
|
|
592
614
|
Object.keys(_utils3).forEach(function (key) {
|
|
593
615
|
if (key === "default" || key === "__esModule") return;
|