@mui/x-data-grid 5.11.1 → 5.12.2
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 +199 -20
- package/DataGrid/DataGrid.js +26 -1
- package/README.md +2 -2
- package/colDef/gridCheckboxSelectionColDef.d.ts +1 -0
- package/colDef/gridCheckboxSelectionColDef.js +2 -1
- package/colDef/gridDateOperators.d.ts +1 -1
- package/colDef/gridNumericColDef.js +1 -1
- package/components/GridRow.d.ts +1 -1
- package/components/GridRow.js +51 -12
- package/components/cell/GridActionsCellItem.d.ts +1 -1
- package/components/cell/GridCell.d.ts +2 -1
- package/components/cell/GridCell.js +12 -7
- package/components/columnHeaders/GridColumnHeaderItem.js +9 -6
- package/components/columnSelection/GridCellCheckboxRenderer.js +0 -1
- package/components/columnSelection/GridHeaderCheckbox.js +0 -1
- package/components/containers/GridRootStyles.js +8 -3
- package/components/menu/GridMenu.js +9 -2
- package/components/panel/GridColumnsPanel.js +12 -7
- package/components/panel/GridPanelWrapper.d.ts +1 -1
- package/components/panel/GridPanelWrapper.js +3 -3
- package/components/panel/filterPanel/GridFilterForm.d.ts +61 -4
- package/components/panel/filterPanel/GridFilterForm.js +88 -8
- package/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +0 -1
- package/components/panel/filterPanel/GridFilterPanel.d.ts +8 -5
- package/components/panel/filterPanel/GridFilterPanel.js +26 -11
- package/components/toolbar/GridToolbarColumnsButton.js +0 -1
- package/components/toolbar/GridToolbarDensitySelector.js +0 -1
- package/components/toolbar/GridToolbarExportContainer.js +0 -1
- package/components/toolbar/GridToolbarFilterButton.d.ts +1 -1
- package/components/toolbar/GridToolbarFilterButton.js +0 -1
- package/components/toolbar/GridToolbarQuickFilter.d.ts +7 -0
- package/components/toolbar/GridToolbarQuickFilter.js +57 -4
- package/constants/defaultGridSlotsComponents.js +2 -1
- package/constants/gridClasses.d.ts +4 -0
- package/constants/gridClasses.js +1 -1
- package/constants/localeTextConstants.js +1 -0
- package/hooks/core/useGridStateInitialization.js +19 -6
- package/hooks/features/columnMenu/useGridColumnMenu.js +22 -0
- package/hooks/features/columns/gridColumnsInterfaces.d.ts +3 -0
- package/hooks/features/columns/useGridColumnSpanning.d.ts +1 -1
- package/hooks/features/columns/useGridColumnSpanning.js +1 -1
- package/hooks/features/columns/useGridColumns.d.ts +1 -1
- package/hooks/features/columns/useGridColumns.js +13 -15
- package/hooks/features/dimensions/gridDimensionsApi.d.ts +5 -0
- package/hooks/features/dimensions/useGridDimensions.js +9 -8
- package/hooks/features/editRows/useGridCellEditing.new.js +11 -4
- package/hooks/features/editRows/useGridEditing.old.js +1 -1
- package/hooks/features/editRows/useGridRowEditing.new.js +10 -4
- package/hooks/features/events/useGridEvents.d.ts +1 -1
- package/hooks/features/events/useGridEvents.js +2 -0
- package/hooks/features/filter/gridFilterSelector.d.ts +5 -0
- package/hooks/features/filter/gridFilterSelector.js +6 -0
- package/hooks/features/filter/gridFilterState.d.ts +1 -1
- package/hooks/features/filter/gridFilterUtils.d.ts +10 -2
- package/hooks/features/filter/gridFilterUtils.js +3 -6
- package/hooks/features/filter/useGridFilter.d.ts +1 -1
- package/hooks/features/filter/useGridFilter.js +29 -12
- package/hooks/features/pagination/useGridPage.js +1 -1
- package/hooks/features/pagination/useGridPageSize.js +1 -1
- package/hooks/features/rows/useGridRowsMeta.d.ts +1 -1
- package/hooks/features/rows/useGridRowsMeta.js +133 -67
- package/hooks/features/selection/useGridSelection.js +1 -1
- package/hooks/features/selection/useGridSelectionPreProcessors.js +8 -6
- package/hooks/features/sorting/useGridSorting.d.ts +1 -1
- package/hooks/features/sorting/useGridSorting.js +1 -1
- package/hooks/features/virtualization/useGridVirtualScroller.d.ts +2 -1
- package/hooks/features/virtualization/useGridVirtualScroller.js +65 -11
- package/index.js +1 -1
- package/internals/index.d.ts +1 -0
- package/legacy/DataGrid/DataGrid.js +26 -1
- package/legacy/colDef/gridCheckboxSelectionColDef.js +2 -1
- package/legacy/colDef/gridNumericColDef.js +1 -1
- package/legacy/components/GridRow.js +56 -12
- package/legacy/components/cell/GridCell.js +12 -7
- package/legacy/components/columnHeaders/GridColumnHeaderItem.js +11 -6
- package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +0 -1
- package/legacy/components/columnSelection/GridHeaderCheckbox.js +0 -1
- package/legacy/components/containers/GridRootStyles.js +10 -7
- package/legacy/components/menu/GridMenu.js +9 -2
- package/legacy/components/panel/GridColumnsPanel.js +14 -7
- package/legacy/components/panel/GridPanelWrapper.js +3 -3
- package/legacy/components/panel/filterPanel/GridFilterForm.js +89 -8
- package/legacy/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +0 -1
- package/legacy/components/panel/filterPanel/GridFilterPanel.js +28 -12
- package/legacy/components/toolbar/GridToolbarColumnsButton.js +0 -1
- package/legacy/components/toolbar/GridToolbarDensitySelector.js +0 -1
- package/legacy/components/toolbar/GridToolbarExportContainer.js +0 -1
- package/legacy/components/toolbar/GridToolbarFilterButton.js +0 -1
- package/legacy/components/toolbar/GridToolbarQuickFilter.js +67 -6
- package/legacy/constants/defaultGridSlotsComponents.js +2 -1
- package/legacy/constants/gridClasses.js +1 -1
- package/legacy/constants/localeTextConstants.js +1 -0
- package/legacy/hooks/core/useGridStateInitialization.js +18 -6
- package/legacy/hooks/features/columnMenu/useGridColumnMenu.js +22 -0
- package/legacy/hooks/features/columns/useGridColumnSpanning.js +1 -1
- package/legacy/hooks/features/columns/useGridColumns.js +13 -15
- package/legacy/hooks/features/dimensions/useGridDimensions.js +9 -8
- package/legacy/hooks/features/editRows/useGridCellEditing.new.js +14 -7
- package/legacy/hooks/features/editRows/useGridEditing.old.js +1 -1
- package/legacy/hooks/features/editRows/useGridRowEditing.new.js +10 -4
- package/legacy/hooks/features/events/useGridEvents.js +2 -0
- package/legacy/hooks/features/filter/gridFilterSelector.js +8 -0
- package/legacy/hooks/features/filter/gridFilterUtils.js +4 -7
- package/legacy/hooks/features/filter/useGridFilter.js +33 -12
- package/legacy/hooks/features/pagination/useGridPage.js +1 -1
- package/legacy/hooks/features/pagination/useGridPageSize.js +1 -1
- package/legacy/hooks/features/rows/useGridRowsMeta.js +133 -66
- package/legacy/hooks/features/selection/useGridSelection.js +1 -1
- package/legacy/hooks/features/selection/useGridSelectionPreProcessors.js +8 -6
- package/legacy/hooks/features/sorting/useGridSorting.js +1 -1
- package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +84 -26
- package/legacy/index.js +1 -1
- package/legacy/locales/arSD.js +1 -0
- package/legacy/locales/bgBG.js +1 -0
- package/legacy/locales/csCZ.js +1 -0
- package/legacy/locales/daDK.js +1 -0
- package/legacy/locales/deDE.js +1 -0
- package/legacy/locales/elGR.js +1 -0
- package/legacy/locales/esES.js +1 -0
- package/legacy/locales/faIR.js +1 -0
- package/legacy/locales/fiFI.js +1 -0
- package/legacy/locales/frFR.js +1 -0
- package/legacy/locales/heIL.js +10 -9
- package/legacy/locales/huHU.js +1 -0
- package/legacy/locales/itIT.js +1 -0
- package/legacy/locales/jaJP.js +29 -24
- package/legacy/locales/koKR.js +1 -0
- package/legacy/locales/nbNO.js +128 -0
- package/legacy/locales/nlNL.js +1 -0
- package/legacy/locales/plPL.js +1 -0
- package/legacy/locales/ptBR.js +1 -0
- package/legacy/locales/ruRU.js +7 -6
- package/legacy/locales/skSK.js +1 -0
- package/legacy/locales/trTR.js +8 -7
- package/legacy/locales/ukUA.js +1 -0
- package/legacy/locales/viVN.js +1 -0
- package/legacy/locales/zhCN.js +1 -0
- package/legacy/models/events/gridEvents.js +2 -0
- package/legacy/models/gridApiCaches.js +1 -0
- package/legacy/models/params/gridMenuParams.js +1 -0
- package/legacy/models/params/index.js +2 -1
- package/locales/arSD.js +1 -0
- package/locales/bgBG.js +1 -0
- package/locales/csCZ.js +1 -0
- package/locales/daDK.js +1 -0
- package/locales/deDE.js +1 -0
- package/locales/elGR.js +1 -0
- package/locales/esES.js +1 -0
- package/locales/faIR.js +1 -0
- package/locales/fiFI.js +1 -0
- package/locales/frFR.js +1 -0
- package/locales/heIL.js +10 -9
- package/locales/huHU.js +1 -0
- package/locales/itIT.js +1 -0
- package/locales/jaJP.js +25 -24
- package/locales/koKR.js +1 -0
- package/locales/nbNO.d.ts +2 -0
- package/locales/nbNO.js +116 -0
- package/locales/nlNL.js +1 -0
- package/locales/plPL.js +1 -0
- package/locales/ptBR.js +1 -0
- package/locales/ruRU.js +7 -6
- package/locales/skSK.js +1 -0
- package/locales/trTR.js +8 -7
- package/locales/ukUA.js +1 -0
- package/locales/viVN.js +1 -0
- package/locales/zhCN.js +1 -0
- package/models/api/gridCallbackDetails.d.ts +6 -1
- package/models/api/gridCoreApi.d.ts +2 -6
- package/models/api/gridFilterApi.d.ts +8 -1
- package/models/api/gridLocaleTextApi.d.ts +1 -0
- package/models/api/gridRowsMetaApi.d.ts +24 -0
- package/models/api/gridStateApi.d.ts +14 -3
- package/models/colDef/gridColDef.d.ts +4 -4
- package/models/events/gridEventLookup.d.ts +16 -1
- package/models/events/gridEvents.d.ts +3 -1
- package/models/events/gridEvents.js +2 -0
- package/models/gridApiCaches.d.ts +6 -0
- package/models/gridApiCaches.js +1 -0
- package/models/gridIconSlotsComponent.d.ts +5 -0
- package/models/params/gridMenuParams.d.ts +7 -0
- package/models/params/gridMenuParams.js +1 -0
- package/models/params/gridRowParams.d.ts +1 -1
- package/models/params/index.d.ts +1 -0
- package/models/params/index.js +2 -1
- package/models/props/DataGridProps.d.ts +24 -2
- package/modern/DataGrid/DataGrid.js +26 -1
- package/modern/colDef/gridCheckboxSelectionColDef.js +2 -1
- package/modern/colDef/gridNumericColDef.js +1 -1
- package/modern/components/GridRow.js +51 -12
- package/modern/components/cell/GridCell.js +12 -7
- package/modern/components/columnHeaders/GridColumnHeaderItem.js +9 -6
- package/modern/components/columnSelection/GridCellCheckboxRenderer.js +0 -1
- package/modern/components/columnSelection/GridHeaderCheckbox.js +0 -1
- package/modern/components/containers/GridRootStyles.js +8 -3
- package/modern/components/menu/GridMenu.js +9 -2
- package/modern/components/panel/GridColumnsPanel.js +12 -7
- package/modern/components/panel/GridPanelWrapper.js +3 -3
- package/modern/components/panel/filterPanel/GridFilterForm.js +88 -8
- package/modern/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +0 -1
- package/modern/components/panel/filterPanel/GridFilterPanel.js +26 -11
- package/modern/components/toolbar/GridToolbarColumnsButton.js +0 -1
- package/modern/components/toolbar/GridToolbarDensitySelector.js +0 -1
- package/modern/components/toolbar/GridToolbarExportContainer.js +0 -1
- package/modern/components/toolbar/GridToolbarFilterButton.js +0 -1
- package/modern/components/toolbar/GridToolbarQuickFilter.js +57 -4
- package/modern/constants/defaultGridSlotsComponents.js +2 -1
- package/modern/constants/gridClasses.js +1 -1
- package/modern/constants/localeTextConstants.js +1 -0
- package/modern/hooks/core/useGridStateInitialization.js +19 -6
- package/modern/hooks/features/columnMenu/useGridColumnMenu.js +22 -0
- package/modern/hooks/features/columns/useGridColumnSpanning.js +1 -1
- package/modern/hooks/features/columns/useGridColumns.js +12 -14
- package/modern/hooks/features/dimensions/useGridDimensions.js +9 -8
- package/modern/hooks/features/editRows/useGridCellEditing.new.js +10 -3
- package/modern/hooks/features/editRows/useGridEditing.old.js +1 -1
- package/modern/hooks/features/editRows/useGridRowEditing.new.js +9 -3
- package/modern/hooks/features/events/useGridEvents.js +2 -0
- package/modern/hooks/features/filter/gridFilterSelector.js +6 -0
- package/modern/hooks/features/filter/gridFilterUtils.js +3 -6
- package/modern/hooks/features/filter/useGridFilter.js +29 -12
- package/modern/hooks/features/pagination/useGridPage.js +1 -1
- package/modern/hooks/features/pagination/useGridPageSize.js +1 -1
- package/modern/hooks/features/rows/useGridRowsMeta.js +129 -59
- package/modern/hooks/features/selection/useGridSelection.js +1 -1
- package/modern/hooks/features/selection/useGridSelectionPreProcessors.js +8 -6
- package/modern/hooks/features/sorting/useGridSorting.js +1 -1
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +65 -11
- package/modern/index.js +1 -1
- package/modern/locales/arSD.js +1 -0
- package/modern/locales/bgBG.js +1 -0
- package/modern/locales/csCZ.js +1 -0
- package/modern/locales/daDK.js +1 -0
- package/modern/locales/deDE.js +1 -0
- package/modern/locales/elGR.js +1 -0
- package/modern/locales/esES.js +1 -0
- package/modern/locales/faIR.js +1 -0
- package/modern/locales/fiFI.js +1 -0
- package/modern/locales/frFR.js +1 -0
- package/modern/locales/heIL.js +10 -9
- package/modern/locales/huHU.js +1 -0
- package/modern/locales/itIT.js +1 -0
- package/modern/locales/jaJP.js +25 -24
- package/modern/locales/koKR.js +1 -0
- package/modern/locales/nbNO.js +116 -0
- package/modern/locales/nlNL.js +1 -0
- package/modern/locales/plPL.js +1 -0
- package/modern/locales/ptBR.js +1 -0
- package/modern/locales/ruRU.js +7 -6
- package/modern/locales/skSK.js +1 -0
- package/modern/locales/trTR.js +8 -7
- package/modern/locales/ukUA.js +1 -0
- package/modern/locales/viVN.js +1 -0
- package/modern/locales/zhCN.js +1 -0
- package/modern/models/events/gridEvents.js +2 -0
- package/modern/models/gridApiCaches.js +1 -0
- package/modern/models/params/gridMenuParams.js +1 -0
- package/modern/models/params/index.js +2 -1
- package/node/DataGrid/DataGrid.js +26 -1
- package/node/colDef/gridCheckboxSelectionColDef.js +4 -2
- package/node/colDef/gridNumericColDef.js +1 -1
- package/node/components/GridRow.js +53 -12
- package/node/components/cell/GridCell.js +12 -7
- package/node/components/columnHeaders/GridColumnHeaderItem.js +9 -6
- package/node/components/columnSelection/GridCellCheckboxRenderer.js +0 -1
- package/node/components/columnSelection/GridHeaderCheckbox.js +0 -1
- package/node/components/containers/GridRootStyles.js +8 -3
- package/node/components/menu/GridMenu.js +10 -2
- package/node/components/panel/GridColumnsPanel.js +12 -7
- package/node/components/panel/GridPanelWrapper.js +5 -3
- package/node/components/panel/filterPanel/GridFilterForm.js +91 -9
- package/node/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +0 -1
- package/node/components/panel/filterPanel/GridFilterPanel.js +28 -11
- package/node/components/toolbar/GridToolbarColumnsButton.js +0 -1
- package/node/components/toolbar/GridToolbarDensitySelector.js +0 -1
- package/node/components/toolbar/GridToolbarExportContainer.js +0 -1
- package/node/components/toolbar/GridToolbarFilterButton.js +0 -1
- package/node/components/toolbar/GridToolbarQuickFilter.js +61 -4
- package/node/constants/defaultGridSlotsComponents.js +2 -1
- package/node/constants/gridClasses.js +1 -1
- package/node/constants/localeTextConstants.js +1 -0
- package/node/hooks/core/useGridStateInitialization.js +19 -6
- package/node/hooks/features/columnMenu/useGridColumnMenu.js +23 -0
- package/node/hooks/features/columns/useGridColumnSpanning.js +11 -16
- package/node/hooks/features/columns/useGridColumns.js +13 -15
- package/node/hooks/features/dimensions/useGridDimensions.js +9 -8
- package/node/hooks/features/editRows/useGridCellEditing.new.js +11 -4
- package/node/hooks/features/editRows/useGridEditing.old.js +1 -1
- package/node/hooks/features/editRows/useGridRowEditing.new.js +10 -4
- package/node/hooks/features/events/useGridEvents.js +2 -0
- package/node/hooks/features/filter/gridFilterSelector.js +9 -2
- package/node/hooks/features/filter/gridFilterUtils.js +4 -5
- package/node/hooks/features/filter/useGridFilter.js +28 -11
- package/node/hooks/features/pagination/useGridPage.js +1 -1
- package/node/hooks/features/pagination/useGridPageSize.js +1 -1
- package/node/hooks/features/rows/useGridRowsMeta.js +136 -69
- package/node/hooks/features/selection/useGridSelection.js +1 -1
- package/node/hooks/features/selection/useGridSelectionPreProcessors.js +7 -5
- package/node/hooks/features/sorting/useGridSorting.js +1 -1
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +65 -12
- package/node/index.js +1 -1
- package/node/locales/arSD.js +1 -0
- package/node/locales/bgBG.js +1 -0
- package/node/locales/csCZ.js +1 -0
- package/node/locales/daDK.js +1 -0
- package/node/locales/deDE.js +1 -0
- package/node/locales/elGR.js +1 -0
- package/node/locales/esES.js +1 -0
- package/node/locales/faIR.js +1 -0
- package/node/locales/fiFI.js +1 -0
- package/node/locales/frFR.js +1 -0
- package/node/locales/heIL.js +10 -9
- package/node/locales/huHU.js +1 -0
- package/node/locales/itIT.js +1 -0
- package/node/locales/jaJP.js +25 -24
- package/node/locales/koKR.js +1 -0
- package/node/locales/nbNO.js +126 -0
- package/node/locales/nlNL.js +1 -0
- package/node/locales/plPL.js +1 -0
- package/node/locales/ptBR.js +1 -0
- package/node/locales/ruRU.js +7 -6
- package/node/locales/skSK.js +1 -0
- package/node/locales/trTR.js +8 -7
- package/node/locales/ukUA.js +1 -0
- package/node/locales/viVN.js +1 -0
- package/node/locales/zhCN.js +1 -0
- package/node/models/events/gridEvents.js +2 -0
- package/node/models/gridApiCaches.js +5 -0
- package/node/models/params/gridMenuParams.js +5 -0
- package/node/models/params/index.js +13 -0
- package/package.json +6 -5
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { TextFieldProps } from '@mui/material/TextField';
|
|
3
|
+
import { GridFilterModel } from '../../models/gridFilterModel';
|
|
3
4
|
export declare type GridToolbarQuickFilterProps = TextFieldProps & {
|
|
4
5
|
/**
|
|
5
6
|
* Function responsible for parsing text input in an array of independent values for quick filtering.
|
|
@@ -7,6 +8,12 @@ export declare type GridToolbarQuickFilterProps = TextFieldProps & {
|
|
|
7
8
|
* @returns {any[]} The array of value on which quick filter is applied
|
|
8
9
|
*/
|
|
9
10
|
quickFilterParser?: (input: string) => any[];
|
|
11
|
+
/**
|
|
12
|
+
* Function responsible for formatting values of quick filter in a string when the model is modified
|
|
13
|
+
* @param {any[]} values The new values passed to the quick filter model
|
|
14
|
+
* @returns {string} The string to display in the text field
|
|
15
|
+
*/
|
|
16
|
+
quickFilterFormatter?: (values: GridFilterModel['quickFilterValues']) => string;
|
|
10
17
|
/**
|
|
11
18
|
* The debounce time in milliseconds.
|
|
12
19
|
* @default 500
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
-
const _excluded = ["quickFilterParser", "debounceMs"];
|
|
3
|
+
const _excluded = ["quickFilterParser", "quickFilterFormatter", "debounceMs"];
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
6
|
import TextField from '@mui/material/TextField';
|
|
7
|
+
import IconButton from '@mui/material/IconButton';
|
|
7
8
|
import { styled } from '@mui/material/styles';
|
|
8
9
|
import { debounce } from '@mui/material/utils';
|
|
9
10
|
import { useGridApiContext } from '../../hooks/utils/useGridApiContext';
|
|
10
11
|
import { useGridRootProps } from '../../hooks/utils/useGridRootProps';
|
|
12
|
+
import { useGridSelector } from '../../hooks/utils/useGridSelector';
|
|
13
|
+
import { gridQuickFilterValuesSelector } from '../../hooks/features/filter';
|
|
14
|
+
import { isDeepEqual } from '../../utils/utils';
|
|
11
15
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
16
|
const GridToolbarQuickFilterRoot = styled(TextField, {
|
|
13
17
|
name: 'MuiDataGrid',
|
|
@@ -18,28 +22,55 @@ const GridToolbarQuickFilterRoot = styled(TextField, {
|
|
|
18
22
|
}) => ({
|
|
19
23
|
width: 'auto',
|
|
20
24
|
paddingBottom: theme.spacing(0.5),
|
|
21
|
-
'&
|
|
22
|
-
|
|
25
|
+
'& input': {
|
|
26
|
+
marginLeft: theme.spacing(0.5)
|
|
23
27
|
},
|
|
24
28
|
'& .MuiInput-underline:before': {
|
|
25
29
|
borderBottom: `1px solid ${theme.palette.divider}`
|
|
30
|
+
},
|
|
31
|
+
[`& input[type=search]::-ms-clear,
|
|
32
|
+
& input[type=search]::-ms-reveal`]: {
|
|
33
|
+
/* clears the 'X' icon from IE */
|
|
34
|
+
display: 'none',
|
|
35
|
+
width: 0,
|
|
36
|
+
height: 0
|
|
37
|
+
},
|
|
38
|
+
[`& input[type="search"]::-webkit-search-decoration,
|
|
39
|
+
& input[type="search"]::-webkit-search-cancel-button,
|
|
40
|
+
& input[type="search"]::-webkit-search-results-button,
|
|
41
|
+
& input[type="search"]::-webkit-search-results-decoration`]: {
|
|
42
|
+
/* clears the 'X' icon from Chrome */
|
|
43
|
+
display: 'none'
|
|
26
44
|
}
|
|
27
45
|
}));
|
|
28
46
|
|
|
29
47
|
const defaultSearchValueParser = searchText => searchText.split(' ').filter(word => word !== '');
|
|
30
48
|
|
|
49
|
+
const defaultSearchValueFormatter = values => values.join(' ');
|
|
50
|
+
|
|
31
51
|
function GridToolbarQuickFilter(props) {
|
|
32
52
|
var _rootProps$components;
|
|
33
53
|
|
|
34
54
|
const {
|
|
35
55
|
quickFilterParser = defaultSearchValueParser,
|
|
56
|
+
quickFilterFormatter = defaultSearchValueFormatter,
|
|
36
57
|
debounceMs = 500
|
|
37
58
|
} = props,
|
|
38
59
|
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
39
60
|
|
|
40
61
|
const apiRef = useGridApiContext();
|
|
41
62
|
const rootProps = useGridRootProps();
|
|
42
|
-
const
|
|
63
|
+
const quickFilterValues = useGridSelector(apiRef, gridQuickFilterValuesSelector);
|
|
64
|
+
const [searchValue, setSearchValue] = React.useState(() => quickFilterFormatter(quickFilterValues != null ? quickFilterValues : []));
|
|
65
|
+
const [prevQuickFilterValues, setPrevQuickFilterValues] = React.useState(quickFilterValues);
|
|
66
|
+
React.useEffect(() => {
|
|
67
|
+
if (!isDeepEqual(prevQuickFilterValues, quickFilterValues)) {
|
|
68
|
+
// The model of quick filter value has been updated
|
|
69
|
+
setPrevQuickFilterValues(quickFilterValues); // Update the input value if needed to match the new model
|
|
70
|
+
|
|
71
|
+
setSearchValue(prevSearchValue => isDeepEqual(quickFilterParser(prevSearchValue), quickFilterValues) ? prevSearchValue : quickFilterFormatter(quickFilterValues != null ? quickFilterValues : []));
|
|
72
|
+
}
|
|
73
|
+
}, [prevQuickFilterValues, quickFilterValues, quickFilterFormatter, quickFilterParser]);
|
|
43
74
|
const updateSearchValue = React.useCallback(newSearchValue => {
|
|
44
75
|
apiRef.current.setQuickFilterValues(quickFilterParser(newSearchValue));
|
|
45
76
|
}, [apiRef, quickFilterParser]);
|
|
@@ -49,6 +80,10 @@ function GridToolbarQuickFilter(props) {
|
|
|
49
80
|
setSearchValue(newSearchValue);
|
|
50
81
|
debouncedUpdateSearchValue(newSearchValue);
|
|
51
82
|
}, [debouncedUpdateSearchValue]);
|
|
83
|
+
const handleSearchReset = React.useCallback(() => {
|
|
84
|
+
setSearchValue('');
|
|
85
|
+
updateSearchValue('');
|
|
86
|
+
}, [updateSearchValue]);
|
|
52
87
|
return /*#__PURE__*/_jsx(GridToolbarQuickFilterRoot, _extends({
|
|
53
88
|
as: rootProps.components.BaseTextField,
|
|
54
89
|
variant: "standard",
|
|
@@ -60,6 +95,17 @@ function GridToolbarQuickFilter(props) {
|
|
|
60
95
|
InputProps: {
|
|
61
96
|
startAdornment: /*#__PURE__*/_jsx(rootProps.components.QuickFilterIcon, {
|
|
62
97
|
fontSize: "small"
|
|
98
|
+
}),
|
|
99
|
+
endAdornment: /*#__PURE__*/_jsx(IconButton, {
|
|
100
|
+
"aria-label": apiRef.current.getLocaleText('toolbarQuickFilterDeleteIconLabel'),
|
|
101
|
+
size: "small",
|
|
102
|
+
sx: {
|
|
103
|
+
visibility: searchValue ? 'visible' : 'hidden'
|
|
104
|
+
},
|
|
105
|
+
onClick: handleSearchReset,
|
|
106
|
+
children: /*#__PURE__*/_jsx(rootProps.components.QuickFilterClearIcon, {
|
|
107
|
+
fontSize: "small"
|
|
108
|
+
})
|
|
63
109
|
})
|
|
64
110
|
}
|
|
65
111
|
}, other, (_rootProps$components = rootProps.componentsProps) == null ? void 0 : _rootProps$components.baseTextField));
|
|
@@ -77,6 +123,13 @@ process.env.NODE_ENV !== "production" ? GridToolbarQuickFilter.propTypes = {
|
|
|
77
123
|
*/
|
|
78
124
|
debounceMs: PropTypes.number,
|
|
79
125
|
|
|
126
|
+
/**
|
|
127
|
+
* Function responsible for formatting values of quick filter in a string when the model is modified
|
|
128
|
+
* @param {any[]} values The new values passed to the quick filter model
|
|
129
|
+
* @returns {string} The string to display in the text field
|
|
130
|
+
*/
|
|
131
|
+
quickFilterFormatter: PropTypes.func,
|
|
132
|
+
|
|
80
133
|
/**
|
|
81
134
|
* Function responsible for parsing text input in an array of independent values for quick filtering.
|
|
82
135
|
* @param {string} input The value entered by the user
|
|
@@ -35,7 +35,8 @@ const DEFAULT_GRID_ICON_SLOTS_COMPONENTS = {
|
|
|
35
35
|
DetailPanelExpandIcon: GridAddIcon,
|
|
36
36
|
DetailPanelCollapseIcon: GridRemoveIcon,
|
|
37
37
|
RowReorderIcon: GridDragIcon,
|
|
38
|
-
QuickFilterIcon: GridSearchIcon
|
|
38
|
+
QuickFilterIcon: GridSearchIcon,
|
|
39
|
+
QuickFilterClearIcon: GridCloseIcon
|
|
39
40
|
};
|
|
40
41
|
/**
|
|
41
42
|
* TODO: Differentiate community and pro value and interface
|
|
@@ -347,6 +347,10 @@ export interface GridClasses {
|
|
|
347
347
|
* Styles applied to the last visible row element on every page of the grid.
|
|
348
348
|
*/
|
|
349
349
|
'row--lastVisible': string;
|
|
350
|
+
/**
|
|
351
|
+
* Styles applied to the row if it has dynamic row height.
|
|
352
|
+
*/
|
|
353
|
+
'row--dynamicHeight': string;
|
|
350
354
|
/**
|
|
351
355
|
* Styles applied to the row element.
|
|
352
356
|
*/
|
package/constants/gridClasses.js
CHANGED
|
@@ -2,4 +2,4 @@ import { generateUtilityClasses, generateUtilityClass } from '@mui/material';
|
|
|
2
2
|
export function getDataGridUtilityClass(slot) {
|
|
3
3
|
return generateUtilityClass('MuiDataGrid', slot);
|
|
4
4
|
}
|
|
5
|
-
export const gridClasses = generateUtilityClasses('MuiDataGrid', ['actionsCell', 'autoHeight', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withRenderer', 'cell', 'cellContent', 'cellCheckbox', 'checkboxInput', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderDropZone', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeaders', 'columnHeadersInner', 'columnHeadersInner--scrollable', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsPanel', 'columnsPanelRow', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filterForm', 'filterFormDeleteIcon', 'filterFormLinkOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'iconButtonContainer', 'iconSeparator', 'main', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'row', 'row--editable', 'row--editing', 'row--lastVisible', 'row--dragging', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'pinnedColumns--left', 'pinnedColumns--right', 'pinnedColumnHeaders', 'pinnedColumnHeaders--left', 'pinnedColumnHeaders--right', 'withBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle']);
|
|
5
|
+
export const gridClasses = generateUtilityClasses('MuiDataGrid', ['actionsCell', 'autoHeight', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withRenderer', 'cell', 'cellContent', 'cellCheckbox', 'checkboxInput', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderDropZone', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeaders', 'columnHeadersInner', 'columnHeadersInner--scrollable', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsPanel', 'columnsPanelRow', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filterForm', 'filterFormDeleteIcon', 'filterFormLinkOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'iconButtonContainer', 'iconSeparator', 'main', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'row', 'row--editable', 'row--editing', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'pinnedColumns--left', 'pinnedColumns--right', 'pinnedColumnHeaders', 'pinnedColumnHeaders--left', 'pinnedColumnHeaders--right', 'withBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle']);
|
|
@@ -105,6 +105,7 @@ export const GRID_DEFAULT_LOCALE_TEXT = {
|
|
|
105
105
|
groupColumn: name => `Group by ${name}`,
|
|
106
106
|
unGroupColumn: name => `Stop grouping by ${name}`,
|
|
107
107
|
// Master/detail
|
|
108
|
+
detailPanelToggle: 'Detail panel toggle',
|
|
108
109
|
expandDetailPanel: 'Expand',
|
|
109
110
|
collapseDetailPanel: 'Collapse',
|
|
110
111
|
// Used core components translation keys
|
|
@@ -8,7 +8,7 @@ import { isFunction } from '../../utils/utils';
|
|
|
8
8
|
export const useGridStateInitialization = (apiRef, props) => {
|
|
9
9
|
const controlStateMapRef = React.useRef({});
|
|
10
10
|
const [, rawForceUpdate] = React.useState();
|
|
11
|
-
const
|
|
11
|
+
const registerControlState = React.useCallback(controlStateItem => {
|
|
12
12
|
const {
|
|
13
13
|
stateId
|
|
14
14
|
} = controlStateItem,
|
|
@@ -18,7 +18,7 @@ export const useGridStateInitialization = (apiRef, props) => {
|
|
|
18
18
|
stateId
|
|
19
19
|
});
|
|
20
20
|
}, []);
|
|
21
|
-
const setState = React.useCallback(state => {
|
|
21
|
+
const setState = React.useCallback((state, reason) => {
|
|
22
22
|
let newState;
|
|
23
23
|
|
|
24
24
|
if (isFunction(state)) {
|
|
@@ -79,23 +79,36 @@ export const useGridStateInitialization = (apiRef, props) => {
|
|
|
79
79
|
|
|
80
80
|
if (controlState.propOnChange && hasPropChanged) {
|
|
81
81
|
const details = props.signature === GridSignature.DataGridPro ? {
|
|
82
|
-
api: apiRef.current
|
|
83
|
-
|
|
82
|
+
api: apiRef.current,
|
|
83
|
+
reason
|
|
84
|
+
} : {
|
|
85
|
+
reason
|
|
86
|
+
};
|
|
84
87
|
controlState.propOnChange(model, details);
|
|
85
88
|
}
|
|
86
89
|
|
|
87
90
|
if (!ignoreSetState) {
|
|
88
|
-
apiRef.current.publishEvent(controlState.changeEvent, model
|
|
91
|
+
apiRef.current.publishEvent(controlState.changeEvent, model, {
|
|
92
|
+
reason
|
|
93
|
+
});
|
|
89
94
|
}
|
|
90
95
|
}
|
|
91
96
|
|
|
92
97
|
return !ignoreSetState;
|
|
93
98
|
}, [apiRef, props.signature]);
|
|
99
|
+
const updateControlState = React.useCallback((key, state, reason) => {
|
|
100
|
+
return apiRef.current.setState(previousState => {
|
|
101
|
+
return _extends({}, previousState, {
|
|
102
|
+
[key]: state(previousState[key])
|
|
103
|
+
});
|
|
104
|
+
}, reason);
|
|
105
|
+
}, [apiRef]);
|
|
94
106
|
const forceUpdate = React.useCallback(() => rawForceUpdate(() => apiRef.current.state), [apiRef]);
|
|
95
107
|
const stateApi = {
|
|
96
108
|
setState,
|
|
97
109
|
forceUpdate,
|
|
98
|
-
unstable_updateControlState: updateControlState
|
|
110
|
+
unstable_updateControlState: updateControlState,
|
|
111
|
+
unstable_registerControlState: registerControlState
|
|
99
112
|
};
|
|
100
113
|
useGridApiMethod(apiRef, stateApi, 'GridStateApi');
|
|
101
114
|
};
|
|
@@ -2,6 +2,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { useGridLogger, useGridApiMethod, useGridApiEventHandler } from '../../utils';
|
|
4
4
|
import { gridColumnMenuSelector } from './columnMenuSelector';
|
|
5
|
+
import { gridClasses } from '../../../constants/gridClasses';
|
|
5
6
|
export const columnMenuStateInitializer = state => _extends({}, state, {
|
|
6
7
|
columnMenu: {
|
|
7
8
|
open: false
|
|
@@ -77,7 +78,28 @@ export const useGridColumnMenu = apiRef => {
|
|
|
77
78
|
* EVENTS
|
|
78
79
|
*/
|
|
79
80
|
|
|
81
|
+
const handleColumnHeaderFocus = React.useCallback((params, event) => {
|
|
82
|
+
// Check if the column menu button received focus
|
|
83
|
+
if (!event.target.classList.contains(gridClasses.menuIconButton)) {
|
|
84
|
+
return;
|
|
85
|
+
} // Check if there's an element which lost focus
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
if (!event.relatedTarget) {
|
|
89
|
+
return;
|
|
90
|
+
} // `true` if the focus was on the column menu itself, not on any item
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
const columnMenuLostFocus = event.relatedTarget.classList.contains(gridClasses.menuList); // `true` if the focus was on an item from the column menu
|
|
94
|
+
|
|
95
|
+
const columnMenuItemLostFocus = event.relatedTarget.getAttribute('role') === 'menuitem';
|
|
96
|
+
|
|
97
|
+
if (columnMenuLostFocus || columnMenuItemLostFocus) {
|
|
98
|
+
apiRef.current.setColumnHeaderFocus(params.field);
|
|
99
|
+
}
|
|
100
|
+
}, [apiRef]);
|
|
80
101
|
useGridApiEventHandler(apiRef, 'columnResizeStart', hideColumnMenu);
|
|
102
|
+
useGridApiEventHandler(apiRef, 'columnHeaderFocus', handleColumnHeaderFocus);
|
|
81
103
|
useGridApiEventHandler(apiRef, 'virtualScrollerWheel', apiRef.current.hideColumnMenu);
|
|
82
104
|
useGridApiEventHandler(apiRef, 'virtualScrollerTouchMove', apiRef.current.hideColumnMenu);
|
|
83
105
|
};
|
|
@@ -15,6 +15,9 @@ export interface GridColumnsState {
|
|
|
15
15
|
lookup: GridColumnLookup;
|
|
16
16
|
columnVisibilityModel: GridColumnVisibilityModel;
|
|
17
17
|
}
|
|
18
|
+
export interface GridColumnsInternalCache {
|
|
19
|
+
isUsingColumnVisibilityModel: boolean;
|
|
20
|
+
}
|
|
18
21
|
export declare type GridColumnDimensions = {
|
|
19
22
|
[key in GridColumnDimensionProperties]?: number;
|
|
20
23
|
};
|
|
@@ -8,4 +8,4 @@ export declare const columnsStateInitializer: GridStateInitializer<Pick<DataGrid
|
|
|
8
8
|
* @requires useGridDimensions (method, event) - can be after
|
|
9
9
|
* TODO: Impossible priority - useGridParamsApi also needs to be after useGridColumns
|
|
10
10
|
*/
|
|
11
|
-
export declare function useGridColumns(apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, '
|
|
11
|
+
export declare function useGridColumns(apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'columns' | 'onColumnVisibilityChange' | 'columnVisibilityModel' | 'onColumnVisibilityModelChange' | 'columnTypes' | 'components' | 'componentsProps'>): void;
|
|
@@ -12,6 +12,9 @@ export const columnsStateInitializer = (state, props, apiRef) => {
|
|
|
12
12
|
var _props$initialState, _props$initialState$c, _props$initialState2, _ref, _props$columnVisibili, _props$initialState3, _props$initialState3$;
|
|
13
13
|
|
|
14
14
|
const isUsingColumnVisibilityModel = !!props.columnVisibilityModel || !!((_props$initialState = props.initialState) != null && (_props$initialState$c = _props$initialState.columns) != null && _props$initialState$c.columnVisibilityModel);
|
|
15
|
+
apiRef.current.unstable_caches.columns = {
|
|
16
|
+
isUsingColumnVisibilityModel
|
|
17
|
+
};
|
|
15
18
|
const columnsTypes = computeColumnTypes(props.columnTypes);
|
|
16
19
|
const columnsState = createColumnsState({
|
|
17
20
|
apiRef,
|
|
@@ -33,19 +36,13 @@ export const columnsStateInitializer = (state, props, apiRef) => {
|
|
|
33
36
|
*/
|
|
34
37
|
|
|
35
38
|
export function useGridColumns(apiRef, props) {
|
|
36
|
-
var _props$
|
|
39
|
+
var _props$componentsProp2;
|
|
37
40
|
|
|
38
41
|
const logger = useGridLogger(apiRef, 'useGridColumns');
|
|
39
42
|
const columnTypes = React.useMemo(() => computeColumnTypes(props.columnTypes), [props.columnTypes]);
|
|
40
43
|
const previousColumnsProp = React.useRef(props.columns);
|
|
41
44
|
const previousColumnTypesProp = React.useRef(columnTypes);
|
|
42
|
-
|
|
43
|
-
* If `initialState.columns.columnVisibilityModel` or `columnVisibilityModel` was defined during the 1st render, we are directly updating the model
|
|
44
|
-
* If not, we keep the old behavior and update the `GridColDef.hide` option (which will update the state model through the `GridColDef.hide` => `columnVisibilityModel` sync in `createColumnsState`
|
|
45
|
-
*/
|
|
46
|
-
|
|
47
|
-
const isUsingColumnVisibilityModel = React.useRef(!!props.columnVisibilityModel || !!((_props$initialState4 = props.initialState) != null && (_props$initialState4$ = _props$initialState4.columns) != null && _props$initialState4$.columnVisibilityModel));
|
|
48
|
-
apiRef.current.unstable_updateControlState({
|
|
45
|
+
apiRef.current.unstable_registerControlState({
|
|
49
46
|
stateId: 'visibleColumns',
|
|
50
47
|
propModel: props.columnVisibilityModel,
|
|
51
48
|
propOnChange: props.onColumnVisibilityModelChange,
|
|
@@ -108,7 +105,7 @@ export function useGridColumns(apiRef, props) {
|
|
|
108
105
|
// We keep updating the `hide` option of `GridColDef` when not controlling the model to avoid any breaking change.
|
|
109
106
|
// `updateColumns` take care of updating the model itself if needs be.
|
|
110
107
|
// TODO v6: stop using the `hide` field even when the model is not defined
|
|
111
|
-
if (
|
|
108
|
+
if (apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel) {
|
|
112
109
|
var _columnVisibilityMode;
|
|
113
110
|
|
|
114
111
|
const columnVisibilityModel = gridColumnVisibilityModelSelector(apiRef);
|
|
@@ -147,7 +144,8 @@ export function useGridColumns(apiRef, props) {
|
|
|
147
144
|
|
|
148
145
|
logger.debug(`Moving column ${field} to index ${targetIndexPosition}`);
|
|
149
146
|
const updatedColumns = [...allColumns];
|
|
150
|
-
|
|
147
|
+
const fieldRemoved = updatedColumns.splice(oldIndexPosition, 1)[0];
|
|
148
|
+
updatedColumns.splice(targetIndexPosition, 0, fieldRemoved);
|
|
151
149
|
setGridColumnsState(_extends({}, gridColumnsSelector(apiRef.current.state), {
|
|
152
150
|
all: updatedColumns
|
|
153
151
|
}));
|
|
@@ -197,7 +195,7 @@ export function useGridColumns(apiRef, props) {
|
|
|
197
195
|
const stateExportPreProcessing = React.useCallback(prevState => {
|
|
198
196
|
const columnsStateToExport = {};
|
|
199
197
|
|
|
200
|
-
if (
|
|
198
|
+
if (apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel) {
|
|
201
199
|
const columnVisibilityModelToExport = gridColumnVisibilityModelSelector(apiRef);
|
|
202
200
|
const hasHiddenColumns = Object.values(columnVisibilityModelToExport).some(value => value === false);
|
|
203
201
|
|
|
@@ -236,7 +234,7 @@ export function useGridColumns(apiRef, props) {
|
|
|
236
234
|
const stateRestorePreProcessing = React.useCallback((params, context) => {
|
|
237
235
|
var _context$stateToResto;
|
|
238
236
|
|
|
239
|
-
const columnVisibilityModelToImport =
|
|
237
|
+
const columnVisibilityModelToImport = apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel ? (_context$stateToResto = context.stateToRestore.columns) == null ? void 0 : _context$stateToResto.columnVisibilityModel : undefined;
|
|
240
238
|
const initialState = context.stateToRestore.columns;
|
|
241
239
|
|
|
242
240
|
if (columnVisibilityModelToImport == null && initialState == null) {
|
|
@@ -248,7 +246,7 @@ export function useGridColumns(apiRef, props) {
|
|
|
248
246
|
columnTypes,
|
|
249
247
|
columnsToUpsert: [],
|
|
250
248
|
initialState,
|
|
251
|
-
shouldRegenColumnVisibilityModelFromColumns: !
|
|
249
|
+
shouldRegenColumnVisibilityModelFromColumns: !apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel,
|
|
252
250
|
currentColumnVisibilityModel: columnVisibilityModelToImport,
|
|
253
251
|
keepOnlyColumnsToUpsert: false
|
|
254
252
|
});
|
|
@@ -299,7 +297,7 @@ export function useGridColumns(apiRef, props) {
|
|
|
299
297
|
columnTypes,
|
|
300
298
|
columnsToUpsert: [],
|
|
301
299
|
initialState: undefined,
|
|
302
|
-
shouldRegenColumnVisibilityModelFromColumns: !
|
|
300
|
+
shouldRegenColumnVisibilityModelFromColumns: !apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel,
|
|
303
301
|
keepOnlyColumnsToUpsert: false
|
|
304
302
|
});
|
|
305
303
|
setGridColumnsState(columnsState);
|
|
@@ -329,7 +327,7 @@ export function useGridColumns(apiRef, props) {
|
|
|
329
327
|
columnTypes,
|
|
330
328
|
initialState: undefined,
|
|
331
329
|
// If the user provides a model, we don't want to set it in the state here because it has it's dedicated `useEffect` which calls `setColumnVisibilityModel`
|
|
332
|
-
shouldRegenColumnVisibilityModelFromColumns: !
|
|
330
|
+
shouldRegenColumnVisibilityModelFromColumns: !apiRef.current.unstable_caches.columns.isUsingColumnVisibilityModel,
|
|
333
331
|
columnsToUpsert: props.columns,
|
|
334
332
|
keepOnlyColumnsToUpsert: true
|
|
335
333
|
});
|
|
@@ -16,6 +16,11 @@ export interface GridDimensions {
|
|
|
16
16
|
* Indicates if a scroll is currently needed to go from the beginning of the first row to the end of the last row.
|
|
17
17
|
*/
|
|
18
18
|
hasScrollY: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Size of the scrollbar used to scroll the rows in pixel.
|
|
21
|
+
* It is defined even when the scrollbar is currently not needed.
|
|
22
|
+
*/
|
|
23
|
+
scrollBarSize: number;
|
|
19
24
|
}
|
|
20
25
|
export interface GridDimensionsApi {
|
|
21
26
|
/**
|
|
@@ -37,7 +37,7 @@ const hasScroll = ({
|
|
|
37
37
|
|
|
38
38
|
export function useGridDimensions(apiRef, props) {
|
|
39
39
|
const logger = useGridLogger(apiRef, 'useResizeContainer');
|
|
40
|
-
const
|
|
40
|
+
const errorShown = React.useRef(false);
|
|
41
41
|
const rootDimensionsRef = React.useRef(null);
|
|
42
42
|
const fullDimensionsRef = React.useRef(null);
|
|
43
43
|
const rowsMeta = useGridSelector(apiRef, gridRowsMetaSelector);
|
|
@@ -94,7 +94,8 @@ export function useGridDimensions(apiRef, props) {
|
|
|
94
94
|
viewportOuterSize,
|
|
95
95
|
viewportInnerSize,
|
|
96
96
|
hasScrollX,
|
|
97
|
-
hasScrollY
|
|
97
|
+
hasScrollY,
|
|
98
|
+
scrollBarSize
|
|
98
99
|
};
|
|
99
100
|
const prevDimensions = fullDimensionsRef.current;
|
|
100
101
|
fullDimensionsRef.current = newFullDimensions;
|
|
@@ -144,14 +145,14 @@ export function useGridDimensions(apiRef, props) {
|
|
|
144
145
|
|
|
145
146
|
const isJSDOM = /jsdom/.test(window.navigator.userAgent);
|
|
146
147
|
|
|
147
|
-
if (size.height === 0 && !
|
|
148
|
-
logger.
|
|
149
|
-
|
|
148
|
+
if (size.height === 0 && !errorShown.current && !props.autoHeight && !isJSDOM) {
|
|
149
|
+
logger.error(['The parent DOM element of the data grid has an empty height.', 'Please make sure that this element has an intrinsic height.', 'The grid displays with a height of 0px.', '', 'More details: https://mui.com/r/x-data-grid-no-dimensions.'].join('\n'));
|
|
150
|
+
errorShown.current = true;
|
|
150
151
|
}
|
|
151
152
|
|
|
152
|
-
if (size.width === 0 && !
|
|
153
|
-
logger.
|
|
154
|
-
|
|
153
|
+
if (size.width === 0 && !errorShown.current && !isJSDOM) {
|
|
154
|
+
logger.error(['The parent DOM element of the data grid has an empty width.', 'Please make sure that this element has an intrinsic width.', 'The grid displays with a width of 0px.', '', 'More details: https://mui.com/r/x-data-grid-no-dimensions.'].join('\n'));
|
|
155
|
+
errorShown.current = true;
|
|
155
156
|
}
|
|
156
157
|
|
|
157
158
|
if (isTestEnvironment) {
|
|
@@ -303,6 +303,9 @@ export const useGridCellEditing = (apiRef, props) => {
|
|
|
303
303
|
} = editingState[id][field];
|
|
304
304
|
|
|
305
305
|
if (error || isProcessingProps) {
|
|
306
|
+
// Attempt to change cell mode to "view" was not successful
|
|
307
|
+
// Update previous mode to allow another attempt
|
|
308
|
+
prevCellModesModel.current[id][field].mode = GridCellModes.Edit;
|
|
306
309
|
return;
|
|
307
310
|
}
|
|
308
311
|
|
|
@@ -310,6 +313,8 @@ export const useGridCellEditing = (apiRef, props) => {
|
|
|
310
313
|
|
|
311
314
|
if (processRowUpdate) {
|
|
312
315
|
const handleError = errorThrown => {
|
|
316
|
+
prevCellModesModel.current[id][field].mode = GridCellModes.Edit;
|
|
317
|
+
|
|
313
318
|
if (onProcessRowUpdateError) {
|
|
314
319
|
onProcessRowUpdateError(errorThrown);
|
|
315
320
|
} else {
|
|
@@ -413,12 +418,15 @@ export const useGridCellEditing = (apiRef, props) => {
|
|
|
413
418
|
}
|
|
414
419
|
}, [cellModesModelProp, updateCellModesModel]);
|
|
415
420
|
React.useEffect(() => {
|
|
416
|
-
const idToIdLookup = gridRowsIdToIdLookupSelector(apiRef);
|
|
421
|
+
const idToIdLookup = gridRowsIdToIdLookupSelector(apiRef); // Update the ref here because updateStateToStopCellEditMode may change it later
|
|
422
|
+
|
|
423
|
+
const copyOfPrevCellModes = prevCellModesModel.current;
|
|
424
|
+
prevCellModesModel.current = cellModesModel;
|
|
417
425
|
Object.entries(cellModesModel).forEach(([id, fields]) => {
|
|
418
426
|
Object.entries(fields).forEach(([field, params]) => {
|
|
419
|
-
var
|
|
427
|
+
var _copyOfPrevCellModes$, _copyOfPrevCellModes$2, _idToIdLookup$id;
|
|
420
428
|
|
|
421
|
-
const prevMode = ((
|
|
429
|
+
const prevMode = ((_copyOfPrevCellModes$ = copyOfPrevCellModes[id]) == null ? void 0 : (_copyOfPrevCellModes$2 = _copyOfPrevCellModes$[field]) == null ? void 0 : _copyOfPrevCellModes$2.mode) || GridCellModes.View;
|
|
422
430
|
const originalId = (_idToIdLookup$id = idToIdLookup[id]) != null ? _idToIdLookup$id : id;
|
|
423
431
|
|
|
424
432
|
if (params.mode === GridCellModes.Edit && prevMode === GridCellModes.View) {
|
|
@@ -434,6 +442,5 @@ export const useGridCellEditing = (apiRef, props) => {
|
|
|
434
442
|
}
|
|
435
443
|
});
|
|
436
444
|
});
|
|
437
|
-
prevCellModesModel.current = cellModesModel;
|
|
438
445
|
}, [apiRef, cellModesModel, updateStateToStartCellEditMode, updateStateToStopCellEditMode]);
|
|
439
446
|
};
|
|
@@ -23,7 +23,7 @@ export function useGridEditing(apiRef, props) {
|
|
|
23
23
|
useCellEditing(apiRef, props);
|
|
24
24
|
useGridRowEditing(apiRef, props);
|
|
25
25
|
const debounceMap = React.useRef({});
|
|
26
|
-
apiRef.current.
|
|
26
|
+
apiRef.current.unstable_registerControlState({
|
|
27
27
|
stateId: 'editRows',
|
|
28
28
|
propModel: props.editRowsModel,
|
|
29
29
|
propOnChange: props.onEditRowsModelChange,
|
|
@@ -384,12 +384,14 @@ export const useGridRowEditing = (apiRef, props) => {
|
|
|
384
384
|
const isSomeFieldProcessingProps = Object.values(editingState[id]).some(fieldProps => fieldProps.isProcessingProps);
|
|
385
385
|
|
|
386
386
|
if (isSomeFieldProcessingProps) {
|
|
387
|
+
prevRowModesModel.current[id].mode = GridRowModes.Edit;
|
|
387
388
|
return;
|
|
388
389
|
}
|
|
389
390
|
|
|
390
391
|
const hasSomeFieldWithError = Object.values(editingState[id]).some(fieldProps => fieldProps.error);
|
|
391
392
|
|
|
392
393
|
if (hasSomeFieldWithError) {
|
|
394
|
+
prevRowModesModel.current[id].mode = GridRowModes.Edit;
|
|
393
395
|
return;
|
|
394
396
|
}
|
|
395
397
|
|
|
@@ -397,6 +399,8 @@ export const useGridRowEditing = (apiRef, props) => {
|
|
|
397
399
|
|
|
398
400
|
if (processRowUpdate) {
|
|
399
401
|
const handleError = errorThrown => {
|
|
402
|
+
prevRowModesModel.current[id].mode = GridRowModes.Edit;
|
|
403
|
+
|
|
400
404
|
if (onProcessRowUpdateError) {
|
|
401
405
|
onProcessRowUpdateError(errorThrown);
|
|
402
406
|
} else {
|
|
@@ -567,11 +571,14 @@ export const useGridRowEditing = (apiRef, props) => {
|
|
|
567
571
|
}
|
|
568
572
|
}, [rowModesModelProp, updateRowModesModel]);
|
|
569
573
|
React.useEffect(() => {
|
|
570
|
-
const idToIdLookup = gridRowsIdToIdLookupSelector(apiRef);
|
|
574
|
+
const idToIdLookup = gridRowsIdToIdLookupSelector(apiRef); // Update the ref here because updateStateToStopRowEditMode may change it later
|
|
575
|
+
|
|
576
|
+
const copyOfPrevRowModesModel = prevRowModesModel.current;
|
|
577
|
+
prevRowModesModel.current = rowModesModel;
|
|
571
578
|
Object.entries(rowModesModel).forEach(([id, params]) => {
|
|
572
|
-
var
|
|
579
|
+
var _copyOfPrevRowModesMo, _idToIdLookup$id;
|
|
573
580
|
|
|
574
|
-
const prevMode = ((
|
|
581
|
+
const prevMode = ((_copyOfPrevRowModesMo = copyOfPrevRowModesModel[id]) == null ? void 0 : _copyOfPrevRowModesMo.mode) || GridRowModes.View;
|
|
575
582
|
const originalId = (_idToIdLookup$id = idToIdLookup[id]) != null ? _idToIdLookup$id : id;
|
|
576
583
|
|
|
577
584
|
if (params.mode === GridRowModes.Edit && prevMode === GridRowModes.View) {
|
|
@@ -584,6 +591,5 @@ export const useGridRowEditing = (apiRef, props) => {
|
|
|
584
591
|
}, params));
|
|
585
592
|
}
|
|
586
593
|
});
|
|
587
|
-
prevRowModesModel.current = rowModesModel;
|
|
588
594
|
}, [apiRef, rowModesModel, updateStateToStartRowEditMode, updateStateToStopRowEditMode]);
|
|
589
595
|
};
|
|
@@ -5,4 +5,4 @@ import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
|
|
|
5
5
|
* @requires useGridFocus (event) - can be after, async only
|
|
6
6
|
* @requires useGridColumns (event) - can be after, async only
|
|
7
7
|
*/
|
|
8
|
-
export declare function useGridEvents(apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'onColumnHeaderClick' | 'onColumnHeaderDoubleClick' | 'onColumnHeaderOver' | 'onColumnHeaderOut' | 'onColumnHeaderEnter' | 'onColumnHeaderLeave' | 'onColumnOrderChange' | 'onCellClick' | 'onCellDoubleClick' | 'onCellKeyDown' | 'onCellFocusOut' | 'onPreferencePanelClose' | 'onPreferencePanelOpen' | 'onRowDoubleClick' | 'onRowClick' | 'onError' | 'onStateChange'>): void;
|
|
8
|
+
export declare function useGridEvents(apiRef: React.MutableRefObject<GridApiCommunity>, props: Pick<DataGridProcessedProps, 'onColumnHeaderClick' | 'onColumnHeaderDoubleClick' | 'onColumnHeaderOver' | 'onColumnHeaderOut' | 'onColumnHeaderEnter' | 'onColumnHeaderLeave' | 'onColumnOrderChange' | 'onCellClick' | 'onCellDoubleClick' | 'onCellKeyDown' | 'onCellFocusOut' | 'onPreferencePanelClose' | 'onPreferencePanelOpen' | 'onRowDoubleClick' | 'onRowClick' | 'onError' | 'onStateChange' | 'onMenuOpen' | 'onMenuClose'>): void;
|
|
@@ -18,6 +18,8 @@ export function useGridEvents(apiRef, props) {
|
|
|
18
18
|
useGridApiOptionHandler(apiRef, 'cellFocusOut', props.onCellFocusOut);
|
|
19
19
|
useGridApiOptionHandler(apiRef, 'preferencePanelClose', props.onPreferencePanelClose);
|
|
20
20
|
useGridApiOptionHandler(apiRef, 'preferencePanelOpen', props.onPreferencePanelOpen);
|
|
21
|
+
useGridApiOptionHandler(apiRef, 'menuOpen', props.onMenuOpen);
|
|
22
|
+
useGridApiOptionHandler(apiRef, 'menuClose', props.onMenuClose);
|
|
21
23
|
useGridApiOptionHandler(apiRef, 'rowDoubleClick', props.onRowDoubleClick);
|
|
22
24
|
useGridApiOptionHandler(apiRef, 'rowClick', props.onRowClick);
|
|
23
25
|
useGridApiOptionHandler(apiRef, 'componentError', props.onError);
|
|
@@ -9,6 +9,11 @@ export declare const gridFilterStateSelector: (state: GridStateCommunity) => imp
|
|
|
9
9
|
* @category Filtering
|
|
10
10
|
*/
|
|
11
11
|
export declare const gridFilterModelSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, import("../../..").GridFilterModel>;
|
|
12
|
+
/**
|
|
13
|
+
* Get the current quick filter values.
|
|
14
|
+
* @category Filtering
|
|
15
|
+
*/
|
|
16
|
+
export declare const gridQuickFilterValuesSelector: import("../../../utils/createSelector").OutputSelector<GridStateCommunity, any[] | undefined>;
|
|
12
17
|
/**
|
|
13
18
|
* @category Filtering
|
|
14
19
|
* @ignore - do not document.
|
|
@@ -13,6 +13,12 @@ export const gridFilterStateSelector = state => state.filter;
|
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
export const gridFilterModelSelector = createSelector(gridFilterStateSelector, filterState => filterState.filterModel);
|
|
16
|
+
/**
|
|
17
|
+
* Get the current quick filter values.
|
|
18
|
+
* @category Filtering
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
export const gridQuickFilterValuesSelector = createSelector(gridFilterModelSelector, filterModel => filterModel.quickFilterValues);
|
|
16
22
|
/**
|
|
17
23
|
* @category Filtering
|
|
18
24
|
* @ignore - do not document.
|
|
@@ -19,7 +19,7 @@ export interface GridFilterState {
|
|
|
19
19
|
/**
|
|
20
20
|
* Amount of descendants that are passing the filters.
|
|
21
21
|
* For the Tree Data, it includes all the intermediate depth levels (= amount of children + amount of grand children + ...).
|
|
22
|
-
* For the Row
|
|
22
|
+
* For the Row grouping by column, it does not include the intermediate depth levels (= amount of descendant of maximum depth).
|
|
23
23
|
* If a row is not registered in this lookup, it is supposed to have no descendant passing the filters.
|
|
24
24
|
*/
|
|
25
25
|
filteredDescendantCountLookup: Record<GridRowId, number>;
|