@mui/x-data-grid 8.9.2 → 8.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/CHANGELOG.md +217 -6
  2. package/components/GridFooter.js +1 -1
  3. package/components/GridPagination.js +4 -3
  4. package/components/GridRow.js +8 -6
  5. package/components/virtualization/GridVirtualScroller.js +3 -3
  6. package/esm/DataGrid/index.js +1 -1
  7. package/esm/components/GridFooter.js +1 -1
  8. package/esm/components/GridPagination.js +3 -2
  9. package/esm/components/GridRow.js +8 -6
  10. package/esm/components/virtualization/GridVirtualScroller.js +3 -3
  11. package/esm/hooks/core/useGridVirtualizer.js +64 -44
  12. package/esm/hooks/features/dataSource/cache.js +0 -3
  13. package/esm/hooks/features/dataSource/gridDataSourceError.js +16 -16
  14. package/esm/hooks/features/dataSource/models.d.ts +11 -2
  15. package/esm/hooks/features/dataSource/useGridDataSourceBase.d.ts +1 -1
  16. package/esm/hooks/features/dataSource/useGridDataSourceBase.js +9 -2
  17. package/esm/hooks/features/dataSource/utils.js +51 -52
  18. package/esm/hooks/features/dimensions/gridDimensionsApi.d.ts +2 -67
  19. package/esm/hooks/features/dimensions/useGridDimensions.js +20 -15
  20. package/esm/hooks/features/editing/useGridRowEditing.js +4 -1
  21. package/esm/hooks/features/export/serializers/csvSerializer.js +2 -3
  22. package/esm/hooks/features/export/useGridPrintExport.js +3 -8
  23. package/esm/hooks/features/rowReorder/gridRowReorderInterfaces.d.ts +9 -0
  24. package/esm/hooks/features/rowReorder/gridRowReorderInterfaces.js +1 -0
  25. package/esm/hooks/features/rowReorder/gridRowReorderSelector.d.ts +5 -0
  26. package/esm/hooks/features/rowReorder/gridRowReorderSelector.js +3 -0
  27. package/esm/hooks/features/rowSelection/useGridRowSelection.js +2 -2
  28. package/esm/hooks/features/rowSelection/utils.js +5 -0
  29. package/esm/index.js +1 -1
  30. package/esm/internals/index.d.ts +2 -0
  31. package/esm/internals/index.js +1 -0
  32. package/esm/internals/utils/cache.js +0 -1
  33. package/esm/locales/nnNO.js +96 -107
  34. package/esm/material/index.js +2 -2
  35. package/esm/models/api/gridApiCommon.d.ts +1 -1
  36. package/esm/models/gridRowSelectionManager.js +0 -2
  37. package/esm/models/gridStateCommunity.d.ts +2 -0
  38. package/esm/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +5 -7
  39. package/esm/utils/cleanupTracking/TimerBasedCleanupTracking.js +2 -2
  40. package/hooks/core/useGridVirtualizer.js +62 -42
  41. package/hooks/features/dataSource/cache.js +0 -3
  42. package/hooks/features/dataSource/gridDataSourceError.js +16 -16
  43. package/hooks/features/dataSource/models.d.ts +11 -2
  44. package/hooks/features/dataSource/useGridDataSourceBase.d.ts +1 -1
  45. package/hooks/features/dataSource/useGridDataSourceBase.js +10 -3
  46. package/hooks/features/dataSource/utils.js +51 -52
  47. package/hooks/features/dimensions/gridDimensionsApi.d.ts +2 -67
  48. package/hooks/features/dimensions/useGridDimensions.js +20 -15
  49. package/hooks/features/editing/useGridRowEditing.js +4 -1
  50. package/hooks/features/export/serializers/csvSerializer.js +2 -3
  51. package/hooks/features/export/useGridPrintExport.js +3 -8
  52. package/hooks/features/rowReorder/gridRowReorderInterfaces.d.ts +9 -0
  53. package/hooks/features/rowReorder/gridRowReorderInterfaces.js +5 -0
  54. package/hooks/features/rowReorder/gridRowReorderSelector.d.ts +5 -0
  55. package/hooks/features/rowReorder/gridRowReorderSelector.js +9 -0
  56. package/hooks/features/rowSelection/useGridRowSelection.js +2 -2
  57. package/hooks/features/rowSelection/utils.js +5 -0
  58. package/index.js +1 -1
  59. package/internals/index.d.ts +2 -0
  60. package/internals/index.js +8 -0
  61. package/internals/utils/cache.js +0 -1
  62. package/locales/nnNO.js +96 -107
  63. package/material/index.js +2 -2
  64. package/models/api/gridApiCommon.d.ts +1 -1
  65. package/models/gridRowSelectionManager.js +0 -2
  66. package/models/gridStateCommunity.d.ts +2 -0
  67. package/package.json +16 -18
  68. package/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js +5 -7
  69. package/utils/cleanupTracking/TimerBasedCleanupTracking.js +2 -2
@@ -43,7 +43,8 @@ export const useGridRowSelection = (apiRef, props) => {
43
43
  callback(...args);
44
44
  }
45
45
  }, [props.rowSelection]);
46
- const applyAutoSelection = props.signature !== GridSignature.DataGrid && (props.rowSelectionPropagation?.parents || props.rowSelectionPropagation?.descendants);
46
+ const isNestedData = useGridSelector(apiRef, gridRowMaximumTreeDepthSelector) > 1;
47
+ const applyAutoSelection = props.signature !== GridSignature.DataGrid && (props.rowSelectionPropagation?.parents || props.rowSelectionPropagation?.descendants) && isNestedData;
47
48
  const propRowSelectionModel = React.useMemo(() => {
48
49
  return props.rowSelectionModel;
49
50
  }, [props.rowSelectionModel]);
@@ -62,7 +63,6 @@ export const useGridRowSelection = (apiRef, props) => {
62
63
  } = props;
63
64
  const canHaveMultipleSelection = isMultipleRowSelectionEnabled(props);
64
65
  const tree = useGridSelector(apiRef, gridRowTreeSelector);
65
- const isNestedData = useGridSelector(apiRef, gridRowMaximumTreeDepthSelector) > 1;
66
66
  const expandMouseRowRangeSelection = React.useCallback(id => {
67
67
  let endId = id;
68
68
  const startId = lastRowToggled.current ?? id;
@@ -137,6 +137,11 @@ export const findRowsToSelect = (apiRef, tree, selectedRow, autoSelectDescendant
137
137
  }
138
138
  }
139
139
  };
140
+ // For root level rows, we don't need to traverse parents
141
+ const rowNode = tree[selectedRow];
142
+ if (!rowNode || rowNode.parent === GRID_ROOT_GROUP_ID) {
143
+ return;
144
+ }
140
145
  traverseParents(selectedRow);
141
146
  }
142
147
  };
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v8.9.2
2
+ * @mui/x-data-grid v8.10.1
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -63,6 +63,8 @@ export { getRowIdFromRowModel, GRID_ID_AUTOGENERATED, getRowValue } from "../hoo
63
63
  export { gridAdditionalRowGroupsSelector, gridPinnedRowsSelector, gridRowSelector } from "../hooks/features/rows/gridRowsSelector.js";
64
64
  export { headerFilteringStateInitializer, useGridHeaderFiltering } from "../hooks/features/headerFiltering/useGridHeaderFiltering.js";
65
65
  export { useGridRowSelection, rowSelectionStateInitializer } from "../hooks/features/rowSelection/useGridRowSelection.js";
66
+ export { gridIsRowDragActiveSelector } from "../hooks/features/rowReorder/gridRowReorderSelector.js";
67
+ export type { GridRowReorderState } from "../hooks/features/rowReorder/gridRowReorderInterfaces.js";
66
68
  export { useGridRowSelectionPreProcessors } from "../hooks/features/rowSelection/useGridRowSelectionPreProcessors.js";
67
69
  export { useGridSorting, sortingStateInitializer } from "../hooks/features/sorting/useGridSorting.js";
68
70
  export type { GridSortingModelApplier } from "../hooks/features/sorting/gridSortingState.js";
@@ -51,6 +51,7 @@ export { getRowIdFromRowModel, GRID_ID_AUTOGENERATED, getRowValue } from "../hoo
51
51
  export { gridAdditionalRowGroupsSelector, gridPinnedRowsSelector, gridRowSelector } from "../hooks/features/rows/gridRowsSelector.js";
52
52
  export { headerFilteringStateInitializer, useGridHeaderFiltering } from "../hooks/features/headerFiltering/useGridHeaderFiltering.js";
53
53
  export { useGridRowSelection, rowSelectionStateInitializer } from "../hooks/features/rowSelection/useGridRowSelection.js";
54
+ export { gridIsRowDragActiveSelector } from "../hooks/features/rowReorder/gridRowReorderSelector.js";
54
55
  export { useGridRowSelectionPreProcessors } from "../hooks/features/rowSelection/useGridRowSelectionPreProcessors.js";
55
56
  export { useGridSorting, sortingStateInitializer } from "../hooks/features/sorting/useGridSorting.js";
56
57
  export { gridSortedRowIndexLookupSelector } from "../hooks/features/sorting/gridSortingSelector.js";
@@ -1,7 +1,6 @@
1
1
  import { getKeyDefault } from "../../hooks/features/dataSource/cache.js";
2
2
  export class TestCache {
3
3
  constructor() {
4
- this.cache = void 0;
5
4
  this.cache = new Map();
6
5
  }
7
6
  set(key, value) {
@@ -3,10 +3,9 @@ const nnNOGrid = {
3
3
  // Root
4
4
  noRowsLabel: 'Ingen rader',
5
5
  noResultsOverlayLabel: 'Fann ingen resultat.',
6
- // noColumnsOverlayLabel: 'No columns',
7
- // noColumnsOverlayManageColumns: 'Manage columns',
8
- // emptyPivotOverlayLabel: 'Add fields to rows, columns, and values to create a pivot table',
9
-
6
+ noColumnsOverlayLabel: 'Ingen kolonner',
7
+ noColumnsOverlayManageColumns: 'Vel kolonner',
8
+ emptyPivotOverlayLabel: 'Legg til felt i rader, kolonner og verdiar for å opprette ein pivot-tabell',
10
9
  // Density selector toolbar button text
11
10
  toolbarDensity: 'Tettheit',
12
11
  toolbarDensityLabel: 'Tettheit',
@@ -33,18 +32,15 @@ const nnNOGrid = {
33
32
  toolbarExportPrint: 'Skriv ut',
34
33
  toolbarExportExcel: 'Last ned som Excel',
35
34
  // Toolbar pivot button
36
- // toolbarPivot: 'Pivot',
37
-
35
+ toolbarPivot: 'Pivot',
38
36
  // Toolbar AI Assistant button
39
- // toolbarAssistant: 'AI Assistant',
40
-
37
+ toolbarAssistant: 'AI Assistent',
41
38
  // Columns management text
42
39
  columnsManagementSearchTitle: 'Søk',
43
40
  columnsManagementNoColumns: 'Ingen kolonner',
44
41
  columnsManagementShowHideAllText: 'Vis/skjul alle',
45
42
  columnsManagementReset: 'Nullstill',
46
- // columnsManagementDeleteIconLabel: 'Clear',
47
-
43
+ columnsManagementDeleteIconLabel: 'Tøm',
48
44
  // Filter panel text
49
45
  filterPanelAddFilter: 'Legg til filter',
50
46
  filterPanelRemoveAll: 'Fjern alle',
@@ -58,9 +54,9 @@ const nnNOGrid = {
58
54
  filterPanelInputPlaceholder: 'Filter verdi',
59
55
  // Filter operators text
60
56
  filterOperatorContains: 'inneheld',
61
- // filterOperatorDoesNotContain: 'does not contain',
57
+ filterOperatorDoesNotContain: 'inneheld ikkje',
62
58
  filterOperatorEquals: 'er lik',
63
- // filterOperatorDoesNotEqual: 'does not equal',
59
+ filterOperatorDoesNotEqual: 'er ikkje lik',
64
60
  filterOperatorStartsWith: 'startar med',
65
61
  filterOperatorEndsWith: 'sluttar med',
66
62
  filterOperatorIs: 'er',
@@ -80,9 +76,9 @@ const nnNOGrid = {
80
76
  'filterOperator<=': '<=',
81
77
  // Header filter operators text
82
78
  headerFilterOperatorContains: 'Inneheld',
83
- // headerFilterOperatorDoesNotContain: 'Does not contain',
79
+ headerFilterOperatorDoesNotContain: 'Inneheld ikkje',
84
80
  headerFilterOperatorEquals: 'Lik',
85
- // headerFilterOperatorDoesNotEqual: 'Does not equal',
81
+ headerFilterOperatorDoesNotEqual: 'Er ikkje lik',
86
82
  headerFilterOperatorStartsWith: 'Startar på',
87
83
  headerFilterOperatorEndsWith: 'Sluttar på',
88
84
  headerFilterOperatorIs: 'Er',
@@ -100,15 +96,14 @@ const nnNOGrid = {
100
96
  'headerFilterOperator>=': 'Større enn eller lik',
101
97
  'headerFilterOperator<': 'Mindre enn',
102
98
  'headerFilterOperator<=': 'Mindre enn eller lik',
103
- // headerFilterClear: 'Clear filter',
104
-
99
+ headerFilterClear: 'Tøm filter',
105
100
  // Filter values text
106
101
  filterValueAny: 'nokon',
107
102
  filterValueTrue: 'sant',
108
103
  filterValueFalse: 'usant',
109
104
  // Column menu text
110
105
  columnMenuLabel: 'Meny',
111
- // columnMenuAriaLabel: (columnName: string) => `${columnName} column menu`,
106
+ columnMenuAriaLabel: columnName => `${columnName} kolonne meny`,
112
107
  columnMenuShowColumns: 'Vis kolonner',
113
108
  columnMenuManageColumns: 'Administrer kolonner',
114
109
  columnMenuFilter: 'Filter',
@@ -116,8 +111,7 @@ const nnNOGrid = {
116
111
  columnMenuUnsort: 'Usorter',
117
112
  columnMenuSortAsc: 'Sorter AUKANDE',
118
113
  columnMenuSortDesc: 'Sorter SYNKANDE',
119
- // columnMenuManagePivot: 'Manage pivot',
120
-
114
+ columnMenuManagePivot: 'Behandle pivot',
121
115
  // Column header text
122
116
  columnHeaderFiltersTooltipActive: count => count !== 1 ? `${count} aktive filter` : `${count} aktivt filter`,
123
117
  columnHeaderFiltersLabel: 'Vis filter',
@@ -152,23 +146,23 @@ const nnNOGrid = {
152
146
  groupColumn: name => `Grupper på ${name}`,
153
147
  unGroupColumn: name => `Slutt å grupper på ${name}`,
154
148
  // Master/detail
155
- detailPanelToggle: 'Utvid/kollaps detalj panel',
156
- expandDetailPanel: 'Utvid',
157
- collapseDetailPanel: 'Kolaps',
149
+ detailPanelToggle: 'Vis/gøym detaljpanel',
150
+ expandDetailPanel: 'Vis',
151
+ collapseDetailPanel: 'Gøym',
158
152
  // Pagination
159
153
  paginationRowsPerPage: 'Rader per side:',
160
- // paginationDisplayedRows: ({
161
- // from,
162
- // to,
163
- // count,
164
- // estimated
165
- // }) => {
166
- // if (!estimated) {
167
- // return `${from}–${to} of ${count !== -1 ? count : `more than ${to}`}`;
168
- // }
169
- // const estimatedLabel = estimated && estimated > to ? `around ${estimated}` : `more than ${to}`;
170
- // return `${from}–${to} of ${count !== -1 ? count : estimatedLabel}`;
171
- // },
154
+ paginationDisplayedRows: ({
155
+ from,
156
+ to,
157
+ count,
158
+ estimated
159
+ }) => {
160
+ if (!estimated) {
161
+ return `${from}–${to} av ${count !== -1 ? count : `flere enn ${to}`}`;
162
+ }
163
+ const estimatedLabel = estimated && estimated > to ? `omtrent ${estimated}` : `flere enn ${to}`;
164
+ return `${from}–${to} av ${count !== -1 ? count : estimatedLabel}`;
165
+ },
172
166
  paginationItemAriaLabel: type => {
173
167
  if (type === 'first') {
174
168
  return 'Gå til første side';
@@ -190,83 +184,78 @@ const nnNOGrid = {
190
184
  aggregationFunctionLabelAvg: 'snitt',
191
185
  aggregationFunctionLabelMin: 'min',
192
186
  aggregationFunctionLabelMax: 'maks',
193
- aggregationFunctionLabelSize: 'størrelse'
194
-
187
+ aggregationFunctionLabelSize: 'størrelse',
195
188
  // Pivot panel
196
- // pivotToggleLabel: 'Pivot',
197
- // pivotRows: 'Rows',
198
- // pivotColumns: 'Columns',
199
- // pivotValues: 'Values',
200
- // pivotCloseButton: 'Close pivot settings',
201
- // pivotSearchButton: 'Search fields',
202
- // pivotSearchControlPlaceholder: 'Search fields',
203
- // pivotSearchControlLabel: 'Search fields',
204
- // pivotSearchControlClear: 'Clear search',
205
- // pivotNoFields: 'No fields',
206
- // pivotMenuMoveUp: 'Move up',
207
- // pivotMenuMoveDown: 'Move down',
208
- // pivotMenuMoveToTop: 'Move to top',
209
- // pivotMenuMoveToBottom: 'Move to bottom',
210
- // pivotMenuRows: 'Rows',
211
- // pivotMenuColumns: 'Columns',
212
- // pivotMenuValues: 'Values',
213
- // pivotMenuOptions: 'Field options',
214
- // pivotMenuAddToRows: 'Add to Rows',
215
- // pivotMenuAddToColumns: 'Add to Columns',
216
- // pivotMenuAddToValues: 'Add to Values',
217
- // pivotMenuRemove: 'Remove',
218
- // pivotDragToRows: 'Drag here to create rows',
219
- // pivotDragToColumns: 'Drag here to create columns',
220
- // pivotDragToValues: 'Drag here to create values',
221
- // pivotYearColumnHeaderName: '(Year)',
222
- // pivotQuarterColumnHeaderName: '(Quarter)',
223
-
189
+ pivotToggleLabel: 'Pivot',
190
+ pivotRows: 'Rader',
191
+ pivotColumns: 'Kolonner',
192
+ pivotValues: 'Verdiar',
193
+ pivotCloseButton: 'Lukk pivotinnstillingar',
194
+ pivotSearchButton: 'Søk felt',
195
+ pivotSearchControlPlaceholder: 'Søk felt',
196
+ pivotSearchControlLabel: 'Søk felt',
197
+ pivotSearchControlClear: 'Tøm søk',
198
+ pivotNoFields: 'Ingen felt',
199
+ pivotMenuMoveUp: 'Flytt opp',
200
+ pivotMenuMoveDown: 'Flytt ned',
201
+ pivotMenuMoveToTop: 'Flytt til toppen',
202
+ pivotMenuMoveToBottom: 'Flytt til botnen',
203
+ pivotMenuRows: 'Rader',
204
+ pivotMenuColumns: 'Kolonner',
205
+ pivotMenuValues: 'Verdiar',
206
+ pivotMenuOptions: 'Feltalternativ',
207
+ pivotMenuAddToRows: 'Legg til i Rader',
208
+ pivotMenuAddToColumns: 'Legg til i Kolonner',
209
+ pivotMenuAddToValues: 'Legg til i Verdiar',
210
+ pivotMenuRemove: 'Fjern',
211
+ pivotDragToRows: 'Dra hit for å opprette rader',
212
+ pivotDragToColumns: 'Dra hit for å opprette kolonner',
213
+ pivotDragToValues: 'Dra hit for å opprette verdiar',
214
+ pivotYearColumnHeaderName: '(År)',
215
+ pivotQuarterColumnHeaderName: '(Kvartal)',
224
216
  // AI Assistant panel
225
- // aiAssistantPanelTitle: 'AI Assistant',
226
- // aiAssistantPanelClose: 'Close AI Assistant',
227
- // aiAssistantPanelNewConversation: 'New conversation',
228
- // aiAssistantPanelConversationHistory: 'Conversation history',
229
- // aiAssistantPanelEmptyConversation: 'No prompt history',
230
- // aiAssistantSuggestions: 'Suggestions',
231
-
217
+ aiAssistantPanelTitle: 'AI Assistent',
218
+ aiAssistantPanelClose: 'Lukk AI Assistent',
219
+ aiAssistantPanelNewConversation: 'Ny samtale',
220
+ aiAssistantPanelConversationHistory: 'Samtalehistorikk',
221
+ aiAssistantPanelEmptyConversation: 'Ingen prompt-historikk',
222
+ aiAssistantSuggestions: 'Forslag',
232
223
  // Prompt field
233
- // promptFieldLabel: 'Prompt',
234
- // promptFieldPlaceholder: 'Type a prompt…',
235
- // promptFieldPlaceholderWithRecording: 'Type or record a prompt…',
236
- // promptFieldPlaceholderListening: 'Listening for prompt…',
237
- // promptFieldSpeechRecognitionNotSupported: 'Speech recognition is not supported in this browser',
238
- // promptFieldSend: 'Send',
239
- // promptFieldRecord: 'Record',
240
- // promptFieldStopRecording: 'Stop recording',
241
-
224
+ promptFieldLabel: 'Prompt',
225
+ promptFieldPlaceholder: 'Skriv ein prompt…',
226
+ promptFieldPlaceholderWithRecording: 'Skriv eller spel inn ein prompt…',
227
+ promptFieldPlaceholderListening: 'Lyttar etter prompt…',
228
+ promptFieldSpeechRecognitionNotSupported: 'Talegjenkjenning er ikkje støtta i denne nettlesaren',
229
+ promptFieldSend: 'Send',
230
+ promptFieldRecord: 'Spel inn',
231
+ promptFieldStopRecording: 'Stopp opptak',
242
232
  // Prompt
243
- // promptRerun: 'Run again',
244
- // promptProcessing: 'Processing…',
245
- // promptAppliedChanges: 'Applied changes',
246
-
233
+ promptRerun: 'Kjør på nytt',
234
+ promptProcessing: 'Behandlar…',
235
+ promptAppliedChanges: 'Brukte endringar',
247
236
  // Prompt changes
248
- // promptChangeGroupDescription: (column: string) => `Group by ${column}`,
249
- // promptChangeAggregationLabel: (column: string, aggregation: string) => `${column} (${aggregation})`,
250
- // promptChangeAggregationDescription: (column: string, aggregation: string) => `Aggregate ${column} (${aggregation})`,
251
- // promptChangeFilterLabel: (column: string, operator: string, value: string) => {
252
- // if (operator === 'is any of') {
253
- // return `${column} is any of: ${value}`;
254
- // }
255
- // return `${column} ${operator} ${value}`;
256
- // },
257
- // promptChangeFilterDescription: (column: string, operator: string, value: string) => {
258
- // if (operator === 'is any of') {
259
- // return `Filter where ${column} is any of: ${value}`;
260
- // }
261
- // return `Filter where ${column} ${operator} ${value}`;
262
- // },
263
- // promptChangeSortDescription: (column: string, direction: string) => `Sort by ${column} (${direction})`,
264
- // promptChangePivotEnableLabel: 'Pivot',
265
- // promptChangePivotEnableDescription: 'Enable pivot',
266
- // promptChangePivotColumnsLabel: (count: number) => `Columns (${count})`,
267
- // promptChangePivotColumnsDescription: (column: string, direction: string) => `${column}${direction ? ` (${direction})` : ''}`,
268
- // promptChangePivotRowsLabel: (count: number) => `Rows (${count})`,
269
- // promptChangePivotValuesLabel: (count: number) => `Values (${count})`,
270
- // promptChangePivotValuesDescription: (column: string, aggregation: string) => `${column} (${aggregation})`,
237
+ promptChangeGroupDescription: column => `Grupper etter ${column}`,
238
+ promptChangeAggregationLabel: (column, aggregation) => `${column} (${aggregation})`,
239
+ promptChangeAggregationDescription: (column, aggregation) => `Aggreger ${column} (${aggregation})`,
240
+ promptChangeFilterLabel: (column, operator, value) => {
241
+ if (operator === 'is any of') {
242
+ return `${column} er ein av: ${value}`;
243
+ }
244
+ return `${column} ${operator} ${value}`;
245
+ },
246
+ promptChangeFilterDescription: (column, operator, value) => {
247
+ if (operator === 'is any of') {
248
+ return `Filter der ${column} er ein av: ${value}`;
249
+ }
250
+ return `Filter der ${column} ${operator} ${value}`;
251
+ },
252
+ promptChangeSortDescription: (column, direction) => `Sorter etter ${column} (${direction})`,
253
+ promptChangePivotEnableLabel: 'Pivot',
254
+ promptChangePivotEnableDescription: 'Aktiver pivot',
255
+ promptChangePivotColumnsLabel: count => `Kolonner (${count})`,
256
+ promptChangePivotColumnsDescription: (column, direction) => `${column}${direction ? ` (${direction})` : ''}`,
257
+ promptChangePivotRowsLabel: count => `Rader (${count})`,
258
+ promptChangePivotValuesLabel: count => `Verdiar (${count})`,
259
+ promptChangePivotValuesDescription: (column, aggregation) => `${column} (${aggregation})`
271
260
  };
272
261
  export const nnNO = getGridLocalization(nnNOGrid);
@@ -159,9 +159,9 @@ const BaseSelect = forwardRef(function BaseSelect(props, ref) {
159
159
  labelId: labelId,
160
160
  label: label,
161
161
  displayEmpty: true,
162
- onChange: onChange
162
+ onChange: onChange,
163
+ variant: "outlined"
163
164
  }, rest, {
164
- variant: "outlined",
165
165
  notched: true,
166
166
  inputProps: slotProps?.htmlInput,
167
167
  onOpen: onOpen,
@@ -31,7 +31,7 @@ import type { GridHeaderFilteringApi, GridHeaderFilteringPrivateApi } from "./gr
31
31
  import type { DataGridProcessedProps } from "../props/DataGridProps.js";
32
32
  import type { GridColumnResizeApi } from "../../hooks/features/columnResize/index.js";
33
33
  import type { GridPivotingPrivateApiCommunity } from "../../hooks/features/pivoting/gridPivotingInterfaces.js";
34
- export interface GridApiCommon<GridState extends GridStateCommunity = any, GridInitialState extends GridInitialStateCommunity = any> extends GridCoreApi, GridPipeProcessingApi, GridDensityApi, GridDimensionsApi, GridRowApi, GridRowsMetaApi, GridEditingApi, GridParamsApi, GridColumnApi, GridRowSelectionApi, GridSortApi, GridPaginationApi, GridCsvExportApi, GridFocusApi, GridFilterApi, GridColumnMenuApi, GridPreferencesPanelApi, GridPrintExportApi, GridVirtualizationApi, GridLocaleTextApi, GridScrollApi, GridColumnSpanningApi, GridStateApi<GridState>, GridStatePersistenceApi<GridInitialState>, GridColumnGroupingApi, GridHeaderFilteringApi, GridColumnResizeApi {}
34
+ export interface GridApiCommon<GridState extends GridStateCommunity = GridStateCommunity, GridInitialState extends GridInitialStateCommunity = GridInitialStateCommunity> extends GridCoreApi, GridPipeProcessingApi, GridDensityApi, GridDimensionsApi, GridRowApi, GridRowsMetaApi, GridEditingApi, GridParamsApi, GridColumnApi, GridRowSelectionApi, GridSortApi, GridPaginationApi, GridCsvExportApi, GridFocusApi, GridFilterApi, GridColumnMenuApi, GridPreferencesPanelApi, GridPrintExportApi, GridVirtualizationApi, GridLocaleTextApi, GridScrollApi, GridColumnSpanningApi, GridStateApi<GridState>, GridStatePersistenceApi<GridInitialState>, GridColumnGroupingApi, GridHeaderFilteringApi, GridColumnResizeApi {}
35
35
  export interface GridPrivateOnlyApiCommon<Api extends GridApiCommon, PrivateApi extends GridPrivateApiCommon, Props extends DataGridProcessedProps> extends GridCorePrivateApi<Api, PrivateApi, Props>, GridStatePrivateApi<PrivateApi['state']>, GridPipeProcessingPrivateApi, GridStrategyProcessingApi, GridColumnSpanningPrivateApi, GridRowsMetaPrivateApi, GridDimensionsPrivateApi, GridEditingPrivateApi, GridLoggerApi, GridFocusPrivateApi, GridHeaderFilteringPrivateApi, GridVirtualizationPrivateApi, GridRowProPrivateApi, GridParamsPrivateApi, GridPivotingPrivateApiCommunity {
36
36
  virtualizer: Virtualizer;
37
37
  }
@@ -1,6 +1,5 @@
1
1
  class IncludeManager {
2
2
  constructor(model) {
3
- this.data = void 0;
4
3
  this.data = model.ids;
5
4
  }
6
5
  has(id) {
@@ -15,7 +14,6 @@ class IncludeManager {
15
14
  }
16
15
  class ExcludeManager {
17
16
  constructor(model) {
18
- this.data = void 0;
19
17
  this.data = model.ids;
20
18
  }
21
19
  has(id) {
@@ -8,6 +8,7 @@ import type { GridVisibleRowsLookupState } from "../hooks/features/filter/gridFi
8
8
  import type { GridColumnResizeState } from "../hooks/features/columnResize/index.js";
9
9
  import type { GridRowSpanningState } from "../hooks/features/rows/useGridRowSpanning.js";
10
10
  import type { GridListViewState } from "../hooks/features/listView/useGridListView.js";
11
+ import type { GridRowReorderState } from "../hooks/features/rowReorder/gridRowReorderInterfaces.js";
11
12
  /**
12
13
  * Some props are passed on the state to enable grid selectors to select
13
14
  * and react to them.
@@ -41,6 +42,7 @@ export interface GridStateCommunity {
41
42
  columnResize: GridColumnResizeState;
42
43
  rowSpanning: GridRowSpanningState;
43
44
  listViewColumn: GridListViewState;
45
+ rowReorder: GridRowReorderState;
44
46
  }
45
47
  /**
46
48
  * The initial state of Data Grid.
@@ -1,11 +1,9 @@
1
1
  export class FinalizationRegistryBasedCleanupTracking {
2
- constructor() {
3
- this.registry = new FinalizationRegistry(unsubscribe => {
4
- if (typeof unsubscribe === 'function') {
5
- unsubscribe();
6
- }
7
- });
8
- }
2
+ registry = (() => new FinalizationRegistry(unsubscribe => {
3
+ if (typeof unsubscribe === 'function') {
4
+ unsubscribe();
5
+ }
6
+ }))();
9
7
  register(object, unsubscribe, unregisterToken) {
10
8
  this.registry.register(object, unsubscribe, unregisterToken);
11
9
  }
@@ -1,9 +1,9 @@
1
1
  // If no effect ran after this amount of time, we assume that the render was not committed by React
2
2
  const CLEANUP_TIMER_LOOP_MILLIS = 1000;
3
3
  export class TimerBasedCleanupTracking {
4
+ timeouts = (() => new Map())();
5
+ cleanupTimeout = (() => CLEANUP_TIMER_LOOP_MILLIS)();
4
6
  constructor(timeout = CLEANUP_TIMER_LOOP_MILLIS) {
5
- this.timeouts = new Map();
6
- this.cleanupTimeout = CLEANUP_TIMER_LOOP_MILLIS;
7
7
  this.cleanupTimeout = timeout;
8
8
  }
9
9
  register(object, unsubscribe, unregisterToken) {
@@ -8,9 +8,11 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.useGridVirtualizer = useGridVirtualizer;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var React = _interopRequireWildcard(require("react"));
11
+ var _useLazyRef = _interopRequireDefault(require("@mui/utils/useLazyRef"));
11
12
  var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
12
13
  var _RtlProvider = require("@mui/system/RtlProvider");
13
14
  var _math = require("@mui/x-internals/math");
15
+ var _lruMemoize = require("@mui/x-internals/lruMemoize");
14
16
  var _store = require("@mui/x-internals/store");
15
17
  var _xVirtualizer = require("@mui/x-virtualizer");
16
18
  var _useFirstRender = require("../utils/useFirstRender");
@@ -39,6 +41,18 @@ const columnsTotalWidthSelector = (0, _createSelector.createSelector)(_gridColum
39
41
  return (0, _math.roundToDecimalPlaces)(positions[colCount - 1] + visibleColumns[colCount - 1].computedWidth, 1);
40
42
  });
41
43
 
44
+ /** Translates virtualizer state to grid state */
45
+ const addGridDimensionsCreator = () => (0, _lruMemoize.lruMemoize)((dimensions, headerHeight, groupHeaderHeight, headerFilterHeight, headersTotalHeight) => {
46
+ return (0, _extends2.default)({}, dimensions, {
47
+ headerHeight,
48
+ groupHeaderHeight,
49
+ headerFilterHeight,
50
+ headersTotalHeight
51
+ });
52
+ }, {
53
+ maxSize: 1
54
+ });
55
+
42
56
  /**
43
57
  * Virtualizer setup
44
58
  */
@@ -54,9 +68,6 @@ function useGridVirtualizer(apiRef, rootProps) {
54
68
  const isRowSelected = id => rowSelectionManager.has(id) && apiRef.current.isRowSelectable(id);
55
69
  const currentPage = (0, _useGridVisibleRows.useGridVisibleRows)(apiRef);
56
70
  const hasColSpan = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridHasColSpanSelector);
57
-
58
- /* TODO: extract dimensions code */
59
- const contentHeight = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridContentHeightSelector);
60
71
  const verticalScrollbarWidth = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridVerticalScrollbarWidthSelector);
61
72
  const hasFiller = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridHasFillerSelector);
62
73
  const {
@@ -75,16 +86,17 @@ function useGridVirtualizer(apiRef, rootProps) {
75
86
  const headersTotalHeight = (0, _gridColumnsUtils.getTotalHeaderHeight)(apiRef, rootProps);
76
87
  const leftPinnedWidth = pinnedColumns.left.reduce((w, col) => w + col.computedWidth, 0);
77
88
  const rightPinnedWidth = pinnedColumns.right.reduce((w, col) => w + col.computedWidth, 0);
78
- const dimensions = {
89
+ const dimensionsParams = {
79
90
  rowHeight,
80
91
  headerHeight,
81
- groupHeaderHeight,
82
- headerFilterHeight,
83
92
  columnsTotalWidth,
84
- headersTotalHeight,
85
93
  leftPinnedWidth,
86
- rightPinnedWidth
94
+ rightPinnedWidth,
95
+ topPinnedHeight: headersTotalHeight,
96
+ bottomPinnedHeight: 0,
97
+ scrollbarSize: rootProps.scrollbarSize
87
98
  };
99
+ const addGridDimensions = (0, _useLazyRef.default)(addGridDimensionsCreator).current;
88
100
 
89
101
  // </DIMENSIONS>
90
102
 
@@ -101,32 +113,42 @@ function useGridVirtualizer(apiRef, rootProps) {
101
113
 
102
114
  const focusedVirtualCell = (0, _useGridSelector.useGridSelector)(apiRef, _gridFocusedVirtualCellSelector.gridFocusedVirtualCellSelector);
103
115
  const virtualizer = (0, _xVirtualizer.useVirtualizer)({
104
- scrollbarSize: rootProps.scrollbarSize,
105
- dimensions,
116
+ refs: {
117
+ container: apiRef.current.mainElementRef,
118
+ scroller: apiRef.current.virtualScrollerRef,
119
+ scrollbarVertical: apiRef.current.virtualScrollbarVerticalRef,
120
+ scrollbarHorizontal: apiRef.current.virtualScrollbarHorizontalRef
121
+ },
122
+ dimensions: dimensionsParams,
123
+ virtualization: {
124
+ isRtl,
125
+ rowBufferPx: rootProps.rowBufferPx,
126
+ columnBufferPx: rootProps.columnBufferPx
127
+ },
128
+ colspan: {
129
+ enabled: hasColSpan,
130
+ getColspan: (rowId, column) => {
131
+ if (typeof column.colSpan === 'function') {
132
+ const row = apiRef.current.getRow(rowId);
133
+ const value = apiRef.current.getRowValue(row, column);
134
+ return column.colSpan(value, row, column, apiRef) ?? 0;
135
+ }
136
+ return column.colSpan ?? 1;
137
+ }
138
+ },
106
139
  initialState: {
107
140
  scroll: rootProps.initialState?.scroll,
108
- dimensions: apiRef.current.state.dimensions,
109
141
  rowSpanning: apiRef.current.state.rowSpanning,
110
142
  virtualization: apiRef.current.state.virtualization
111
143
  },
112
- isRtl,
113
144
  rows: currentPage.rows,
114
145
  range: currentPage.range,
115
- rowIdToIndexMap: currentPage.rowIdToIndexMap,
116
146
  rowCount,
117
147
  columns: visibleColumns,
118
148
  pinnedRows,
119
149
  pinnedColumns,
120
- refs: {
121
- container: apiRef.current.mainElementRef,
122
- scroller: apiRef.current.virtualScrollerRef,
123
- scrollbarVertical: apiRef.current.virtualScrollbarVerticalRef,
124
- scrollbarHorizontal: apiRef.current.virtualScrollbarHorizontalRef
125
- },
126
- hasColSpan,
127
- contentHeight,
128
- minimalContentHeight: _gridRowsUtils.minimalContentHeight,
129
150
  autoHeight,
151
+ minimalContentHeight: _gridRowsUtils.minimalContentHeight,
130
152
  getRowHeight: React.useMemo(() => {
131
153
  if (!getRowHeight) {
132
154
  return undefined;
@@ -138,14 +160,20 @@ function useGridVirtualizer(apiRef, rootProps) {
138
160
  getEstimatedRowHeight: React.useMemo(() => getEstimatedRowHeight ? rowEntry => getEstimatedRowHeight((0, _extends2.default)({}, rowEntry, {
139
161
  densityFactor: density
140
162
  })) : undefined, [getEstimatedRowHeight, density]),
141
- getRowSpacing: React.useMemo(() => getRowSpacing ? (rowEntry, visibility) => getRowSpacing((0, _extends2.default)({}, rowEntry, visibility, {
142
- indexRelativeToCurrentPage: apiRef.current.getRowIndexRelativeToVisibleRows(rowEntry.id)
143
- })) : undefined, [apiRef, getRowSpacing]),
163
+ getRowSpacing: React.useMemo(() => getRowSpacing ? rowEntry => {
164
+ const indexRelativeToCurrentPage = currentPage.rowIdToIndexMap.get(rowEntry.id) ?? -1;
165
+ const visibility = {
166
+ isFirstVisible: indexRelativeToCurrentPage === 0,
167
+ isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,
168
+ indexRelativeToCurrentPage
169
+ };
170
+ return getRowSpacing((0, _extends2.default)({}, rowEntry, visibility, {
171
+ indexRelativeToCurrentPage: apiRef.current.getRowIndexRelativeToVisibleRows(rowEntry.id)
172
+ }));
173
+ } : undefined, [apiRef, getRowSpacing, currentPage.rows, currentPage.rowIdToIndexMap]),
144
174
  applyRowHeight: (0, _useEventCallback.default)((entry, row) => apiRef.current.unstable_applyPipeProcessors('rowHeight', entry, row)),
145
175
  virtualizeColumnsWithAutoRowHeight: rootProps.virtualizeColumnsWithAutoRowHeight,
146
176
  focusedVirtualCell: (0, _useEventCallback.default)(() => focusedVirtualCell),
147
- rowBufferPx: rootProps.rowBufferPx,
148
- columnBufferPx: rootProps.columnBufferPx,
149
177
  resizeThrottleMs: rootProps.resizeThrottleMs,
150
178
  onResize: (0, _useEventCallback.default)(size => apiRef.current.publishEvent('resize', size)),
151
179
  onWheel: (0, _useEventCallback.default)(event => {
@@ -165,14 +193,6 @@ function useGridVirtualizer(apiRef, rootProps) {
165
193
  });
166
194
  },
167
195
  scrollReset,
168
- getColspan: (rowId, column) => {
169
- if (typeof column.colSpan === 'function') {
170
- const row = apiRef.current.getRow(rowId);
171
- const value = apiRef.current.getRowValue(row, column);
172
- return column.colSpan(value, row, column, apiRef) ?? 0;
173
- }
174
- return column.colSpan ?? 0;
175
- },
176
196
  renderRow: params => /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.row, (0, _extends2.default)({
177
197
  row: params.model,
178
198
  rowId: params.id,
@@ -182,7 +202,7 @@ function useGridVirtualizer(apiRef, rootProps) {
182
202
  columnsTotalWidth: columnsTotalWidth,
183
203
  rowHeight: params.baseRowHeight,
184
204
  pinnedColumns: pinnedColumns,
185
- visibleColumns: params.columns,
205
+ visibleColumns: visibleColumns,
186
206
  firstColumnIndex: params.firstColumnIndex,
187
207
  lastColumnIndex: params.lastColumnIndex,
188
208
  focusedColumnIndex: params.focusedColumnIndex,
@@ -204,16 +224,16 @@ function useGridVirtualizer(apiRef, rootProps) {
204
224
  //
205
225
  // TODO(v9): Remove this
206
226
  (0, _useFirstRender.useFirstRender)(() => {
207
- apiRef.current.store.state.dimensions = virtualizer.store.state.dimensions;
227
+ apiRef.current.store.state.dimensions = addGridDimensions(virtualizer.store.state.dimensions, headerHeight, groupHeaderHeight, headerFilterHeight, headersTotalHeight);
208
228
  apiRef.current.store.state.rowsMeta = virtualizer.store.state.rowsMeta;
209
229
  apiRef.current.store.state.virtualization = virtualizer.store.state.virtualization;
210
230
  });
231
+ (0, _store.useStoreEffect)(virtualizer.store, _xVirtualizer.Dimensions.selectors.dimensions, (_, dimensions) => {
232
+ apiRef.current.setState(gridState => (0, _extends2.default)({}, gridState, {
233
+ dimensions: addGridDimensions(dimensions, headerHeight, groupHeaderHeight, headerFilterHeight, headersTotalHeight)
234
+ }));
235
+ });
211
236
  (0, _store.useStoreEffect)(virtualizer.store, identity, (_, state) => {
212
- if (state.dimensions !== apiRef.current.state.dimensions) {
213
- apiRef.current.setState(gridState => (0, _extends2.default)({}, gridState, {
214
- dimensions: state.dimensions
215
- }));
216
- }
217
237
  if (state.rowsMeta !== apiRef.current.state.rowsMeta) {
218
238
  apiRef.current.setState(gridState => (0, _extends2.default)({}, gridState, {
219
239
  rowsMeta: state.rowsMeta
@@ -13,9 +13,6 @@ class GridDataSourceCacheDefault {
13
13
  ttl = 300_000,
14
14
  getKey = getKeyDefault
15
15
  }) {
16
- this.cache = void 0;
17
- this.ttl = void 0;
18
- this.getKey = void 0;
19
16
  this.cache = {};
20
17
  this.ttl = ttl;
21
18
  this.getKey = getKey;