@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
@@ -441,106 +441,7 @@ process.env.NODE_ENV !== "production" ? GridRow.propTypes = {
441
441
  onDoubleClick: _propTypes.default.func,
442
442
  onMouseEnter: _propTypes.default.func,
443
443
  onMouseLeave: _propTypes.default.func,
444
- pinnedColumns: _propTypes.default.shape({
445
- left: _propTypes.default.arrayOf(_propTypes.default.shape({
446
- align: _propTypes.default.oneOf(['center', 'left', 'right']),
447
- cellClassName: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.string]),
448
- colSpan: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.number]),
449
- computedWidth: _propTypes.default.number.isRequired,
450
- description: _propTypes.default.string,
451
- disableColumnMenu: _propTypes.default.bool,
452
- disableExport: _propTypes.default.bool,
453
- disableReorder: _propTypes.default.bool,
454
- editable: _propTypes.default.bool,
455
- field: _propTypes.default.string.isRequired,
456
- filterable: _propTypes.default.bool,
457
- filterOperators: _propTypes.default.arrayOf(_propTypes.default.shape({
458
- getApplyFilterFn: _propTypes.default.func.isRequired,
459
- getValueAsString: _propTypes.default.func,
460
- headerLabel: _propTypes.default.string,
461
- InputComponent: _propTypes.default.elementType,
462
- InputComponentProps: _propTypes.default.object,
463
- label: _propTypes.default.string,
464
- requiresFilterValue: _propTypes.default.bool,
465
- value: _propTypes.default.string.isRequired
466
- })),
467
- flex: _propTypes.default.number,
468
- getApplyQuickFilterFn: _propTypes.default.func,
469
- groupable: _propTypes.default.bool,
470
- hasBeenResized: _propTypes.default.bool,
471
- headerAlign: _propTypes.default.oneOf(['center', 'left', 'right']),
472
- headerClassName: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.string]),
473
- headerName: _propTypes.default.string,
474
- hideable: _propTypes.default.bool,
475
- hideSortIcons: _propTypes.default.bool,
476
- maxWidth: _propTypes.default.number,
477
- minWidth: _propTypes.default.number,
478
- pinnable: _propTypes.default.bool,
479
- preProcessEditCellProps: _propTypes.default.func,
480
- renderCell: _propTypes.default.func,
481
- renderEditCell: _propTypes.default.func,
482
- renderHeader: _propTypes.default.func,
483
- resizable: _propTypes.default.bool,
484
- sortable: _propTypes.default.bool,
485
- sortComparator: _propTypes.default.func,
486
- sortingOrder: _propTypes.default.arrayOf(_propTypes.default.oneOf(['asc', 'desc'])),
487
- type: _propTypes.default.oneOf(['actions', 'boolean', 'custom', 'date', 'dateTime', 'number', 'singleSelect', 'string']),
488
- valueFormatter: _propTypes.default.func,
489
- valueGetter: _propTypes.default.func,
490
- valueParser: _propTypes.default.func,
491
- valueSetter: _propTypes.default.func,
492
- width: _propTypes.default.number
493
- })).isRequired,
494
- right: _propTypes.default.arrayOf(_propTypes.default.shape({
495
- align: _propTypes.default.oneOf(['center', 'left', 'right']),
496
- cellClassName: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.string]),
497
- colSpan: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.number]),
498
- computedWidth: _propTypes.default.number.isRequired,
499
- description: _propTypes.default.string,
500
- disableColumnMenu: _propTypes.default.bool,
501
- disableExport: _propTypes.default.bool,
502
- disableReorder: _propTypes.default.bool,
503
- editable: _propTypes.default.bool,
504
- field: _propTypes.default.string.isRequired,
505
- filterable: _propTypes.default.bool,
506
- filterOperators: _propTypes.default.arrayOf(_propTypes.default.shape({
507
- getApplyFilterFn: _propTypes.default.func.isRequired,
508
- getValueAsString: _propTypes.default.func,
509
- headerLabel: _propTypes.default.string,
510
- InputComponent: _propTypes.default.elementType,
511
- InputComponentProps: _propTypes.default.object,
512
- label: _propTypes.default.string,
513
- requiresFilterValue: _propTypes.default.bool,
514
- value: _propTypes.default.string.isRequired
515
- })),
516
- flex: _propTypes.default.number,
517
- getApplyQuickFilterFn: _propTypes.default.func,
518
- groupable: _propTypes.default.bool,
519
- hasBeenResized: _propTypes.default.bool,
520
- headerAlign: _propTypes.default.oneOf(['center', 'left', 'right']),
521
- headerClassName: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.string]),
522
- headerName: _propTypes.default.string,
523
- hideable: _propTypes.default.bool,
524
- hideSortIcons: _propTypes.default.bool,
525
- maxWidth: _propTypes.default.number,
526
- minWidth: _propTypes.default.number,
527
- pinnable: _propTypes.default.bool,
528
- preProcessEditCellProps: _propTypes.default.func,
529
- renderCell: _propTypes.default.func,
530
- renderEditCell: _propTypes.default.func,
531
- renderHeader: _propTypes.default.func,
532
- resizable: _propTypes.default.bool,
533
- sortable: _propTypes.default.bool,
534
- sortComparator: _propTypes.default.func,
535
- sortingOrder: _propTypes.default.arrayOf(_propTypes.default.oneOf(['asc', 'desc'])),
536
- type: _propTypes.default.oneOf(['actions', 'boolean', 'custom', 'date', 'dateTime', 'number', 'singleSelect', 'string']),
537
- valueFormatter: _propTypes.default.func,
538
- valueGetter: _propTypes.default.func,
539
- valueParser: _propTypes.default.func,
540
- valueSetter: _propTypes.default.func,
541
- width: _propTypes.default.number
542
- })).isRequired
543
- }).isRequired,
444
+ pinnedColumns: _propTypes.default.object.isRequired,
544
445
  renderedColumns: _propTypes.default.arrayOf(_propTypes.default.object).isRequired,
545
446
  row: _propTypes.default.object,
546
447
  rowHeight: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number]).isRequired,
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.GridColumnsManagement = GridColumnsManagement;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+ var _utils = require("@mui/utils");
12
+ var _FormControlLabel = _interopRequireDefault(require("@mui/material/FormControlLabel"));
13
+ var _styles = require("@mui/material/styles");
14
+ var _gridColumnsSelector = require("../../hooks/features/columns/gridColumnsSelector");
15
+ var _useGridSelector = require("../../hooks/utils/useGridSelector");
16
+ var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
17
+ var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
18
+ var _gridClasses = require("../../constants/gridClasses");
19
+ var _useLazyRef = require("../../hooks/utils/useLazyRef");
20
+ var _utils2 = require("./utils");
21
+ var _jsxRuntime = require("react/jsx-runtime");
22
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
23
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
24
+ /* eslint-disable @typescript-eslint/no-use-before-define */
25
+
26
+ const useUtilityClasses = ownerState => {
27
+ const {
28
+ classes
29
+ } = ownerState;
30
+ const slots = {
31
+ root: ['columnsManagement'],
32
+ header: ['columnsManagementHeader'],
33
+ footer: ['columnsManagementFooter'],
34
+ row: ['columnsManagementRow']
35
+ };
36
+ return (0, _utils.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, classes);
37
+ };
38
+ const collator = new Intl.Collator();
39
+ function GridColumnsManagement(props) {
40
+ const apiRef = (0, _useGridApiContext.useGridApiContext)();
41
+ const searchInputRef = React.useRef(null);
42
+ const columns = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridColumnDefinitionsSelector);
43
+ const initialColumnVisibilityModel = (0, _useLazyRef.useLazyRef)(() => (0, _gridColumnsSelector.gridColumnVisibilityModelSelector)(apiRef)).current;
44
+ const columnVisibilityModel = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridColumnVisibilityModelSelector);
45
+ const rootProps = (0, _useGridRootProps.useGridRootProps)();
46
+ const [searchValue, setSearchValue] = React.useState('');
47
+ const classes = useUtilityClasses(rootProps);
48
+ const {
49
+ sort,
50
+ searchPredicate = _utils2.defaultSearchPredicate,
51
+ autoFocusSearchField = true,
52
+ disableShowHideToggle = false,
53
+ disableResetButton = false,
54
+ getTogglableColumns
55
+ } = props;
56
+ const isResetDisabled = React.useMemo(() => (0, _utils2.checkColumnVisibilityModelsSame)(columnVisibilityModel, initialColumnVisibilityModel), [columnVisibilityModel, initialColumnVisibilityModel]);
57
+ const sortedColumns = React.useMemo(() => {
58
+ switch (sort) {
59
+ case 'asc':
60
+ return [...columns].sort((a, b) => collator.compare(a.headerName || a.field, b.headerName || b.field));
61
+ case 'desc':
62
+ return [...columns].sort((a, b) => -collator.compare(a.headerName || a.field, b.headerName || b.field));
63
+ default:
64
+ return columns;
65
+ }
66
+ }, [columns, sort]);
67
+ const toggleColumn = event => {
68
+ const {
69
+ name: field
70
+ } = event.target;
71
+ apiRef.current.setColumnVisibility(field, columnVisibilityModel[field] === false);
72
+ };
73
+ const toggleAllColumns = React.useCallback(isVisible => {
74
+ const currentModel = (0, _gridColumnsSelector.gridColumnVisibilityModelSelector)(apiRef);
75
+ const newModel = (0, _extends2.default)({}, currentModel);
76
+ const togglableColumns = getTogglableColumns ? getTogglableColumns(columns) : null;
77
+ columns.forEach(col => {
78
+ if (col.hideable && (togglableColumns == null || togglableColumns.includes(col.field))) {
79
+ if (isVisible) {
80
+ // delete the key from the model instead of setting it to `true`
81
+ delete newModel[col.field];
82
+ } else {
83
+ newModel[col.field] = false;
84
+ }
85
+ }
86
+ });
87
+ return apiRef.current.setColumnVisibilityModel(newModel);
88
+ }, [apiRef, columns, getTogglableColumns]);
89
+ const handleSearchValueChange = React.useCallback(event => {
90
+ setSearchValue(event.target.value);
91
+ }, []);
92
+ const currentColumns = React.useMemo(() => {
93
+ const togglableColumns = getTogglableColumns ? getTogglableColumns(sortedColumns) : null;
94
+ const togglableSortedColumns = togglableColumns ? sortedColumns.filter(({
95
+ field
96
+ }) => togglableColumns.includes(field)) : sortedColumns;
97
+ if (!searchValue) {
98
+ return togglableSortedColumns;
99
+ }
100
+ return togglableSortedColumns.filter(column => searchPredicate(column, searchValue.toLowerCase()));
101
+ }, [sortedColumns, searchValue, searchPredicate, getTogglableColumns]);
102
+ const hideableColumns = React.useMemo(() => currentColumns.filter(col => col.hideable), [currentColumns]);
103
+ const allHideableColumnsVisible = React.useMemo(() => hideableColumns.every(column => columnVisibilityModel[column.field] == null || columnVisibilityModel[column.field] !== false), [columnVisibilityModel, hideableColumns]);
104
+ const allHideableColumnsHidden = React.useMemo(() => hideableColumns.every(column => columnVisibilityModel[column.field] === false), [columnVisibilityModel, hideableColumns]);
105
+ const firstSwitchRef = React.useRef(null);
106
+ React.useEffect(() => {
107
+ if (autoFocusSearchField) {
108
+ searchInputRef.current.focus();
109
+ } else if (firstSwitchRef.current && typeof firstSwitchRef.current.focus === 'function') {
110
+ firstSwitchRef.current.focus();
111
+ }
112
+ }, [autoFocusSearchField]);
113
+ let firstHideableColumnFound = false;
114
+ const isFirstHideableColumn = column => {
115
+ if (firstHideableColumnFound === false && column.hideable !== false) {
116
+ firstHideableColumnFound = true;
117
+ return true;
118
+ }
119
+ return false;
120
+ };
121
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(React.Fragment, {
122
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(GridColumnsManagementHeader, {
123
+ className: classes.header,
124
+ ownerState: rootProps,
125
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseTextField, (0, _extends2.default)({
126
+ placeholder: apiRef.current.getLocaleText('columnsManagementSearchTitle'),
127
+ inputRef: searchInputRef,
128
+ value: searchValue,
129
+ onChange: handleSearchValueChange,
130
+ variant: "outlined",
131
+ size: "small",
132
+ InputProps: {
133
+ startAdornment: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseInputAdornment, {
134
+ position: "start",
135
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.quickFilterIcon, {})
136
+ }),
137
+ sx: {
138
+ pl: 1.5
139
+ }
140
+ },
141
+ fullWidth: true
142
+ }, rootProps.slotProps?.baseTextField))
143
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(GridColumnsManagementBody, {
144
+ className: classes.root,
145
+ ownerState: rootProps,
146
+ children: [currentColumns.map(column => /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormControlLabel.default, {
147
+ className: classes.row,
148
+ control: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseCheckbox, (0, _extends2.default)({
149
+ disabled: column.hideable === false,
150
+ checked: columnVisibilityModel[column.field] !== false,
151
+ onClick: toggleColumn,
152
+ name: column.field,
153
+ sx: {
154
+ p: 0.5
155
+ },
156
+ inputRef: isFirstHideableColumn(column) ? firstSwitchRef : undefined
157
+ }, rootProps.slotProps?.baseCheckbox)),
158
+ label: column.headerName || column.field
159
+ }, column.field)), currentColumns.length === 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(GridColumnsManagementEmptyText, {
160
+ ownerState: rootProps,
161
+ children: apiRef.current.getLocaleText('columnsManagementNoColumns')
162
+ })]
163
+ }), !disableShowHideToggle && !disableResetButton && currentColumns.length > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(GridColumnsManagementFooter, {
164
+ ownerState: rootProps,
165
+ className: classes.footer,
166
+ children: [!disableShowHideToggle ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormControlLabel.default, {
167
+ control: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseCheckbox, (0, _extends2.default)({
168
+ disabled: hideableColumns.length === 0,
169
+ checked: allHideableColumnsVisible,
170
+ indeterminate: !allHideableColumnsVisible && !allHideableColumnsHidden,
171
+ onClick: () => toggleAllColumns(!allHideableColumnsVisible),
172
+ name: apiRef.current.getLocaleText('columnsManagementShowHideAllText')
173
+ }, rootProps.slotProps?.baseCheckbox)),
174
+ sx: {
175
+ [`.MuiFormControlLabel-label`]: {
176
+ textTransform: 'uppercase',
177
+ fontSize: '14px'
178
+ }
179
+ },
180
+ label: apiRef.current.getLocaleText('columnsManagementShowHideAllText')
181
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {}), !disableResetButton ? /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseButton, (0, _extends2.default)({
182
+ onClick: () => apiRef.current.setColumnVisibilityModel(initialColumnVisibilityModel),
183
+ disabled: isResetDisabled
184
+ }, rootProps.slotProps?.baseButton, {
185
+ children: "Reset"
186
+ })) : null]
187
+ }) : null]
188
+ });
189
+ }
190
+ process.env.NODE_ENV !== "production" ? GridColumnsManagement.propTypes = {
191
+ // ----------------------------- Warning --------------------------------
192
+ // | These PropTypes are generated from the TypeScript type definitions |
193
+ // | To update them edit the TypeScript types and run "yarn proptypes" |
194
+ // ----------------------------------------------------------------------
195
+ /**
196
+ * If `true`, the column search field will be focused automatically.
197
+ * If `false`, the first column switch input will be focused automatically.
198
+ * This helps to avoid input keyboard panel to popup automatically on touch devices.
199
+ * @default true
200
+ */
201
+ autoFocusSearchField: _propTypes.default.bool,
202
+ /**
203
+ * If `true`, the `Reset` button will not be disabled
204
+ * @default false
205
+ */
206
+ disableResetButton: _propTypes.default.bool,
207
+ /**
208
+ * If `true`, the `Show/Hide all` toggle checkbox will not be displayed.
209
+ * @default false
210
+ */
211
+ disableShowHideToggle: _propTypes.default.bool,
212
+ /**
213
+ * Returns the list of togglable columns.
214
+ * If used, only those columns will be displayed in the panel
215
+ * which are passed as the return value of the function.
216
+ * @param {GridColDef[]} columns The `ColDef` list of all columns.
217
+ * @returns {GridColDef['field'][]} The list of togglable columns' field names.
218
+ */
219
+ getTogglableColumns: _propTypes.default.func,
220
+ searchPredicate: _propTypes.default.func,
221
+ sort: _propTypes.default.oneOf(['asc', 'desc'])
222
+ } : void 0;
223
+ const GridColumnsManagementBody = (0, _styles.styled)('div', {
224
+ name: 'MuiDataGrid',
225
+ slot: 'ColumnsManagement',
226
+ overridesResolver: (props, styles) => styles.columnsManagement
227
+ })(({
228
+ theme
229
+ }) => ({
230
+ padding: theme.spacing(0, 3, 1.5),
231
+ display: 'flex',
232
+ flexDirection: 'column',
233
+ overflow: 'auto',
234
+ flex: '1 1',
235
+ maxHeight: 400,
236
+ alignItems: 'flex-start'
237
+ }));
238
+ const GridColumnsManagementHeader = (0, _styles.styled)('div', {
239
+ name: 'MuiDataGrid',
240
+ slot: 'ColumnsManagementHeader',
241
+ overridesResolver: (props, styles) => styles.columnsManagementHeader
242
+ })(({
243
+ theme
244
+ }) => ({
245
+ padding: theme.spacing(1.5, 3)
246
+ }));
247
+ const GridColumnsManagementFooter = (0, _styles.styled)('div', {
248
+ name: 'MuiDataGrid',
249
+ slot: 'ColumnsManagementFooter',
250
+ overridesResolver: (props, styles) => styles.columnsManagementFooter
251
+ })(({
252
+ theme
253
+ }) => ({
254
+ padding: theme.spacing(0.5, 1, 0.5, 2.4),
255
+ display: 'flex',
256
+ justifyContent: 'space-between',
257
+ borderTop: `1px solid ${theme.palette.divider}`
258
+ }));
259
+ const GridColumnsManagementEmptyText = (0, _styles.styled)('div')(({
260
+ theme
261
+ }) => ({
262
+ padding: theme.spacing(0.5, 0),
263
+ color: theme.palette.grey[500]
264
+ }));
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _GridColumnsManagement = require("./GridColumnsManagement");
7
+ Object.keys(_GridColumnsManagement).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _GridColumnsManagement[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _GridColumnsManagement[key];
14
+ }
15
+ });
16
+ });
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.defaultSearchPredicate = exports.checkColumnVisibilityModelsSame = void 0;
7
+ const checkColumnVisibilityModelsSame = (a, b) => {
8
+ // Filter `false` values only, as `true` and not having a key are the same
9
+ const aFalseValues = new Set(Object.keys(a).filter(key => a[key] === false));
10
+ const bFalseValues = new Set(Object.keys(b).filter(key => b[key] === false));
11
+ if (aFalseValues.size !== bFalseValues.size) {
12
+ return false;
13
+ }
14
+ let result = true;
15
+ aFalseValues.forEach(key => {
16
+ if (!bFalseValues.has(key)) {
17
+ result = false;
18
+ }
19
+ });
20
+ return result;
21
+ };
22
+ exports.checkColumnVisibilityModelsSame = checkColumnVisibilityModelsSame;
23
+ const defaultSearchPredicate = (column, searchValue) => (column.headerName || column.field).toLowerCase().indexOf(searchValue) > -1;
24
+ exports.defaultSearchPredicate = defaultSearchPredicate;
@@ -91,6 +91,17 @@ Object.keys(_panel).forEach(function (key) {
91
91
  }
92
92
  });
93
93
  });
94
+ var _columnsManagement = require("./columnsManagement");
95
+ Object.keys(_columnsManagement).forEach(function (key) {
96
+ if (key === "default" || key === "__esModule") return;
97
+ if (key in exports && exports[key] === _columnsManagement[key]) return;
98
+ Object.defineProperty(exports, key, {
99
+ enumerable: true,
100
+ get: function () {
101
+ return _columnsManagement[key];
102
+ }
103
+ });
104
+ });
94
105
  var _toolbar = require("./toolbar");
95
106
  Object.keys(_toolbar).forEach(function (key) {
96
107
  if (key === "default" || key === "__esModule") return;
@@ -6,195 +6,18 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.GridColumnsPanel = GridColumnsPanel;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
- var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
9
  var React = _interopRequireWildcard(require("react"));
11
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
- var _utils = require("@mui/utils");
13
- var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
14
- var _Switch = require("@mui/material/Switch");
15
- var _FormControlLabel = _interopRequireDefault(require("@mui/material/FormControlLabel"));
16
- var _styles = require("@mui/material/styles");
17
- var _gridColumnsSelector = require("../../hooks/features/columns/gridColumnsSelector");
18
- var _useGridSelector = require("../../hooks/utils/useGridSelector");
19
- var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
20
- var _GridPanelContent = require("./GridPanelContent");
21
- var _GridPanelFooter = require("./GridPanelFooter");
22
- var _GridPanelHeader = require("./GridPanelHeader");
23
11
  var _GridPanelWrapper = require("./GridPanelWrapper");
24
- var _envConstants = require("../../constants/envConstants");
12
+ var _columnsManagement = require("../columnsManagement");
25
13
  var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
26
- var _gridClasses = require("../../constants/gridClasses");
27
14
  var _jsxRuntime = require("react/jsx-runtime");
28
- const _excluded = ["sort", "searchPredicate", "autoFocusSearchField", "disableHideAllButton", "disableShowAllButton", "getTogglableColumns"];
29
15
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
30
16
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
31
- const useUtilityClasses = ownerState => {
32
- const {
33
- classes
34
- } = ownerState;
35
- const slots = {
36
- root: ['columnsPanel'],
37
- columnsPanelRow: ['columnsPanelRow']
38
- };
39
- return (0, _utils.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, classes);
40
- };
41
- const GridColumnsPanelRoot = (0, _styles.styled)('div', {
42
- name: 'MuiDataGrid',
43
- slot: 'ColumnsPanel',
44
- overridesResolver: (props, styles) => styles.columnsPanel
45
- })({
46
- padding: '8px 0px 8px 8px'
47
- });
48
- const GridColumnsPanelRowRoot = (0, _styles.styled)('div', {
49
- name: 'MuiDataGrid',
50
- slot: 'ColumnsPanelRow',
51
- overridesResolver: (props, styles) => styles.columnsPanelRow
52
- })(({
53
- theme
54
- }) => ({
55
- display: 'flex',
56
- justifyContent: 'space-between',
57
- padding: '1px 8px 1px 7px',
58
- [`& .${_Switch.switchClasses.root}`]: {
59
- marginRight: theme.spacing(0.5)
60
- }
61
- }));
62
- const GridIconButtonRoot = (0, _styles.styled)(_IconButton.default)({
63
- justifyContent: 'flex-end'
64
- });
65
- const collator = new Intl.Collator();
66
- const defaultSearchPredicate = (column, searchValue) => {
67
- return (column.headerName || column.field).toLowerCase().indexOf(searchValue) > -1;
68
- };
69
17
  function GridColumnsPanel(props) {
70
- const apiRef = (0, _useGridApiContext.useGridApiContext)();
71
- const searchInputRef = React.useRef(null);
72
- const columns = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridColumnDefinitionsSelector);
73
- const columnVisibilityModel = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridColumnVisibilityModelSelector);
74
18
  const rootProps = (0, _useGridRootProps.useGridRootProps)();
75
- const [searchValue, setSearchValue] = React.useState('');
76
- const classes = useUtilityClasses(rootProps);
77
- const {
78
- sort,
79
- searchPredicate = defaultSearchPredicate,
80
- autoFocusSearchField = true,
81
- disableHideAllButton = false,
82
- disableShowAllButton = false,
83
- getTogglableColumns
84
- } = props,
85
- other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
86
- const sortedColumns = React.useMemo(() => {
87
- switch (sort) {
88
- case 'asc':
89
- return [...columns].sort((a, b) => collator.compare(a.headerName || a.field, b.headerName || b.field));
90
- case 'desc':
91
- return [...columns].sort((a, b) => -collator.compare(a.headerName || a.field, b.headerName || b.field));
92
- default:
93
- return columns;
94
- }
95
- }, [columns, sort]);
96
- const toggleColumn = event => {
97
- const {
98
- name: field
99
- } = event.target;
100
- apiRef.current.setColumnVisibility(field, columnVisibilityModel[field] === false);
101
- };
102
- const toggleAllColumns = React.useCallback(isVisible => {
103
- const currentModel = (0, _gridColumnsSelector.gridColumnVisibilityModelSelector)(apiRef);
104
- const newModel = (0, _extends2.default)({}, currentModel);
105
- const togglableColumns = getTogglableColumns ? getTogglableColumns(columns) : null;
106
- columns.forEach(col => {
107
- if (col.hideable && (togglableColumns == null || togglableColumns.includes(col.field))) {
108
- if (isVisible) {
109
- // delete the key from the model instead of setting it to `true`
110
- delete newModel[col.field];
111
- } else {
112
- newModel[col.field] = false;
113
- }
114
- }
115
- });
116
- return apiRef.current.setColumnVisibilityModel(newModel);
117
- }, [apiRef, columns, getTogglableColumns]);
118
- const handleSearchValueChange = React.useCallback(event => {
119
- setSearchValue(event.target.value);
120
- }, []);
121
- const currentColumns = React.useMemo(() => {
122
- const togglableColumns = getTogglableColumns ? getTogglableColumns(sortedColumns) : null;
123
- const togglableSortedColumns = togglableColumns ? sortedColumns.filter(({
124
- field
125
- }) => togglableColumns.includes(field)) : sortedColumns;
126
- if (!searchValue) {
127
- return togglableSortedColumns;
128
- }
129
- return togglableSortedColumns.filter(column => searchPredicate(column, searchValue.toLowerCase()));
130
- }, [sortedColumns, searchValue, searchPredicate, getTogglableColumns]);
131
- const firstSwitchRef = React.useRef(null);
132
- React.useEffect(() => {
133
- if (autoFocusSearchField) {
134
- searchInputRef.current.focus();
135
- } else if (firstSwitchRef.current && typeof firstSwitchRef.current.focus === 'function') {
136
- firstSwitchRef.current.focus();
137
- }
138
- }, [autoFocusSearchField]);
139
- let firstHideableColumnFound = false;
140
- const isFirstHideableColumn = column => {
141
- if (firstHideableColumnFound === false && column.hideable !== false) {
142
- firstHideableColumnFound = true;
143
- return true;
144
- }
145
- return false;
146
- };
147
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridPanelWrapper.GridPanelWrapper, (0, _extends2.default)({}, other, {
148
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_GridPanelHeader.GridPanelHeader, {
149
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseTextField, (0, _extends2.default)({
150
- label: apiRef.current.getLocaleText('columnsPanelTextFieldLabel'),
151
- placeholder: apiRef.current.getLocaleText('columnsPanelTextFieldPlaceholder'),
152
- inputRef: searchInputRef,
153
- value: searchValue,
154
- onChange: handleSearchValueChange,
155
- variant: "standard",
156
- fullWidth: true
157
- }, rootProps.slotProps?.baseTextField))
158
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridPanelContent.GridPanelContent, {
159
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(GridColumnsPanelRoot, {
160
- className: classes.root,
161
- ownerState: rootProps,
162
- children: currentColumns.map(column => /*#__PURE__*/(0, _jsxRuntime.jsxs)(GridColumnsPanelRowRoot, {
163
- className: classes.columnsPanelRow,
164
- ownerState: rootProps,
165
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_FormControlLabel.default, {
166
- control: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseSwitch, (0, _extends2.default)({
167
- disabled: column.hideable === false,
168
- checked: columnVisibilityModel[column.field] !== false,
169
- onClick: toggleColumn,
170
- name: column.field,
171
- size: "small",
172
- inputRef: isFirstHideableColumn(column) ? firstSwitchRef : undefined
173
- }, rootProps.slotProps?.baseSwitch)),
174
- label: column.headerName || column.field
175
- }), !rootProps.disableColumnReorder && _envConstants.GRID_EXPERIMENTAL_ENABLED && /*#__PURE__*/(0, _jsxRuntime.jsx)(GridIconButtonRoot, {
176
- draggable: true,
177
- "aria-label": apiRef.current.getLocaleText('columnsPanelDragIconLabel'),
178
- title: apiRef.current.getLocaleText('columnsPanelDragIconLabel'),
179
- size: "small",
180
- disabled: true,
181
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.columnReorderIcon, {})
182
- })]
183
- }, column.field))
184
- })
185
- }), disableShowAllButton && disableHideAllButton ? null : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridPanelFooter.GridPanelFooter, {
186
- children: [!disableHideAllButton ? /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseButton, (0, _extends2.default)({
187
- onClick: () => toggleAllColumns(false)
188
- }, rootProps.slotProps?.baseButton, {
189
- disabled: disableHideAllButton,
190
- children: apiRef.current.getLocaleText('columnsPanelHideAllButton')
191
- })) : /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {}), !disableShowAllButton ? /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseButton, (0, _extends2.default)({
192
- onClick: () => toggleAllColumns(true)
193
- }, rootProps.slotProps?.baseButton, {
194
- disabled: disableShowAllButton,
195
- children: apiRef.current.getLocaleText('columnsPanelShowAllButton')
196
- })) : null]
197
- })]
19
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridPanelWrapper.GridPanelWrapper, (0, _extends2.default)({}, props, {
20
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_columnsManagement.GridColumnsManagement, (0, _extends2.default)({}, rootProps.slotProps?.columnsManagement))
198
21
  }));
199
22
  }
200
23
  process.env.NODE_ENV !== "production" ? GridColumnsPanel.propTypes = {
@@ -202,32 +25,5 @@ process.env.NODE_ENV !== "production" ? GridColumnsPanel.propTypes = {
202
25
  // | These PropTypes are generated from the TypeScript type definitions |
203
26
  // | To update them edit the TypeScript types and run "yarn proptypes" |
204
27
  // ----------------------------------------------------------------------
205
- /**
206
- * If `true`, the column search field will be focused automatically.
207
- * If `false`, the first column switch input will be focused automatically.
208
- * This helps to avoid input keyboard panel to popup automatically on touch devices.
209
- * @default true
210
- */
211
- autoFocusSearchField: _propTypes.default.bool,
212
- /**
213
- * If `true`, the `Hide all` button will not be displayed.
214
- * @default false
215
- */
216
- disableHideAllButton: _propTypes.default.bool,
217
- /**
218
- * If `true`, the `Show all` button will be disabled
219
- * @default false
220
- */
221
- disableShowAllButton: _propTypes.default.bool,
222
- /**
223
- * Returns the list of togglable columns.
224
- * If used, only those columns will be displayed in the panel
225
- * which are passed as the return value of the function.
226
- * @param {GridColDef[]} columns The `ColDef` list of all columns.
227
- * @returns {GridColDef['field'][]} The list of togglable columns' field names.
228
- */
229
- getTogglableColumns: _propTypes.default.func,
230
- searchPredicate: _propTypes.default.func,
231
- slotProps: _propTypes.default.object,
232
- sort: _propTypes.default.oneOf(['asc', 'desc'])
28
+ slotProps: _propTypes.default.object
233
29
  } : void 0;