@mui/x-data-grid 7.16.0 → 7.18.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 (243) hide show
  1. package/CHANGELOG.md +184 -4
  2. package/DataGrid/DataGrid.js +11 -1
  3. package/DataGrid/useDataGridComponent.js +3 -0
  4. package/DataGrid/useDataGridProps.js +2 -1
  5. package/colDef/gridStringOperators.js +49 -33
  6. package/components/GridRow.js +1 -0
  7. package/components/cell/GridCell.js +30 -5
  8. package/components/columnHeaders/GridColumnHeaderItem.d.ts +2 -0
  9. package/components/columnHeaders/GridColumnHeaderItem.js +9 -2
  10. package/components/columnHeaders/GridColumnHeaderTitle.js +3 -1
  11. package/components/columnHeaders/GridGenericColumnHeaderItem.js +1 -2
  12. package/components/containers/GridRootStyles.js +3 -7
  13. package/components/panel/filterPanel/GridFilterForm.js +1 -1
  14. package/constants/gridClasses.d.ts +10 -0
  15. package/constants/gridClasses.js +1 -1
  16. package/constants/localeTextConstants.js +4 -0
  17. package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +0 -1
  18. package/hooks/features/columnHeaders/useGridColumnHeaders.js +17 -12
  19. package/hooks/features/columnResize/useGridColumnResize.js +6 -6
  20. package/hooks/features/dimensions/gridDimensionsApi.d.ts +4 -0
  21. package/hooks/features/dimensions/useGridDimensions.d.ts +1 -1
  22. package/hooks/features/dimensions/useGridDimensions.js +4 -1
  23. package/hooks/features/editing/useGridCellEditing.js +3 -19
  24. package/hooks/features/editing/useGridRowEditing.js +7 -2
  25. package/hooks/features/editing/utils.d.ts +2 -0
  26. package/hooks/features/editing/utils.js +15 -0
  27. package/hooks/features/export/serializers/csvSerializer.js +1 -1
  28. package/hooks/features/export/useGridPrintExport.js +2 -1
  29. package/hooks/features/filter/gridFilterUtils.js +1 -1
  30. package/hooks/features/focus/useGridFocus.js +2 -1
  31. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +10 -46
  32. package/hooks/features/keyboardNavigation/utils.d.ts +17 -0
  33. package/hooks/features/keyboardNavigation/utils.js +58 -0
  34. package/hooks/features/rows/gridRowSpanningSelectors.d.ts +4 -0
  35. package/hooks/features/rows/gridRowSpanningSelectors.js +5 -0
  36. package/hooks/features/rows/gridRowSpanningUtils.d.ts +10 -0
  37. package/hooks/features/rows/gridRowSpanningUtils.js +42 -0
  38. package/hooks/features/rows/useGridRowSpanning.d.ts +27 -0
  39. package/hooks/features/rows/useGridRowSpanning.js +257 -0
  40. package/hooks/features/sorting/gridSortingUtils.js +1 -1
  41. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +1 -1
  42. package/hooks/features/virtualization/useGridVirtualScroller.js +17 -7
  43. package/hooks/utils/useGridApiEventHandler.js +0 -1
  44. package/hooks/utils/useGridSelector.js +1 -1
  45. package/index.js +1 -1
  46. package/internals/index.d.ts +1 -0
  47. package/internals/index.js +1 -0
  48. package/internals/utils/index.d.ts +0 -1
  49. package/internals/utils/index.js +1 -2
  50. package/internals/utils/propValidation.js +1 -1
  51. package/locales/arSD.js +4 -0
  52. package/locales/beBY.js +4 -0
  53. package/locales/bgBG.js +4 -0
  54. package/locales/csCZ.js +4 -0
  55. package/locales/daDK.js +4 -0
  56. package/locales/deDE.js +4 -0
  57. package/locales/elGR.js +4 -0
  58. package/locales/esES.js +4 -0
  59. package/locales/faIR.js +4 -0
  60. package/locales/fiFI.js +4 -0
  61. package/locales/frFR.js +4 -0
  62. package/locales/heIL.js +4 -0
  63. package/locales/hrHR.js +4 -0
  64. package/locales/huHU.js +11 -8
  65. package/locales/isIS.js +4 -0
  66. package/locales/itIT.js +4 -0
  67. package/locales/jaJP.js +4 -0
  68. package/locales/koKR.js +4 -0
  69. package/locales/nbNO.js +4 -0
  70. package/locales/nlNL.js +4 -0
  71. package/locales/nnNO.js +4 -0
  72. package/locales/plPL.js +4 -0
  73. package/locales/ptBR.js +4 -0
  74. package/locales/ptPT.js +4 -0
  75. package/locales/roRO.js +4 -0
  76. package/locales/ruRU.js +4 -0
  77. package/locales/skSK.js +4 -0
  78. package/locales/svSE.js +4 -0
  79. package/locales/trTR.js +4 -0
  80. package/locales/ukUA.js +4 -0
  81. package/locales/urPK.js +4 -0
  82. package/locales/viVN.js +4 -0
  83. package/locales/zhCN.js +4 -0
  84. package/locales/zhHK.js +4 -0
  85. package/locales/zhTW.js +4 -0
  86. package/models/api/gridLocaleTextApi.d.ts +4 -0
  87. package/models/colDef/gridColDef.d.ts +4 -0
  88. package/models/gridStateCommunity.d.ts +2 -0
  89. package/models/props/DataGridProps.d.ts +10 -0
  90. package/modern/DataGrid/DataGrid.js +11 -1
  91. package/modern/DataGrid/useDataGridComponent.js +3 -0
  92. package/modern/DataGrid/useDataGridProps.js +2 -1
  93. package/modern/colDef/gridStringOperators.js +49 -33
  94. package/modern/components/GridRow.js +1 -0
  95. package/modern/components/cell/GridCell.js +30 -5
  96. package/modern/components/columnHeaders/GridColumnHeaderItem.js +9 -2
  97. package/modern/components/columnHeaders/GridColumnHeaderTitle.js +3 -1
  98. package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +1 -2
  99. package/modern/components/containers/GridRootStyles.js +3 -7
  100. package/modern/components/panel/filterPanel/GridFilterForm.js +1 -1
  101. package/modern/constants/gridClasses.js +1 -1
  102. package/modern/constants/localeTextConstants.js +4 -0
  103. package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +17 -12
  104. package/modern/hooks/features/columnResize/useGridColumnResize.js +6 -6
  105. package/modern/hooks/features/dimensions/useGridDimensions.js +4 -1
  106. package/modern/hooks/features/editing/useGridCellEditing.js +3 -19
  107. package/modern/hooks/features/editing/useGridRowEditing.js +7 -2
  108. package/modern/hooks/features/editing/utils.js +15 -0
  109. package/modern/hooks/features/export/serializers/csvSerializer.js +1 -1
  110. package/modern/hooks/features/export/useGridPrintExport.js +2 -1
  111. package/modern/hooks/features/filter/gridFilterUtils.js +1 -1
  112. package/modern/hooks/features/focus/useGridFocus.js +2 -1
  113. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +10 -46
  114. package/modern/hooks/features/keyboardNavigation/utils.js +58 -0
  115. package/modern/hooks/features/rows/gridRowSpanningSelectors.js +5 -0
  116. package/modern/hooks/features/rows/gridRowSpanningUtils.js +42 -0
  117. package/modern/hooks/features/rows/useGridRowSpanning.js +257 -0
  118. package/modern/hooks/features/sorting/gridSortingUtils.js +1 -1
  119. package/modern/hooks/features/virtualization/useGridVirtualScroller.js +17 -7
  120. package/modern/hooks/utils/useGridApiEventHandler.js +0 -1
  121. package/modern/hooks/utils/useGridSelector.js +1 -1
  122. package/modern/index.js +1 -1
  123. package/modern/internals/index.js +1 -0
  124. package/modern/internals/utils/index.js +1 -2
  125. package/modern/internals/utils/propValidation.js +1 -1
  126. package/modern/locales/arSD.js +4 -0
  127. package/modern/locales/beBY.js +4 -0
  128. package/modern/locales/bgBG.js +4 -0
  129. package/modern/locales/csCZ.js +4 -0
  130. package/modern/locales/daDK.js +4 -0
  131. package/modern/locales/deDE.js +4 -0
  132. package/modern/locales/elGR.js +4 -0
  133. package/modern/locales/esES.js +4 -0
  134. package/modern/locales/faIR.js +4 -0
  135. package/modern/locales/fiFI.js +4 -0
  136. package/modern/locales/frFR.js +4 -0
  137. package/modern/locales/heIL.js +4 -0
  138. package/modern/locales/hrHR.js +4 -0
  139. package/modern/locales/huHU.js +11 -8
  140. package/modern/locales/isIS.js +4 -0
  141. package/modern/locales/itIT.js +4 -0
  142. package/modern/locales/jaJP.js +4 -0
  143. package/modern/locales/koKR.js +4 -0
  144. package/modern/locales/nbNO.js +4 -0
  145. package/modern/locales/nlNL.js +4 -0
  146. package/modern/locales/nnNO.js +4 -0
  147. package/modern/locales/plPL.js +4 -0
  148. package/modern/locales/ptBR.js +4 -0
  149. package/modern/locales/ptPT.js +4 -0
  150. package/modern/locales/roRO.js +4 -0
  151. package/modern/locales/ruRU.js +4 -0
  152. package/modern/locales/skSK.js +4 -0
  153. package/modern/locales/svSE.js +4 -0
  154. package/modern/locales/trTR.js +4 -0
  155. package/modern/locales/ukUA.js +4 -0
  156. package/modern/locales/urPK.js +4 -0
  157. package/modern/locales/viVN.js +4 -0
  158. package/modern/locales/zhCN.js +4 -0
  159. package/modern/locales/zhHK.js +4 -0
  160. package/modern/locales/zhTW.js +4 -0
  161. package/modern/utils/createSelector.js +1 -1
  162. package/modern/utils/domUtils.js +12 -12
  163. package/node/DataGrid/DataGrid.js +11 -1
  164. package/node/DataGrid/useDataGridComponent.js +3 -0
  165. package/node/DataGrid/useDataGridProps.js +2 -1
  166. package/node/colDef/gridStringOperators.js +49 -33
  167. package/node/components/GridRow.js +1 -0
  168. package/node/components/cell/GridCell.js +30 -5
  169. package/node/components/columnHeaders/GridColumnHeaderItem.js +9 -2
  170. package/node/components/columnHeaders/GridColumnHeaderTitle.js +3 -1
  171. package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +1 -2
  172. package/node/components/containers/GridRootStyles.js +3 -7
  173. package/node/components/panel/filterPanel/GridFilterForm.js +1 -1
  174. package/node/constants/gridClasses.js +1 -1
  175. package/node/constants/localeTextConstants.js +4 -0
  176. package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +17 -12
  177. package/node/hooks/features/columnResize/useGridColumnResize.js +6 -6
  178. package/node/hooks/features/dimensions/useGridDimensions.js +4 -1
  179. package/node/hooks/features/editing/useGridCellEditing.js +3 -19
  180. package/node/hooks/features/editing/useGridRowEditing.js +7 -2
  181. package/node/hooks/features/editing/utils.js +22 -0
  182. package/node/hooks/features/export/serializers/csvSerializer.js +1 -1
  183. package/node/hooks/features/export/useGridPrintExport.js +2 -1
  184. package/node/hooks/features/filter/gridFilterUtils.js +1 -1
  185. package/node/hooks/features/focus/useGridFocus.js +2 -1
  186. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +16 -53
  187. package/node/hooks/features/keyboardNavigation/utils.js +68 -0
  188. package/node/hooks/features/rows/gridRowSpanningSelectors.js +11 -0
  189. package/node/hooks/features/rows/gridRowSpanningUtils.js +52 -0
  190. package/node/hooks/features/rows/useGridRowSpanning.js +267 -0
  191. package/node/hooks/features/sorting/gridSortingUtils.js +1 -1
  192. package/node/hooks/features/virtualization/useGridVirtualScroller.js +17 -7
  193. package/node/hooks/utils/useGridApiEventHandler.js +0 -1
  194. package/node/hooks/utils/useGridSelector.js +1 -1
  195. package/node/index.js +1 -1
  196. package/node/internals/index.js +15 -0
  197. package/node/internals/utils/index.js +0 -11
  198. package/node/internals/utils/propValidation.js +1 -1
  199. package/node/locales/arSD.js +4 -0
  200. package/node/locales/beBY.js +4 -0
  201. package/node/locales/bgBG.js +4 -0
  202. package/node/locales/csCZ.js +4 -0
  203. package/node/locales/daDK.js +4 -0
  204. package/node/locales/deDE.js +4 -0
  205. package/node/locales/elGR.js +4 -0
  206. package/node/locales/esES.js +4 -0
  207. package/node/locales/faIR.js +4 -0
  208. package/node/locales/fiFI.js +4 -0
  209. package/node/locales/frFR.js +4 -0
  210. package/node/locales/heIL.js +4 -0
  211. package/node/locales/hrHR.js +4 -0
  212. package/node/locales/huHU.js +11 -8
  213. package/node/locales/isIS.js +4 -0
  214. package/node/locales/itIT.js +4 -0
  215. package/node/locales/jaJP.js +4 -0
  216. package/node/locales/koKR.js +4 -0
  217. package/node/locales/nbNO.js +4 -0
  218. package/node/locales/nlNL.js +4 -0
  219. package/node/locales/nnNO.js +4 -0
  220. package/node/locales/plPL.js +4 -0
  221. package/node/locales/ptBR.js +4 -0
  222. package/node/locales/ptPT.js +4 -0
  223. package/node/locales/roRO.js +4 -0
  224. package/node/locales/ruRU.js +4 -0
  225. package/node/locales/skSK.js +4 -0
  226. package/node/locales/svSE.js +4 -0
  227. package/node/locales/trTR.js +4 -0
  228. package/node/locales/ukUA.js +4 -0
  229. package/node/locales/urPK.js +4 -0
  230. package/node/locales/viVN.js +4 -0
  231. package/node/locales/zhCN.js +4 -0
  232. package/node/locales/zhHK.js +4 -0
  233. package/node/locales/zhTW.js +4 -0
  234. package/node/utils/createSelector.js +1 -1
  235. package/node/utils/domUtils.js +12 -12
  236. package/package.json +3 -3
  237. package/utils/createSelector.js +1 -1
  238. package/utils/domUtils.d.ts +4 -4
  239. package/utils/domUtils.js +12 -12
  240. package/internals/utils/warning.d.ts +0 -2
  241. package/internals/utils/warning.js +0 -21
  242. package/modern/internals/utils/warning.js +0 -21
  243. package/node/internals/utils/warning.js +0 -28
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useGridRowSpanning = exports.rowSpanningStateInitializer = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var React = _interopRequireWildcard(require("react"));
11
+ var _useLazyRef = _interopRequireDefault(require("@mui/utils/useLazyRef"));
12
+ var _gridColumnsSelector = require("../columns/gridColumnsSelector");
13
+ var _useGridVisibleRows = require("../../utils/useGridVisibleRows");
14
+ var _gridVirtualizationSelectors = require("../virtualization/gridVirtualizationSelectors");
15
+ var _useGridSelector = require("../../utils/useGridSelector");
16
+ var _gridRowSpanningUtils = require("./gridRowSpanningUtils");
17
+ const EMPTY_STATE = {
18
+ spannedCells: {},
19
+ hiddenCells: {},
20
+ hiddenCellOriginMap: {}
21
+ };
22
+ const EMPTY_RANGE = {
23
+ firstRowIndex: 0,
24
+ lastRowIndex: 0
25
+ };
26
+ const skippedFields = new Set(['__check__', '__reorder__', '__detail_panel_toggle__']);
27
+ /**
28
+ * Default number of rows to process during state initialization to avoid flickering.
29
+ * Number `20` is arbitrarily chosen to be large enough to cover most of the cases without
30
+ * compromising performance.
31
+ */
32
+ const DEFAULT_ROWS_TO_PROCESS = 20;
33
+ const computeRowSpanningState = (apiRef, colDefs, visibleRows, range, rangeToProcess, resetState, processedRange) => {
34
+ const spannedCells = resetState ? {} : (0, _extends2.default)({}, apiRef.current.state.rowSpanning.spannedCells);
35
+ const hiddenCells = resetState ? {} : (0, _extends2.default)({}, apiRef.current.state.rowSpanning.hiddenCells);
36
+ const hiddenCellOriginMap = resetState ? {} : (0, _extends2.default)({}, apiRef.current.state.rowSpanning.hiddenCellOriginMap);
37
+ if (resetState) {
38
+ processedRange = EMPTY_RANGE;
39
+ }
40
+ colDefs.forEach(colDef => {
41
+ if (skippedFields.has(colDef.field)) {
42
+ return;
43
+ }
44
+ for (let index = rangeToProcess.firstRowIndex; index <= rangeToProcess.lastRowIndex; index += 1) {
45
+ const row = visibleRows[index];
46
+ if (hiddenCells[row.id]?.[colDef.field]) {
47
+ continue;
48
+ }
49
+ const cellValue = (0, _gridRowSpanningUtils.getCellValue)(row.model, colDef, apiRef);
50
+ if (cellValue == null) {
51
+ continue;
52
+ }
53
+ let spannedRowId = row.id;
54
+ let spannedRowIndex = index;
55
+ let rowSpan = 0;
56
+
57
+ // For first index, also scan in the previous rows to handle the reset state case e.g by sorting
58
+ const backwardsHiddenCells = [];
59
+ if (index === rangeToProcess.firstRowIndex) {
60
+ let prevIndex = index - 1;
61
+ const prevRowEntry = visibleRows[prevIndex];
62
+ while (prevIndex >= range.firstRowIndex && (0, _gridRowSpanningUtils.getCellValue)(prevRowEntry.model, colDef, apiRef) === cellValue) {
63
+ const currentRow = visibleRows[prevIndex + 1];
64
+ if (hiddenCells[currentRow.id]) {
65
+ hiddenCells[currentRow.id][colDef.field] = true;
66
+ } else {
67
+ hiddenCells[currentRow.id] = {
68
+ [colDef.field]: true
69
+ };
70
+ }
71
+ backwardsHiddenCells.push(index);
72
+ rowSpan += 1;
73
+ spannedRowId = prevRowEntry.id;
74
+ spannedRowIndex = prevIndex;
75
+ prevIndex -= 1;
76
+ }
77
+ }
78
+ backwardsHiddenCells.forEach(hiddenCellIndex => {
79
+ if (hiddenCellOriginMap[hiddenCellIndex]) {
80
+ hiddenCellOriginMap[hiddenCellIndex][colDef.field] = spannedRowIndex;
81
+ } else {
82
+ hiddenCellOriginMap[hiddenCellIndex] = {
83
+ [colDef.field]: spannedRowIndex
84
+ };
85
+ }
86
+ });
87
+
88
+ // Scan the next rows
89
+ let relativeIndex = index + 1;
90
+ while (relativeIndex <= range.lastRowIndex && visibleRows[relativeIndex] && (0, _gridRowSpanningUtils.getCellValue)(visibleRows[relativeIndex].model, colDef, apiRef) === cellValue) {
91
+ const currentRow = visibleRows[relativeIndex];
92
+ if (hiddenCells[currentRow.id]) {
93
+ hiddenCells[currentRow.id][colDef.field] = true;
94
+ } else {
95
+ hiddenCells[currentRow.id] = {
96
+ [colDef.field]: true
97
+ };
98
+ }
99
+ if (hiddenCellOriginMap[relativeIndex]) {
100
+ hiddenCellOriginMap[relativeIndex][colDef.field] = spannedRowIndex;
101
+ } else {
102
+ hiddenCellOriginMap[relativeIndex] = {
103
+ [colDef.field]: spannedRowIndex
104
+ };
105
+ }
106
+ relativeIndex += 1;
107
+ rowSpan += 1;
108
+ }
109
+ if (rowSpan > 0) {
110
+ if (spannedCells[spannedRowId]) {
111
+ spannedCells[spannedRowId][colDef.field] = rowSpan + 1;
112
+ } else {
113
+ spannedCells[spannedRowId] = {
114
+ [colDef.field]: rowSpan + 1
115
+ };
116
+ }
117
+ }
118
+ }
119
+ processedRange = {
120
+ firstRowIndex: Math.min(processedRange.firstRowIndex, rangeToProcess.firstRowIndex),
121
+ lastRowIndex: Math.max(processedRange.lastRowIndex, rangeToProcess.lastRowIndex)
122
+ };
123
+ });
124
+ return {
125
+ spannedCells,
126
+ hiddenCells,
127
+ hiddenCellOriginMap,
128
+ processedRange
129
+ };
130
+ };
131
+
132
+ /**
133
+ * @requires columnsStateInitializer (method) - should be initialized before
134
+ * @requires rowsStateInitializer (method) - should be initialized before
135
+ * @requires filterStateInitializer (method) - should be initialized before
136
+ */
137
+ const rowSpanningStateInitializer = (state, props, apiRef) => {
138
+ if (props.unstable_rowSpanning) {
139
+ const rowIds = state.rows.dataRowIds || [];
140
+ const orderedFields = state.columns.orderedFields || [];
141
+ const dataRowIdToModelLookup = state.rows.dataRowIdToModelLookup;
142
+ const columnsLookup = state.columns.lookup;
143
+ const isFilteringPending = Boolean(state.filter.filterModel.items.length) || Boolean(state.filter.filterModel.quickFilterValues?.length);
144
+ if (!rowIds.length || !orderedFields.length || !dataRowIdToModelLookup || !columnsLookup || isFilteringPending) {
145
+ return (0, _extends2.default)({}, state, {
146
+ rowSpanning: EMPTY_STATE
147
+ });
148
+ }
149
+ const rangeToProcess = {
150
+ firstRowIndex: 0,
151
+ lastRowIndex: Math.min(DEFAULT_ROWS_TO_PROCESS - 1, Math.max(rowIds.length - 1, 0))
152
+ };
153
+ const rows = rowIds.map(id => ({
154
+ id,
155
+ model: dataRowIdToModelLookup[id]
156
+ }));
157
+ const colDefs = orderedFields.map(field => columnsLookup[field]);
158
+ const {
159
+ spannedCells,
160
+ hiddenCells,
161
+ hiddenCellOriginMap
162
+ } = computeRowSpanningState(apiRef, colDefs, rows, rangeToProcess, rangeToProcess, true, EMPTY_RANGE);
163
+ return (0, _extends2.default)({}, state, {
164
+ rowSpanning: {
165
+ spannedCells,
166
+ hiddenCells,
167
+ hiddenCellOriginMap
168
+ }
169
+ });
170
+ }
171
+ return (0, _extends2.default)({}, state, {
172
+ rowSpanning: EMPTY_STATE
173
+ });
174
+ };
175
+ exports.rowSpanningStateInitializer = rowSpanningStateInitializer;
176
+ const useGridRowSpanning = (apiRef, props) => {
177
+ const {
178
+ range,
179
+ rows: visibleRows
180
+ } = (0, _useGridVisibleRows.useGridVisibleRows)(apiRef, props);
181
+ const renderContext = (0, _useGridSelector.useGridSelector)(apiRef, _gridVirtualizationSelectors.gridRenderContextSelector);
182
+ const colDefs = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector);
183
+ const processedRange = (0, _useLazyRef.default)(() => {
184
+ return Object.keys(apiRef.current.state.rowSpanning.spannedCells).length > 0 ? {
185
+ firstRowIndex: 0,
186
+ lastRowIndex: Math.min(DEFAULT_ROWS_TO_PROCESS - 1, Math.max(apiRef.current.state.rows.dataRowIds.length - 1, 0))
187
+ } : EMPTY_RANGE;
188
+ });
189
+ const lastRange = React.useRef(EMPTY_RANGE);
190
+ const updateRowSpanningState = React.useCallback(
191
+ // A reset needs to occur when:
192
+ // - The `unstable_rowSpanning` prop is updated (feature flag)
193
+ // - The filtering is applied
194
+ // - The sorting is applied
195
+ // - The `paginationModel` is updated
196
+ // - The rows are updated
197
+ (resetState = true) => {
198
+ if (!props.unstable_rowSpanning) {
199
+ if (apiRef.current.state.rowSpanning !== EMPTY_STATE) {
200
+ apiRef.current.setState(state => (0, _extends2.default)({}, state, {
201
+ rowSpanning: EMPTY_STATE
202
+ }));
203
+ }
204
+ return;
205
+ }
206
+ if (range === null || !(0, _gridRowSpanningUtils.isRowContextInitialized)(renderContext)) {
207
+ return;
208
+ }
209
+ if (resetState) {
210
+ processedRange.current = EMPTY_RANGE;
211
+ }
212
+ const rangeToProcess = (0, _gridRowSpanningUtils.getUnprocessedRange)({
213
+ firstRowIndex: renderContext.firstRowIndex,
214
+ lastRowIndex: renderContext.lastRowIndex - 1
215
+ }, processedRange.current);
216
+ if (rangeToProcess === null) {
217
+ return;
218
+ }
219
+ const {
220
+ spannedCells,
221
+ hiddenCells,
222
+ hiddenCellOriginMap,
223
+ processedRange: newProcessedRange
224
+ } = computeRowSpanningState(apiRef, colDefs, visibleRows, range, rangeToProcess, resetState, processedRange.current);
225
+ processedRange.current = newProcessedRange;
226
+ const newSpannedCellsCount = Object.keys(spannedCells).length;
227
+ const newHiddenCellsCount = Object.keys(hiddenCells).length;
228
+ const currentSpannedCellsCount = Object.keys(apiRef.current.state.rowSpanning.spannedCells).length;
229
+ const currentHiddenCellsCount = Object.keys(apiRef.current.state.rowSpanning.hiddenCells).length;
230
+ const shouldUpdateState = resetState || newSpannedCellsCount !== currentSpannedCellsCount || newHiddenCellsCount !== currentHiddenCellsCount;
231
+ if (!shouldUpdateState) {
232
+ return;
233
+ }
234
+ apiRef.current.setState(state => {
235
+ return (0, _extends2.default)({}, state, {
236
+ rowSpanning: {
237
+ spannedCells,
238
+ hiddenCells,
239
+ hiddenCellOriginMap
240
+ }
241
+ });
242
+ });
243
+ }, [apiRef, props.unstable_rowSpanning, range, renderContext, visibleRows, colDefs, processedRange]);
244
+ const prevRenderContext = React.useRef(renderContext);
245
+ const isFirstRender = React.useRef(true);
246
+ const shouldResetState = React.useRef(false);
247
+ React.useEffect(() => {
248
+ const firstRender = isFirstRender.current;
249
+ if (isFirstRender.current) {
250
+ isFirstRender.current = false;
251
+ }
252
+ if (range && lastRange.current && (0, _gridRowSpanningUtils.isRowRangeUpdated)(range, lastRange.current)) {
253
+ lastRange.current = range;
254
+ shouldResetState.current = true;
255
+ }
256
+ if (!firstRender && prevRenderContext.current !== renderContext) {
257
+ if ((0, _gridRowSpanningUtils.isRowRangeUpdated)(prevRenderContext.current, renderContext)) {
258
+ updateRowSpanningState(shouldResetState.current);
259
+ shouldResetState.current = false;
260
+ }
261
+ prevRenderContext.current = renderContext;
262
+ return;
263
+ }
264
+ updateRowSpanningState();
265
+ }, [updateRowSpanningState, renderContext, range, lastRange]);
266
+ };
267
+ exports.useGridRowSpanning = useGridRowSpanning;
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.sanitizeSortModel = exports.mergeStateWithSortModel = exports.gridStringOrNumberComparator = exports.gridNumberComparator = exports.gridDateComparator = exports.getNextGridSortDirection = exports.buildAggregatedSortingApplier = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
- var _warning = require("../../../internals/utils/warning");
9
+ var _warning = require("@mui/x-internals/warning");
10
10
  const sanitizeSortModel = (model, disableMultipleColumnsSorting) => {
11
11
  if (disableMultipleColumnsSorting && model.length > 1) {
12
12
  if (process.env.NODE_ENV !== 'production') {
@@ -35,6 +35,7 @@ var _gridColumnsUtils = require("../columns/gridColumnsUtils");
35
35
  var _gridRowsUtils = require("../rows/gridRowsUtils");
36
36
  var _gridVirtualizationSelectors = require("./gridVirtualizationSelectors");
37
37
  var _useGridVirtualization = require("./useGridVirtualization");
38
+ var _gridRowSpanningSelectors = require("../rows/gridRowSpanningSelectors");
38
39
  var _jsxRuntime = require("react/jsx-runtime");
39
40
  const MINIMUM_COLUMN_WIDTH = 50;
40
41
  var ScrollDirection = /*#__PURE__*/function (ScrollDirection) {
@@ -336,7 +337,7 @@ const useGridVirtualScroller = () => {
336
337
  if (!isPinnedSection && frozenContext.current && rowIndexInPage >= frozenContext.current.firstRowIndex && rowIndexInPage < frozenContext.current.lastRowIndex) {
337
338
  currentRenderContext = frozenContext.current;
338
339
  }
339
- const offsetLeft = computeOffsetLeft(columnPositions, currentRenderContext, isRtl, pinnedColumns.left.length);
340
+ const offsetLeft = computeOffsetLeft(columnPositions, currentRenderContext, pinnedColumns.left.length);
340
341
  const showBottomBorder = isLastVisibleInSection && params.position === 'top';
341
342
  rows.push(/*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.row, (0, _extends2.default)({
342
343
  row: model,
@@ -364,7 +365,7 @@ const useGridVirtualScroller = () => {
364
365
  if (panel) {
365
366
  rows.push(panel);
366
367
  }
367
- if (isLastVisible) {
368
+ if (params.position === undefined && isLastVisibleInSection) {
368
369
  rows.push(apiRef.current.getInfiniteLoadingTriggerElement?.({
369
370
  lastRowId: id
370
371
  }));
@@ -459,6 +460,7 @@ function inputsSelector(apiRef, rootProps, enabledForRows, enabledForColumns) {
459
460
  const dimensions = (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef.current.state);
460
461
  const currentPage = (0, _useGridVisibleRows.getVisibleRows)(apiRef, rootProps);
461
462
  const visibleColumns = (0, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector)(apiRef);
463
+ const hiddenCellsOriginMap = (0, _gridRowSpanningSelectors.gridRowSpanningHiddenCellsOriginMapSelector)(apiRef);
462
464
  const lastRowId = apiRef.current.state.rows.dataRowIds.at(-1);
463
465
  const lastColumn = visibleColumns.at(-1);
464
466
  return {
@@ -479,7 +481,8 @@ function inputsSelector(apiRef, rootProps, enabledForRows, enabledForColumns) {
479
481
  rows: currentPage.rows,
480
482
  range: currentPage.range,
481
483
  pinnedColumns: (0, _gridColumnsSelector.gridVisiblePinnedColumnDefinitionsSelector)(apiRef),
482
- visibleColumns
484
+ visibleColumns,
485
+ hiddenCellsOriginMap
483
486
  };
484
487
  }
485
488
  function computeRenderContext(inputs, scrollPosition, scrollCache) {
@@ -497,10 +500,18 @@ function computeRenderContext(inputs, scrollPosition, scrollCache) {
497
500
  if (inputs.enabledForRows) {
498
501
  // Clamp the value because the search may return an index out of bounds.
499
502
  // In the last index, this is not needed because Array.slice doesn't include it.
500
- const firstRowIndex = Math.min(getNearestIndexToRender(inputs, top, {
503
+ let firstRowIndex = Math.min(getNearestIndexToRender(inputs, top, {
501
504
  atStart: true,
502
505
  lastPosition: inputs.rowsMeta.positions[inputs.rowsMeta.positions.length - 1] + inputs.lastRowHeight
503
506
  }), inputs.rowsMeta.positions.length - 1);
507
+
508
+ // If any of the cells in the `firstRowIndex` is hidden due to an extended row span,
509
+ // Make sure the row from where the rowSpan is originated is visible.
510
+ const rowSpanHiddenCellOrigin = inputs.hiddenCellsOriginMap[firstRowIndex];
511
+ if (rowSpanHiddenCellOrigin) {
512
+ const minSpannedRowIndex = Math.min(...Object.values(rowSpanHiddenCellOrigin));
513
+ firstRowIndex = Math.min(firstRowIndex, minSpannedRowIndex);
514
+ }
504
515
  const lastRowIndex = inputs.autoHeight ? firstRowIndex + inputs.rows.length : getNearestIndexToRender(inputs, top + inputs.viewportInnerHeight);
505
516
  renderContext.firstRowIndex = firstRowIndex;
506
517
  renderContext.lastRowIndex = lastRowIndex;
@@ -654,9 +665,8 @@ function areRenderContextsEqual(context1, context2) {
654
665
  }
655
666
  return context1.firstRowIndex === context2.firstRowIndex && context1.lastRowIndex === context2.lastRowIndex && context1.firstColumnIndex === context2.firstColumnIndex && context1.lastColumnIndex === context2.lastColumnIndex;
656
667
  }
657
- function computeOffsetLeft(columnPositions, renderContext, isRtl, pinnedLeftLength) {
658
- const factor = isRtl ? -1 : 1;
659
- const left = factor * (columnPositions[renderContext.firstColumnIndex] ?? 0) - (columnPositions[pinnedLeftLength] ?? 0);
668
+ function computeOffsetLeft(columnPositions, renderContext, pinnedLeftLength) {
669
+ const left = (columnPositions[renderContext.firstColumnIndex] ?? 0) - (columnPositions[pinnedLeftLength] ?? 0);
660
670
  return Math.abs(left);
661
671
  }
662
672
  function directionForDelta(dx, dy) {
@@ -101,6 +101,5 @@ const optionsSubscriberOptions = {
101
101
  isFirst: true
102
102
  };
103
103
  function useGridApiOptionHandler(apiRef, eventName, handler) {
104
- // Validate that only one per event name?
105
104
  useGridApiEventHandler(apiRef, eventName, handler, optionsSubscriberOptions);
106
105
  }
@@ -7,9 +7,9 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.useGridSelectorV8 = exports.useGridSelector = exports.objectShallowCompare = void 0;
8
8
  var React = _interopRequireWildcard(require("react"));
9
9
  var _fastObjectShallowCompare = require("@mui/x-internals/fastObjectShallowCompare");
10
+ var _warning = require("@mui/x-internals/warning");
10
11
  var _useLazyRef = require("./useLazyRef");
11
12
  var _useOnMount = require("./useOnMount");
12
- var _warning = require("../../internals/utils/warning");
13
13
  function isOutputSelector(selector) {
14
14
  return selector.acceptsApiRef;
15
15
  }
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v7.16.0
2
+ * @mui/x-data-grid v7.18.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -48,6 +48,8 @@ var _exportNames = {
48
48
  gridEditRowsStateSelector: true,
49
49
  useGridRows: true,
50
50
  rowsStateInitializer: true,
51
+ useGridRowSpanning: true,
52
+ rowSpanningStateInitializer: true,
51
53
  useGridAriaAttributes: true,
52
54
  useGridRowAriaAttributes: true,
53
55
  useGridRowsPreProcessors: true,
@@ -398,6 +400,12 @@ Object.defineProperty(exports, "rowSelectionStateInitializer", {
398
400
  return _useGridRowSelection.rowSelectionStateInitializer;
399
401
  }
400
402
  });
403
+ Object.defineProperty(exports, "rowSpanningStateInitializer", {
404
+ enumerable: true,
405
+ get: function () {
406
+ return _useGridRowSpanning.rowSpanningStateInitializer;
407
+ }
408
+ });
401
409
  Object.defineProperty(exports, "rowsMetaStateInitializer", {
402
410
  enumerable: true,
403
411
  get: function () {
@@ -596,6 +604,12 @@ Object.defineProperty(exports, "useGridRowSelectionPreProcessors", {
596
604
  return _useGridRowSelectionPreProcessors.useGridRowSelectionPreProcessors;
597
605
  }
598
606
  });
607
+ Object.defineProperty(exports, "useGridRowSpanning", {
608
+ enumerable: true,
609
+ get: function () {
610
+ return _useGridRowSpanning.useGridRowSpanning;
611
+ }
612
+ });
599
613
  Object.defineProperty(exports, "useGridRows", {
600
614
  enumerable: true,
601
615
  get: function () {
@@ -723,6 +737,7 @@ var _useGridPreferencesPanel = require("../hooks/features/preferencesPanel/useGr
723
737
  var _useGridEditing = require("../hooks/features/editing/useGridEditing");
724
738
  var _gridEditingSelectors = require("../hooks/features/editing/gridEditingSelectors");
725
739
  var _useGridRows = require("../hooks/features/rows/useGridRows");
740
+ var _useGridRowSpanning = require("../hooks/features/rows/useGridRowSpanning");
726
741
  var _useGridAriaAttributes = require("../hooks/utils/useGridAriaAttributes");
727
742
  var _useGridRowAriaAttributes = require("../hooks/features/rows/useGridRowAriaAttributes");
728
743
  var _useGridRowsPreProcessors = require("../hooks/features/rows/useGridRowsPreProcessors");
@@ -35,15 +35,4 @@ Object.keys(_propValidation).forEach(function (key) {
35
35
  return _propValidation[key];
36
36
  }
37
37
  });
38
- });
39
- var _warning = require("./warning");
40
- Object.keys(_warning).forEach(function (key) {
41
- if (key === "default" || key === "__esModule") return;
42
- if (key in exports && exports[key] === _warning[key]) return;
43
- Object.defineProperty(exports, key, {
44
- enumerable: true,
45
- get: function () {
46
- return _warning[key];
47
- }
48
- });
49
38
  });
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.propValidatorsDataGrid = void 0;
7
7
  exports.validateProps = validateProps;
8
- var _warning = require("./warning");
8
+ var _warning = require("@mui/x-internals/warning");
9
9
  var _utils = require("../../utils/utils");
10
10
  var _useGridApiEventHandler = require("../../hooks/utils/useGridApiEventHandler");
11
11
  const propValidatorsDataGrid = exports.propValidatorsDataGrid = [props => props.autoPageSize && props.autoHeight && ['MUI X: `<DataGrid autoPageSize={true} autoHeight={true} />` are not valid props.', 'You cannot use both the `autoPageSize` and `autoHeight` props at the same time because `autoHeight` scales the height of the Data Grid according to the `pageSize`.', '', 'Please remove one of these two props.'].join('\n') || undefined, props => props.paginationMode === 'client' && props.paginationMeta != null && ['MUI X: Usage of the `paginationMeta` prop with client-side pagination (`paginationMode="client"`) has no effect.', '`paginationMeta` is only meant to be used with `paginationMode="server"`.'].join('\n') || undefined, props => props.signature === _useGridApiEventHandler.GridSignature.DataGrid && props.paginationMode === 'client' && (0, _utils.isNumber)(props.rowCount) && ['MUI X: Usage of the `rowCount` prop with client side pagination (`paginationMode="client"`) has no effect.', '`rowCount` is only meant to be used with `paginationMode="server"`.'].join('\n') || undefined, props => props.paginationMode === 'server' && props.rowCount == null && !props.unstable_dataSource && ["MUI X: The `rowCount` prop must be passed using `paginationMode='server'`", 'For more detail, see http://mui.com/components/data-grid/pagination/#index-based-pagination'].join('\n') || undefined];
@@ -54,7 +54,9 @@ const arSDGrid = {
54
54
  filterPanelInputPlaceholder: 'ترشِيح قيمة',
55
55
  // Filter operators text
56
56
  filterOperatorContains: 'يحتوي',
57
+ // filterOperatorDoesNotContain: 'does not contain',
57
58
  filterOperatorEquals: 'يساوي',
59
+ // filterOperatorDoesNotEqual: 'does not equal',
58
60
  filterOperatorStartsWith: 'يبدأ بـ',
59
61
  filterOperatorEndsWith: 'ينتهي بـ',
60
62
  filterOperatorIs: 'يكون',
@@ -74,7 +76,9 @@ const arSDGrid = {
74
76
  'filterOperator<=': '<=',
75
77
  // Header filter operators text
76
78
  headerFilterOperatorContains: 'يحتوي على',
79
+ // headerFilterOperatorDoesNotContain: 'Does not contain',
77
80
  headerFilterOperatorEquals: 'يساوي',
81
+ // headerFilterOperatorDoesNotEqual: 'Does not equal',
78
82
  headerFilterOperatorStartsWith: 'يبدأ ب',
79
83
  headerFilterOperatorEndsWith: 'ينتهي ب',
80
84
  headerFilterOperatorIs: 'هو',
@@ -68,7 +68,9 @@ const beBYGrid = {
68
68
  filterPanelInputPlaceholder: 'Значэнне фільтра',
69
69
  // Filter operators text
70
70
  filterOperatorContains: 'змяшчае',
71
+ // filterOperatorDoesNotContain: 'does not contain',
71
72
  filterOperatorEquals: 'роўны',
73
+ // filterOperatorDoesNotEqual: 'does not equal',
72
74
  filterOperatorStartsWith: 'пачынаецца з',
73
75
  filterOperatorEndsWith: 'скончваецца на',
74
76
  filterOperatorIs: 'роўны',
@@ -89,7 +91,9 @@ const beBYGrid = {
89
91
 
90
92
  // Header filter operators text
91
93
  // headerFilterOperatorContains: 'Contains',
94
+ // headerFilterOperatorDoesNotContain: 'Does not contain',
92
95
  // headerFilterOperatorEquals: 'Equals',
96
+ // headerFilterOperatorDoesNotEqual: 'Does not equal',
93
97
  // headerFilterOperatorStartsWith: 'Starts with',
94
98
  // headerFilterOperatorEndsWith: 'Ends with',
95
99
  // headerFilterOperatorIs: 'Is',
@@ -54,7 +54,9 @@ const bgBGGrid = {
54
54
  filterPanelInputPlaceholder: 'Стойност на филтъра',
55
55
  // Filter operators text
56
56
  filterOperatorContains: 'съдържа',
57
+ // filterOperatorDoesNotContain: 'does not contain',
57
58
  filterOperatorEquals: 'равно',
59
+ // filterOperatorDoesNotEqual: 'does not equal',
58
60
  filterOperatorStartsWith: 'започва с',
59
61
  filterOperatorEndsWith: 'завършва с',
60
62
  filterOperatorIs: 'е',
@@ -74,7 +76,9 @@ const bgBGGrid = {
74
76
  'filterOperator<=': '<=',
75
77
  // Header filter operators text
76
78
  headerFilterOperatorContains: 'Съдържа',
79
+ // headerFilterOperatorDoesNotContain: 'Does not contain',
77
80
  headerFilterOperatorEquals: 'Равнo',
81
+ // headerFilterOperatorDoesNotEqual: 'Does not equal',
78
82
  headerFilterOperatorStartsWith: 'Започва с',
79
83
  headerFilterOperatorEndsWith: 'Завършва с',
80
84
  headerFilterOperatorIs: 'Равно е на',
@@ -61,7 +61,9 @@ const csCZGrid = {
61
61
  filterPanelInputPlaceholder: 'Hodnota filtru',
62
62
  // Filter operators text
63
63
  filterOperatorContains: 'obsahuje',
64
+ // filterOperatorDoesNotContain: 'does not contain',
64
65
  filterOperatorEquals: 'rovná se',
66
+ // filterOperatorDoesNotEqual: 'does not equal',
65
67
  filterOperatorStartsWith: 'začíná na',
66
68
  filterOperatorEndsWith: 'končí na',
67
69
  filterOperatorIs: 'je',
@@ -81,7 +83,9 @@ const csCZGrid = {
81
83
  'filterOperator<=': '<=',
82
84
  // Header filter operators text
83
85
  headerFilterOperatorContains: 'Obsahuje',
86
+ // headerFilterOperatorDoesNotContain: 'Does not contain',
84
87
  headerFilterOperatorEquals: 'Rovná se',
88
+ // headerFilterOperatorDoesNotEqual: 'Does not equal',
85
89
  headerFilterOperatorStartsWith: 'Začíná na',
86
90
  headerFilterOperatorEndsWith: 'Končí na',
87
91
  headerFilterOperatorIs: 'Je',
@@ -54,7 +54,9 @@ const daDKGrid = {
54
54
  filterPanelInputPlaceholder: 'Filterværdi',
55
55
  // Filter operators text
56
56
  filterOperatorContains: 'indeholder',
57
+ // filterOperatorDoesNotContain: 'does not contain',
57
58
  filterOperatorEquals: 'lig med',
59
+ // filterOperatorDoesNotEqual: 'does not equal',
58
60
  filterOperatorStartsWith: 'begynder med',
59
61
  filterOperatorEndsWith: 'ender med',
60
62
  filterOperatorIs: 'er lig med',
@@ -74,7 +76,9 @@ const daDKGrid = {
74
76
  'filterOperator<=': '<=',
75
77
  // Header filter operators text
76
78
  headerFilterOperatorContains: 'Indeholder',
79
+ // headerFilterOperatorDoesNotContain: 'Does not contain',
77
80
  headerFilterOperatorEquals: 'Lig med',
81
+ // headerFilterOperatorDoesNotEqual: 'Does not equal',
78
82
  headerFilterOperatorStartsWith: 'Begynder med',
79
83
  headerFilterOperatorEndsWith: 'Ender med',
80
84
  headerFilterOperatorIs: 'Er lig med',
@@ -53,7 +53,9 @@ const deDEGrid = {
53
53
  filterPanelInputPlaceholder: 'Wert filtern',
54
54
  // Filter operators text
55
55
  filterOperatorContains: 'enthält',
56
+ // filterOperatorDoesNotContain: 'does not contain',
56
57
  filterOperatorEquals: 'ist gleich',
58
+ // filterOperatorDoesNotEqual: 'does not equal',
57
59
  filterOperatorStartsWith: 'beginnt mit',
58
60
  filterOperatorEndsWith: 'endet mit',
59
61
  filterOperatorIs: 'ist',
@@ -73,7 +75,9 @@ const deDEGrid = {
73
75
  'filterOperator<=': '<=',
74
76
  // Header filter operators text
75
77
  headerFilterOperatorContains: 'Enthält',
78
+ // headerFilterOperatorDoesNotContain: 'Does not contain',
76
79
  headerFilterOperatorEquals: 'Gleich',
80
+ // headerFilterOperatorDoesNotEqual: 'Does not equal',
77
81
  headerFilterOperatorStartsWith: 'Beginnt mit',
78
82
  headerFilterOperatorEndsWith: 'Endet mit',
79
83
  headerFilterOperatorIs: 'Ist',
@@ -54,7 +54,9 @@ const elGRGrid = {
54
54
  filterPanelInputPlaceholder: 'Τιμή φίλτρου',
55
55
  // Filter operators text
56
56
  filterOperatorContains: 'περιέχει',
57
+ // filterOperatorDoesNotContain: 'does not contain',
57
58
  filterOperatorEquals: 'ισούται',
59
+ // filterOperatorDoesNotEqual: 'does not equal',
58
60
  filterOperatorStartsWith: 'ξεκινάει με',
59
61
  filterOperatorEndsWith: 'τελειώνει με',
60
62
  filterOperatorIs: 'είναι',
@@ -74,7 +76,9 @@ const elGRGrid = {
74
76
  'filterOperator<=': '<=',
75
77
  // Header filter operators text
76
78
  headerFilterOperatorContains: 'Περιέχει',
79
+ // headerFilterOperatorDoesNotContain: 'Does not contain',
77
80
  headerFilterOperatorEquals: 'Ισούται',
81
+ // headerFilterOperatorDoesNotEqual: 'Does not equal',
78
82
  headerFilterOperatorStartsWith: 'Ξεκινάει με',
79
83
  headerFilterOperatorEndsWith: 'Τελειώνει με',
80
84
  headerFilterOperatorIs: 'Είναι',
@@ -53,7 +53,9 @@ const esESGrid = {
53
53
  filterPanelInputPlaceholder: 'Valor de filtro',
54
54
  // Filter operators text
55
55
  filterOperatorContains: 'contiene',
56
+ // filterOperatorDoesNotContain: 'does not contain',
56
57
  filterOperatorEquals: 'es igual',
58
+ // filterOperatorDoesNotEqual: 'does not equal',
57
59
  filterOperatorStartsWith: 'comienza con',
58
60
  filterOperatorEndsWith: 'termina con',
59
61
  filterOperatorIs: 'es',
@@ -73,7 +75,9 @@ const esESGrid = {
73
75
  'filterOperator<=': '<=',
74
76
  // Header filter operators text
75
77
  headerFilterOperatorContains: 'Contiene',
78
+ // headerFilterOperatorDoesNotContain: 'Does not contain',
76
79
  headerFilterOperatorEquals: 'Es igual a',
80
+ // headerFilterOperatorDoesNotEqual: 'Does not equal',
77
81
  headerFilterOperatorStartsWith: 'Comienza con',
78
82
  headerFilterOperatorEndsWith: 'Termina con',
79
83
  headerFilterOperatorIs: 'Es',
@@ -53,7 +53,9 @@ const faIRGrid = {
53
53
  filterPanelInputPlaceholder: 'فیلتر مقدار',
54
54
  // Filter operators text
55
55
  filterOperatorContains: 'شامل',
56
+ // filterOperatorDoesNotContain: 'does not contain',
56
57
  filterOperatorEquals: 'مساوی',
58
+ // filterOperatorDoesNotEqual: 'does not equal',
57
59
  filterOperatorStartsWith: 'شروع با',
58
60
  filterOperatorEndsWith: 'پایان با',
59
61
  filterOperatorIs: 'هست',
@@ -73,7 +75,9 @@ const faIRGrid = {
73
75
  'filterOperator<=': '<=',
74
76
  // Header filter operators text
75
77
  headerFilterOperatorContains: 'شامل',
78
+ // headerFilterOperatorDoesNotContain: 'Does not contain',
76
79
  headerFilterOperatorEquals: 'مساوی',
80
+ // headerFilterOperatorDoesNotEqual: 'Does not equal',
77
81
  headerFilterOperatorStartsWith: 'شروع با',
78
82
  headerFilterOperatorEndsWith: 'پایان با',
79
83
  headerFilterOperatorIs: 'هست',
@@ -53,7 +53,9 @@ const fiFIGrid = {
53
53
  filterPanelInputPlaceholder: 'Suodattimen arvo',
54
54
  // Filter operators text
55
55
  filterOperatorContains: 'sisältää',
56
+ // filterOperatorDoesNotContain: 'does not contain',
56
57
  filterOperatorEquals: 'on yhtä suuri kuin',
58
+ // filterOperatorDoesNotEqual: 'does not equal',
57
59
  filterOperatorStartsWith: 'alkaa',
58
60
  filterOperatorEndsWith: 'päättyy',
59
61
  filterOperatorIs: 'on',
@@ -73,7 +75,9 @@ const fiFIGrid = {
73
75
  'filterOperator<=': '<=',
74
76
  // Header filter operators text
75
77
  headerFilterOperatorContains: 'Sisältää',
78
+ // headerFilterOperatorDoesNotContain: 'Does not contain',
76
79
  headerFilterOperatorEquals: 'On yhtä suuri kuin',
80
+ // headerFilterOperatorDoesNotEqual: 'Does not equal',
77
81
  headerFilterOperatorStartsWith: 'Alkaa',
78
82
  headerFilterOperatorEndsWith: 'Päättyy',
79
83
  headerFilterOperatorIs: 'On',