@mui/x-data-grid-premium 6.6.0 → 6.8.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.
Files changed (32) hide show
  1. package/CHANGELOG.md +147 -13
  2. package/DataGridPremium/DataGridPremium.js +1 -1
  3. package/DataGridPremium/useDataGridPremiumProps.js +6 -1
  4. package/hooks/features/aggregation/gridAggregationUtils.js +1 -6
  5. package/hooks/features/clipboard/useGridClipboardImport.js +2 -6
  6. package/hooks/features/rowGrouping/gridRowGroupingUtils.js +2 -1
  7. package/index.js +1 -1
  8. package/legacy/DataGridPremium/DataGridPremium.js +1 -1
  9. package/legacy/DataGridPremium/useDataGridPremiumProps.js +4 -1
  10. package/legacy/hooks/features/aggregation/gridAggregationUtils.js +1 -6
  11. package/legacy/hooks/features/clipboard/useGridClipboardImport.js +2 -6
  12. package/legacy/hooks/features/rowGrouping/gridRowGroupingUtils.js +2 -1
  13. package/legacy/index.js +1 -1
  14. package/legacy/utils/releaseInfo.js +1 -1
  15. package/models/dataGridPremiumProps.d.ts +1 -1
  16. package/modern/DataGridPremium/DataGridPremium.js +1 -1
  17. package/modern/DataGridPremium/useDataGridPremiumProps.js +6 -1
  18. package/modern/hooks/features/aggregation/gridAggregationUtils.js +1 -6
  19. package/modern/hooks/features/clipboard/useGridClipboardImport.js +2 -6
  20. package/modern/hooks/features/rowGrouping/gridRowGroupingUtils.js +2 -1
  21. package/modern/index.js +1 -1
  22. package/modern/utils/releaseInfo.js +1 -1
  23. package/node/DataGridPremium/DataGridPremium.js +1 -1
  24. package/node/DataGridPremium/useDataGridPremiumProps.js +6 -1
  25. package/node/hooks/features/aggregation/gridAggregationUtils.js +1 -6
  26. package/node/hooks/features/clipboard/useGridClipboardImport.js +2 -6
  27. package/node/hooks/features/rowGrouping/gridRowGroupingUtils.js +2 -1
  28. package/node/index.js +1 -1
  29. package/node/utils/releaseInfo.js +1 -1
  30. package/package.json +3 -3
  31. package/themeAugmentation/overrides.d.ts +1 -1
  32. package/utils/releaseInfo.js +1 -1
package/CHANGELOG.md CHANGED
@@ -3,6 +3,140 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 6.8.0
7
+
8
+ _Jun 16, 2023_
9
+
10
+ We'd like to offer a big thanks to the 13 contributors who made this release possible. Here are some highlights ✨:
11
+
12
+ - 🌍 Add Greek (el-GR) locale on Pickers and improve on Data Grid
13
+ - 🚅 Performance improvements
14
+ - 🐞 Bugfixes
15
+ - 📚 Documentation improvements
16
+
17
+ ### `@mui/x-data-grid@6.8.0` / `@mui/x-data-grid-pro@6.8.0` / `@mui/x-data-grid-premium@6.8.0`
18
+
19
+ #### Changes
20
+
21
+ - [DataGrid] Add missing styles to `overridesResolver` (#9248) @mrmuhammadali
22
+ - [DataGrid] Keep column header menu icon always visible on touch devices (#9076) @cherniavskii
23
+ - [DataGrid] Correct the type for single digit edited number value (#9282) @MBilalShafi
24
+ - [DataGrid] Correct the type for single digit edited number for row edit (#9348) @MBilalShafi
25
+ - [DataGrid] Filtering performance: cache values (#9284) @romgrk
26
+ - [DataGrid] Fix tabbing between `actions` cells in edit mode (#9321) @md250721
27
+ - [DataGrid] Make autocompletion work for `GridColDef['type']` (#9320) @cherniavskii
28
+ - [DataGrid] Polish shortcut logic (#9220) @oliviertassinari
29
+ - [DataGrid] Row reordering fix for different row heights (#7006) @yaredtsy
30
+ - [DataGrid] Scroll performance improvements (#9037) @romgrk
31
+ - [l10n] Improve Greek (el-GR) locale (#9292) @clytras
32
+
33
+ ### `@mui/x-date-pickers@6.8.0` / `@mui/x-date-pickers-pro@6.8.0`
34
+
35
+ #### Changes
36
+
37
+ - [l10n] Add Greek (el-GR) locale (#9293) @clytras
38
+ - [pickers] Add a `referenceDate` prop on `DateCalendar`, `MonthCalendar` and `YearCalendar` (#9260) @flaviendelangle
39
+ - [pickers] Close the calendar when a shortcut is selected (#9080) @flaviendelangle
40
+ - [pickers] Fix disabling for digital clock (#9300) @alexfauquette
41
+
42
+ ### Docs
43
+
44
+ - [docs] Add header filters to the popular features demo (#9069) @MBilalShafi
45
+ - [docs] Fix `Date Calendar` dynamic data demo (#9290) @benzler
46
+ - [docs] Fix Data Grid header filter link (#9225) @oliviertassinari
47
+ - [docs] Fix missing docs version warning (#9221) @oliviertassinari
48
+ - [docs] Improve Chart overview (#9333) @oliviertassinari
49
+ - [docs] Improve Next.js license installation guide (#8975) @oliviertassinari
50
+ - [docs] Link pagination documentation to the migration guide (#9296) @MBilalShafi
51
+ - [docs] One step toward components -> slots (#9251) @oliviertassinari
52
+ - [docs] Improve and reorganize sections on editing page (#8431) @joserodolfofreitas
53
+ - [docs] Add clipboard paste to popular features demo (#9029) @cherniavskii
54
+
55
+ ### Core
56
+
57
+ - [core] Polish event name (#9336) @oliviertassinari
58
+ - [core] Re-enable `Argos` CI step (#9301) @LukasTy
59
+ - [core] Upgrade Node.js to v18 on CircleCI, CodeSandbox and Netlify (#9319) @ZeeshanTamboli
60
+ - [core] Upgrade Node.js v18 for l10n GitHub CI (#9355) @ZeeshanTamboli
61
+ - [charts] Add demonstration pages based on Recharts demo (#9175) @alexfauquette
62
+ - [charts] Add legend (#9024) @alexfauquette
63
+ - [charts] Complete the docs to introduce charts (#9153) @alexfauquette
64
+ - [charts] Manage elements highlights (#9242) @alexfauquette
65
+ - [charts] Prefix subcomponents with `Charts` (#9314) @alexfauquette
66
+ - [license] Improve annual license expiration message (#9135) @oliviertassinari
67
+
68
+ ## 6.7.0
69
+
70
+ _Jun 9, 2023_
71
+
72
+ We'd like to offer a big thanks to the 12 contributors who made this release possible. Here are some highlights ✨:
73
+
74
+ - 🎁 Improve the default `format` prop value on the pickers.
75
+
76
+ Here are a few examples:
77
+
78
+ ```tsx
79
+ <TimePicker views={['hours', 'minutes', 'seconds']} ampm />
80
+ // Format before v6.7.0: `hh:mm aa`
81
+ // Format after v6.7.0: `hh:mm:ss aa`
82
+
83
+ <DatePicker views={['year']} />
84
+ // Format before v6.7.0: `MM/DD/YYYY`
85
+ // Format after v6.7.0: `YYYY`
86
+
87
+ <DateTimePicker views={['day', 'hours', 'minutes']} ampm />
88
+ // Format before v6.7.0: `MM/DD/YYYY hh:mm aa`
89
+ // Format after v6.7.0: `DD hh:mm aa`
90
+ ```
91
+
92
+ - 🌍 Add Romanian (ro-RO) locale on the pickers
93
+ - 🌍 Improve German (de-DE) locale on the pickers
94
+ - 🌍 Improve Czech (cs-CZ), German (de-DE) and Turkish (tr-TR) locales on the data grid
95
+ - 🚀 Performance improvements
96
+ - 🐞 Bugfixes
97
+ - 📚 Documentation improvements
98
+
99
+ ### `@mui/x-data-grid@v6.7.0` / `@mui/x-data-grid-pro@v6.7.0` / `@mui/x-data-grid-premium@v6.7.0`
100
+
101
+ #### Changes
102
+
103
+ - [DataGrid] Allow overflowing grid root element (#9179) @cherniavskii
104
+ - [DataGrid] Fix module augmentation error when using `@mui/lab` (#9235) @cherniavskii
105
+ - [DataGrid] Fix row with ids matching `Object` prototype (#9265) @romgrk
106
+ - [DataGrid] Fix `sortModel` and `filterModel` resetting when columns change (#9239) @alexgonch
107
+ - [DataGrid] Improve grouping performance for large datasets (#9200) @romgrk
108
+ - [DataGrid] Increase threshold to trigger memory leak warning (#9263) @m4theushw
109
+ - [DataGrid] Update data grid migration guide to include updated type (#9272) @MBilalShafi
110
+ - [DataGridPro] Improve header filter menu visuals (#9181) @MBilalShafi
111
+ - [DataGridPremium] Remove last line break on clipboard paste (#9163) @cherniavskii
112
+ - [l10n] Improve Czech (cs-CZ) locale (#9266) @MartinSkarpa
113
+ - [l10n] Improve German (de-DE) locale (#9259) @ximex
114
+ - [l10n] Improve Turkish (tr-TR) locale (#9237) @MCErtan
115
+
116
+ ### `@mui/x-date-pickers@v6.7.0` / `@mui/x-date-pickers-pro@v6.7.0`
117
+
118
+ #### Changes
119
+
120
+ - [l10n] Add Romanian (ro-RO) locale (#9257) @ximex
121
+ - [l10n] Improve German (de-DE) locale (#9258) @ximex
122
+ - [pickers] Apply dynamic default format depending on views for all desktop and mobile pickers (#9126) @flaviendelangle
123
+ - [pickers] Update `DateRangePickerDay` props JSDoc (#9191) @stevus
124
+
125
+ ### Docs
126
+
127
+ - [docs] Fix missing props on the `GridFilterPanel` API page (#9180) @cherniavskii
128
+ - [docs] Fix overview page typo (#9230) @LukasTy
129
+ - [docs] Fix version redirect (#9273) @alexfauquette
130
+
131
+ ### Core
132
+
133
+ - [core] Temporarily remove the Argos upload on the regression testing (#9267) @flaviendelangle
134
+ - [charts] Add clip-path to avoid charts overflow (#9012) @alexfauquette
135
+ - [charts] Add style customization on bar (#8935) @alexfauquette
136
+ - [charts] Enforce axis `min`/`max` over the `nice()` method (#9189) @alexfauquette
137
+ - [charts] Improve axis label and ticks label alignements (#9190) @alexfauquette
138
+ - [charts] Simplify the switch between responsive and fix dimensions (#9151) @alexfauquette
139
+
6
140
  ## 6.6.0
7
141
 
8
142
  _Jun 1, 2023_
@@ -11,7 +145,7 @@ We'd like to offer a big thanks to the 15 contributors who made this release pos
11
145
 
12
146
  - 🚀 New date time picking UI on [`DesktopDateTimePicker`](https://mui.com/x/react-date-pickers/date-time-picker/)
13
147
 
14
- <img src="https://user-images.githubusercontent.com/4941090/242533399-2b106390-8158-4aba-9ca4-b621c6310977.gif" width="628" />
148
+ <img src="https://github.com/mui/mui-x/assets/3165635/4e1fe9f9-03eb-4f23-99dd-80212b21fb23" width="840" height="506" />
15
149
 
16
150
  - 🚀 Performance improvements
17
151
  - 🐞 Bugfixes
@@ -79,7 +213,7 @@ We'd like to offer a big thanks to the 15 contributors who made this release pos
79
213
  - [charts] Manage series stacking (#8888) @alexfauquette
80
214
  - [license] List side effects in the license package (#9092) @cherniavskii
81
215
 
82
- ## v6.5.0
216
+ ## 6.5.0
83
217
 
84
218
  _May 19, 2023_
85
219
 
@@ -87,9 +221,9 @@ We'd like to offer a big thanks to the 10 contributors who made this release pos
87
221
 
88
222
  - 💫 Introduce filtering on column headers for `DataGridPro` and `DataGridPremium`:
89
223
 
90
- https://github.com/mui/mui-x/assets/12609561/c4c2bfec-59cf-4cab-932d-dc1983081de9
224
+ <img src="https://github.com/mui/mui-x/releases/download/v6.5.0/recording.gif" width="840" height="506" />
91
225
 
92
- See [the documentation](https://mui.com/x/react-data-grid/filtering/#header-filters) for more information
226
+ See [the documentation](https://mui.com/x/react-data-grid/filtering/header-filters/) for more information
93
227
 
94
228
  - 🌍 Improve Hebrew (he-IL) and Czech (cs-CZ) locales
95
229
  - 📝 Support for editing on pinned rows
@@ -135,7 +269,7 @@ We'd like to offer a big thanks to the 10 contributors who made this release pos
135
269
  - [DataGrid] Memoize root props for better performance (#8942) @romgrk
136
270
  - [test] Skip flaky unit tests in JSDOM (#8994) @cherniavskii
137
271
 
138
- ## v6.4.0
272
+ ## 6.4.0
139
273
 
140
274
  _May 12, 2023_
141
275
 
@@ -4168,7 +4302,7 @@ We'd like to offer a big thanks to the 10 contributors who made this release pos
4168
4302
  - [docs] Revise and split up "Overview" page into "Introduction" (#4692) @samuelsycamore
4169
4303
  - [docs] Use `useKeepGroupedColumnsHiddren` from the grid package on remaining demo (#5382) @flaviendelangle
4170
4304
 
4171
- ## v5.12.3
4305
+ ## 5.12.3
4172
4306
 
4173
4307
  _Jun 23, 2022_
4174
4308
 
@@ -4219,7 +4353,7 @@ We'd like to offer a big thanks to the 8 contributors who made this release poss
4219
4353
  - [test] Throw if date adapter is not found (#5289) @cherniavskii
4220
4354
  - [test] Use mock for `ResizeObserver` (#5215) @m4theushw
4221
4355
 
4222
- ## v5.12.2
4356
+ ## 5.12.2
4223
4357
 
4224
4358
  _Jun 16, 2022_
4225
4359
 
@@ -4262,7 +4396,7 @@ We'd like to offer a big thanks to the 7 contributors who made this release poss
4262
4396
  - [core] Fix `GridColTypeDef` usage in demo (#5197) @cherniavskii
4263
4397
  - [test] Add `waitFor` before asserting height (#5203) @m4theushw
4264
4398
 
4265
- ## v5.12.1
4399
+ ## 5.12.1
4266
4400
 
4267
4401
  _Jun 9, 2022_
4268
4402
 
@@ -4319,7 +4453,7 @@ We'd like to offer a big thanks to the 10 contributors who made this release pos
4319
4453
  - [test] Fix dynamic row height test failing on Chrome (#5147) @m4theushw
4320
4454
  - [test] Remove delay on server demo for regression tests (#5131) @alexfauquette
4321
4455
 
4322
- ## v5.12.0
4456
+ ## 5.12.0
4323
4457
 
4324
4458
  _May 31, 2022_
4325
4459
 
@@ -4400,7 +4534,7 @@ We'd like to offer a big thanks to the 15 contributors who made this release pos
4400
4534
  - [test] Skip Safari and Firefox on broken tests (#4994) @alexfauquette
4401
4535
  - [test] Make argos screenshots stable (#5061) @m4theushw
4402
4536
 
4403
- ## v5.11.1
4537
+ ## 5.11.1
4404
4538
 
4405
4539
  _May 20, 2022_
4406
4540
 
@@ -4492,7 +4626,7 @@ We'd like to offer a big thanks to the 6 contributors who made this release poss
4492
4626
  - [core] Simplify rows cache management (#4933) @flaviendelangle
4493
4627
  - [core] Use internal icons for quick filter (#4912) @alexfauquette
4494
4628
 
4495
- ## v5.11.0
4629
+ ## 5.11.0
4496
4630
 
4497
4631
  _May 13, 2022_
4498
4632
 
@@ -4636,7 +4770,7 @@ We'd like to offer a big thanks to the 15 contributors who made this release pos
4636
4770
  - [test] Reset cleanup tracking on Karma tests (#4679) @m4theushw
4637
4771
  - [test] Restore `sinon` sandbox after each `karma` test (#4689) @m4theushw
4638
4772
 
4639
- ## v5.10.0
4773
+ ## 5.10.0
4640
4774
 
4641
4775
  _Apr 25, 2022_
4642
4776
 
@@ -4672,7 +4806,7 @@ We'd like to offer a big thanks to the 6 contributors who made this release poss
4672
4806
  - [core] Fix the README of the X packages (#4590) @flaviendelangle
4673
4807
  - [test] Fix test to not depend on screen resolution (#4587) @m4theushw
4674
4808
 
4675
- ## v5.9.0
4809
+ ## 5.9.0
4676
4810
 
4677
4811
  _Apr 14, 2022_
4678
4812
 
@@ -940,7 +940,7 @@ process.env.NODE_ENV !== "production" ? DataGridPremiumRaw.propTypes = {
940
940
  * The function is used to split the pasted text into rows and cells.
941
941
  * @param {string} text The text pasted from the clipboard.
942
942
  * @returns {string[][] | null} A 2D array of strings. The first dimension is the rows, the second dimension is the columns.
943
- * @default `(text) => text.split(/\r\n|\n|\r/).map((row) => row.split('\t'))`
943
+ * @default `(pastedText) => { const text = pastedText.replace(/\r?\n$/, ''); return text.split(/\r\n|\n|\r/).map((row) => row.split('\t')); }`
944
944
  */
945
945
  unstable_splitClipboardPastedText: PropTypes.func
946
946
  } : void 0;
@@ -18,7 +18,12 @@ export const DATA_GRID_PREMIUM_PROPS_DEFAULT_VALUES = _extends({}, DATA_GRID_PRO
18
18
  aggregationRowsScope: 'filtered',
19
19
  getAggregationPosition: groupNode => groupNode.depth === -1 ? 'footer' : 'inline',
20
20
  disableClipboardPaste: false,
21
- unstable_splitClipboardPastedText: text => text.split(/\r\n|\n|\r/).map(row => row.split('\t'))
21
+ unstable_splitClipboardPastedText: pastedText => {
22
+ // Excel on Windows adds an empty line break at the end of the copied text.
23
+ // See https://github.com/mui/mui-x/issues/9103
24
+ const text = pastedText.replace(/\r?\n$/, '');
25
+ return text.split(/\r\n|\n|\r/).map(row => row.split('\t'));
26
+ }
22
27
  });
23
28
  const defaultSlots = uncapitalizeObjectKeys(DATA_GRID_PREMIUM_DEFAULT_SLOTS_COMPONENTS);
24
29
  export const useDataGridPremiumProps = inProps => {
@@ -92,12 +92,7 @@ export const addFooterRows = ({
92
92
  depth: groupNode ? groupNode.depth + 1 : 0,
93
93
  type: 'footer'
94
94
  };
95
- insertNodeInTree({
96
- previousTree: null,
97
- node: footerNode,
98
- tree: newGroupingParams.tree,
99
- treeDepths: newGroupingParams.treeDepths
100
- });
95
+ insertNodeInTree(footerNode, newGroupingParams.tree, newGroupingParams.treeDepths, null);
101
96
  }
102
97
  } else if (groupNode.footerId != null) {
103
98
  removeNodeFromTree({
@@ -4,7 +4,7 @@ import { GRID_CHECKBOX_SELECTION_FIELD, gridFocusCellSelector, gridVisibleColumn
4
4
  import { buildWarning, getRowIdFromRowModel, getActiveElement, useGridRegisterPipeProcessor } from '@mui/x-data-grid/internals';
5
5
  import { GRID_DETAIL_PANEL_TOGGLE_FIELD, GRID_REORDER_COL_DEF } from '@mui/x-data-grid-pro';
6
6
  import { unstable_debounce as debounce } from '@mui/utils';
7
- const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see http://mui.com/components/data-grid/editing/#persistence.'], 'error');
7
+ const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see http://mui.com/components/data-grid/editing/#server-side-persistence.'], 'error');
8
8
  const columnFieldsToExcludeFromPaste = [GRID_CHECKBOX_SELECTION_FIELD, GRID_REORDER_COL_DEF.field, GRID_DETAIL_PANEL_TOGGLE_FIELD];
9
9
 
10
10
  // Batches rows that are updated during clipboard paste to reduce `updateRows` calls
@@ -239,11 +239,7 @@ function defaultPasteResolver({
239
239
  });
240
240
  }
241
241
  function isPasteShortcut(event) {
242
- const isModifierKeyPressed = event.ctrlKey || event.metaKey || event.altKey;
243
- if (event.code === 'KeyV' && isModifierKeyPressed) {
244
- return true;
245
- }
246
- return false;
242
+ return (event.ctrlKey || event.metaKey) && event.key === 'v';
247
243
  }
248
244
  export const useGridClipboardImport = (apiRef, props) => {
249
245
  var _ref, _props$experimentalFe, _apiRef$current$rootE;
@@ -42,6 +42,7 @@ export const filterRowTreeFromGroupingColumns = params => {
42
42
  } = params;
43
43
  const filteredRowsLookup = {};
44
44
  const filteredDescendantCountLookup = {};
45
+ const filterCache = {};
45
46
  const filterTreeNode = (node, areAncestorsExpanded, ancestorsResults) => {
46
47
  let isPassingFiltering = false;
47
48
  let filterResults = {
@@ -68,7 +69,7 @@ export const filterRowTreeFromGroupingColumns = params => {
68
69
  isPassingFiltering = filteredDescendantCount > 0;
69
70
  } else {
70
71
  const allResults = [...ancestorsResults, filterResults];
71
- isPassingFiltering = passFilterLogic(allResults.map(result => result.passingFilterItems), allResults.map(result => result.passingQuickFilterValues), filterModel, params.apiRef);
72
+ isPassingFiltering = passFilterLogic(allResults.map(result => result.passingFilterItems), allResults.map(result => result.passingQuickFilterValues), filterModel, params.apiRef, filterCache);
72
73
  }
73
74
  }
74
75
  filteredRowsLookup[node.id] = isPassingFiltering;
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-premium v6.6.0
2
+ * @mui/x-data-grid-premium v6.8.0
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -940,7 +940,7 @@ process.env.NODE_ENV !== "production" ? DataGridPremiumRaw.propTypes = {
940
940
  * The function is used to split the pasted text into rows and cells.
941
941
  * @param {string} text The text pasted from the clipboard.
942
942
  * @returns {string[][] | null} A 2D array of strings. The first dimension is the rows, the second dimension is the columns.
943
- * @default `(text) => text.split(/\r\n|\n|\r/).map((row) => row.split('\t'))`
943
+ * @default `(pastedText) => { const text = pastedText.replace(/\r?\n$/, ''); return text.split(/\r\n|\n|\r/).map((row) => row.split('\t')); }`
944
944
  */
945
945
  unstable_splitClipboardPastedText: PropTypes.func
946
946
  } : void 0;
@@ -21,7 +21,10 @@ export var DATA_GRID_PREMIUM_PROPS_DEFAULT_VALUES = _extends({}, DATA_GRID_PRO_P
21
21
  return groupNode.depth === -1 ? 'footer' : 'inline';
22
22
  },
23
23
  disableClipboardPaste: false,
24
- unstable_splitClipboardPastedText: function unstable_splitClipboardPastedText(text) {
24
+ unstable_splitClipboardPastedText: function unstable_splitClipboardPastedText(pastedText) {
25
+ // Excel on Windows adds an empty line break at the end of the copied text.
26
+ // See https://github.com/mui/mui-x/issues/9103
27
+ var text = pastedText.replace(/\r?\n$/, '');
25
28
  return text.split(/\r\n|\n|\r/).map(function (row) {
26
29
  return row.split('\t');
27
30
  });
@@ -100,12 +100,7 @@ export var addFooterRows = function addFooterRows(_ref6) {
100
100
  depth: groupNode ? groupNode.depth + 1 : 0,
101
101
  type: 'footer'
102
102
  };
103
- insertNodeInTree({
104
- previousTree: null,
105
- node: footerNode,
106
- tree: newGroupingParams.tree,
107
- treeDepths: newGroupingParams.treeDepths
108
- });
103
+ insertNodeInTree(footerNode, newGroupingParams.tree, newGroupingParams.treeDepths, null);
109
104
  }
110
105
  } else if (groupNode.footerId != null) {
111
106
  removeNodeFromTree({
@@ -8,7 +8,7 @@ import { GRID_CHECKBOX_SELECTION_FIELD, gridFocusCellSelector, gridVisibleColumn
8
8
  import { buildWarning, getRowIdFromRowModel, getActiveElement, useGridRegisterPipeProcessor } from '@mui/x-data-grid/internals';
9
9
  import { GRID_DETAIL_PANEL_TOGGLE_FIELD, GRID_REORDER_COL_DEF } from '@mui/x-data-grid-pro';
10
10
  import { unstable_debounce as debounce } from '@mui/utils';
11
- var missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see http://mui.com/components/data-grid/editing/#persistence.'], 'error');
11
+ var missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see http://mui.com/components/data-grid/editing/#server-side-persistence.'], 'error');
12
12
  var columnFieldsToExcludeFromPaste = [GRID_CHECKBOX_SELECTION_FIELD, GRID_REORDER_COL_DEF.field, GRID_DETAIL_PANEL_TOGGLE_FIELD];
13
13
 
14
14
  // Batches rows that are updated during clipboard paste to reduce `updateRows` calls
@@ -284,11 +284,7 @@ function defaultPasteResolver(_ref3) {
284
284
  });
285
285
  }
286
286
  function isPasteShortcut(event) {
287
- var isModifierKeyPressed = event.ctrlKey || event.metaKey || event.altKey;
288
- if (event.code === 'KeyV' && isModifierKeyPressed) {
289
- return true;
290
- }
291
- return false;
287
+ return (event.ctrlKey || event.metaKey) && event.key === 'v';
292
288
  }
293
289
  export var useGridClipboardImport = function useGridClipboardImport(apiRef, props) {
294
290
  var _ref4, _props$experimentalFe, _apiRef$current$rootE;
@@ -43,6 +43,7 @@ export var filterRowTreeFromGroupingColumns = function filterRowTreeFromGrouping
43
43
  filterModel = params.filterModel;
44
44
  var filteredRowsLookup = {};
45
45
  var filteredDescendantCountLookup = {};
46
+ var filterCache = {};
46
47
  var filterTreeNode = function filterTreeNode(node, areAncestorsExpanded, ancestorsResults) {
47
48
  var isPassingFiltering = false;
48
49
  var filterResults = {
@@ -75,7 +76,7 @@ export var filterRowTreeFromGroupingColumns = function filterRowTreeFromGrouping
75
76
  return result.passingFilterItems;
76
77
  }), allResults.map(function (result) {
77
78
  return result.passingQuickFilterValues;
78
- }), filterModel, params.apiRef);
79
+ }), filterModel, params.apiRef, filterCache);
79
80
  }
80
81
  }
81
82
  filteredRowsLookup[node.id] = isPassingFiltering;
package/legacy/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-premium v6.6.0
2
+ * @mui/x-data-grid-premium v6.8.0
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -1,6 +1,6 @@
1
1
  import { ponyfillGlobal } from '@mui/utils';
2
2
  export var getReleaseInfo = function getReleaseInfo() {
3
- var releaseInfo = "MTY4NTU3MDQwMDAwMA==";
3
+ var releaseInfo = "MTY4Njg2MjgwMDAwMA==";
4
4
  if (process.env.NODE_ENV !== 'production') {
5
5
  // A simple hack to set the value in the test environment (has no build step).
6
6
  // eslint-disable-next-line no-useless-concat
@@ -93,7 +93,7 @@ export interface DataGridPremiumPropsWithDefaultValue extends DataGridProPropsWi
93
93
  * The function is used to split the pasted text into rows and cells.
94
94
  * @param {string} text The text pasted from the clipboard.
95
95
  * @returns {string[][] | null} A 2D array of strings. The first dimension is the rows, the second dimension is the columns.
96
- * @default `(text) => text.split(/\r\n|\n|\r/).map((row) => row.split('\t'))`
96
+ * @default `(pastedText) => { const text = pastedText.replace(/\r?\n$/, ''); return text.split(/\r\n|\n|\r/).map((row) => row.split('\t')); }`
97
97
  */
98
98
  unstable_splitClipboardPastedText: (text: string) => string[][] | null;
99
99
  }
@@ -940,7 +940,7 @@ process.env.NODE_ENV !== "production" ? DataGridPremiumRaw.propTypes = {
940
940
  * The function is used to split the pasted text into rows and cells.
941
941
  * @param {string} text The text pasted from the clipboard.
942
942
  * @returns {string[][] | null} A 2D array of strings. The first dimension is the rows, the second dimension is the columns.
943
- * @default `(text) => text.split(/\r\n|\n|\r/).map((row) => row.split('\t'))`
943
+ * @default `(pastedText) => { const text = pastedText.replace(/\r?\n$/, ''); return text.split(/\r\n|\n|\r/).map((row) => row.split('\t')); }`
944
944
  */
945
945
  unstable_splitClipboardPastedText: PropTypes.func
946
946
  } : void 0;
@@ -18,7 +18,12 @@ export const DATA_GRID_PREMIUM_PROPS_DEFAULT_VALUES = _extends({}, DATA_GRID_PRO
18
18
  aggregationRowsScope: 'filtered',
19
19
  getAggregationPosition: groupNode => groupNode.depth === -1 ? 'footer' : 'inline',
20
20
  disableClipboardPaste: false,
21
- unstable_splitClipboardPastedText: text => text.split(/\r\n|\n|\r/).map(row => row.split('\t'))
21
+ unstable_splitClipboardPastedText: pastedText => {
22
+ // Excel on Windows adds an empty line break at the end of the copied text.
23
+ // See https://github.com/mui/mui-x/issues/9103
24
+ const text = pastedText.replace(/\r?\n$/, '');
25
+ return text.split(/\r\n|\n|\r/).map(row => row.split('\t'));
26
+ }
22
27
  });
23
28
  const defaultSlots = uncapitalizeObjectKeys(DATA_GRID_PREMIUM_DEFAULT_SLOTS_COMPONENTS);
24
29
  export const useDataGridPremiumProps = inProps => {
@@ -92,12 +92,7 @@ export const addFooterRows = ({
92
92
  depth: groupNode ? groupNode.depth + 1 : 0,
93
93
  type: 'footer'
94
94
  };
95
- insertNodeInTree({
96
- previousTree: null,
97
- node: footerNode,
98
- tree: newGroupingParams.tree,
99
- treeDepths: newGroupingParams.treeDepths
100
- });
95
+ insertNodeInTree(footerNode, newGroupingParams.tree, newGroupingParams.treeDepths, null);
101
96
  }
102
97
  } else if (groupNode.footerId != null) {
103
98
  removeNodeFromTree({
@@ -4,7 +4,7 @@ import { GRID_CHECKBOX_SELECTION_FIELD, gridFocusCellSelector, gridVisibleColumn
4
4
  import { buildWarning, getRowIdFromRowModel, getActiveElement, useGridRegisterPipeProcessor } from '@mui/x-data-grid/internals';
5
5
  import { GRID_DETAIL_PANEL_TOGGLE_FIELD, GRID_REORDER_COL_DEF } from '@mui/x-data-grid-pro';
6
6
  import { unstable_debounce as debounce } from '@mui/utils';
7
- const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see http://mui.com/components/data-grid/editing/#persistence.'], 'error');
7
+ const missingOnProcessRowUpdateErrorWarning = buildWarning(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see http://mui.com/components/data-grid/editing/#server-side-persistence.'], 'error');
8
8
  const columnFieldsToExcludeFromPaste = [GRID_CHECKBOX_SELECTION_FIELD, GRID_REORDER_COL_DEF.field, GRID_DETAIL_PANEL_TOGGLE_FIELD];
9
9
 
10
10
  // Batches rows that are updated during clipboard paste to reduce `updateRows` calls
@@ -238,11 +238,7 @@ function defaultPasteResolver({
238
238
  });
239
239
  }
240
240
  function isPasteShortcut(event) {
241
- const isModifierKeyPressed = event.ctrlKey || event.metaKey || event.altKey;
242
- if (event.code === 'KeyV' && isModifierKeyPressed) {
243
- return true;
244
- }
245
- return false;
241
+ return (event.ctrlKey || event.metaKey) && event.key === 'v';
246
242
  }
247
243
  export const useGridClipboardImport = (apiRef, props) => {
248
244
  const processRowUpdate = props.processRowUpdate;
@@ -42,6 +42,7 @@ export const filterRowTreeFromGroupingColumns = params => {
42
42
  } = params;
43
43
  const filteredRowsLookup = {};
44
44
  const filteredDescendantCountLookup = {};
45
+ const filterCache = {};
45
46
  const filterTreeNode = (node, areAncestorsExpanded, ancestorsResults) => {
46
47
  let isPassingFiltering = false;
47
48
  let filterResults = {
@@ -68,7 +69,7 @@ export const filterRowTreeFromGroupingColumns = params => {
68
69
  isPassingFiltering = filteredDescendantCount > 0;
69
70
  } else {
70
71
  const allResults = [...ancestorsResults, filterResults];
71
- isPassingFiltering = passFilterLogic(allResults.map(result => result.passingFilterItems), allResults.map(result => result.passingQuickFilterValues), filterModel, params.apiRef);
72
+ isPassingFiltering = passFilterLogic(allResults.map(result => result.passingFilterItems), allResults.map(result => result.passingQuickFilterValues), filterModel, params.apiRef, filterCache);
72
73
  }
73
74
  }
74
75
  filteredRowsLookup[node.id] = isPassingFiltering;
package/modern/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-premium v6.6.0
2
+ * @mui/x-data-grid-premium v6.8.0
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -1,6 +1,6 @@
1
1
  import { ponyfillGlobal } from '@mui/utils';
2
2
  export const getReleaseInfo = () => {
3
- const releaseInfo = "MTY4NTU3MDQwMDAwMA==";
3
+ const releaseInfo = "MTY4Njg2MjgwMDAwMA==";
4
4
  if (process.env.NODE_ENV !== 'production') {
5
5
  // A simple hack to set the value in the test environment (has no build step).
6
6
  // eslint-disable-next-line no-useless-concat
@@ -949,7 +949,7 @@ process.env.NODE_ENV !== "production" ? DataGridPremiumRaw.propTypes = {
949
949
  * The function is used to split the pasted text into rows and cells.
950
950
  * @param {string} text The text pasted from the clipboard.
951
951
  * @returns {string[][] | null} A 2D array of strings. The first dimension is the rows, the second dimension is the columns.
952
- * @default `(text) => text.split(/\r\n|\n|\r/).map((row) => row.split('\t'))`
952
+ * @default `(pastedText) => { const text = pastedText.replace(/\r?\n$/, ''); return text.split(/\r\n|\n|\r/).map((row) => row.split('\t')); }`
953
953
  */
954
954
  unstable_splitClipboardPastedText: _propTypes.default.func
955
955
  } : void 0;
@@ -26,7 +26,12 @@ const DATA_GRID_PREMIUM_PROPS_DEFAULT_VALUES = (0, _extends2.default)({}, _xData
26
26
  aggregationRowsScope: 'filtered',
27
27
  getAggregationPosition: groupNode => groupNode.depth === -1 ? 'footer' : 'inline',
28
28
  disableClipboardPaste: false,
29
- unstable_splitClipboardPastedText: text => text.split(/\r\n|\n|\r/).map(row => row.split('\t'))
29
+ unstable_splitClipboardPastedText: pastedText => {
30
+ // Excel on Windows adds an empty line break at the end of the copied text.
31
+ // See https://github.com/mui/mui-x/issues/9103
32
+ const text = pastedText.replace(/\r?\n$/, '');
33
+ return text.split(/\r\n|\n|\r/).map(row => row.split('\t'));
34
+ }
30
35
  });
31
36
  exports.DATA_GRID_PREMIUM_PROPS_DEFAULT_VALUES = DATA_GRID_PREMIUM_PROPS_DEFAULT_VALUES;
32
37
  const defaultSlots = (0, _internals.uncapitalizeObjectKeys)(_dataGridPremiumDefaultSlotsComponents.DATA_GRID_PREMIUM_DEFAULT_SLOTS_COMPONENTS);
@@ -105,12 +105,7 @@ const addFooterRows = ({
105
105
  depth: groupNode ? groupNode.depth + 1 : 0,
106
106
  type: 'footer'
107
107
  };
108
- (0, _internals.insertNodeInTree)({
109
- previousTree: null,
110
- node: footerNode,
111
- tree: newGroupingParams.tree,
112
- treeDepths: newGroupingParams.treeDepths
113
- });
108
+ (0, _internals.insertNodeInTree)(footerNode, newGroupingParams.tree, newGroupingParams.treeDepths, null);
114
109
  }
115
110
  } else if (groupNode.footerId != null) {
116
111
  (0, _internals.removeNodeFromTree)({
@@ -13,7 +13,7 @@ var _xDataGridPro = require("@mui/x-data-grid-pro");
13
13
  var _utils = require("@mui/utils");
14
14
  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); }
15
15
  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; }
16
- const missingOnProcessRowUpdateErrorWarning = (0, _internals.buildWarning)(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see http://mui.com/components/data-grid/editing/#persistence.'], 'error');
16
+ const missingOnProcessRowUpdateErrorWarning = (0, _internals.buildWarning)(['MUI: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, e.g. `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see http://mui.com/components/data-grid/editing/#server-side-persistence.'], 'error');
17
17
  const columnFieldsToExcludeFromPaste = [_xDataGrid.GRID_CHECKBOX_SELECTION_FIELD, _xDataGridPro.GRID_REORDER_COL_DEF.field, _xDataGridPro.GRID_DETAIL_PANEL_TOGGLE_FIELD];
18
18
 
19
19
  // Batches rows that are updated during clipboard paste to reduce `updateRows` calls
@@ -247,11 +247,7 @@ function defaultPasteResolver({
247
247
  });
248
248
  }
249
249
  function isPasteShortcut(event) {
250
- const isModifierKeyPressed = event.ctrlKey || event.metaKey || event.altKey;
251
- if (event.code === 'KeyV' && isModifierKeyPressed) {
252
- return true;
253
- }
254
- return false;
250
+ return (event.ctrlKey || event.metaKey) && event.key === 'v';
255
251
  }
256
252
  const useGridClipboardImport = (apiRef, props) => {
257
253
  const processRowUpdate = props.processRowUpdate;
@@ -54,6 +54,7 @@ const filterRowTreeFromGroupingColumns = params => {
54
54
  } = params;
55
55
  const filteredRowsLookup = {};
56
56
  const filteredDescendantCountLookup = {};
57
+ const filterCache = {};
57
58
  const filterTreeNode = (node, areAncestorsExpanded, ancestorsResults) => {
58
59
  let isPassingFiltering = false;
59
60
  let filterResults = {
@@ -80,7 +81,7 @@ const filterRowTreeFromGroupingColumns = params => {
80
81
  isPassingFiltering = filteredDescendantCount > 0;
81
82
  } else {
82
83
  const allResults = [...ancestorsResults, filterResults];
83
- isPassingFiltering = (0, _internals.passFilterLogic)(allResults.map(result => result.passingFilterItems), allResults.map(result => result.passingQuickFilterValues), filterModel, params.apiRef);
84
+ isPassingFiltering = (0, _internals.passFilterLogic)(allResults.map(result => result.passingFilterItems), allResults.map(result => result.passingQuickFilterValues), filterModel, params.apiRef, filterCache);
84
85
  }
85
86
  }
86
87
  filteredRowsLookup[node.id] = isPassingFiltering;
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid-premium v6.6.0
2
+ * @mui/x-data-grid-premium v6.8.0
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getReleaseInfo = void 0;
7
7
  var _utils = require("@mui/utils");
8
8
  const getReleaseInfo = () => {
9
- const releaseInfo = "MTY4NTU3MDQwMDAwMA==";
9
+ const releaseInfo = "MTY4Njg2MjgwMDAwMA==";
10
10
  if (process.env.NODE_ENV !== 'production') {
11
11
  // A simple hack to set the value in the test environment (has no build step).
12
12
  // eslint-disable-next-line no-useless-concat
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-data-grid-premium",
3
- "version": "6.6.0",
3
+ "version": "6.8.0",
4
4
  "description": "The Premium plan edition of the data grid component (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",
@@ -33,8 +33,8 @@
33
33
  "dependencies": {
34
34
  "@babel/runtime": "^7.21.0",
35
35
  "@mui/utils": "^5.13.1",
36
- "@mui/x-data-grid": "6.6.0",
37
- "@mui/x-data-grid-pro": "6.6.0",
36
+ "@mui/x-data-grid": "6.8.0",
37
+ "@mui/x-data-grid-pro": "6.8.0",
38
38
  "@mui/x-license-pro": "6.6.0",
39
39
  "@types/format-util": "^1.0.2",
40
40
  "clsx": "^1.2.1",
@@ -2,7 +2,7 @@ import { GridClassKey } from '@mui/x-data-grid';
2
2
  export interface DataGridPremiumComponentNameToClassKey {
3
3
  MuiDataGrid: GridClassKey;
4
4
  }
5
- declare module '@mui/material/styles/overrides' {
5
+ declare module '@mui/material/styles' {
6
6
  interface ComponentNameToClassKey extends DataGridPremiumComponentNameToClassKey {
7
7
  }
8
8
  }
@@ -1,6 +1,6 @@
1
1
  import { ponyfillGlobal } from '@mui/utils';
2
2
  export const getReleaseInfo = () => {
3
- const releaseInfo = "MTY4NTU3MDQwMDAwMA==";
3
+ const releaseInfo = "MTY4Njg2MjgwMDAwMA==";
4
4
  if (process.env.NODE_ENV !== 'production') {
5
5
  // A simple hack to set the value in the test environment (has no build step).
6
6
  // eslint-disable-next-line no-useless-concat