@mui/x-data-grid 6.3.1 → 6.5.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 +113 -0
- package/DataGrid/DataGrid.js +20 -1
- package/DataGrid/useDataGridComponent.js +2 -2
- package/DataGrid/useDataGridProps.js +8 -13
- package/colDef/gridBooleanColDef.js +19 -1
- package/colDef/gridDateColDef.js +6 -2
- package/colDef/gridNumericOperators.js +0 -6
- package/colDef/gridSingleSelectColDef.js +21 -1
- package/components/base/GridBody.js +2 -1
- package/components/cell/GridEditInputCell.js +4 -1
- package/components/containers/GridRootStyles.js +1 -0
- package/components/panel/filterPanel/GridFilterInputBoolean.d.ts +15 -2
- package/components/panel/filterPanel/GridFilterInputBoolean.js +80 -36
- package/components/panel/filterPanel/GridFilterInputDate.d.ts +8 -1
- package/components/panel/filterPanel/GridFilterInputDate.js +27 -6
- package/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -2
- package/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -2
- package/components/panel/filterPanel/GridFilterInputSingleSelect.d.ts +8 -1
- package/components/panel/filterPanel/GridFilterInputSingleSelect.js +55 -32
- package/components/panel/filterPanel/GridFilterInputValue.d.ts +11 -4
- package/components/panel/filterPanel/GridFilterInputValue.js +29 -6
- package/components/panel/filterPanel/GridFilterPanel.d.ts +2 -1
- package/components/panel/filterPanel/GridFilterPanel.js +1 -1
- package/components/panel/filterPanel/index.d.ts +3 -1
- package/components/panel/filterPanel/index.js +2 -1
- package/constants/localeTextConstants.js +26 -0
- package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +12 -1
- package/hooks/features/clipboard/useGridClipboard.d.ts +2 -1
- package/hooks/features/clipboard/useGridClipboard.js +43 -26
- package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +9 -2
- package/hooks/features/columnHeaders/useGridColumnHeaders.js +4 -2
- package/hooks/features/dimensions/useGridDimensions.js +4 -6
- package/hooks/features/editing/useGridCellEditing.js +7 -3
- package/hooks/features/editing/useGridEditing.js +0 -3
- package/hooks/features/editing/useGridRowEditing.js +7 -3
- package/hooks/features/export/serializers/csvSerializer.d.ts +5 -0
- package/hooks/features/export/serializers/csvSerializer.js +46 -6
- package/hooks/features/export/useGridCsvExport.d.ts +2 -1
- package/hooks/features/export/useGridCsvExport.js +7 -5
- package/hooks/features/focus/gridFocusState.d.ts +2 -0
- package/hooks/features/focus/gridFocusStateSelector.d.ts +2 -0
- package/hooks/features/focus/gridFocusStateSelector.js +6 -0
- package/hooks/features/focus/useGridFocus.js +55 -9
- package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.d.ts +4 -0
- package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +5 -0
- package/hooks/features/headerFiltering/index.d.ts +1 -0
- package/hooks/features/headerFiltering/index.js +1 -0
- package/hooks/features/headerFiltering/useGridHeaderFiltering.d.ts +6 -0
- package/hooks/features/headerFiltering/useGridHeaderFiltering.js +91 -0
- package/hooks/features/index.d.ts +1 -0
- package/hooks/features/index.js +2 -1
- package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -1
- package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +124 -4
- package/hooks/features/rows/useGridRows.js +16 -1
- package/index.js +1 -1
- package/internals/index.d.ts +9 -3
- package/internals/index.js +7 -2
- package/internals/utils/index.d.ts +1 -0
- package/internals/utils/index.js +2 -1
- package/internals/utils/useProps.d.ts +8 -0
- package/internals/utils/useProps.js +13 -0
- package/joy/icons.d.ts +33 -0
- package/joy/icons.js +433 -0
- package/joy/joySlots.js +114 -4
- package/legacy/DataGrid/DataGrid.js +20 -1
- package/legacy/DataGrid/useDataGridComponent.js +2 -2
- package/legacy/DataGrid/useDataGridProps.js +11 -9
- package/legacy/colDef/gridBooleanColDef.js +21 -1
- package/legacy/colDef/gridDateColDef.js +10 -2
- package/legacy/colDef/gridNumericOperators.js +0 -6
- package/legacy/colDef/gridSingleSelectColDef.js +21 -1
- package/legacy/components/base/GridBody.js +2 -1
- package/legacy/components/cell/GridEditInputCell.js +4 -1
- package/legacy/components/containers/GridRootStyles.js +1 -0
- package/legacy/components/panel/filterPanel/GridFilterInputBoolean.js +79 -35
- package/legacy/components/panel/filterPanel/GridFilterInputDate.js +26 -5
- package/legacy/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -2
- package/legacy/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -2
- package/legacy/components/panel/filterPanel/GridFilterInputSingleSelect.js +54 -31
- package/legacy/components/panel/filterPanel/GridFilterInputValue.js +28 -5
- package/legacy/components/panel/filterPanel/GridFilterPanel.js +1 -1
- package/legacy/components/panel/filterPanel/index.js +2 -1
- package/legacy/constants/localeTextConstants.js +26 -0
- package/legacy/hooks/features/clipboard/useGridClipboard.js +44 -26
- package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -5
- package/legacy/hooks/features/dimensions/useGridDimensions.js +4 -6
- package/legacy/hooks/features/editing/useGridCellEditing.js +7 -3
- package/legacy/hooks/features/editing/useGridEditing.js +0 -3
- package/legacy/hooks/features/editing/useGridRowEditing.js +7 -3
- package/legacy/hooks/features/export/serializers/csvSerializer.js +43 -6
- package/legacy/hooks/features/export/useGridCsvExport.js +8 -5
- package/legacy/hooks/features/focus/gridFocusStateSelector.js +10 -0
- package/legacy/hooks/features/focus/useGridFocus.js +58 -9
- package/legacy/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +11 -0
- package/legacy/hooks/features/headerFiltering/index.js +1 -0
- package/legacy/hooks/features/headerFiltering/useGridHeaderFiltering.js +93 -0
- package/legacy/hooks/features/index.js +2 -1
- package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +123 -4
- package/legacy/hooks/features/rows/useGridRows.js +16 -1
- package/legacy/index.js +1 -1
- package/legacy/internals/index.js +7 -2
- package/legacy/internals/utils/index.js +2 -1
- package/legacy/internals/utils/useProps.js +11 -0
- package/legacy/joy/icons.js +432 -0
- package/legacy/joy/joySlots.js +118 -4
- package/legacy/locales/arSD.js +28 -0
- package/legacy/locales/beBY.js +28 -0
- package/legacy/locales/bgBG.js +28 -0
- package/legacy/locales/csCZ.js +36 -8
- package/legacy/locales/daDK.js +28 -0
- package/legacy/locales/deDE.js +30 -2
- package/legacy/locales/elGR.js +27 -0
- package/legacy/locales/esES.js +28 -0
- package/legacy/locales/faIR.js +28 -0
- package/legacy/locales/fiFI.js +28 -0
- package/legacy/locales/frFR.js +34 -6
- package/legacy/locales/heIL.js +30 -2
- package/legacy/locales/huHU.js +28 -0
- package/legacy/locales/itIT.js +28 -0
- package/legacy/locales/jaJP.js +28 -0
- package/legacy/locales/koKR.js +28 -0
- package/legacy/locales/nbNO.js +28 -0
- package/legacy/locales/nlNL.js +28 -0
- package/legacy/locales/plPL.js +28 -0
- package/legacy/locales/ptBR.js +29 -1
- package/legacy/locales/roRO.js +28 -0
- package/legacy/locales/ruRU.js +28 -0
- package/legacy/locales/skSK.js +28 -0
- package/legacy/locales/svSE.js +28 -0
- package/legacy/locales/trTR.js +28 -0
- package/legacy/locales/ukUA.js +36 -9
- package/legacy/locales/urPK.js +28 -0
- package/legacy/locales/viVN.js +27 -0
- package/legacy/locales/zhCN.js +28 -0
- package/legacy/locales/zhTW.js +28 -0
- package/legacy/material/index.js +5 -1
- package/legacy/models/api/index.js +0 -1
- package/legacy/models/index.js +0 -1
- package/legacy/utils/domUtils.js +14 -1
- package/locales/arSD.js +28 -0
- package/locales/beBY.js +28 -0
- package/locales/bgBG.js +28 -0
- package/locales/csCZ.js +36 -8
- package/locales/daDK.js +28 -0
- package/locales/deDE.js +30 -2
- package/locales/elGR.js +27 -0
- package/locales/esES.js +28 -0
- package/locales/faIR.js +28 -0
- package/locales/fiFI.js +28 -0
- package/locales/frFR.js +34 -6
- package/locales/heIL.js +30 -2
- package/locales/huHU.js +28 -0
- package/locales/itIT.js +28 -0
- package/locales/jaJP.js +28 -0
- package/locales/koKR.js +28 -0
- package/locales/nbNO.js +28 -0
- package/locales/nlNL.js +28 -0
- package/locales/plPL.js +28 -0
- package/locales/ptBR.js +29 -1
- package/locales/roRO.js +28 -0
- package/locales/ruRU.js +28 -0
- package/locales/skSK.js +28 -0
- package/locales/svSE.js +28 -0
- package/locales/trTR.js +28 -0
- package/locales/ukUA.js +36 -9
- package/locales/urPK.js +28 -0
- package/locales/viVN.js +27 -0
- package/locales/zhCN.js +28 -0
- package/locales/zhTW.js +28 -0
- package/material/index.d.ts +3 -65
- package/material/index.js +5 -1
- package/models/api/gridApiCommon.d.ts +3 -3
- package/models/api/gridCoreApi.d.ts +8 -0
- package/models/api/gridFocusApi.d.ts +6 -0
- package/models/api/gridHeaderFilteringApi.d.ts +30 -0
- package/models/api/gridLocaleTextApi.d.ts +25 -0
- package/models/api/index.d.ts +0 -1
- package/models/api/index.js +0 -1
- package/models/events/gridEventLookup.d.ts +33 -1
- package/models/gridFilterOperator.d.ts +4 -0
- package/models/gridHeaderFilteringModel.d.ts +5 -0
- package/models/gridHeaderFilteringModel.js +1 -0
- package/models/gridSlotsComponent.d.ts +21 -4
- package/models/gridSlotsComponentsProps.d.ts +4 -0
- package/models/gridStateCommunity.d.ts +2 -0
- package/models/index.d.ts +1 -1
- package/models/index.js +0 -1
- package/models/props/DataGridProps.d.ts +19 -0
- package/modern/DataGrid/DataGrid.js +20 -1
- package/modern/DataGrid/useDataGridComponent.js +2 -2
- package/modern/DataGrid/useDataGridProps.js +8 -13
- package/modern/colDef/gridBooleanColDef.js +19 -1
- package/modern/colDef/gridDateColDef.js +6 -2
- package/modern/colDef/gridNumericOperators.js +0 -6
- package/modern/colDef/gridSingleSelectColDef.js +21 -1
- package/modern/components/base/GridBody.js +2 -1
- package/modern/components/cell/GridEditInputCell.js +4 -1
- package/modern/components/containers/GridRootStyles.js +1 -0
- package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +80 -36
- package/modern/components/panel/filterPanel/GridFilterInputDate.js +27 -6
- package/modern/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -2
- package/modern/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -2
- package/modern/components/panel/filterPanel/GridFilterInputSingleSelect.js +55 -32
- package/modern/components/panel/filterPanel/GridFilterInputValue.js +29 -6
- package/modern/components/panel/filterPanel/GridFilterPanel.js +1 -1
- package/modern/components/panel/filterPanel/index.js +2 -1
- package/modern/constants/localeTextConstants.js +26 -0
- package/modern/hooks/features/clipboard/useGridClipboard.js +43 -26
- package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +4 -2
- package/modern/hooks/features/dimensions/useGridDimensions.js +3 -5
- package/modern/hooks/features/editing/useGridCellEditing.js +7 -3
- package/modern/hooks/features/editing/useGridEditing.js +0 -3
- package/modern/hooks/features/editing/useGridRowEditing.js +7 -3
- package/modern/hooks/features/export/serializers/csvSerializer.js +44 -6
- package/modern/hooks/features/export/useGridCsvExport.js +7 -5
- package/modern/hooks/features/focus/gridFocusStateSelector.js +6 -0
- package/modern/hooks/features/focus/useGridFocus.js +55 -9
- package/modern/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +5 -0
- package/modern/hooks/features/headerFiltering/index.js +1 -0
- package/modern/hooks/features/headerFiltering/useGridHeaderFiltering.js +90 -0
- package/modern/hooks/features/index.js +2 -1
- package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +124 -4
- package/modern/hooks/features/rows/useGridRows.js +16 -1
- package/modern/index.js +1 -1
- package/modern/internals/index.js +7 -2
- package/modern/internals/utils/index.js +2 -1
- package/modern/internals/utils/useProps.js +13 -0
- package/modern/joy/icons.js +433 -0
- package/modern/joy/joySlots.js +110 -4
- package/modern/locales/arSD.js +28 -0
- package/modern/locales/beBY.js +28 -0
- package/modern/locales/bgBG.js +28 -0
- package/modern/locales/csCZ.js +36 -8
- package/modern/locales/daDK.js +28 -0
- package/modern/locales/deDE.js +30 -2
- package/modern/locales/elGR.js +27 -0
- package/modern/locales/esES.js +28 -0
- package/modern/locales/faIR.js +28 -0
- package/modern/locales/fiFI.js +28 -0
- package/modern/locales/frFR.js +34 -6
- package/modern/locales/heIL.js +30 -2
- package/modern/locales/huHU.js +28 -0
- package/modern/locales/itIT.js +28 -0
- package/modern/locales/jaJP.js +28 -0
- package/modern/locales/koKR.js +28 -0
- package/modern/locales/nbNO.js +28 -0
- package/modern/locales/nlNL.js +28 -0
- package/modern/locales/plPL.js +28 -0
- package/modern/locales/ptBR.js +29 -1
- package/modern/locales/roRO.js +28 -0
- package/modern/locales/ruRU.js +28 -0
- package/modern/locales/skSK.js +28 -0
- package/modern/locales/svSE.js +28 -0
- package/modern/locales/trTR.js +28 -0
- package/modern/locales/ukUA.js +36 -9
- package/modern/locales/urPK.js +28 -0
- package/modern/locales/viVN.js +27 -0
- package/modern/locales/zhCN.js +28 -0
- package/modern/locales/zhTW.js +28 -0
- package/modern/material/index.js +5 -1
- package/modern/models/api/gridHeaderFilteringApi.js +1 -0
- package/modern/models/api/index.js +0 -1
- package/modern/models/gridHeaderFilteringModel.js +1 -0
- package/modern/models/index.js +0 -1
- package/modern/utils/domUtils.js +13 -1
- package/node/DataGrid/DataGrid.js +20 -1
- package/node/DataGrid/useDataGridComponent.js +2 -2
- package/node/DataGrid/useDataGridProps.js +7 -12
- package/node/colDef/gridBooleanColDef.js +19 -1
- package/node/colDef/gridDateColDef.js +6 -2
- package/node/colDef/gridNumericOperators.js +0 -6
- package/node/colDef/gridSingleSelectColDef.js +21 -1
- package/node/components/base/GridBody.js +2 -1
- package/node/components/cell/GridEditInputCell.js +4 -1
- package/node/components/containers/GridRootStyles.js +1 -0
- package/node/components/panel/filterPanel/GridFilterInputBoolean.js +78 -35
- package/node/components/panel/filterPanel/GridFilterInputDate.js +27 -6
- package/node/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js +1 -2
- package/node/components/panel/filterPanel/GridFilterInputMultipleValue.js +1 -2
- package/node/components/panel/filterPanel/GridFilterInputSingleSelect.js +55 -32
- package/node/components/panel/filterPanel/GridFilterInputValue.js +29 -6
- package/node/components/panel/filterPanel/GridFilterPanel.js +2 -1
- package/node/components/panel/filterPanel/index.js +26 -8
- package/node/constants/localeTextConstants.js +26 -0
- package/node/hooks/features/clipboard/useGridClipboard.js +42 -25
- package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +4 -2
- package/node/hooks/features/dimensions/useGridDimensions.js +3 -5
- package/node/hooks/features/editing/useGridCellEditing.js +7 -3
- package/node/hooks/features/editing/useGridEditing.js +0 -3
- package/node/hooks/features/editing/useGridRowEditing.js +7 -3
- package/node/hooks/features/export/serializers/csvSerializer.js +46 -6
- package/node/hooks/features/export/useGridCsvExport.js +6 -3
- package/node/hooks/features/focus/gridFocusStateSelector.js +9 -1
- package/node/hooks/features/focus/useGridFocus.js +55 -9
- package/node/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +15 -0
- package/node/hooks/features/headerFiltering/index.js +16 -0
- package/node/hooks/features/headerFiltering/useGridHeaderFiltering.js +101 -0
- package/node/hooks/features/index.js +11 -0
- package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +124 -4
- package/node/hooks/features/rows/useGridRows.js +16 -1
- package/node/index.js +1 -1
- package/node/internals/index.js +69 -1
- package/node/internals/utils/index.js +11 -0
- package/node/internals/utils/useProps.js +22 -0
- package/node/joy/icons.js +471 -0
- package/node/joy/joySlots.js +110 -3
- package/node/locales/arSD.js +28 -0
- package/node/locales/beBY.js +28 -0
- package/node/locales/bgBG.js +28 -0
- package/node/locales/csCZ.js +36 -8
- package/node/locales/daDK.js +28 -0
- package/node/locales/deDE.js +30 -2
- package/node/locales/elGR.js +27 -0
- package/node/locales/esES.js +28 -0
- package/node/locales/faIR.js +28 -0
- package/node/locales/fiFI.js +28 -0
- package/node/locales/frFR.js +34 -6
- package/node/locales/heIL.js +30 -2
- package/node/locales/huHU.js +28 -0
- package/node/locales/itIT.js +28 -0
- package/node/locales/jaJP.js +28 -0
- package/node/locales/koKR.js +28 -0
- package/node/locales/nbNO.js +28 -0
- package/node/locales/nlNL.js +28 -0
- package/node/locales/plPL.js +28 -0
- package/node/locales/ptBR.js +29 -1
- package/node/locales/roRO.js +28 -0
- package/node/locales/ruRU.js +28 -0
- package/node/locales/skSK.js +28 -0
- package/node/locales/svSE.js +28 -0
- package/node/locales/trTR.js +28 -0
- package/node/locales/ukUA.js +36 -9
- package/node/locales/urPK.js +28 -0
- package/node/locales/viVN.js +27 -0
- package/node/locales/zhCN.js +28 -0
- package/node/locales/zhTW.js +28 -0
- package/node/material/index.js +5 -1
- package/node/models/api/index.js +0 -11
- package/node/models/gridHeaderFilteringModel.js +5 -0
- package/node/models/index.js +0 -11
- package/node/utils/domUtils.js +15 -1
- package/package.json +1 -1
- package/utils/domUtils.d.ts +1 -0
- package/utils/domUtils.js +13 -1
- package/models/api/gridClipboardApi.d.ts +0 -11
- /package/legacy/models/api/{gridClipboardApi.js → gridHeaderFilteringApi.js} +0 -0
- /package/{models/api/gridClipboardApi.js → legacy/models/gridHeaderFilteringModel.js} +0 -0
- /package/{modern/models/api/gridClipboardApi.js → models/api/gridHeaderFilteringApi.js} +0 -0
- /package/node/models/api/{gridClipboardApi.js → gridHeaderFilteringApi.js} +0 -0
|
@@ -60,6 +60,32 @@ export var GRID_DEFAULT_LOCALE_TEXT = {
|
|
|
60
60
|
filterOperatorIsEmpty: 'is empty',
|
|
61
61
|
filterOperatorIsNotEmpty: 'is not empty',
|
|
62
62
|
filterOperatorIsAnyOf: 'is any of',
|
|
63
|
+
'filterOperator=': '=',
|
|
64
|
+
'filterOperator!=': '!=',
|
|
65
|
+
'filterOperator>': '>',
|
|
66
|
+
'filterOperator>=': '>=',
|
|
67
|
+
'filterOperator<': '<',
|
|
68
|
+
'filterOperator<=': '<=',
|
|
69
|
+
// Header filter operators text
|
|
70
|
+
headerFilterOperatorContains: 'Contains',
|
|
71
|
+
headerFilterOperatorEquals: 'Equals',
|
|
72
|
+
headerFilterOperatorStartsWith: 'Starts with',
|
|
73
|
+
headerFilterOperatorEndsWith: 'Ends with',
|
|
74
|
+
headerFilterOperatorIs: 'Is',
|
|
75
|
+
headerFilterOperatorNot: 'Is not',
|
|
76
|
+
headerFilterOperatorAfter: 'Is after',
|
|
77
|
+
headerFilterOperatorOnOrAfter: 'Is on or after',
|
|
78
|
+
headerFilterOperatorBefore: 'Is before',
|
|
79
|
+
headerFilterOperatorOnOrBefore: 'Is on or before',
|
|
80
|
+
headerFilterOperatorIsEmpty: 'Is empty',
|
|
81
|
+
headerFilterOperatorIsNotEmpty: 'Is not empty',
|
|
82
|
+
headerFilterOperatorIsAnyOf: 'Is any of',
|
|
83
|
+
'headerFilterOperator=': 'Equals',
|
|
84
|
+
'headerFilterOperator!=': 'Not equals',
|
|
85
|
+
'headerFilterOperator>': 'Is greater than',
|
|
86
|
+
'headerFilterOperator>=': 'Is greater than or equal to',
|
|
87
|
+
'headerFilterOperator<': 'Is less than',
|
|
88
|
+
'headerFilterOperator<=': 'Is less than or equal to',
|
|
63
89
|
// Filter values text
|
|
64
90
|
filterValueAny: 'any',
|
|
65
91
|
filterValueTrue: 'true',
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
1
2
|
import * as React from 'react';
|
|
2
|
-
import {
|
|
3
|
+
import { useGridApiOptionHandler, useGridNativeEventListener } from '../../utils';
|
|
4
|
+
import { gridFocusCellSelector } from '../focus/gridFocusStateSelector';
|
|
5
|
+
import { serializeCellValue } from '../export/serializers/csvSerializer';
|
|
3
6
|
function writeToClipboardPolyfill(data) {
|
|
4
7
|
var span = document.createElement('span');
|
|
5
8
|
span.style.whiteSpace = 'pre';
|
|
@@ -18,6 +21,15 @@ function writeToClipboardPolyfill(data) {
|
|
|
18
21
|
document.body.removeChild(span);
|
|
19
22
|
}
|
|
20
23
|
}
|
|
24
|
+
function copyToClipboard(data) {
|
|
25
|
+
if (navigator.clipboard) {
|
|
26
|
+
navigator.clipboard.writeText(data).catch(function () {
|
|
27
|
+
writeToClipboardPolyfill(data);
|
|
28
|
+
});
|
|
29
|
+
} else {
|
|
30
|
+
writeToClipboardPolyfill(data);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
21
33
|
function hasNativeSelection(element) {
|
|
22
34
|
var _window$getSelection;
|
|
23
35
|
// When getSelection is called on an <iframe> that is not displayed Firefox will return null.
|
|
@@ -38,24 +50,11 @@ function hasNativeSelection(element) {
|
|
|
38
50
|
* @requires useGridCsvExport (method)
|
|
39
51
|
* @requires useGridSelection (method)
|
|
40
52
|
*/
|
|
41
|
-
export var useGridClipboard = function useGridClipboard(apiRef) {
|
|
42
|
-
var
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
var data = apiRef.current.getDataAsCsv({
|
|
47
|
-
includeHeaders: false,
|
|
48
|
-
delimiter: '\t'
|
|
49
|
-
});
|
|
50
|
-
if (navigator.clipboard) {
|
|
51
|
-
navigator.clipboard.writeText(data).catch(function () {
|
|
52
|
-
writeToClipboardPolyfill(data);
|
|
53
|
-
});
|
|
54
|
-
} else {
|
|
55
|
-
writeToClipboardPolyfill(data);
|
|
56
|
-
}
|
|
57
|
-
}, [apiRef]);
|
|
58
|
-
var handleKeydown = React.useCallback(function (event) {
|
|
53
|
+
export var useGridClipboard = function useGridClipboard(apiRef, props) {
|
|
54
|
+
var ignoreValueFormatterProp = props.unstable_ignoreValueFormatterDuringExport;
|
|
55
|
+
var ignoreValueFormatter = (_typeof(ignoreValueFormatterProp) === 'object' ? ignoreValueFormatterProp == null ? void 0 : ignoreValueFormatterProp.clipboardExport : ignoreValueFormatterProp) || false;
|
|
56
|
+
var clipboardCopyCellDelimiter = props.clipboardCopyCellDelimiter;
|
|
57
|
+
var handleCopy = React.useCallback(function (event) {
|
|
59
58
|
var isModifierKeyPressed = event.ctrlKey || event.metaKey;
|
|
60
59
|
// event.code === 'KeyC' is not enough as event.code assume a QWERTY keyboard layout which would
|
|
61
60
|
// be wrong with a Dvorak keyboard (as if pressing J).
|
|
@@ -67,11 +66,30 @@ export var useGridClipboard = function useGridClipboard(apiRef) {
|
|
|
67
66
|
if (hasNativeSelection(event.target)) {
|
|
68
67
|
return;
|
|
69
68
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
69
|
+
var textToCopy = '';
|
|
70
|
+
var selectedRows = apiRef.current.getSelectedRows();
|
|
71
|
+
if (selectedRows.size > 0) {
|
|
72
|
+
textToCopy = apiRef.current.getDataAsCsv({
|
|
73
|
+
includeHeaders: false,
|
|
74
|
+
// TODO: make it configurable
|
|
75
|
+
delimiter: clipboardCopyCellDelimiter
|
|
76
|
+
});
|
|
77
|
+
} else {
|
|
78
|
+
var focusedCell = gridFocusCellSelector(apiRef);
|
|
79
|
+
if (focusedCell) {
|
|
80
|
+
var cellParams = apiRef.current.getCellParams(focusedCell.id, focusedCell.field);
|
|
81
|
+
textToCopy = serializeCellValue(cellParams, {
|
|
82
|
+
delimiterCharacter: clipboardCopyCellDelimiter,
|
|
83
|
+
ignoreValueFormatter: ignoreValueFormatter
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
textToCopy = apiRef.current.unstable_applyPipeProcessors('clipboardCopy', textToCopy);
|
|
88
|
+
if (textToCopy) {
|
|
89
|
+
copyToClipboard(textToCopy);
|
|
90
|
+
apiRef.current.publishEvent('clipboardCopy', textToCopy);
|
|
91
|
+
}
|
|
92
|
+
}, [apiRef, ignoreValueFormatter, clipboardCopyCellDelimiter]);
|
|
93
|
+
useGridNativeEventListener(apiRef, apiRef.current.rootElementRef, 'keydown', handleCopy);
|
|
94
|
+
useGridApiOptionHandler(apiRef, 'clipboardCopy', props.onClipboardCopy);
|
|
77
95
|
};
|
|
@@ -298,10 +298,8 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
|
|
|
298
298
|
var tabIndex = columnGroupHeaderTabIndexState !== null && columnGroupHeaderTabIndexState.depth === depth && columnFields.includes(columnGroupHeaderTabIndexState.field) ? 0 : -1;
|
|
299
299
|
var headerInfo = {
|
|
300
300
|
groupId: groupId,
|
|
301
|
-
width: columnFields.
|
|
302
|
-
return apiRef.current.getColumn(field).computedWidth;
|
|
303
|
-
}).reduce(function (acc, val) {
|
|
304
|
-
return acc + val;
|
|
301
|
+
width: columnFields.reduce(function (acc, field) {
|
|
302
|
+
return acc + apiRef.current.getColumn(field).computedWidth;
|
|
305
303
|
}, 0),
|
|
306
304
|
fields: columnFields,
|
|
307
305
|
colIndex: columnIndex,
|
|
@@ -360,6 +358,7 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
|
|
|
360
358
|
return {
|
|
361
359
|
renderContext: renderContext,
|
|
362
360
|
getColumnHeaders: getColumnHeaders,
|
|
361
|
+
getColumnsToRender: getColumnsToRender,
|
|
363
362
|
getColumnGroupHeaders: getColumnGroupHeaders,
|
|
364
363
|
isDragging: !!dragCol,
|
|
365
364
|
getRootProps: function getRootProps() {
|
|
@@ -373,6 +372,7 @@ export var useGridColumnHeaders = function useGridColumnHeaders(props) {
|
|
|
373
372
|
ref: handleInnerRef,
|
|
374
373
|
role: 'rowgroup'
|
|
375
374
|
};
|
|
376
|
-
}
|
|
375
|
+
},
|
|
376
|
+
headerHeight: headerHeight
|
|
377
377
|
};
|
|
378
378
|
};
|
|
@@ -11,7 +11,6 @@ import { getVisibleRows } from '../../utils/useGridVisibleRows';
|
|
|
11
11
|
import { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';
|
|
12
12
|
import { calculatePinnedRowsHeight } from '../rows/gridRowsUtils';
|
|
13
13
|
import { getTotalHeaderHeight } from '../columns/gridColumnsUtils';
|
|
14
|
-
import { gridClasses } from '../../../constants/gridClasses';
|
|
15
14
|
var isTestEnvironment = process.env.NODE_ENV === 'test';
|
|
16
15
|
var hasScroll = function hasScroll(_ref) {
|
|
17
16
|
var content = _ref.content,
|
|
@@ -158,14 +157,13 @@ export function useGridDimensions(apiRef, props) {
|
|
|
158
157
|
return Math.min(maximumPageSizeWithoutScrollBar, currentPage.rows.length);
|
|
159
158
|
}, [apiRef, props.pagination, props.paginationMode, props.getRowHeight, rowHeight]);
|
|
160
159
|
var computeSizeAndPublishResizeEvent = React.useCallback(function () {
|
|
161
|
-
var _apiRef$current$
|
|
162
|
-
var
|
|
163
|
-
var mainEl = rootEl == null ? void 0 : rootEl.querySelector(".".concat(gridClasses.main));
|
|
160
|
+
var _apiRef$current$mainE, _previousSize$current, _previousSize$current2;
|
|
161
|
+
var mainEl = (_apiRef$current$mainE = apiRef.current.mainElementRef) == null ? void 0 : _apiRef$current$mainE.current;
|
|
164
162
|
if (!mainEl) {
|
|
165
163
|
return;
|
|
166
164
|
}
|
|
167
|
-
var height = mainEl.
|
|
168
|
-
var width = mainEl.
|
|
165
|
+
var height = mainEl.clientHeight || 0;
|
|
166
|
+
var width = mainEl.clientWidth || 0;
|
|
169
167
|
var win = ownerWindow(mainEl);
|
|
170
168
|
var computedStyle = win.getComputedStyle(mainEl);
|
|
171
169
|
var paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0;
|
|
@@ -97,10 +97,14 @@ export var useGridCellEditing = function useGridCellEditing(apiRef, props) {
|
|
|
97
97
|
}
|
|
98
98
|
} else if (params.isEditable) {
|
|
99
99
|
var _reason;
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
var canStartEditing = apiRef.current.unstable_applyPipeProcessors('canStartEditing', true, {
|
|
101
|
+
event: event,
|
|
102
|
+
cellParams: params,
|
|
103
|
+
editMode: 'cell'
|
|
104
|
+
});
|
|
105
|
+
if (!canStartEditing) {
|
|
106
|
+
return;
|
|
102
107
|
}
|
|
103
|
-
|
|
104
108
|
if (isPrintableKey(event)) {
|
|
105
109
|
_reason = GridCellEditStartReasons.printableKeyDown;
|
|
106
110
|
} else if ((event.ctrlKey || event.metaKey) && event.key === 'v') {
|
|
@@ -32,9 +32,6 @@ export var useGridEditing = function useGridEditing(apiRef, props) {
|
|
|
32
32
|
if (isCellEditableProp) {
|
|
33
33
|
return isCellEditableProp(params);
|
|
34
34
|
}
|
|
35
|
-
if (params.rowNode.type === 'pinnedRow') {
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
35
|
return true;
|
|
39
36
|
}, [isCellEditableProp]);
|
|
40
37
|
var maybeDebounce = function maybeDebounce(id, field, debounceMs, callback) {
|
|
@@ -153,10 +153,14 @@ export var useGridRowEditing = function useGridRowEditing(apiRef, props) {
|
|
|
153
153
|
}
|
|
154
154
|
} else if (params.isEditable) {
|
|
155
155
|
var _reason;
|
|
156
|
-
|
|
157
|
-
|
|
156
|
+
var canStartEditing = apiRef.current.unstable_applyPipeProcessors('canStartEditing', true, {
|
|
157
|
+
event: event,
|
|
158
|
+
cellParams: params,
|
|
159
|
+
editMode: 'row'
|
|
160
|
+
});
|
|
161
|
+
if (!canStartEditing) {
|
|
162
|
+
return;
|
|
158
163
|
}
|
|
159
|
-
|
|
160
164
|
if (isPrintableKey(event)) {
|
|
161
165
|
_reason = GridRowEditStartReasons.printableKeyDown;
|
|
162
166
|
} else if ((event.ctrlKey || event.metaKey) && event.key === 'v') {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { GRID_CHECKBOX_SELECTION_COL_DEF } from '../../../../colDef';
|
|
2
2
|
import { buildWarning } from '../../../../utils/warning';
|
|
3
|
-
|
|
3
|
+
function sanitizeCellValue(value, delimiterCharacter) {
|
|
4
4
|
if (typeof value === 'string') {
|
|
5
5
|
var formattedValue = value.replace(/"/g, '""');
|
|
6
6
|
|
|
@@ -13,9 +13,36 @@ var serializeCellValue = function serializeCellValue(value, delimiterCharacter)
|
|
|
13
13
|
return formattedValue;
|
|
14
14
|
}
|
|
15
15
|
return value;
|
|
16
|
+
}
|
|
17
|
+
export var serializeCellValue = function serializeCellValue(cellParams, options) {
|
|
18
|
+
var delimiterCharacter = options.delimiterCharacter,
|
|
19
|
+
ignoreValueFormatter = options.ignoreValueFormatter;
|
|
20
|
+
var value;
|
|
21
|
+
if (ignoreValueFormatter) {
|
|
22
|
+
var _cellParams$value2;
|
|
23
|
+
var columnType = cellParams.colDef.type;
|
|
24
|
+
if (columnType === 'number') {
|
|
25
|
+
value = String(cellParams.value);
|
|
26
|
+
} else if (columnType === 'date' || columnType === 'dateTime') {
|
|
27
|
+
var _cellParams$value;
|
|
28
|
+
value = (_cellParams$value = cellParams.value) == null ? void 0 : _cellParams$value.toISOString();
|
|
29
|
+
} else if (typeof ((_cellParams$value2 = cellParams.value) == null ? void 0 : _cellParams$value2.toString) === 'function') {
|
|
30
|
+
value = cellParams.value.toString();
|
|
31
|
+
} else {
|
|
32
|
+
value = cellParams.value;
|
|
33
|
+
}
|
|
34
|
+
} else {
|
|
35
|
+
value = cellParams.formattedValue;
|
|
36
|
+
}
|
|
37
|
+
return sanitizeCellValue(value, delimiterCharacter);
|
|
16
38
|
};
|
|
17
39
|
var objectFormattedValueWarning = buildWarning(['MUI: When the value of a field is an object or a `renderCell` is provided, the CSV export might not display the value correctly.', 'You can provide a `valueFormatter` with a string representation to be used.']);
|
|
18
|
-
var serializeRow = function serializeRow(
|
|
40
|
+
var serializeRow = function serializeRow(_ref) {
|
|
41
|
+
var id = _ref.id,
|
|
42
|
+
columns = _ref.columns,
|
|
43
|
+
getCellParams = _ref.getCellParams,
|
|
44
|
+
delimiterCharacter = _ref.delimiterCharacter,
|
|
45
|
+
ignoreValueFormatter = _ref.ignoreValueFormatter;
|
|
19
46
|
return columns.map(function (column) {
|
|
20
47
|
var cellParams = getCellParams(id, column.field);
|
|
21
48
|
if (process.env.NODE_ENV !== 'production') {
|
|
@@ -23,7 +50,10 @@ var serializeRow = function serializeRow(id, columns, getCellParams, delimiterCh
|
|
|
23
50
|
objectFormattedValueWarning();
|
|
24
51
|
}
|
|
25
52
|
}
|
|
26
|
-
return serializeCellValue(cellParams
|
|
53
|
+
return serializeCellValue(cellParams, {
|
|
54
|
+
delimiterCharacter: delimiterCharacter,
|
|
55
|
+
ignoreValueFormatter: ignoreValueFormatter
|
|
56
|
+
});
|
|
27
57
|
});
|
|
28
58
|
};
|
|
29
59
|
export function buildCSV(options) {
|
|
@@ -31,9 +61,16 @@ export function buildCSV(options) {
|
|
|
31
61
|
rowIds = options.rowIds,
|
|
32
62
|
getCellParams = options.getCellParams,
|
|
33
63
|
delimiterCharacter = options.delimiterCharacter,
|
|
34
|
-
includeHeaders = options.includeHeaders
|
|
64
|
+
includeHeaders = options.includeHeaders,
|
|
65
|
+
ignoreValueFormatter = options.ignoreValueFormatter;
|
|
35
66
|
var CSVBody = rowIds.reduce(function (acc, id) {
|
|
36
|
-
return "".concat(acc).concat(serializeRow(
|
|
67
|
+
return "".concat(acc).concat(serializeRow({
|
|
68
|
+
id: id,
|
|
69
|
+
columns: columns,
|
|
70
|
+
getCellParams: getCellParams,
|
|
71
|
+
delimiterCharacter: delimiterCharacter,
|
|
72
|
+
ignoreValueFormatter: ignoreValueFormatter
|
|
73
|
+
}).join(delimiterCharacter), "\r\n");
|
|
37
74
|
}, '').trim();
|
|
38
75
|
if (!includeHeaders) {
|
|
39
76
|
return CSVBody;
|
|
@@ -41,7 +78,7 @@ export function buildCSV(options) {
|
|
|
41
78
|
var CSVHead = "".concat(columns.filter(function (column) {
|
|
42
79
|
return column.field !== GRID_CHECKBOX_SELECTION_COL_DEF.field;
|
|
43
80
|
}).map(function (column) {
|
|
44
|
-
return
|
|
81
|
+
return sanitizeCellValue(column.headerName || column.field, delimiterCharacter);
|
|
45
82
|
}).join(delimiterCharacter), "\r\n");
|
|
46
83
|
return "".concat(CSVHead).concat(CSVBody).trim();
|
|
47
84
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
2
|
+
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
2
3
|
import * as React from 'react';
|
|
3
4
|
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
4
5
|
import { useGridLogger } from '../../utils/useGridLogger';
|
|
@@ -7,7 +8,7 @@ import { buildCSV } from './serializers/csvSerializer';
|
|
|
7
8
|
import { getColumnsToExport, defaultGetRowsToExport } from './utils';
|
|
8
9
|
import { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
|
|
9
10
|
import { GridCsvExportMenuItem } from '../../../components/toolbar/GridToolbarExport';
|
|
10
|
-
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
12
|
/**
|
|
12
13
|
* @requires useGridColumns (state)
|
|
13
14
|
* @requires useGridFilter (state)
|
|
@@ -15,9 +16,10 @@ import { GridCsvExportMenuItem } from '../../../components/toolbar/GridToolbarEx
|
|
|
15
16
|
* @requires useGridSelection (state)
|
|
16
17
|
* @requires useGridParamsApi (method)
|
|
17
18
|
*/
|
|
18
|
-
|
|
19
|
-
export var useGridCsvExport = function useGridCsvExport(apiRef) {
|
|
19
|
+
export var useGridCsvExport = function useGridCsvExport(apiRef, props) {
|
|
20
20
|
var logger = useGridLogger(apiRef, 'useGridCsvExport');
|
|
21
|
+
var ignoreValueFormatterProp = props.unstable_ignoreValueFormatterDuringExport;
|
|
22
|
+
var ignoreValueFormatter = (_typeof(ignoreValueFormatterProp) === 'object' ? ignoreValueFormatterProp == null ? void 0 : ignoreValueFormatterProp.csvExport : ignoreValueFormatterProp) || false;
|
|
21
23
|
var getDataAsCsv = React.useCallback(function () {
|
|
22
24
|
var _options$getRowsToExp, _options$includeHeade;
|
|
23
25
|
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
@@ -35,9 +37,10 @@ export var useGridCsvExport = function useGridCsvExport(apiRef) {
|
|
|
35
37
|
rowIds: exportedRowIds,
|
|
36
38
|
getCellParams: apiRef.current.getCellParams,
|
|
37
39
|
delimiterCharacter: options.delimiter || ',',
|
|
38
|
-
includeHeaders: (_options$includeHeade = options.includeHeaders) != null ? _options$includeHeade : true
|
|
40
|
+
includeHeaders: (_options$includeHeade = options.includeHeaders) != null ? _options$includeHeade : true,
|
|
41
|
+
ignoreValueFormatter: ignoreValueFormatter
|
|
39
42
|
});
|
|
40
|
-
}, [logger, apiRef]);
|
|
43
|
+
}, [logger, apiRef, ignoreValueFormatter]);
|
|
41
44
|
var exportDataAsCsv = React.useCallback(function (options) {
|
|
42
45
|
logger.debug("Export data as CSV");
|
|
43
46
|
var csv = getDataAsCsv(options);
|
|
@@ -9,6 +9,11 @@ export var gridFocusColumnHeaderSelector = createSelector(gridFocusStateSelector
|
|
|
9
9
|
return focusState.columnHeader;
|
|
10
10
|
});
|
|
11
11
|
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
13
|
+
export var unstable_gridFocusColumnHeaderFilterSelector = createSelector(gridFocusStateSelector, function (focusState) {
|
|
14
|
+
return focusState.columnHeaderFilter;
|
|
15
|
+
});
|
|
16
|
+
|
|
12
17
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
13
18
|
export var unstable_gridFocusColumnGroupHeaderSelector = createSelector(gridFocusStateSelector, function (focusState) {
|
|
14
19
|
return focusState.columnGroupHeader;
|
|
@@ -23,6 +28,11 @@ export var gridTabIndexColumnHeaderSelector = createSelector(gridTabIndexStateSe
|
|
|
23
28
|
return state.columnHeader;
|
|
24
29
|
});
|
|
25
30
|
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
32
|
+
export var unstable_gridTabIndexColumnHeaderFilterSelector = createSelector(gridTabIndexStateSelector, function (state) {
|
|
33
|
+
return state.columnHeaderFilter;
|
|
34
|
+
});
|
|
35
|
+
|
|
26
36
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
27
37
|
export var unstable_gridTabIndexColumnGroupHeaderSelector = createSelector(gridTabIndexStateSelector, function (state) {
|
|
28
38
|
return state.columnGroupHeader;
|
|
@@ -9,16 +9,19 @@ import { gridFocusCellSelector, unstable_gridFocusColumnGroupHeaderSelector } fr
|
|
|
9
9
|
import { gridVisibleColumnDefinitionsSelector } from '../columns/gridColumnsSelector';
|
|
10
10
|
import { getVisibleRows } from '../../utils/useGridVisibleRows';
|
|
11
11
|
import { clamp } from '../../../utils/utils';
|
|
12
|
+
import { gridPinnedRowsSelector } from '../rows/gridRowsSelector';
|
|
12
13
|
export var focusStateInitializer = function focusStateInitializer(state) {
|
|
13
14
|
return _extends({}, state, {
|
|
14
15
|
focus: {
|
|
15
16
|
cell: null,
|
|
16
17
|
columnHeader: null,
|
|
18
|
+
columnHeaderFilter: null,
|
|
17
19
|
columnGroupHeader: null
|
|
18
20
|
},
|
|
19
21
|
tabIndex: {
|
|
20
22
|
cell: null,
|
|
21
23
|
columnHeader: null,
|
|
24
|
+
columnHeaderFilter: null,
|
|
22
25
|
columnGroupHeader: null
|
|
23
26
|
}
|
|
24
27
|
});
|
|
@@ -54,6 +57,7 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
|
|
|
54
57
|
field: field
|
|
55
58
|
},
|
|
56
59
|
columnHeader: null,
|
|
60
|
+
columnHeaderFilter: null,
|
|
57
61
|
columnGroupHeader: null
|
|
58
62
|
},
|
|
59
63
|
focus: {
|
|
@@ -62,6 +66,7 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
|
|
|
62
66
|
field: field
|
|
63
67
|
},
|
|
64
68
|
columnHeader: null,
|
|
69
|
+
columnHeaderFilter: null,
|
|
65
70
|
columnGroupHeader: null
|
|
66
71
|
}
|
|
67
72
|
});
|
|
@@ -90,6 +95,7 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
|
|
|
90
95
|
columnHeader: {
|
|
91
96
|
field: field
|
|
92
97
|
},
|
|
98
|
+
columnHeaderFilter: null,
|
|
93
99
|
cell: null,
|
|
94
100
|
columnGroupHeader: null
|
|
95
101
|
},
|
|
@@ -97,6 +103,34 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
|
|
|
97
103
|
columnHeader: {
|
|
98
104
|
field: field
|
|
99
105
|
},
|
|
106
|
+
columnHeaderFilter: null,
|
|
107
|
+
cell: null,
|
|
108
|
+
columnGroupHeader: null
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
apiRef.current.forceUpdate();
|
|
113
|
+
}, [apiRef, logger, publishCellFocusOut]);
|
|
114
|
+
var setColumnHeaderFilterFocus = React.useCallback(function (field) {
|
|
115
|
+
var event = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
116
|
+
var cell = gridFocusCellSelector(apiRef);
|
|
117
|
+
publishCellFocusOut(cell, event);
|
|
118
|
+
apiRef.current.setState(function (state) {
|
|
119
|
+
logger.debug("Focusing on column header filter with colIndex=".concat(field));
|
|
120
|
+
return _extends({}, state, {
|
|
121
|
+
tabIndex: {
|
|
122
|
+
columnHeader: null,
|
|
123
|
+
columnHeaderFilter: {
|
|
124
|
+
field: field
|
|
125
|
+
},
|
|
126
|
+
cell: null,
|
|
127
|
+
columnGroupHeader: null
|
|
128
|
+
},
|
|
129
|
+
focus: {
|
|
130
|
+
columnHeader: null,
|
|
131
|
+
columnHeaderFilter: {
|
|
132
|
+
field: field
|
|
133
|
+
},
|
|
100
134
|
cell: null,
|
|
101
135
|
columnGroupHeader: null
|
|
102
136
|
}
|
|
@@ -118,6 +152,7 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
|
|
|
118
152
|
depth: depth
|
|
119
153
|
},
|
|
120
154
|
columnHeader: null,
|
|
155
|
+
columnHeaderFilter: null,
|
|
121
156
|
cell: null
|
|
122
157
|
},
|
|
123
158
|
focus: {
|
|
@@ -126,6 +161,7 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
|
|
|
126
161
|
depth: depth
|
|
127
162
|
},
|
|
128
163
|
columnHeader: null,
|
|
164
|
+
columnHeaderFilter: null,
|
|
129
165
|
cell: null
|
|
130
166
|
}
|
|
131
167
|
});
|
|
@@ -137,8 +173,18 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
|
|
|
137
173
|
}, [apiRef]);
|
|
138
174
|
var moveFocusToRelativeCell = React.useCallback(function (id, field, direction) {
|
|
139
175
|
var columnIndexToFocus = apiRef.current.getColumnIndex(field);
|
|
140
|
-
var rowIndexToFocus = apiRef.current.getRowIndexRelativeToVisibleRows(id);
|
|
141
176
|
var visibleColumns = gridVisibleColumnDefinitionsSelector(apiRef);
|
|
177
|
+
var currentPage = getVisibleRows(apiRef, {
|
|
178
|
+
pagination: props.pagination,
|
|
179
|
+
paginationMode: props.paginationMode
|
|
180
|
+
});
|
|
181
|
+
var pinnedRows = gridPinnedRowsSelector(apiRef);
|
|
182
|
+
|
|
183
|
+
// Include pinned rows as well
|
|
184
|
+
var currentPageRows = [].concat(pinnedRows.top || [], currentPage.rows, pinnedRows.bottom || []);
|
|
185
|
+
var rowIndexToFocus = currentPageRows.findIndex(function (row) {
|
|
186
|
+
return row.id === id;
|
|
187
|
+
});
|
|
142
188
|
if (direction === 'right') {
|
|
143
189
|
columnIndexToFocus += 1;
|
|
144
190
|
} else if (direction === 'left') {
|
|
@@ -146,14 +192,10 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
|
|
|
146
192
|
} else {
|
|
147
193
|
rowIndexToFocus += 1;
|
|
148
194
|
}
|
|
149
|
-
var currentPage = getVisibleRows(apiRef, {
|
|
150
|
-
pagination: props.pagination,
|
|
151
|
-
paginationMode: props.paginationMode
|
|
152
|
-
});
|
|
153
195
|
if (columnIndexToFocus >= visibleColumns.length) {
|
|
154
196
|
// Go to next row if we are after the last column
|
|
155
197
|
rowIndexToFocus += 1;
|
|
156
|
-
if (rowIndexToFocus <
|
|
198
|
+
if (rowIndexToFocus < currentPageRows.length) {
|
|
157
199
|
// Go to first column of the next row if there's one more row
|
|
158
200
|
columnIndexToFocus = 0;
|
|
159
201
|
}
|
|
@@ -165,8 +207,11 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
|
|
|
165
207
|
columnIndexToFocus = visibleColumns.length - 1;
|
|
166
208
|
}
|
|
167
209
|
}
|
|
168
|
-
rowIndexToFocus = clamp(rowIndexToFocus, 0,
|
|
169
|
-
var rowToFocus =
|
|
210
|
+
rowIndexToFocus = clamp(rowIndexToFocus, 0, currentPageRows.length - 1);
|
|
211
|
+
var rowToFocus = currentPageRows[rowIndexToFocus];
|
|
212
|
+
if (!rowToFocus) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
170
215
|
var colSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowToFocus.id, columnIndexToFocus);
|
|
171
216
|
if (colSpanInfo && colSpanInfo.spannedByColSpan) {
|
|
172
217
|
if (direction === 'left' || direction === 'below') {
|
|
@@ -218,6 +263,7 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
|
|
|
218
263
|
focus: {
|
|
219
264
|
cell: null,
|
|
220
265
|
columnHeader: null,
|
|
266
|
+
columnHeaderFilter: null,
|
|
221
267
|
columnGroupHeader: null
|
|
222
268
|
}
|
|
223
269
|
});
|
|
@@ -258,6 +304,7 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
|
|
|
258
304
|
focus: {
|
|
259
305
|
cell: null,
|
|
260
306
|
columnHeader: null,
|
|
307
|
+
columnHeaderFilter: null,
|
|
261
308
|
columnGroupHeader: null
|
|
262
309
|
}
|
|
263
310
|
});
|
|
@@ -288,6 +335,7 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
|
|
|
288
335
|
focus: {
|
|
289
336
|
cell: null,
|
|
290
337
|
columnHeader: null,
|
|
338
|
+
columnHeaderFilter: null,
|
|
291
339
|
columnGroupHeader: null
|
|
292
340
|
}
|
|
293
341
|
});
|
|
@@ -296,7 +344,8 @@ export var useGridFocus = function useGridFocus(apiRef, props) {
|
|
|
296
344
|
}, [apiRef]);
|
|
297
345
|
var focusApi = {
|
|
298
346
|
setCellFocus: setCellFocus,
|
|
299
|
-
setColumnHeaderFocus: setColumnHeaderFocus
|
|
347
|
+
setColumnHeaderFocus: setColumnHeaderFocus,
|
|
348
|
+
setColumnHeaderFilterFocus: setColumnHeaderFilterFocus
|
|
300
349
|
};
|
|
301
350
|
var focusPrivateApi = {
|
|
302
351
|
moveFocusToRelativeCell: moveFocusToRelativeCell,
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
2
|
+
import { createSelector } from '../../../utils/createSelector';
|
|
3
|
+
export var unstable_gridHeaderFilteringStateSelector = function unstable_gridHeaderFilteringStateSelector(state) {
|
|
4
|
+
return state.headerFiltering;
|
|
5
|
+
};
|
|
6
|
+
export var unstable_gridHeaderFilteringEditFieldSelector = createSelector(unstable_gridHeaderFilteringStateSelector, function (headerFilteringState) {
|
|
7
|
+
return headerFilteringState.editing;
|
|
8
|
+
});
|
|
9
|
+
export var unstable_gridHeaderFilteringMenuSelector = createSelector(unstable_gridHeaderFilteringStateSelector, function (headerFilteringState) {
|
|
10
|
+
return headerFilteringState.menuOpen;
|
|
11
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './gridHeaderFilteringSelectors';
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
4
|
+
import { useGridLogger } from '../../utils';
|
|
5
|
+
import { gridColumnLookupSelector, gridColumnVisibilityModelSelector, gridColumnFieldsSelector } from '../columns/gridColumnsSelector';
|
|
6
|
+
export var headerFilteringStateInitializer = function headerFilteringStateInitializer(state) {
|
|
7
|
+
return _extends({}, state, {
|
|
8
|
+
headerFiltering: {
|
|
9
|
+
editing: null,
|
|
10
|
+
menuOpen: null
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
export var useGridHeaderFiltering = function useGridHeaderFiltering(apiRef, props) {
|
|
15
|
+
var logger = useGridLogger(apiRef, 'useGridHeaderFiltering');
|
|
16
|
+
var setHeaderFilterState = React.useCallback(function (headerFilterState) {
|
|
17
|
+
apiRef.current.setState(function (state) {
|
|
18
|
+
var _headerFilterState$ed, _headerFilterState$me;
|
|
19
|
+
// Safety check to avoid MIT users from using it
|
|
20
|
+
// This hook should ultimately be moved to the Pro package
|
|
21
|
+
if (props.signature === 'DataGrid') {
|
|
22
|
+
return state;
|
|
23
|
+
}
|
|
24
|
+
return _extends({}, state, {
|
|
25
|
+
headerFiltering: {
|
|
26
|
+
editing: (_headerFilterState$ed = headerFilterState.editing) != null ? _headerFilterState$ed : null,
|
|
27
|
+
menuOpen: (_headerFilterState$me = headerFilterState.menuOpen) != null ? _headerFilterState$me : null
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
apiRef.current.forceUpdate();
|
|
32
|
+
}, [apiRef, props.signature]);
|
|
33
|
+
var startHeaderFilterEditMode = React.useCallback(function (field) {
|
|
34
|
+
logger.debug("Starting edit mode on header filter for field: ".concat(field));
|
|
35
|
+
apiRef.current.setHeaderFilterState({
|
|
36
|
+
editing: field
|
|
37
|
+
});
|
|
38
|
+
}, [apiRef, logger]);
|
|
39
|
+
var stopHeaderFilterEditMode = React.useCallback(function () {
|
|
40
|
+
logger.debug("Stopping edit mode on header filter");
|
|
41
|
+
apiRef.current.setHeaderFilterState({
|
|
42
|
+
editing: null
|
|
43
|
+
});
|
|
44
|
+
}, [apiRef, logger]);
|
|
45
|
+
var showHeaderFilterMenu = React.useCallback(function (field) {
|
|
46
|
+
logger.debug("Opening header filter menu for field: ".concat(field));
|
|
47
|
+
apiRef.current.setHeaderFilterState({
|
|
48
|
+
menuOpen: field
|
|
49
|
+
});
|
|
50
|
+
}, [apiRef, logger]);
|
|
51
|
+
var hideHeaderFilterMenu = React.useCallback(function () {
|
|
52
|
+
logger.debug("Hiding header filter menu for active field");
|
|
53
|
+
var fieldToFocus = apiRef.current.state.headerFiltering.menuOpen;
|
|
54
|
+
if (fieldToFocus) {
|
|
55
|
+
var columnLookup = gridColumnLookupSelector(apiRef);
|
|
56
|
+
var columnVisibilityModel = gridColumnVisibilityModelSelector(apiRef);
|
|
57
|
+
var orderedFields = gridColumnFieldsSelector(apiRef);
|
|
58
|
+
|
|
59
|
+
// If the column was removed from the grid, we need to find the closest visible field
|
|
60
|
+
if (!columnLookup[fieldToFocus]) {
|
|
61
|
+
fieldToFocus = orderedFields[0];
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// If the field to focus is hidden, we need to find the closest visible field
|
|
65
|
+
if (columnVisibilityModel[fieldToFocus] === false) {
|
|
66
|
+
// contains visible column fields + the field that was just hidden
|
|
67
|
+
var visibleOrderedFields = orderedFields.filter(function (field) {
|
|
68
|
+
if (field === fieldToFocus) {
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
return columnVisibilityModel[field] !== false;
|
|
72
|
+
});
|
|
73
|
+
var fieldIndex = visibleOrderedFields.indexOf(fieldToFocus);
|
|
74
|
+
fieldToFocus = visibleOrderedFields[fieldIndex + 1] || visibleOrderedFields[fieldIndex - 1];
|
|
75
|
+
}
|
|
76
|
+
apiRef.current.setHeaderFilterState({
|
|
77
|
+
menuOpen: null
|
|
78
|
+
});
|
|
79
|
+
apiRef.current.setColumnHeaderFilterFocus(fieldToFocus);
|
|
80
|
+
}
|
|
81
|
+
}, [apiRef, logger]);
|
|
82
|
+
var headerFilterPrivateApi = {
|
|
83
|
+
setHeaderFilterState: setHeaderFilterState
|
|
84
|
+
};
|
|
85
|
+
var headerFilterApi = {
|
|
86
|
+
startHeaderFilterEditMode: startHeaderFilterEditMode,
|
|
87
|
+
stopHeaderFilterEditMode: stopHeaderFilterEditMode,
|
|
88
|
+
showHeaderFilterMenu: showHeaderFilterMenu,
|
|
89
|
+
hideHeaderFilterMenu: hideHeaderFilterMenu
|
|
90
|
+
};
|
|
91
|
+
useGridApiMethod(apiRef, headerFilterApi, 'public');
|
|
92
|
+
useGridApiMethod(apiRef, headerFilterPrivateApi, 'private');
|
|
93
|
+
};
|