@mui/x-data-grid-pro 5.8.0 → 5.11.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 +333 -66
- package/DataGridPro/DataGridPro.d.ts +1 -1
- package/DataGridPro/DataGridPro.js +51 -3
- package/DataGridPro/useDataGridProComponent.js +9 -4
- package/DataGridPro/useDataGridProProps.js +20 -5
- package/LICENSE +12 -0
- package/README.md +7 -5
- package/components/DataGridProColumnHeaders.js +2 -8
- package/components/DataGridProVirtualScroller.js +7 -7
- package/components/GridDetailPanelToggleCell.js +13 -2
- package/components/GridGroupingCriteriaCell.js +2 -2
- package/components/GridRowReorderCell.d.ts +5 -0
- package/components/GridRowReorderCell.js +72 -0
- package/components/GridTreeDataGroupingCell.js +15 -4
- package/hooks/features/columnPinning/useGridColumnPinning.js +4 -4
- package/hooks/features/columnReorder/useGridColumnReorder.d.ts +0 -1
- package/hooks/features/columnReorder/useGridColumnReorder.js +8 -9
- package/hooks/features/columnResize/useGridColumnResize.d.ts +0 -1
- package/hooks/features/columnResize/useGridColumnResize.js +31 -20
- package/hooks/features/detailPanel/useGridDetailPanel.js +14 -6
- package/hooks/features/detailPanel/useGridDetailPanelCache.js +2 -2
- package/hooks/features/index.d.ts +1 -1
- package/hooks/features/index.js +1 -1
- package/hooks/features/infiniteLoader/useGridInfiniteLoader.d.ts +0 -1
- package/hooks/features/infiniteLoader/useGridInfiniteLoader.js +4 -5
- package/hooks/features/rowGrouping/createGroupingColDef.d.ts +1 -1
- package/hooks/features/rowGrouping/gridRowGroupingInterfaces.d.ts +1 -1
- package/hooks/features/rowGrouping/gridRowGroupingUtils.js +4 -4
- package/hooks/features/rowGrouping/useGridRowGrouping.d.ts +0 -2
- package/hooks/features/rowGrouping/useGridRowGrouping.js +8 -12
- package/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +2 -2
- package/hooks/features/rowReorder/gridRowReorderColDef.d.ts +2 -0
- package/hooks/features/rowReorder/gridRowReorderColDef.js +18 -0
- package/hooks/features/rowReorder/index.d.ts +1 -0
- package/hooks/features/rowReorder/index.js +1 -0
- package/hooks/features/rowReorder/useGridRowReorder.d.ts +8 -0
- package/hooks/features/rowReorder/useGridRowReorder.js +111 -0
- package/hooks/features/rowReorder/useGridRowReorderPreProcessors.d.ts +4 -0
- package/hooks/features/rowReorder/useGridRowReorderPreProcessors.js +51 -0
- package/hooks/features/treeData/useGridTreeData.d.ts +0 -3
- package/hooks/features/treeData/useGridTreeData.js +2 -8
- package/index.d.ts +6 -1
- package/index.js +7 -3
- package/internals/index.d.ts +19 -0
- package/internals/index.js +17 -0
- package/internals/package.json +6 -0
- package/legacy/DataGridPro/DataGridPro.js +51 -3
- package/legacy/DataGridPro/useDataGridProComponent.js +9 -4
- package/legacy/DataGridPro/useDataGridProProps.js +20 -5
- package/legacy/components/DataGridProColumnHeaders.js +2 -8
- package/legacy/components/DataGridProVirtualScroller.js +7 -7
- package/legacy/components/GridDetailPanelToggleCell.js +13 -2
- package/legacy/components/GridGroupingCriteriaCell.js +2 -2
- package/legacy/components/GridRowReorderCell.js +74 -0
- package/legacy/components/GridTreeDataGroupingCell.js +15 -4
- package/legacy/hooks/features/columnPinning/useGridColumnPinning.js +4 -4
- package/legacy/hooks/features/columnReorder/useGridColumnReorder.js +8 -9
- package/legacy/hooks/features/columnResize/useGridColumnResize.js +31 -20
- package/legacy/hooks/features/detailPanel/useGridDetailPanel.js +14 -6
- package/legacy/hooks/features/detailPanel/useGridDetailPanelCache.js +2 -2
- package/legacy/hooks/features/index.js +1 -1
- package/legacy/hooks/features/infiniteLoader/useGridInfiniteLoader.js +4 -5
- package/legacy/hooks/features/rowGrouping/gridRowGroupingUtils.js +5 -5
- package/legacy/hooks/features/rowGrouping/useGridRowGrouping.js +8 -12
- package/legacy/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +2 -2
- package/legacy/hooks/features/rowReorder/gridRowReorderColDef.js +20 -0
- package/legacy/hooks/features/rowReorder/index.js +1 -0
- package/legacy/hooks/features/rowReorder/useGridRowReorder.js +115 -0
- package/legacy/hooks/features/rowReorder/useGridRowReorderPreProcessors.js +52 -0
- package/legacy/hooks/features/treeData/useGridTreeData.js +2 -8
- package/legacy/index.js +7 -3
- package/legacy/internals/index.js +17 -0
- package/legacy/models/gridRowOrderChangeParams.js +1 -0
- package/legacy/models/index.js +1 -2
- package/legacy/typeOverloads/index.js +1 -0
- package/legacy/utils/domUtils.js +30 -3
- package/legacy/utils/index.js +1 -0
- package/legacy/utils/releaseInfo.js +1 -1
- package/legacy/utils/tree/buildRowTree.js +11 -4
- package/legacy/utils/tree/index.js +1 -0
- package/models/dataGridProProps.d.ts +36 -24
- package/models/gridApiPro.d.ts +3 -2
- package/models/gridRowOrderChangeParams.d.ts +18 -0
- package/models/gridRowOrderChangeParams.js +1 -0
- package/models/gridStatePro.d.ts +4 -3
- package/models/index.d.ts +1 -2
- package/models/index.js +1 -2
- package/modern/DataGridPro/DataGridPro.js +51 -3
- package/modern/DataGridPro/useDataGridProComponent.js +9 -4
- package/modern/DataGridPro/useDataGridProProps.js +16 -3
- package/modern/components/DataGridProColumnHeaders.js +2 -8
- package/modern/components/DataGridProVirtualScroller.js +7 -7
- package/modern/components/GridDetailPanelToggleCell.js +13 -2
- package/modern/components/GridGroupingCriteriaCell.js +2 -2
- package/modern/components/GridRowReorderCell.js +72 -0
- package/modern/components/GridTreeDataGroupingCell.js +15 -4
- package/modern/hooks/features/columnPinning/useGridColumnPinning.js +4 -4
- package/modern/hooks/features/columnReorder/useGridColumnReorder.js +8 -9
- package/modern/hooks/features/columnResize/useGridColumnResize.js +31 -20
- package/modern/hooks/features/detailPanel/useGridDetailPanel.js +14 -6
- package/modern/hooks/features/detailPanel/useGridDetailPanelCache.js +2 -2
- package/modern/hooks/features/index.js +1 -1
- package/modern/hooks/features/infiniteLoader/useGridInfiniteLoader.js +4 -5
- package/modern/hooks/features/rowGrouping/gridRowGroupingUtils.js +4 -4
- package/modern/hooks/features/rowGrouping/useGridRowGrouping.js +8 -12
- package/modern/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +2 -2
- package/modern/hooks/features/rowReorder/gridRowReorderColDef.js +18 -0
- package/modern/hooks/features/rowReorder/index.js +1 -0
- package/modern/hooks/features/rowReorder/useGridRowReorder.js +111 -0
- package/modern/hooks/features/rowReorder/useGridRowReorderPreProcessors.js +51 -0
- package/modern/hooks/features/treeData/useGridTreeData.js +2 -8
- package/modern/index.js +7 -3
- package/modern/internals/index.js +17 -0
- package/modern/models/gridRowOrderChangeParams.js +1 -0
- package/modern/models/index.js +1 -2
- package/modern/typeOverloads/index.js +1 -0
- package/modern/utils/domUtils.js +30 -3
- package/modern/utils/index.js +1 -0
- package/modern/utils/releaseInfo.js +1 -1
- package/modern/utils/tree/buildRowTree.js +9 -2
- package/modern/utils/tree/index.js +1 -0
- package/node/DataGridPro/DataGridPro.js +51 -3
- package/node/DataGridPro/useDataGridProComponent.js +12 -5
- package/node/DataGridPro/useDataGridProProps.js +21 -5
- package/node/components/DataGridProColumnHeaders.js +1 -7
- package/node/components/DataGridProVirtualScroller.js +6 -6
- package/node/components/GridDetailPanelToggleCell.js +13 -2
- package/node/components/GridGroupingCriteriaCell.js +1 -1
- package/node/components/GridRowReorderCell.js +92 -0
- package/node/components/GridTreeDataGroupingCell.js +14 -3
- package/node/hooks/features/columnPinning/useGridColumnPinning.js +3 -3
- package/node/hooks/features/columnReorder/useGridColumnReorder.js +7 -8
- package/node/hooks/features/columnResize/useGridColumnResize.js +30 -19
- package/node/hooks/features/detailPanel/useGridDetailPanel.js +13 -5
- package/node/hooks/features/detailPanel/useGridDetailPanelCache.js +1 -1
- package/node/hooks/features/index.js +4 -4
- package/node/hooks/features/infiniteLoader/useGridInfiniteLoader.js +3 -4
- package/node/hooks/features/rowGrouping/gridRowGroupingUtils.js +4 -4
- package/node/hooks/features/rowGrouping/useGridRowGrouping.js +7 -11
- package/node/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.js +4 -4
- package/node/hooks/features/rowReorder/gridRowReorderColDef.js +31 -0
- package/node/hooks/features/rowReorder/index.js +18 -0
- package/node/hooks/features/rowReorder/useGridRowReorder.js +126 -0
- package/node/hooks/features/rowReorder/useGridRowReorderPreProcessors.js +70 -0
- package/node/hooks/features/treeData/useGridTreeData.js +1 -6
- package/node/index.js +45 -3
- package/node/internals/index.js +193 -0
- package/node/models/gridRowOrderChangeParams.js +5 -0
- package/node/models/index.js +4 -4
- package/node/typeOverloads/index.js +18 -0
- package/node/utils/domUtils.js +30 -3
- package/node/utils/index.js +18 -0
- package/node/utils/releaseInfo.js +1 -1
- package/node/utils/tree/buildRowTree.js +12 -2
- package/node/utils/tree/index.js +13 -0
- package/package.json +8 -8
- package/typeOverloads/index.d.ts +1 -0
- package/typeOverloads/index.js +1 -0
- package/typeOverloads/modules.d.ts +41 -15
- package/typeOverloads/package.json +6 -0
- package/utils/domUtils.d.ts +2 -1
- package/utils/domUtils.js +30 -3
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
- package/utils/package.json +6 -0
- package/utils/releaseInfo.js +1 -1
- package/utils/tree/buildRowTree.d.ts +1 -0
- package/utils/tree/buildRowTree.js +9 -2
- package/utils/tree/index.d.ts +1 -0
- package/utils/tree/index.js +1 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { unstable_composeClasses as composeClasses } from '@mui/material';
|
|
4
|
+
import { gridRowTreeDepthSelector, gridSortModelSelector, useGridApiContext, useGridSelector, getDataGridUtilityClass, gridEditRowsStateSelector } from '@mui/x-data-grid';
|
|
5
|
+
import { useGridRootProps } from '../hooks/utils/useGridRootProps';
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
|
|
9
|
+
const useUtilityClasses = ownerState => {
|
|
10
|
+
const {
|
|
11
|
+
isDraggable,
|
|
12
|
+
classes
|
|
13
|
+
} = ownerState;
|
|
14
|
+
const slots = {
|
|
15
|
+
root: ['rowReorderCell', isDraggable && 'rowReorderCell--draggable'],
|
|
16
|
+
placeholder: ['rowReorderCellPlaceholder']
|
|
17
|
+
};
|
|
18
|
+
return composeClasses(slots, getDataGridUtilityClass, classes);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const GridRowReorderCell = params => {
|
|
22
|
+
const apiRef = useGridApiContext();
|
|
23
|
+
const rootProps = useGridRootProps();
|
|
24
|
+
const sortModel = useGridSelector(apiRef, gridSortModelSelector);
|
|
25
|
+
const treeDepth = useGridSelector(apiRef, gridRowTreeDepthSelector);
|
|
26
|
+
const editRowsState = useGridSelector(apiRef, gridEditRowsStateSelector); // eslint-disable-next-line no-underscore-dangle
|
|
27
|
+
|
|
28
|
+
const cellValue = params.row.__reorder__ || params.id; // TODO: remove sortModel and treeDepth checks once row reorder is compatible
|
|
29
|
+
|
|
30
|
+
const isDraggable = !!rootProps.rowReordering && !sortModel.length && treeDepth === 1 && Object.keys(editRowsState).length === 0;
|
|
31
|
+
const ownerState = {
|
|
32
|
+
isDraggable,
|
|
33
|
+
classes: rootProps.classes
|
|
34
|
+
};
|
|
35
|
+
const classes = useUtilityClasses(ownerState);
|
|
36
|
+
const publish = React.useCallback((eventName, propHandler) => event => {
|
|
37
|
+
// Ignore portal
|
|
38
|
+
// The target is not an element when triggered by a Select inside the cell
|
|
39
|
+
// See https://github.com/mui/material-ui/issues/10534
|
|
40
|
+
if (event.target.nodeType === 1 && !event.currentTarget.contains(event.target)) {
|
|
41
|
+
return;
|
|
42
|
+
} // The row might have been deleted
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
if (!apiRef.current.getRow(params.row.id)) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
apiRef.current.publishEvent(eventName, apiRef.current.getRowParams(params.row.id), event);
|
|
50
|
+
|
|
51
|
+
if (propHandler) {
|
|
52
|
+
propHandler(event);
|
|
53
|
+
}
|
|
54
|
+
}, [apiRef, params.row.id]);
|
|
55
|
+
const draggableEventHandlers = {
|
|
56
|
+
onDragStart: publish('rowDragStart'),
|
|
57
|
+
onDragOver: publish('rowDragOver'),
|
|
58
|
+
onDragEnd: publish('rowDragEnd')
|
|
59
|
+
};
|
|
60
|
+
return /*#__PURE__*/_jsxs("div", _extends({
|
|
61
|
+
className: classes.root,
|
|
62
|
+
draggable: isDraggable
|
|
63
|
+
}, draggableEventHandlers, {
|
|
64
|
+
children: [/*#__PURE__*/_jsx(rootProps.components.RowReorderIcon, {}), /*#__PURE__*/_jsx("div", {
|
|
65
|
+
className: classes.placeholder,
|
|
66
|
+
children: cellValue
|
|
67
|
+
})]
|
|
68
|
+
}));
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export { GridRowReorderCell };
|
|
72
|
+
export const renderRowReorderCell = params => /*#__PURE__*/_jsx(GridRowReorderCell, _extends({}, params));
|
|
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
|
|
|
3
3
|
import { unstable_composeClasses as composeClasses } from '@mui/material';
|
|
4
4
|
import IconButton from '@mui/material/IconButton';
|
|
5
5
|
import Box from '@mui/material/Box';
|
|
6
|
-
import { useGridSelector, gridFilteredDescendantCountLookupSelector, getDataGridUtilityClass
|
|
6
|
+
import { useGridSelector, gridFilteredDescendantCountLookupSelector, getDataGridUtilityClass } from '@mui/x-data-grid';
|
|
7
7
|
import { isNavigationKey } from '@mui/x-data-grid/internals';
|
|
8
8
|
import { useGridRootProps } from '../hooks/utils/useGridRootProps';
|
|
9
9
|
import { useGridApiContext } from '../hooks/utils/useGridApiContext';
|
|
@@ -45,7 +45,7 @@ const GridTreeDataGroupingCell = props => {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
if (isNavigationKey(event.key) && !event.shiftKey) {
|
|
48
|
-
apiRef.current.publishEvent(
|
|
48
|
+
apiRef.current.publishEvent('cellNavigationKeyDown', props, event);
|
|
49
49
|
}
|
|
50
50
|
};
|
|
51
51
|
|
|
@@ -105,10 +105,21 @@ process.env.NODE_ENV !== "production" ? GridTreeDataGroupingCell.propTypes = {
|
|
|
105
105
|
*/
|
|
106
106
|
field: PropTypes.string.isRequired,
|
|
107
107
|
|
|
108
|
+
/**
|
|
109
|
+
* A ref allowing to set imperative focus.
|
|
110
|
+
* It can be passed to the element that should receive focus.
|
|
111
|
+
* @ignore - do not document.
|
|
112
|
+
*/
|
|
113
|
+
focusElementRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({
|
|
114
|
+
current: PropTypes.shape({
|
|
115
|
+
focus: PropTypes.func.isRequired
|
|
116
|
+
})
|
|
117
|
+
})]),
|
|
118
|
+
|
|
108
119
|
/**
|
|
109
120
|
* The cell value formatted with the column valueFormatter.
|
|
110
121
|
*/
|
|
111
|
-
formattedValue: PropTypes.any
|
|
122
|
+
formattedValue: PropTypes.any,
|
|
112
123
|
|
|
113
124
|
/**
|
|
114
125
|
* Get the cell value of a row and field.
|
|
@@ -153,6 +164,6 @@ process.env.NODE_ENV !== "production" ? GridTreeDataGroupingCell.propTypes = {
|
|
|
153
164
|
/**
|
|
154
165
|
* The cell value, but if the column has valueGetter, use getValue.
|
|
155
166
|
*/
|
|
156
|
-
value: PropTypes.any
|
|
167
|
+
value: PropTypes.any
|
|
157
168
|
} : void 0;
|
|
158
169
|
export { GridTreeDataGroupingCell };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import MuiDivider from '@mui/material/Divider';
|
|
4
|
-
import { useGridSelector, gridVisibleColumnDefinitionsSelector, gridColumnsTotalWidthSelector, gridColumnPositionsSelector, gridVisibleColumnFieldsSelector, gridClasses,
|
|
4
|
+
import { useGridSelector, gridVisibleColumnDefinitionsSelector, gridColumnsTotalWidthSelector, gridColumnPositionsSelector, gridVisibleColumnFieldsSelector, gridClasses, useGridApiMethod, useGridApiEventHandler } from '@mui/x-data-grid';
|
|
5
5
|
import { useGridRegisterPipeProcessor } from '@mui/x-data-grid/internals';
|
|
6
6
|
import { GridColumnPinningMenuItems } from '../../../components/GridColumnPinningMenuItems';
|
|
7
7
|
import { GridPinnedPosition } from './gridColumnPinningInterface';
|
|
@@ -77,8 +77,8 @@ export const useGridColumnPinning = (apiRef, props) => {
|
|
|
77
77
|
const handleMouseLeave = React.useCallback((params, event) => {
|
|
78
78
|
updateHoveredClassOnSiblingRows(event);
|
|
79
79
|
}, [updateHoveredClassOnSiblingRows]);
|
|
80
|
-
useGridApiEventHandler(apiRef,
|
|
81
|
-
useGridApiEventHandler(apiRef,
|
|
80
|
+
useGridApiEventHandler(apiRef, 'rowMouseEnter', handleMouseEnter);
|
|
81
|
+
useGridApiEventHandler(apiRef, 'rowMouseLeave', handleMouseLeave);
|
|
82
82
|
/**
|
|
83
83
|
* PRE-PROCESSING
|
|
84
84
|
*/
|
|
@@ -185,7 +185,7 @@ export const useGridColumnPinning = (apiRef, props) => {
|
|
|
185
185
|
propModel: props.pinnedColumns,
|
|
186
186
|
propOnChange: props.onPinnedColumnsChange,
|
|
187
187
|
stateSelector: gridPinnedColumnsSelector,
|
|
188
|
-
changeEvent:
|
|
188
|
+
changeEvent: 'pinnedColumnsChange'
|
|
189
189
|
});
|
|
190
190
|
const checkIfEnabled = React.useCallback(methodName => {
|
|
191
191
|
if (props.disableColumnPinning) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { unstable_composeClasses as composeClasses } from '@mui/material';
|
|
4
|
-
import { useGridApiEventHandler, getDataGridUtilityClass,
|
|
4
|
+
import { useGridApiEventHandler, getDataGridUtilityClass, useGridLogger } from '@mui/x-data-grid';
|
|
5
5
|
import { gridColumnReorderDragColSelector } from './columnReorderSelector';
|
|
6
6
|
const CURSOR_MOVE_DIRECTION_LEFT = 'left';
|
|
7
7
|
const CURSOR_MOVE_DIRECTION_RIGHT = 'right';
|
|
@@ -28,7 +28,6 @@ export const columnReorderStateInitializer = state => _extends({}, state, {
|
|
|
28
28
|
}
|
|
29
29
|
});
|
|
30
30
|
/**
|
|
31
|
-
* Only available in DataGridPro
|
|
32
31
|
* @requires useGridColumns (method)
|
|
33
32
|
*/
|
|
34
33
|
|
|
@@ -50,7 +49,7 @@ export const useGridColumnReorder = (apiRef, props) => {
|
|
|
50
49
|
clearTimeout(removeDnDStylesTimeout.current);
|
|
51
50
|
};
|
|
52
51
|
}, []);
|
|
53
|
-
const
|
|
52
|
+
const handleDragStart = React.useCallback((params, event) => {
|
|
54
53
|
if (props.disableColumnReorder || params.colDef.disableReorder) {
|
|
55
54
|
return;
|
|
56
55
|
}
|
|
@@ -156,10 +155,10 @@ export const useGridColumnReorder = (apiRef, props) => {
|
|
|
156
155
|
}));
|
|
157
156
|
apiRef.current.forceUpdate();
|
|
158
157
|
}, [props.disableColumnReorder, logger, apiRef]);
|
|
159
|
-
useGridApiEventHandler(apiRef,
|
|
160
|
-
useGridApiEventHandler(apiRef,
|
|
161
|
-
useGridApiEventHandler(apiRef,
|
|
162
|
-
useGridApiEventHandler(apiRef,
|
|
163
|
-
useGridApiEventHandler(apiRef,
|
|
164
|
-
useGridApiEventHandler(apiRef,
|
|
158
|
+
useGridApiEventHandler(apiRef, 'columnHeaderDragStart', handleDragStart);
|
|
159
|
+
useGridApiEventHandler(apiRef, 'columnHeaderDragEnter', handleDragEnter);
|
|
160
|
+
useGridApiEventHandler(apiRef, 'columnHeaderDragOver', handleDragOver);
|
|
161
|
+
useGridApiEventHandler(apiRef, 'columnHeaderDragEnd', handleDragEnd);
|
|
162
|
+
useGridApiEventHandler(apiRef, 'cellDragEnter', handleDragEnter);
|
|
163
|
+
useGridApiEventHandler(apiRef, 'cellDragOver', handleDragOver);
|
|
165
164
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { ownerDocument, useEventCallback } from '@mui/material/utils';
|
|
4
|
-
import {
|
|
4
|
+
import { gridClasses, GridColumnHeaderSeparatorSides, useGridApiEventHandler, useGridApiOptionHandler, useGridNativeEventListener, useGridLogger } from '@mui/x-data-grid';
|
|
5
5
|
import { clamp, findParentElementFromClassName } from '@mui/x-data-grid/internals';
|
|
6
6
|
import { findGridCellElementsFromCol, getFieldFromHeaderElem, findHeaderElementFromField } from '../../../utils/domUtils';
|
|
7
7
|
// TODO: remove support for Safari < 13.
|
|
@@ -80,7 +80,6 @@ export const columnResizeStateInitializer = state => _extends({}, state, {
|
|
|
80
80
|
}
|
|
81
81
|
});
|
|
82
82
|
/**
|
|
83
|
-
* Only available in DataGridPro
|
|
84
83
|
* @requires useGridColumns (method, event)
|
|
85
84
|
* TODO: improve experience for last column
|
|
86
85
|
*/
|
|
@@ -100,17 +99,29 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
100
99
|
|
|
101
100
|
const updateWidth = newWidth => {
|
|
102
101
|
logger.debug(`Updating width to ${newWidth} for col ${colDefRef.current.field}`);
|
|
102
|
+
const prevWidth = colElementRef.current.offsetWidth;
|
|
103
|
+
const widthDiff = newWidth - prevWidth;
|
|
103
104
|
colDefRef.current.computedWidth = newWidth;
|
|
104
105
|
colDefRef.current.width = newWidth;
|
|
105
|
-
colDefRef.current.flex =
|
|
106
|
+
colDefRef.current.flex = 0;
|
|
106
107
|
colElementRef.current.style.width = `${newWidth}px`;
|
|
107
108
|
colElementRef.current.style.minWidth = `${newWidth}px`;
|
|
108
109
|
colElementRef.current.style.maxWidth = `${newWidth}px`;
|
|
109
110
|
colCellElementsRef.current.forEach(element => {
|
|
110
111
|
const div = element;
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
div.
|
|
112
|
+
let finalWidth;
|
|
113
|
+
|
|
114
|
+
if (div.getAttribute('aria-colspan') === '1') {
|
|
115
|
+
finalWidth = `${newWidth}px`;
|
|
116
|
+
} else {
|
|
117
|
+
// Cell with colspan > 1 cannot be just updated width new width.
|
|
118
|
+
// Instead, we add width diff to the current width.
|
|
119
|
+
finalWidth = `${div.offsetWidth + widthDiff}px`;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
div.style.width = finalWidth;
|
|
123
|
+
div.style.minWidth = finalWidth;
|
|
124
|
+
div.style.maxWidth = finalWidth;
|
|
114
125
|
});
|
|
115
126
|
};
|
|
116
127
|
|
|
@@ -120,10 +131,10 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
120
131
|
apiRef.current.updateColumn(colDefRef.current);
|
|
121
132
|
clearTimeout(stopResizeEventTimeout.current);
|
|
122
133
|
stopResizeEventTimeout.current = setTimeout(() => {
|
|
123
|
-
apiRef.current.publishEvent(
|
|
134
|
+
apiRef.current.publishEvent('columnResizeStop', null, nativeEvent);
|
|
124
135
|
|
|
125
136
|
if (colDefRef.current) {
|
|
126
|
-
apiRef.current.publishEvent(
|
|
137
|
+
apiRef.current.publishEvent('columnWidthChange', {
|
|
127
138
|
element: colElementRef.current,
|
|
128
139
|
colDef: colDefRef.current,
|
|
129
140
|
width: colDefRef.current?.computedWidth
|
|
@@ -147,7 +158,7 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
147
158
|
colDef: colDefRef.current,
|
|
148
159
|
width: newWidth
|
|
149
160
|
};
|
|
150
|
-
apiRef.current.publishEvent(
|
|
161
|
+
apiRef.current.publishEvent('columnResize', params, nativeEvent);
|
|
151
162
|
});
|
|
152
163
|
const handleColumnResizeMouseDown = useEventCallback(({
|
|
153
164
|
colDef
|
|
@@ -165,12 +176,12 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
165
176
|
|
|
166
177
|
event.preventDefault();
|
|
167
178
|
logger.debug(`Start Resize on col ${colDef.field}`);
|
|
168
|
-
apiRef.current.publishEvent(
|
|
179
|
+
apiRef.current.publishEvent('columnResizeStart', {
|
|
169
180
|
field: colDef.field
|
|
170
181
|
}, event);
|
|
171
182
|
colDefRef.current = colDef;
|
|
172
183
|
colElementRef.current = apiRef.current.columnHeadersContainerElementRef?.current.querySelector(`[data-field="${colDef.field}"]`);
|
|
173
|
-
colCellElementsRef.current = findGridCellElementsFromCol(colElementRef.current);
|
|
184
|
+
colCellElementsRef.current = findGridCellElementsFromCol(colElementRef.current, apiRef.current);
|
|
174
185
|
const doc = ownerDocument(apiRef.current.rootElementRef.current);
|
|
175
186
|
doc.body.style.cursor = 'col-resize';
|
|
176
187
|
separatorSide.current = getSeparatorSide(event.currentTarget);
|
|
@@ -190,7 +201,7 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
190
201
|
apiRef.current.updateColumn(colDefRef.current);
|
|
191
202
|
clearTimeout(stopResizeEventTimeout.current);
|
|
192
203
|
stopResizeEventTimeout.current = setTimeout(() => {
|
|
193
|
-
apiRef.current.publishEvent(
|
|
204
|
+
apiRef.current.publishEvent('columnResizeStop', null, nativeEvent);
|
|
194
205
|
});
|
|
195
206
|
logger.debug(`Updating col ${colDefRef.current.field} with new width: ${colDefRef.current.width}`);
|
|
196
207
|
});
|
|
@@ -215,7 +226,7 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
215
226
|
colDef: colDefRef.current,
|
|
216
227
|
width: newWidth
|
|
217
228
|
};
|
|
218
|
-
apiRef.current.publishEvent(
|
|
229
|
+
apiRef.current.publishEvent('columnResize', params, nativeEvent);
|
|
219
230
|
});
|
|
220
231
|
const handleTouchStart = useEventCallback(event => {
|
|
221
232
|
const cellSeparator = findParentElementFromClassName(event.target, gridClasses['columnSeparator--resizable']); // Let the event bubble if the target is not a col separator
|
|
@@ -240,12 +251,12 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
240
251
|
const field = getFieldFromHeaderElem(colElementRef.current);
|
|
241
252
|
const colDef = apiRef.current.getColumn(field);
|
|
242
253
|
logger.debug(`Start Resize on col ${colDef.field}`);
|
|
243
|
-
apiRef.current.publishEvent(
|
|
254
|
+
apiRef.current.publishEvent('columnResizeStart', {
|
|
244
255
|
field
|
|
245
256
|
}, event);
|
|
246
257
|
colDefRef.current = colDef;
|
|
247
258
|
colElementRef.current = findHeaderElementFromField(apiRef.current.columnHeadersElementRef?.current, colDef.field);
|
|
248
|
-
colCellElementsRef.current = findGridCellElementsFromCol(colElementRef.current);
|
|
259
|
+
colCellElementsRef.current = findGridCellElementsFromCol(colElementRef.current, apiRef.current);
|
|
249
260
|
separatorSide.current = getSeparatorSide(event.target);
|
|
250
261
|
initialOffsetToSeparator.current = computeOffsetToSeparator(touch.clientX, colElementRef.current.getBoundingClientRect(), separatorSide.current);
|
|
251
262
|
const doc = ownerDocument(event.currentTarget);
|
|
@@ -287,9 +298,9 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
287
298
|
useGridNativeEventListener(apiRef, () => apiRef.current.columnHeadersElementRef?.current, 'touchstart', handleTouchStart, {
|
|
288
299
|
passive: doesSupportTouchActionNone()
|
|
289
300
|
});
|
|
290
|
-
useGridApiEventHandler(apiRef,
|
|
291
|
-
useGridApiEventHandler(apiRef,
|
|
292
|
-
useGridApiEventHandler(apiRef,
|
|
293
|
-
useGridApiOptionHandler(apiRef,
|
|
294
|
-
useGridApiOptionHandler(apiRef,
|
|
301
|
+
useGridApiEventHandler(apiRef, 'columnSeparatorMouseDown', handleColumnResizeMouseDown);
|
|
302
|
+
useGridApiEventHandler(apiRef, 'columnResizeStart', handleResizeStart);
|
|
303
|
+
useGridApiEventHandler(apiRef, 'columnResizeStop', handleResizeStop);
|
|
304
|
+
useGridApiOptionHandler(apiRef, 'columnResize', props.onColumnResize);
|
|
305
|
+
useGridApiOptionHandler(apiRef, 'columnWidthChange', props.onColumnWidthChange);
|
|
295
306
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { useGridSelector, useGridApiEventHandler, useGridApiMethod } from '@mui/x-data-grid';
|
|
4
4
|
import { useGridRegisterPipeProcessor } from '@mui/x-data-grid/internals';
|
|
5
5
|
import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from './gridDetailPanelToggleColDef';
|
|
6
6
|
import { gridDetailPanelExpandedRowIdsSelector, gridDetailPanelExpandedRowsContentCacheSelector, gridDetailPanelExpandedRowsHeightCacheSelector } from './gridDetailPanelSelector';
|
|
@@ -33,14 +33,22 @@ export const useGridDetailPanel = (apiRef, props) => {
|
|
|
33
33
|
apiRef.current.toggleDetailPanel(params.id);
|
|
34
34
|
}, [apiRef, contentCache, props.getDetailPanelContent]);
|
|
35
35
|
const handleCellKeyDown = React.useCallback((params, event) => {
|
|
36
|
-
if (
|
|
36
|
+
if (props.getDetailPanelContent == null) {
|
|
37
37
|
return;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
if ((event.ctrlKey || event.metaKey) && event.key === 'Enter') {
|
|
41
|
+
// TODO v6: only support Space on the detail toggle
|
|
42
|
+
apiRef.current.toggleDetailPanel(params.id);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (params.field === GRID_DETAIL_PANEL_TOGGLE_FIELD && event.key === ' ') {
|
|
47
|
+
apiRef.current.toggleDetailPanel(params.id);
|
|
48
|
+
}
|
|
41
49
|
}, [apiRef, props.getDetailPanelContent]);
|
|
42
|
-
useGridApiEventHandler(apiRef,
|
|
43
|
-
useGridApiEventHandler(apiRef,
|
|
50
|
+
useGridApiEventHandler(apiRef, 'cellClick', handleCellClick);
|
|
51
|
+
useGridApiEventHandler(apiRef, 'cellKeyDown', handleCellKeyDown);
|
|
44
52
|
const addDetailHeight = React.useCallback((initialValue, row) => {
|
|
45
53
|
if (expandedRowIds.length === 0 || !expandedRowIds.includes(row.id)) {
|
|
46
54
|
return _extends({}, initialValue, {
|
|
@@ -60,7 +68,7 @@ export const useGridDetailPanel = (apiRef, props) => {
|
|
|
60
68
|
propModel: props.detailPanelExpandedRowIds,
|
|
61
69
|
propOnChange: props.onDetailPanelExpandedRowIdsChange,
|
|
62
70
|
stateSelector: gridDetailPanelExpandedRowIdsSelector,
|
|
63
|
-
changeEvent:
|
|
71
|
+
changeEvent: 'detailPanelsExpandedRowIdsChange'
|
|
64
72
|
});
|
|
65
73
|
const toggleDetailPanel = React.useCallback(id => {
|
|
66
74
|
if (props.getDetailPanelContent == null) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { useGridApiEventHandler, gridRowIdsSelector
|
|
3
|
+
import { useGridApiEventHandler, gridRowIdsSelector } from '@mui/x-data-grid';
|
|
4
4
|
|
|
5
5
|
function cacheContentAndHeight(apiRef, getDetailPanelContent, getDetailPanelHeight) {
|
|
6
6
|
if (typeof getDetailPanelContent !== 'function') {
|
|
@@ -39,7 +39,7 @@ export const useGridDetailPanelCache = (apiRef, props) => {
|
|
|
39
39
|
});
|
|
40
40
|
apiRef.current.forceUpdate();
|
|
41
41
|
}, [apiRef, props.getDetailPanelContent, props.getDetailPanelHeight]);
|
|
42
|
-
useGridApiEventHandler(apiRef,
|
|
42
|
+
useGridApiEventHandler(apiRef, 'sortedRowsSet', updateCaches);
|
|
43
43
|
const isFirstRender = React.useRef(true);
|
|
44
44
|
|
|
45
45
|
if (isFirstRender.current) {
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { useGridSelector,
|
|
2
|
+
import { useGridSelector, useGridApiEventHandler, useGridApiOptionHandler, gridVisibleColumnDefinitionsSelector, gridRowsMetaSelector } from '@mui/x-data-grid';
|
|
3
3
|
import { useGridVisibleRows } from '@mui/x-data-grid/internals';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* Only available in DataGridPro
|
|
7
6
|
* @requires useGridColumns (state)
|
|
8
7
|
* @requires useGridDimensions (method) - can be after
|
|
9
8
|
* @requires useGridScroll (method
|
|
@@ -34,7 +33,7 @@ export const useGridInfiniteLoader = (apiRef, props) => {
|
|
|
34
33
|
viewportPageSize,
|
|
35
34
|
virtualRowsCount: currentPage.rows.length
|
|
36
35
|
};
|
|
37
|
-
apiRef.current.publishEvent(
|
|
36
|
+
apiRef.current.publishEvent('rowsScrollEnd', rowScrollEndParam);
|
|
38
37
|
isInScrollBottomArea.current = true;
|
|
39
38
|
}
|
|
40
39
|
}, [contentHeight, props.scrollEndThreshold, visibleColumns, apiRef, currentPage.rows.length]);
|
|
@@ -47,6 +46,6 @@ export const useGridInfiniteLoader = (apiRef, props) => {
|
|
|
47
46
|
top
|
|
48
47
|
});
|
|
49
48
|
}, [handleRowsScrollEnd]);
|
|
50
|
-
useGridApiEventHandler(apiRef,
|
|
51
|
-
useGridApiOptionHandler(apiRef,
|
|
49
|
+
useGridApiEventHandler(apiRef, 'rowsScroll', handleGridScroll);
|
|
50
|
+
useGridApiOptionHandler(apiRef, 'rowsScrollEnd', props.onRowsScrollEnd);
|
|
52
51
|
};
|
|
@@ -23,12 +23,12 @@ export const isGroupingColumn = field => field === GRID_ROW_GROUPING_SINGLE_GROU
|
|
|
23
23
|
/**
|
|
24
24
|
* When filtering a group, we only want to filter according to the items related to this grouping column.
|
|
25
25
|
*/
|
|
26
|
-
const shouldApplyFilterItemOnGroup = (
|
|
27
|
-
if (
|
|
26
|
+
const shouldApplyFilterItemOnGroup = (columnField, node) => {
|
|
27
|
+
if (columnField === GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD) {
|
|
28
28
|
return true;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
const groupingCriteriaField = getRowGroupingCriteriaFromGroupingField(
|
|
31
|
+
const groupingCriteriaField = getRowGroupingCriteriaFromGroupingField(columnField);
|
|
32
32
|
return groupingCriteriaField === node.groupingField;
|
|
33
33
|
};
|
|
34
34
|
/**
|
|
@@ -54,7 +54,7 @@ export const filterRowTreeFromGroupingColumns = params => {
|
|
|
54
54
|
if (!isRowMatchingFilters) {
|
|
55
55
|
isMatchingFilters = true;
|
|
56
56
|
} else {
|
|
57
|
-
const shouldApplyItem = node.isAutoGenerated ?
|
|
57
|
+
const shouldApplyItem = node.isAutoGenerated ? columnField => shouldApplyFilterItemOnGroup(columnField, node) : undefined;
|
|
58
58
|
isMatchingFilters = isRowMatchingFilters(node.id, shouldApplyItem);
|
|
59
59
|
}
|
|
60
60
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import Divider from '@mui/material/Divider';
|
|
4
|
-
import {
|
|
4
|
+
import { useGridApiEventHandler, useGridApiMethod, gridFilteredDescendantCountLookupSelector } from '@mui/x-data-grid';
|
|
5
5
|
import { useGridRegisterPipeProcessor, isDeepEqual } from '@mui/x-data-grid/internals';
|
|
6
6
|
import { gridRowGroupingModelSelector, gridRowGroupingSanitizedModelSelector, gridRowGroupingStateSelector } from './gridRowGroupingSelector';
|
|
7
7
|
import { getRowGroupingFieldFromGroupingCriteria, ROW_GROUPING_STRATEGY, isGroupingColumn, mergeStateWithRowGroupingModel, setStrategyAvailability } from './gridRowGroupingUtils';
|
|
@@ -15,11 +15,9 @@ export const rowGroupingStateInitializer = (state, props) => _extends({}, state,
|
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
17
|
/**
|
|
18
|
-
* Only available in DataGridPro
|
|
19
18
|
* @requires useGridColumns (state, method) - can be after, async only
|
|
20
19
|
* @requires useGridRows (state, method) - can be after, async only
|
|
21
20
|
* @requires useGridParamsApi (method) - can be after, async only
|
|
22
|
-
* TODO: Move the the Premium plan once available and remove the `experimentalFeatures.rowGrouping` flag
|
|
23
21
|
*/
|
|
24
22
|
|
|
25
23
|
export const useGridRowGrouping = (apiRef, props) => {
|
|
@@ -28,7 +26,7 @@ export const useGridRowGrouping = (apiRef, props) => {
|
|
|
28
26
|
propModel: props.rowGroupingModel,
|
|
29
27
|
propOnChange: props.onRowGroupingModelChange,
|
|
30
28
|
stateSelector: gridRowGroupingModelSelector,
|
|
31
|
-
changeEvent:
|
|
29
|
+
changeEvent: 'rowGroupingModelChange'
|
|
32
30
|
});
|
|
33
31
|
/**
|
|
34
32
|
* API METHODS
|
|
@@ -169,21 +167,19 @@ export const useGridRowGrouping = (apiRef, props) => {
|
|
|
169
167
|
rowGrouping: _extends({}, state.rowGrouping, {
|
|
170
168
|
unstable_sanitizedModelOnLastRowTreeCreation: rowGroupingModel
|
|
171
169
|
})
|
|
172
|
-
}));
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
apiRef.current.updateColumns([]);
|
|
170
|
+
}));
|
|
171
|
+
apiRef.current.unstable_requestPipeProcessorsApplication('hydrateColumns');
|
|
176
172
|
setStrategyAvailability(apiRef, props.disableRowGrouping); // Refresh the row tree creation strategy processing
|
|
177
173
|
// TODO: Add a clean way to re-run a strategy processing without publishing a private event
|
|
178
174
|
|
|
179
175
|
if (apiRef.current.unstable_getActiveStrategy('rowTree') === ROW_GROUPING_STRATEGY) {
|
|
180
|
-
apiRef.current.publishEvent(
|
|
176
|
+
apiRef.current.publishEvent('activeStrategyProcessorChange', 'rowTreeCreation');
|
|
181
177
|
}
|
|
182
178
|
}
|
|
183
179
|
}, [apiRef, props.disableRowGrouping]);
|
|
184
|
-
useGridApiEventHandler(apiRef,
|
|
185
|
-
useGridApiEventHandler(apiRef,
|
|
186
|
-
useGridApiEventHandler(apiRef,
|
|
180
|
+
useGridApiEventHandler(apiRef, 'cellKeyDown', handleCellKeyDown);
|
|
181
|
+
useGridApiEventHandler(apiRef, 'columnsChange', checkGroupingColumnsModelDiff);
|
|
182
|
+
useGridApiEventHandler(apiRef, 'rowGroupingModelChange', checkGroupingColumnsModelDiff);
|
|
187
183
|
/**
|
|
188
184
|
* EFFECTS
|
|
189
185
|
*/
|
|
@@ -2,11 +2,11 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { gridColumnLookupSelector, gridRowIdsSelector, gridRowTreeSelector, useFirstRender } from '@mui/x-data-grid';
|
|
4
4
|
import { useGridRegisterPipeProcessor, useGridRegisterStrategyProcessor } from '@mui/x-data-grid/internals';
|
|
5
|
+
import { sortRowTree } from '../../../utils/tree/sortRowTree';
|
|
6
|
+
import { buildRowTree } from '../../../utils/tree/buildRowTree';
|
|
5
7
|
import { gridRowGroupingModelSelector, gridRowGroupingSanitizedModelSelector } from './gridRowGroupingSelector';
|
|
6
8
|
import { createGroupingColDefForAllGroupingCriteria, createGroupingColDefForOneGroupingCriteria } from './createGroupingColDef';
|
|
7
9
|
import { filterRowTreeFromGroupingColumns, getColDefOverrides, ROW_GROUPING_STRATEGY, isGroupingColumn, setStrategyAvailability } from './gridRowGroupingUtils';
|
|
8
|
-
import { buildRowTree } from '../../../utils/tree/buildRowTree';
|
|
9
|
-
import { sortRowTree } from '../../../utils/tree/sortRowTree';
|
|
10
10
|
export const useGridRowGroupingPreProcessors = (apiRef, props) => {
|
|
11
11
|
const getGroupingColDefs = React.useCallback(columnsState => {
|
|
12
12
|
if (props.disableRowGrouping) {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import { GRID_STRING_COL_DEF } from '@mui/x-data-grid';
|
|
3
|
+
import { renderRowReorderCell } from '../../../components/GridRowReorderCell';
|
|
4
|
+
export const GRID_REORDER_COL_DEF = _extends({}, GRID_STRING_COL_DEF, {
|
|
5
|
+
field: '__reorder__',
|
|
6
|
+
type: 'reorder',
|
|
7
|
+
sortable: false,
|
|
8
|
+
filterable: false,
|
|
9
|
+
width: 50,
|
|
10
|
+
align: 'center',
|
|
11
|
+
headerAlign: 'center',
|
|
12
|
+
disableColumnMenu: true,
|
|
13
|
+
disableExport: true,
|
|
14
|
+
disableReorder: true,
|
|
15
|
+
resizable: false,
|
|
16
|
+
renderHeader: () => ' ',
|
|
17
|
+
renderCell: renderRowReorderCell
|
|
18
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './gridRowReorderColDef';
|