@mui/x-data-grid 7.0.0-alpha.9 → 7.0.0-beta.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 (193) hide show
  1. package/CHANGELOG.md +139 -38
  2. package/README.md +2 -2
  3. package/components/GridRow.js +1 -100
  4. package/components/columnsManagement/GridColumnsManagement.d.ts +36 -0
  5. package/components/columnsManagement/GridColumnsManagement.js +260 -0
  6. package/components/columnsManagement/index.d.ts +1 -0
  7. package/components/columnsManagement/index.js +1 -0
  8. package/components/columnsManagement/utils.d.ts +4 -0
  9. package/components/columnsManagement/utils.js +16 -0
  10. package/components/index.d.ts +1 -0
  11. package/components/index.js +1 -0
  12. package/components/panel/GridColumnsPanel.d.ts +0 -28
  13. package/components/panel/GridColumnsPanel.js +5 -213
  14. package/constants/defaultGridSlotsComponents.js +2 -1
  15. package/constants/gridClasses.d.ts +12 -4
  16. package/constants/gridClasses.js +1 -1
  17. package/constants/localeTextConstants.js +4 -6
  18. package/hooks/core/useGridApiInitialization.js +4 -0
  19. package/hooks/features/rows/gridRowsUtils.js +4 -1
  20. package/index.js +1 -1
  21. package/legacy/components/GridRow.js +1 -100
  22. package/legacy/components/columnsManagement/GridColumnsManagement.js +300 -0
  23. package/legacy/components/columnsManagement/index.js +1 -0
  24. package/legacy/components/columnsManagement/utils.js +22 -0
  25. package/legacy/components/index.js +1 -0
  26. package/legacy/components/panel/GridColumnsPanel.js +5 -233
  27. package/legacy/constants/defaultGridSlotsComponents.js +2 -1
  28. package/legacy/constants/gridClasses.js +1 -1
  29. package/legacy/constants/localeTextConstants.js +4 -6
  30. package/legacy/hooks/core/useGridApiInitialization.js +4 -0
  31. package/legacy/hooks/features/rows/gridRowsUtils.js +4 -1
  32. package/legacy/index.js +1 -1
  33. package/legacy/locales/arSD.js +5 -6
  34. package/legacy/locales/beBY.js +5 -6
  35. package/legacy/locales/bgBG.js +5 -6
  36. package/legacy/locales/csCZ.js +5 -6
  37. package/legacy/locales/daDK.js +5 -6
  38. package/legacy/locales/deDE.js +5 -6
  39. package/legacy/locales/elGR.js +5 -6
  40. package/legacy/locales/esES.js +5 -6
  41. package/legacy/locales/faIR.js +5 -6
  42. package/legacy/locales/fiFI.js +5 -6
  43. package/legacy/locales/frFR.js +5 -6
  44. package/legacy/locales/heIL.js +5 -6
  45. package/legacy/locales/hrHR.js +5 -6
  46. package/legacy/locales/huHU.js +5 -6
  47. package/legacy/locales/itIT.js +5 -6
  48. package/legacy/locales/jaJP.js +5 -6
  49. package/legacy/locales/koKR.js +5 -6
  50. package/legacy/locales/nbNO.js +5 -6
  51. package/legacy/locales/nlNL.js +5 -6
  52. package/legacy/locales/plPL.js +5 -6
  53. package/legacy/locales/ptBR.js +5 -6
  54. package/legacy/locales/ptPT.js +5 -6
  55. package/legacy/locales/roRO.js +5 -6
  56. package/legacy/locales/ruRU.js +5 -6
  57. package/legacy/locales/skSK.js +5 -6
  58. package/legacy/locales/svSE.js +5 -6
  59. package/legacy/locales/trTR.js +5 -6
  60. package/legacy/locales/ukUA.js +5 -6
  61. package/legacy/locales/urPK.js +5 -6
  62. package/legacy/locales/viVN.js +5 -6
  63. package/legacy/locales/zhCN.js +5 -6
  64. package/legacy/locales/zhHK.js +5 -6
  65. package/legacy/locales/zhTW.js +5 -6
  66. package/locales/arSD.js +5 -6
  67. package/locales/beBY.js +5 -6
  68. package/locales/bgBG.js +5 -6
  69. package/locales/csCZ.js +5 -6
  70. package/locales/daDK.js +5 -6
  71. package/locales/deDE.js +5 -6
  72. package/locales/elGR.js +5 -6
  73. package/locales/esES.js +5 -6
  74. package/locales/faIR.js +5 -6
  75. package/locales/fiFI.js +5 -6
  76. package/locales/frFR.js +5 -6
  77. package/locales/heIL.js +5 -6
  78. package/locales/hrHR.js +5 -6
  79. package/locales/huHU.js +5 -6
  80. package/locales/itIT.js +5 -6
  81. package/locales/jaJP.js +5 -6
  82. package/locales/koKR.js +5 -6
  83. package/locales/nbNO.js +5 -6
  84. package/locales/nlNL.js +5 -6
  85. package/locales/plPL.js +5 -6
  86. package/locales/ptBR.js +5 -6
  87. package/locales/ptPT.js +5 -6
  88. package/locales/roRO.js +5 -6
  89. package/locales/ruRU.js +5 -6
  90. package/locales/skSK.js +5 -6
  91. package/locales/svSE.js +5 -6
  92. package/locales/trTR.js +5 -6
  93. package/locales/ukUA.js +5 -6
  94. package/locales/urPK.js +5 -6
  95. package/locales/viVN.js +5 -6
  96. package/locales/zhCN.js +5 -6
  97. package/locales/zhHK.js +5 -6
  98. package/locales/zhTW.js +5 -6
  99. package/models/api/gridLocaleTextApi.d.ts +3 -5
  100. package/models/colDef/gridColType.d.ts +11 -2
  101. package/models/gridSlotsComponent.d.ts +5 -0
  102. package/models/gridSlotsComponentsProps.d.ts +4 -0
  103. package/modern/components/GridRow.js +1 -100
  104. package/modern/components/columnsManagement/GridColumnsManagement.js +256 -0
  105. package/modern/components/columnsManagement/index.js +1 -0
  106. package/modern/components/columnsManagement/utils.js +16 -0
  107. package/modern/components/index.js +1 -0
  108. package/modern/components/panel/GridColumnsPanel.js +4 -209
  109. package/modern/constants/defaultGridSlotsComponents.js +2 -1
  110. package/modern/constants/gridClasses.js +1 -1
  111. package/modern/constants/localeTextConstants.js +4 -6
  112. package/modern/hooks/core/useGridApiInitialization.js +3 -0
  113. package/modern/hooks/features/rows/gridRowsUtils.js +4 -1
  114. package/modern/index.js +1 -1
  115. package/modern/locales/arSD.js +5 -6
  116. package/modern/locales/beBY.js +5 -6
  117. package/modern/locales/bgBG.js +5 -6
  118. package/modern/locales/csCZ.js +5 -6
  119. package/modern/locales/daDK.js +5 -6
  120. package/modern/locales/deDE.js +5 -6
  121. package/modern/locales/elGR.js +5 -6
  122. package/modern/locales/esES.js +5 -6
  123. package/modern/locales/faIR.js +5 -6
  124. package/modern/locales/fiFI.js +5 -6
  125. package/modern/locales/frFR.js +5 -6
  126. package/modern/locales/heIL.js +5 -6
  127. package/modern/locales/hrHR.js +5 -6
  128. package/modern/locales/huHU.js +5 -6
  129. package/modern/locales/itIT.js +5 -6
  130. package/modern/locales/jaJP.js +5 -6
  131. package/modern/locales/koKR.js +5 -6
  132. package/modern/locales/nbNO.js +5 -6
  133. package/modern/locales/nlNL.js +5 -6
  134. package/modern/locales/plPL.js +5 -6
  135. package/modern/locales/ptBR.js +5 -6
  136. package/modern/locales/ptPT.js +5 -6
  137. package/modern/locales/roRO.js +5 -6
  138. package/modern/locales/ruRU.js +5 -6
  139. package/modern/locales/skSK.js +5 -6
  140. package/modern/locales/svSE.js +5 -6
  141. package/modern/locales/trTR.js +5 -6
  142. package/modern/locales/ukUA.js +5 -6
  143. package/modern/locales/urPK.js +5 -6
  144. package/modern/locales/viVN.js +5 -6
  145. package/modern/locales/zhCN.js +5 -6
  146. package/modern/locales/zhHK.js +5 -6
  147. package/modern/locales/zhTW.js +5 -6
  148. package/node/components/GridRow.js +1 -100
  149. package/node/components/columnsManagement/GridColumnsManagement.js +264 -0
  150. package/node/components/columnsManagement/index.js +16 -0
  151. package/node/components/columnsManagement/utils.js +24 -0
  152. package/node/components/index.js +11 -0
  153. package/node/components/panel/GridColumnsPanel.js +4 -208
  154. package/node/constants/defaultGridSlotsComponents.js +1 -0
  155. package/node/constants/gridClasses.js +1 -1
  156. package/node/constants/localeTextConstants.js +4 -6
  157. package/node/hooks/core/useGridApiInitialization.js +3 -0
  158. package/node/hooks/features/rows/gridRowsUtils.js +4 -1
  159. package/node/index.js +1 -1
  160. package/node/locales/arSD.js +5 -6
  161. package/node/locales/beBY.js +5 -6
  162. package/node/locales/bgBG.js +5 -6
  163. package/node/locales/csCZ.js +5 -6
  164. package/node/locales/daDK.js +5 -6
  165. package/node/locales/deDE.js +5 -6
  166. package/node/locales/elGR.js +5 -6
  167. package/node/locales/esES.js +5 -6
  168. package/node/locales/faIR.js +5 -6
  169. package/node/locales/fiFI.js +5 -6
  170. package/node/locales/frFR.js +5 -6
  171. package/node/locales/heIL.js +5 -6
  172. package/node/locales/hrHR.js +5 -6
  173. package/node/locales/huHU.js +5 -6
  174. package/node/locales/itIT.js +5 -6
  175. package/node/locales/jaJP.js +5 -6
  176. package/node/locales/koKR.js +5 -6
  177. package/node/locales/nbNO.js +5 -6
  178. package/node/locales/nlNL.js +5 -6
  179. package/node/locales/plPL.js +5 -6
  180. package/node/locales/ptBR.js +5 -6
  181. package/node/locales/ptPT.js +5 -6
  182. package/node/locales/roRO.js +5 -6
  183. package/node/locales/ruRU.js +5 -6
  184. package/node/locales/skSK.js +5 -6
  185. package/node/locales/svSE.js +5 -6
  186. package/node/locales/trTR.js +5 -6
  187. package/node/locales/ukUA.js +5 -6
  188. package/node/locales/urPK.js +5 -6
  189. package/node/locales/viVN.js +5 -6
  190. package/node/locales/zhCN.js +5 -6
  191. package/node/locales/zhHK.js +5 -6
  192. package/node/locales/zhTW.js +5 -6
  193. package/package.json +3 -3
@@ -69,6 +69,7 @@ function createPublicAPI(privateApiRef) {
69
69
  return publicApi;
70
70
  }
71
71
  export function useGridApiInitialization(inputApiRef, props) {
72
+ var _inputApiRef$current;
72
73
  const publicApiRef = React.useRef();
73
74
  const privateApiRef = React.useRef();
74
75
  if (!privateApiRef.current) {
@@ -99,6 +100,9 @@ export function useGridApiInitialization(inputApiRef, props) {
99
100
  subscribeEvent,
100
101
  publishEvent
101
102
  }, 'public');
103
+ if (inputApiRef && !((_inputApiRef$current = inputApiRef.current) != null && _inputApiRef$current.state)) {
104
+ inputApiRef.current = publicApiRef.current;
105
+ }
102
106
  React.useImperativeHandle(inputApiRef, () => publicApiRef.current, [publicApiRef]);
103
107
  React.useEffect(() => {
104
108
  const api = privateApiRef.current;
@@ -131,7 +131,10 @@ export const getTreeNodeDescendants = (tree, parentId, skipAutoGeneratedRows) =>
131
131
  if (!skipAutoGeneratedRows || !isAutoGeneratedRow(tree[child])) {
132
132
  validDescendants.push(child);
133
133
  }
134
- validDescendants.push(...getTreeNodeDescendants(tree, child, skipAutoGeneratedRows));
134
+ const childDescendants = getTreeNodeDescendants(tree, child, skipAutoGeneratedRows);
135
+ for (let j = 0; j < childDescendants.length; j += 1) {
136
+ validDescendants.push(childDescendants[j]);
137
+ }
135
138
  }
136
139
  if (!skipAutoGeneratedRows && node.footerId != null) {
137
140
  validDescendants.push(node.footerId);
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v7.0.0-alpha.9
2
+ * @mui/x-data-grid v7.0.0-beta.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -438,106 +438,7 @@ process.env.NODE_ENV !== "production" ? GridRow.propTypes = {
438
438
  onDoubleClick: PropTypes.func,
439
439
  onMouseEnter: PropTypes.func,
440
440
  onMouseLeave: PropTypes.func,
441
- pinnedColumns: PropTypes.shape({
442
- left: PropTypes.arrayOf(PropTypes.shape({
443
- align: PropTypes.oneOf(['center', 'left', 'right']),
444
- cellClassName: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
445
- colSpan: PropTypes.oneOfType([PropTypes.func, PropTypes.number]),
446
- computedWidth: PropTypes.number.isRequired,
447
- description: PropTypes.string,
448
- disableColumnMenu: PropTypes.bool,
449
- disableExport: PropTypes.bool,
450
- disableReorder: PropTypes.bool,
451
- editable: PropTypes.bool,
452
- field: PropTypes.string.isRequired,
453
- filterable: PropTypes.bool,
454
- filterOperators: PropTypes.arrayOf(PropTypes.shape({
455
- getApplyFilterFn: PropTypes.func.isRequired,
456
- getValueAsString: PropTypes.func,
457
- headerLabel: PropTypes.string,
458
- InputComponent: PropTypes.elementType,
459
- InputComponentProps: PropTypes.object,
460
- label: PropTypes.string,
461
- requiresFilterValue: PropTypes.bool,
462
- value: PropTypes.string.isRequired
463
- })),
464
- flex: PropTypes.number,
465
- getApplyQuickFilterFn: PropTypes.func,
466
- groupable: PropTypes.bool,
467
- hasBeenResized: PropTypes.bool,
468
- headerAlign: PropTypes.oneOf(['center', 'left', 'right']),
469
- headerClassName: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
470
- headerName: PropTypes.string,
471
- hideable: PropTypes.bool,
472
- hideSortIcons: PropTypes.bool,
473
- maxWidth: PropTypes.number,
474
- minWidth: PropTypes.number,
475
- pinnable: PropTypes.bool,
476
- preProcessEditCellProps: PropTypes.func,
477
- renderCell: PropTypes.func,
478
- renderEditCell: PropTypes.func,
479
- renderHeader: PropTypes.func,
480
- resizable: PropTypes.bool,
481
- sortable: PropTypes.bool,
482
- sortComparator: PropTypes.func,
483
- sortingOrder: PropTypes.arrayOf(PropTypes.oneOf(['asc', 'desc'])),
484
- type: PropTypes.oneOf(['actions', 'boolean', 'custom', 'date', 'dateTime', 'number', 'singleSelect', 'string']),
485
- valueFormatter: PropTypes.func,
486
- valueGetter: PropTypes.func,
487
- valueParser: PropTypes.func,
488
- valueSetter: PropTypes.func,
489
- width: PropTypes.number
490
- })).isRequired,
491
- right: PropTypes.arrayOf(PropTypes.shape({
492
- align: PropTypes.oneOf(['center', 'left', 'right']),
493
- cellClassName: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
494
- colSpan: PropTypes.oneOfType([PropTypes.func, PropTypes.number]),
495
- computedWidth: PropTypes.number.isRequired,
496
- description: PropTypes.string,
497
- disableColumnMenu: PropTypes.bool,
498
- disableExport: PropTypes.bool,
499
- disableReorder: PropTypes.bool,
500
- editable: PropTypes.bool,
501
- field: PropTypes.string.isRequired,
502
- filterable: PropTypes.bool,
503
- filterOperators: PropTypes.arrayOf(PropTypes.shape({
504
- getApplyFilterFn: PropTypes.func.isRequired,
505
- getValueAsString: PropTypes.func,
506
- headerLabel: PropTypes.string,
507
- InputComponent: PropTypes.elementType,
508
- InputComponentProps: PropTypes.object,
509
- label: PropTypes.string,
510
- requiresFilterValue: PropTypes.bool,
511
- value: PropTypes.string.isRequired
512
- })),
513
- flex: PropTypes.number,
514
- getApplyQuickFilterFn: PropTypes.func,
515
- groupable: PropTypes.bool,
516
- hasBeenResized: PropTypes.bool,
517
- headerAlign: PropTypes.oneOf(['center', 'left', 'right']),
518
- headerClassName: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
519
- headerName: PropTypes.string,
520
- hideable: PropTypes.bool,
521
- hideSortIcons: PropTypes.bool,
522
- maxWidth: PropTypes.number,
523
- minWidth: PropTypes.number,
524
- pinnable: PropTypes.bool,
525
- preProcessEditCellProps: PropTypes.func,
526
- renderCell: PropTypes.func,
527
- renderEditCell: PropTypes.func,
528
- renderHeader: PropTypes.func,
529
- resizable: PropTypes.bool,
530
- sortable: PropTypes.bool,
531
- sortComparator: PropTypes.func,
532
- sortingOrder: PropTypes.arrayOf(PropTypes.oneOf(['asc', 'desc'])),
533
- type: PropTypes.oneOf(['actions', 'boolean', 'custom', 'date', 'dateTime', 'number', 'singleSelect', 'string']),
534
- valueFormatter: PropTypes.func,
535
- valueGetter: PropTypes.func,
536
- valueParser: PropTypes.func,
537
- valueSetter: PropTypes.func,
538
- width: PropTypes.number
539
- })).isRequired
540
- }).isRequired,
441
+ pinnedColumns: PropTypes.object.isRequired,
541
442
  renderedColumns: PropTypes.arrayOf(PropTypes.object).isRequired,
542
443
  row: PropTypes.object,
543
444
  rowHeight: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number]).isRequired,
@@ -0,0 +1,300 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
4
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
5
+ /* eslint-disable @typescript-eslint/no-use-before-define */
6
+ import * as React from 'react';
7
+ import PropTypes from 'prop-types';
8
+ import { unstable_composeClasses as composeClasses } from '@mui/utils';
9
+ import FormControlLabel from '@mui/material/FormControlLabel';
10
+ import { styled } from '@mui/material/styles';
11
+ import { gridColumnDefinitionsSelector, gridColumnVisibilityModelSelector } from '../../hooks/features/columns/gridColumnsSelector';
12
+ import { useGridSelector } from '../../hooks/utils/useGridSelector';
13
+ import { useGridApiContext } from '../../hooks/utils/useGridApiContext';
14
+ import { useGridRootProps } from '../../hooks/utils/useGridRootProps';
15
+ import { getDataGridUtilityClass } from '../../constants/gridClasses';
16
+ import { useLazyRef } from '../../hooks/utils/useLazyRef';
17
+ import { checkColumnVisibilityModelsSame, defaultSearchPredicate } from './utils';
18
+ import { jsx as _jsx } from "react/jsx-runtime";
19
+ import { jsxs as _jsxs } from "react/jsx-runtime";
20
+ var useUtilityClasses = function useUtilityClasses(ownerState) {
21
+ var classes = ownerState.classes;
22
+ var slots = {
23
+ root: ['columnsManagement'],
24
+ header: ['columnsManagementHeader'],
25
+ footer: ['columnsManagementFooter'],
26
+ row: ['columnsManagementRow']
27
+ };
28
+ return composeClasses(slots, getDataGridUtilityClass, classes);
29
+ };
30
+ var collator = new Intl.Collator();
31
+ function GridColumnsManagement(props) {
32
+ var _rootProps$slotProps, _rootProps$slotProps3, _rootProps$slotProps4;
33
+ var apiRef = useGridApiContext();
34
+ var searchInputRef = React.useRef(null);
35
+ var columns = useGridSelector(apiRef, gridColumnDefinitionsSelector);
36
+ var initialColumnVisibilityModel = useLazyRef(function () {
37
+ return gridColumnVisibilityModelSelector(apiRef);
38
+ }).current;
39
+ var columnVisibilityModel = useGridSelector(apiRef, gridColumnVisibilityModelSelector);
40
+ var rootProps = useGridRootProps();
41
+ var _React$useState = React.useState(''),
42
+ _React$useState2 = _slicedToArray(_React$useState, 2),
43
+ searchValue = _React$useState2[0],
44
+ setSearchValue = _React$useState2[1];
45
+ var classes = useUtilityClasses(rootProps);
46
+ var sort = props.sort,
47
+ _props$searchPredicat = props.searchPredicate,
48
+ searchPredicate = _props$searchPredicat === void 0 ? defaultSearchPredicate : _props$searchPredicat,
49
+ _props$autoFocusSearc = props.autoFocusSearchField,
50
+ autoFocusSearchField = _props$autoFocusSearc === void 0 ? true : _props$autoFocusSearc,
51
+ _props$disableShowHid = props.disableShowHideToggle,
52
+ disableShowHideToggle = _props$disableShowHid === void 0 ? false : _props$disableShowHid,
53
+ _props$disableResetBu = props.disableResetButton,
54
+ disableResetButton = _props$disableResetBu === void 0 ? false : _props$disableResetBu,
55
+ getTogglableColumns = props.getTogglableColumns;
56
+ var isResetDisabled = React.useMemo(function () {
57
+ return checkColumnVisibilityModelsSame(columnVisibilityModel, initialColumnVisibilityModel);
58
+ }, [columnVisibilityModel, initialColumnVisibilityModel]);
59
+ var sortedColumns = React.useMemo(function () {
60
+ switch (sort) {
61
+ case 'asc':
62
+ return _toConsumableArray(columns).sort(function (a, b) {
63
+ return collator.compare(a.headerName || a.field, b.headerName || b.field);
64
+ });
65
+ case 'desc':
66
+ return _toConsumableArray(columns).sort(function (a, b) {
67
+ return -collator.compare(a.headerName || a.field, b.headerName || b.field);
68
+ });
69
+ default:
70
+ return columns;
71
+ }
72
+ }, [columns, sort]);
73
+ var toggleColumn = function toggleColumn(event) {
74
+ var _ref = event.target,
75
+ field = _ref.name;
76
+ apiRef.current.setColumnVisibility(field, columnVisibilityModel[field] === false);
77
+ };
78
+ var toggleAllColumns = React.useCallback(function (isVisible) {
79
+ var currentModel = gridColumnVisibilityModelSelector(apiRef);
80
+ var newModel = _extends({}, currentModel);
81
+ var togglableColumns = getTogglableColumns ? getTogglableColumns(columns) : null;
82
+ columns.forEach(function (col) {
83
+ if (col.hideable && (togglableColumns == null || togglableColumns.includes(col.field))) {
84
+ if (isVisible) {
85
+ // delete the key from the model instead of setting it to `true`
86
+ delete newModel[col.field];
87
+ } else {
88
+ newModel[col.field] = false;
89
+ }
90
+ }
91
+ });
92
+ return apiRef.current.setColumnVisibilityModel(newModel);
93
+ }, [apiRef, columns, getTogglableColumns]);
94
+ var handleSearchValueChange = React.useCallback(function (event) {
95
+ setSearchValue(event.target.value);
96
+ }, []);
97
+ var currentColumns = React.useMemo(function () {
98
+ var togglableColumns = getTogglableColumns ? getTogglableColumns(sortedColumns) : null;
99
+ var togglableSortedColumns = togglableColumns ? sortedColumns.filter(function (_ref2) {
100
+ var field = _ref2.field;
101
+ return togglableColumns.includes(field);
102
+ }) : sortedColumns;
103
+ if (!searchValue) {
104
+ return togglableSortedColumns;
105
+ }
106
+ return togglableSortedColumns.filter(function (column) {
107
+ return searchPredicate(column, searchValue.toLowerCase());
108
+ });
109
+ }, [sortedColumns, searchValue, searchPredicate, getTogglableColumns]);
110
+ var hideableColumns = React.useMemo(function () {
111
+ return currentColumns.filter(function (col) {
112
+ return col.hideable;
113
+ });
114
+ }, [currentColumns]);
115
+ var allHideableColumnsVisible = React.useMemo(function () {
116
+ return hideableColumns.every(function (column) {
117
+ return columnVisibilityModel[column.field] == null || columnVisibilityModel[column.field] !== false;
118
+ });
119
+ }, [columnVisibilityModel, hideableColumns]);
120
+ var allHideableColumnsHidden = React.useMemo(function () {
121
+ return hideableColumns.every(function (column) {
122
+ return columnVisibilityModel[column.field] === false;
123
+ });
124
+ }, [columnVisibilityModel, hideableColumns]);
125
+ var firstSwitchRef = React.useRef(null);
126
+ React.useEffect(function () {
127
+ if (autoFocusSearchField) {
128
+ searchInputRef.current.focus();
129
+ } else if (firstSwitchRef.current && typeof firstSwitchRef.current.focus === 'function') {
130
+ firstSwitchRef.current.focus();
131
+ }
132
+ }, [autoFocusSearchField]);
133
+ var firstHideableColumnFound = false;
134
+ var isFirstHideableColumn = function isFirstHideableColumn(column) {
135
+ if (firstHideableColumnFound === false && column.hideable !== false) {
136
+ firstHideableColumnFound = true;
137
+ return true;
138
+ }
139
+ return false;
140
+ };
141
+ return /*#__PURE__*/_jsxs(React.Fragment, {
142
+ children: [/*#__PURE__*/_jsx(GridColumnsManagementHeader, {
143
+ className: classes.header,
144
+ ownerState: rootProps,
145
+ children: /*#__PURE__*/_jsx(rootProps.slots.baseTextField, _extends({
146
+ placeholder: apiRef.current.getLocaleText('columnsManagementSearchTitle'),
147
+ inputRef: searchInputRef,
148
+ value: searchValue,
149
+ onChange: handleSearchValueChange,
150
+ variant: "outlined",
151
+ size: "small",
152
+ InputProps: {
153
+ startAdornment: /*#__PURE__*/_jsx(rootProps.slots.baseInputAdornment, {
154
+ position: "start",
155
+ children: /*#__PURE__*/_jsx(rootProps.slots.quickFilterIcon, {})
156
+ }),
157
+ sx: {
158
+ pl: 1.5
159
+ }
160
+ },
161
+ fullWidth: true
162
+ }, (_rootProps$slotProps = rootProps.slotProps) == null ? void 0 : _rootProps$slotProps.baseTextField))
163
+ }), /*#__PURE__*/_jsxs(GridColumnsManagementBody, {
164
+ className: classes.root,
165
+ ownerState: rootProps,
166
+ children: [currentColumns.map(function (column) {
167
+ var _rootProps$slotProps2;
168
+ return /*#__PURE__*/_jsx(FormControlLabel, {
169
+ className: classes.row,
170
+ control: /*#__PURE__*/_jsx(rootProps.slots.baseCheckbox, _extends({
171
+ disabled: column.hideable === false,
172
+ checked: columnVisibilityModel[column.field] !== false,
173
+ onClick: toggleColumn,
174
+ name: column.field,
175
+ sx: {
176
+ p: 0.5
177
+ },
178
+ inputRef: isFirstHideableColumn(column) ? firstSwitchRef : undefined
179
+ }, (_rootProps$slotProps2 = rootProps.slotProps) == null ? void 0 : _rootProps$slotProps2.baseCheckbox)),
180
+ label: column.headerName || column.field
181
+ }, column.field);
182
+ }), currentColumns.length === 0 && /*#__PURE__*/_jsx(GridColumnsManagementEmptyText, {
183
+ ownerState: rootProps,
184
+ children: apiRef.current.getLocaleText('columnsManagementNoColumns')
185
+ })]
186
+ }), !disableShowHideToggle && !disableResetButton && currentColumns.length > 0 ? /*#__PURE__*/_jsxs(GridColumnsManagementFooter, {
187
+ ownerState: rootProps,
188
+ className: classes.footer,
189
+ children: [!disableShowHideToggle ? /*#__PURE__*/_jsx(FormControlLabel, {
190
+ control: /*#__PURE__*/_jsx(rootProps.slots.baseCheckbox, _extends({
191
+ disabled: hideableColumns.length === 0,
192
+ checked: allHideableColumnsVisible,
193
+ indeterminate: !allHideableColumnsVisible && !allHideableColumnsHidden,
194
+ onClick: function onClick() {
195
+ return toggleAllColumns(!allHideableColumnsVisible);
196
+ },
197
+ name: apiRef.current.getLocaleText('columnsManagementShowHideAllText')
198
+ }, (_rootProps$slotProps3 = rootProps.slotProps) == null ? void 0 : _rootProps$slotProps3.baseCheckbox)),
199
+ sx: _defineProperty({}, ".MuiFormControlLabel-label", {
200
+ textTransform: 'uppercase',
201
+ fontSize: '14px'
202
+ }),
203
+ label: apiRef.current.getLocaleText('columnsManagementShowHideAllText')
204
+ }) : /*#__PURE__*/_jsx("span", {}), !disableResetButton ? /*#__PURE__*/_jsx(rootProps.slots.baseButton, _extends({
205
+ onClick: function onClick() {
206
+ return apiRef.current.setColumnVisibilityModel(initialColumnVisibilityModel);
207
+ },
208
+ disabled: isResetDisabled
209
+ }, (_rootProps$slotProps4 = rootProps.slotProps) == null ? void 0 : _rootProps$slotProps4.baseButton, {
210
+ children: "Reset"
211
+ })) : null]
212
+ }) : null]
213
+ });
214
+ }
215
+ process.env.NODE_ENV !== "production" ? GridColumnsManagement.propTypes = {
216
+ // ----------------------------- Warning --------------------------------
217
+ // | These PropTypes are generated from the TypeScript type definitions |
218
+ // | To update them edit the TypeScript types and run "yarn proptypes" |
219
+ // ----------------------------------------------------------------------
220
+ /**
221
+ * If `true`, the column search field will be focused automatically.
222
+ * If `false`, the first column switch input will be focused automatically.
223
+ * This helps to avoid input keyboard panel to popup automatically on touch devices.
224
+ * @default true
225
+ */
226
+ autoFocusSearchField: PropTypes.bool,
227
+ /**
228
+ * If `true`, the `Reset` button will not be disabled
229
+ * @default false
230
+ */
231
+ disableResetButton: PropTypes.bool,
232
+ /**
233
+ * If `true`, the `Show/Hide all` toggle checkbox will not be displayed.
234
+ * @default false
235
+ */
236
+ disableShowHideToggle: PropTypes.bool,
237
+ /**
238
+ * Returns the list of togglable columns.
239
+ * If used, only those columns will be displayed in the panel
240
+ * which are passed as the return value of the function.
241
+ * @param {GridColDef[]} columns The `ColDef` list of all columns.
242
+ * @returns {GridColDef['field'][]} The list of togglable columns' field names.
243
+ */
244
+ getTogglableColumns: PropTypes.func,
245
+ searchPredicate: PropTypes.func,
246
+ sort: PropTypes.oneOf(['asc', 'desc'])
247
+ } : void 0;
248
+ var GridColumnsManagementBody = styled('div', {
249
+ name: 'MuiDataGrid',
250
+ slot: 'ColumnsManagement',
251
+ overridesResolver: function overridesResolver(props, styles) {
252
+ return styles.columnsManagement;
253
+ }
254
+ })(function (_ref4) {
255
+ var theme = _ref4.theme;
256
+ return {
257
+ padding: theme.spacing(0, 3, 1.5),
258
+ display: 'flex',
259
+ flexDirection: 'column',
260
+ overflow: 'auto',
261
+ flex: '1 1',
262
+ maxHeight: 400,
263
+ alignItems: 'flex-start'
264
+ };
265
+ });
266
+ var GridColumnsManagementHeader = styled('div', {
267
+ name: 'MuiDataGrid',
268
+ slot: 'ColumnsManagementHeader',
269
+ overridesResolver: function overridesResolver(props, styles) {
270
+ return styles.columnsManagementHeader;
271
+ }
272
+ })(function (_ref5) {
273
+ var theme = _ref5.theme;
274
+ return {
275
+ padding: theme.spacing(1.5, 3)
276
+ };
277
+ });
278
+ var GridColumnsManagementFooter = styled('div', {
279
+ name: 'MuiDataGrid',
280
+ slot: 'ColumnsManagementFooter',
281
+ overridesResolver: function overridesResolver(props, styles) {
282
+ return styles.columnsManagementFooter;
283
+ }
284
+ })(function (_ref6) {
285
+ var theme = _ref6.theme;
286
+ return {
287
+ padding: theme.spacing(0.5, 1, 0.5, 2.4),
288
+ display: 'flex',
289
+ justifyContent: 'space-between',
290
+ borderTop: "1px solid ".concat(theme.palette.divider)
291
+ };
292
+ });
293
+ var GridColumnsManagementEmptyText = styled('div')(function (_ref7) {
294
+ var theme = _ref7.theme;
295
+ return {
296
+ padding: theme.spacing(0.5, 0),
297
+ color: theme.palette.grey[500]
298
+ };
299
+ });
300
+ export { GridColumnsManagement };
@@ -0,0 +1 @@
1
+ export * from './GridColumnsManagement';
@@ -0,0 +1,22 @@
1
+ export var checkColumnVisibilityModelsSame = function checkColumnVisibilityModelsSame(a, b) {
2
+ // Filter `false` values only, as `true` and not having a key are the same
3
+ var aFalseValues = new Set(Object.keys(a).filter(function (key) {
4
+ return a[key] === false;
5
+ }));
6
+ var bFalseValues = new Set(Object.keys(b).filter(function (key) {
7
+ return b[key] === false;
8
+ }));
9
+ if (aFalseValues.size !== bFalseValues.size) {
10
+ return false;
11
+ }
12
+ var result = true;
13
+ aFalseValues.forEach(function (key) {
14
+ if (!bFalseValues.has(key)) {
15
+ result = false;
16
+ }
17
+ });
18
+ return result;
19
+ };
20
+ export var defaultSearchPredicate = function defaultSearchPredicate(column, searchValue) {
21
+ return (column.headerName || column.field).toLowerCase().indexOf(searchValue) > -1;
22
+ };
@@ -6,6 +6,7 @@ export * from './columnSelection';
6
6
  export * from '../material/icons';
7
7
  export * from './menu';
8
8
  export * from './panel';
9
+ export * from './columnsManagement';
9
10
  export * from './toolbar';
10
11
  export * from './GridApiContext';
11
12
  export * from './GridFooter';