@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.
- package/CHANGELOG.md +139 -38
- package/README.md +2 -2
- package/components/GridRow.js +1 -100
- package/components/columnsManagement/GridColumnsManagement.d.ts +36 -0
- package/components/columnsManagement/GridColumnsManagement.js +260 -0
- package/components/columnsManagement/index.d.ts +1 -0
- package/components/columnsManagement/index.js +1 -0
- package/components/columnsManagement/utils.d.ts +4 -0
- package/components/columnsManagement/utils.js +16 -0
- package/components/index.d.ts +1 -0
- package/components/index.js +1 -0
- package/components/panel/GridColumnsPanel.d.ts +0 -28
- package/components/panel/GridColumnsPanel.js +5 -213
- package/constants/defaultGridSlotsComponents.js +2 -1
- package/constants/gridClasses.d.ts +12 -4
- package/constants/gridClasses.js +1 -1
- package/constants/localeTextConstants.js +4 -6
- package/hooks/core/useGridApiInitialization.js +4 -0
- package/hooks/features/rows/gridRowsUtils.js +4 -1
- package/index.js +1 -1
- package/legacy/components/GridRow.js +1 -100
- package/legacy/components/columnsManagement/GridColumnsManagement.js +300 -0
- package/legacy/components/columnsManagement/index.js +1 -0
- package/legacy/components/columnsManagement/utils.js +22 -0
- package/legacy/components/index.js +1 -0
- package/legacy/components/panel/GridColumnsPanel.js +5 -233
- package/legacy/constants/defaultGridSlotsComponents.js +2 -1
- package/legacy/constants/gridClasses.js +1 -1
- package/legacy/constants/localeTextConstants.js +4 -6
- package/legacy/hooks/core/useGridApiInitialization.js +4 -0
- package/legacy/hooks/features/rows/gridRowsUtils.js +4 -1
- package/legacy/index.js +1 -1
- package/legacy/locales/arSD.js +5 -6
- package/legacy/locales/beBY.js +5 -6
- package/legacy/locales/bgBG.js +5 -6
- package/legacy/locales/csCZ.js +5 -6
- package/legacy/locales/daDK.js +5 -6
- package/legacy/locales/deDE.js +5 -6
- package/legacy/locales/elGR.js +5 -6
- package/legacy/locales/esES.js +5 -6
- package/legacy/locales/faIR.js +5 -6
- package/legacy/locales/fiFI.js +5 -6
- package/legacy/locales/frFR.js +5 -6
- package/legacy/locales/heIL.js +5 -6
- package/legacy/locales/hrHR.js +5 -6
- package/legacy/locales/huHU.js +5 -6
- package/legacy/locales/itIT.js +5 -6
- package/legacy/locales/jaJP.js +5 -6
- package/legacy/locales/koKR.js +5 -6
- package/legacy/locales/nbNO.js +5 -6
- package/legacy/locales/nlNL.js +5 -6
- package/legacy/locales/plPL.js +5 -6
- package/legacy/locales/ptBR.js +5 -6
- package/legacy/locales/ptPT.js +5 -6
- package/legacy/locales/roRO.js +5 -6
- package/legacy/locales/ruRU.js +5 -6
- package/legacy/locales/skSK.js +5 -6
- package/legacy/locales/svSE.js +5 -6
- package/legacy/locales/trTR.js +5 -6
- package/legacy/locales/ukUA.js +5 -6
- package/legacy/locales/urPK.js +5 -6
- package/legacy/locales/viVN.js +5 -6
- package/legacy/locales/zhCN.js +5 -6
- package/legacy/locales/zhHK.js +5 -6
- package/legacy/locales/zhTW.js +5 -6
- package/locales/arSD.js +5 -6
- package/locales/beBY.js +5 -6
- package/locales/bgBG.js +5 -6
- package/locales/csCZ.js +5 -6
- package/locales/daDK.js +5 -6
- package/locales/deDE.js +5 -6
- package/locales/elGR.js +5 -6
- package/locales/esES.js +5 -6
- package/locales/faIR.js +5 -6
- package/locales/fiFI.js +5 -6
- package/locales/frFR.js +5 -6
- package/locales/heIL.js +5 -6
- package/locales/hrHR.js +5 -6
- package/locales/huHU.js +5 -6
- package/locales/itIT.js +5 -6
- package/locales/jaJP.js +5 -6
- package/locales/koKR.js +5 -6
- package/locales/nbNO.js +5 -6
- package/locales/nlNL.js +5 -6
- package/locales/plPL.js +5 -6
- package/locales/ptBR.js +5 -6
- package/locales/ptPT.js +5 -6
- package/locales/roRO.js +5 -6
- package/locales/ruRU.js +5 -6
- package/locales/skSK.js +5 -6
- package/locales/svSE.js +5 -6
- package/locales/trTR.js +5 -6
- package/locales/ukUA.js +5 -6
- package/locales/urPK.js +5 -6
- package/locales/viVN.js +5 -6
- package/locales/zhCN.js +5 -6
- package/locales/zhHK.js +5 -6
- package/locales/zhTW.js +5 -6
- package/models/api/gridLocaleTextApi.d.ts +3 -5
- package/models/colDef/gridColType.d.ts +11 -2
- package/models/gridSlotsComponent.d.ts +5 -0
- package/models/gridSlotsComponentsProps.d.ts +4 -0
- package/modern/components/GridRow.js +1 -100
- package/modern/components/columnsManagement/GridColumnsManagement.js +256 -0
- package/modern/components/columnsManagement/index.js +1 -0
- package/modern/components/columnsManagement/utils.js +16 -0
- package/modern/components/index.js +1 -0
- package/modern/components/panel/GridColumnsPanel.js +4 -209
- package/modern/constants/defaultGridSlotsComponents.js +2 -1
- package/modern/constants/gridClasses.js +1 -1
- package/modern/constants/localeTextConstants.js +4 -6
- package/modern/hooks/core/useGridApiInitialization.js +3 -0
- package/modern/hooks/features/rows/gridRowsUtils.js +4 -1
- package/modern/index.js +1 -1
- package/modern/locales/arSD.js +5 -6
- package/modern/locales/beBY.js +5 -6
- package/modern/locales/bgBG.js +5 -6
- package/modern/locales/csCZ.js +5 -6
- package/modern/locales/daDK.js +5 -6
- package/modern/locales/deDE.js +5 -6
- package/modern/locales/elGR.js +5 -6
- package/modern/locales/esES.js +5 -6
- package/modern/locales/faIR.js +5 -6
- package/modern/locales/fiFI.js +5 -6
- package/modern/locales/frFR.js +5 -6
- package/modern/locales/heIL.js +5 -6
- package/modern/locales/hrHR.js +5 -6
- package/modern/locales/huHU.js +5 -6
- package/modern/locales/itIT.js +5 -6
- package/modern/locales/jaJP.js +5 -6
- package/modern/locales/koKR.js +5 -6
- package/modern/locales/nbNO.js +5 -6
- package/modern/locales/nlNL.js +5 -6
- package/modern/locales/plPL.js +5 -6
- package/modern/locales/ptBR.js +5 -6
- package/modern/locales/ptPT.js +5 -6
- package/modern/locales/roRO.js +5 -6
- package/modern/locales/ruRU.js +5 -6
- package/modern/locales/skSK.js +5 -6
- package/modern/locales/svSE.js +5 -6
- package/modern/locales/trTR.js +5 -6
- package/modern/locales/ukUA.js +5 -6
- package/modern/locales/urPK.js +5 -6
- package/modern/locales/viVN.js +5 -6
- package/modern/locales/zhCN.js +5 -6
- package/modern/locales/zhHK.js +5 -6
- package/modern/locales/zhTW.js +5 -6
- package/node/components/GridRow.js +1 -100
- package/node/components/columnsManagement/GridColumnsManagement.js +264 -0
- package/node/components/columnsManagement/index.js +16 -0
- package/node/components/columnsManagement/utils.js +24 -0
- package/node/components/index.js +11 -0
- package/node/components/panel/GridColumnsPanel.js +4 -208
- package/node/constants/defaultGridSlotsComponents.js +1 -0
- package/node/constants/gridClasses.js +1 -1
- package/node/constants/localeTextConstants.js +4 -6
- package/node/hooks/core/useGridApiInitialization.js +3 -0
- package/node/hooks/features/rows/gridRowsUtils.js +4 -1
- package/node/index.js +1 -1
- package/node/locales/arSD.js +5 -6
- package/node/locales/beBY.js +5 -6
- package/node/locales/bgBG.js +5 -6
- package/node/locales/csCZ.js +5 -6
- package/node/locales/daDK.js +5 -6
- package/node/locales/deDE.js +5 -6
- package/node/locales/elGR.js +5 -6
- package/node/locales/esES.js +5 -6
- package/node/locales/faIR.js +5 -6
- package/node/locales/fiFI.js +5 -6
- package/node/locales/frFR.js +5 -6
- package/node/locales/heIL.js +5 -6
- package/node/locales/hrHR.js +5 -6
- package/node/locales/huHU.js +5 -6
- package/node/locales/itIT.js +5 -6
- package/node/locales/jaJP.js +5 -6
- package/node/locales/koKR.js +5 -6
- package/node/locales/nbNO.js +5 -6
- package/node/locales/nlNL.js +5 -6
- package/node/locales/plPL.js +5 -6
- package/node/locales/ptBR.js +5 -6
- package/node/locales/ptPT.js +5 -6
- package/node/locales/roRO.js +5 -6
- package/node/locales/ruRU.js +5 -6
- package/node/locales/skSK.js +5 -6
- package/node/locales/svSE.js +5 -6
- package/node/locales/trTR.js +5 -6
- package/node/locales/ukUA.js +5 -6
- package/node/locales/urPK.js +5 -6
- package/node/locales/viVN.js +5 -6
- package/node/locales/zhCN.js +5 -6
- package/node/locales/zhHK.js +5 -6
- package/node/locales/zhTW.js +5 -6
- 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
|
-
|
|
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
|
@@ -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.
|
|
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
|
+
};
|