@mui/x-data-grid 6.0.0-beta.2 → 6.0.0-beta.3
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 +93 -0
- package/components/GridRow.js +2 -6
- package/components/cell/GridActionsCell.js +24 -13
- package/components/cell/GridActionsCellItem.js +6 -3
- package/components/columnHeaders/ColumnHeaderMenuIcon.js +5 -4
- package/components/columnHeaders/GridColumnHeaderFilterIconButton.js +6 -6
- package/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -4
- package/components/panel/filterPanel/GridFilterForm.js +8 -8
- package/components/toolbar/GridToolbarFilterButton.js +10 -7
- package/components/toolbar/GridToolbarQuickFilter.js +6 -6
- package/constants/defaultGridSlotsComponents.js +2 -0
- package/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -3
- package/hooks/features/editing/useGridCellEditing.js +4 -1
- package/hooks/features/editing/useGridEditing.js +1 -1
- package/hooks/features/editing/useGridRowEditing.js +3 -0
- package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +71 -10
- package/hooks/features/scroll/useGridScroll.js +7 -3
- package/hooks/features/virtualization/useGridVirtualScroller.js +20 -7
- package/index.js +1 -1
- package/legacy/components/GridRow.js +2 -6
- package/legacy/components/cell/GridActionsCell.js +28 -17
- package/legacy/components/cell/GridActionsCellItem.js +6 -3
- package/legacy/components/columnHeaders/ColumnHeaderMenuIcon.js +5 -4
- package/legacy/components/columnHeaders/GridColumnHeaderFilterIconButton.js +6 -6
- package/legacy/components/columnHeaders/GridColumnHeaderSortIcon.js +5 -4
- package/legacy/components/panel/filterPanel/GridFilterForm.js +8 -8
- package/legacy/components/toolbar/GridToolbarFilterButton.js +8 -2
- package/legacy/components/toolbar/GridToolbarQuickFilter.js +6 -6
- package/legacy/constants/defaultGridSlotsComponents.js +2 -0
- package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -3
- package/legacy/hooks/features/editing/useGridCellEditing.js +4 -1
- package/legacy/hooks/features/editing/useGridEditing.js +1 -1
- package/legacy/hooks/features/editing/useGridRowEditing.js +3 -0
- package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +69 -10
- package/legacy/hooks/features/scroll/useGridScroll.js +7 -3
- package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +20 -7
- package/legacy/index.js +1 -1
- package/legacy/utils/domUtils.js +8 -6
- package/models/api/gridEditingApi.d.ts +2 -2
- package/models/gridFilterOperator.d.ts +6 -0
- package/models/gridSlotsComponent.d.ts +5 -0
- package/models/gridSlotsComponentsProps.d.ts +1 -0
- package/modern/components/GridRow.js +2 -6
- package/modern/components/cell/GridActionsCell.js +23 -13
- package/modern/components/cell/GridActionsCellItem.js +5 -3
- package/modern/components/columnHeaders/ColumnHeaderMenuIcon.js +4 -4
- package/modern/components/columnHeaders/GridColumnHeaderFilterIconButton.js +4 -4
- package/modern/components/columnHeaders/GridColumnHeaderSortIcon.js +4 -4
- package/modern/components/panel/filterPanel/GridFilterForm.js +4 -4
- package/modern/components/toolbar/GridToolbarFilterButton.js +7 -1
- package/modern/components/toolbar/GridToolbarQuickFilter.js +4 -4
- package/modern/constants/defaultGridSlotsComponents.js +2 -0
- package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +5 -3
- package/modern/hooks/features/editing/useGridCellEditing.js +4 -1
- package/modern/hooks/features/editing/useGridEditing.js +1 -1
- package/modern/hooks/features/editing/useGridRowEditing.js +3 -0
- package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +71 -10
- package/modern/hooks/features/scroll/useGridScroll.js +7 -3
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +20 -7
- package/modern/index.js +1 -1
- package/modern/utils/domUtils.js +8 -6
- package/node/components/GridRow.js +2 -6
- package/node/components/cell/GridActionsCell.js +23 -13
- package/node/components/cell/GridActionsCellItem.js +5 -3
- package/node/components/columnHeaders/ColumnHeaderMenuIcon.js +4 -4
- package/node/components/columnHeaders/GridColumnHeaderFilterIconButton.js +4 -4
- package/node/components/columnHeaders/GridColumnHeaderSortIcon.js +4 -4
- package/node/components/panel/filterPanel/GridFilterForm.js +4 -4
- package/node/components/toolbar/GridToolbarFilterButton.js +7 -1
- package/node/components/toolbar/GridToolbarQuickFilter.js +4 -4
- package/node/constants/defaultGridSlotsComponents.js +2 -0
- package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +4 -2
- package/node/hooks/features/editing/useGridCellEditing.js +4 -1
- package/node/hooks/features/editing/useGridEditing.js +1 -1
- package/node/hooks/features/editing/useGridRowEditing.js +3 -0
- package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +71 -10
- package/node/hooks/features/scroll/useGridScroll.js +7 -3
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +20 -7
- package/node/index.js +1 -1
- package/node/utils/domUtils.js +8 -6
- package/package.json +3 -3
- package/utils/domUtils.js +8 -6
|
@@ -10,8 +10,8 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
10
10
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
11
11
|
var React = _interopRequireWildcard(require("react"));
|
|
12
12
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
|
-
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
14
13
|
var _MenuList = _interopRequireDefault(require("@mui/material/MenuList"));
|
|
14
|
+
var _styles = require("@mui/material/styles");
|
|
15
15
|
var _utils = require("@mui/utils");
|
|
16
16
|
var _gridClasses = require("../../constants/gridClasses");
|
|
17
17
|
var _GridMenu = require("../menu/GridMenu");
|
|
@@ -39,9 +39,17 @@ function GridActionsCell(props) {
|
|
|
39
39
|
const buttonRef = React.useRef(null);
|
|
40
40
|
const ignoreCallToFocus = React.useRef(false);
|
|
41
41
|
const touchRippleRefs = React.useRef({});
|
|
42
|
+
const theme = (0, _styles.useTheme)();
|
|
42
43
|
const menuId = (0, _utils.unstable_useId)();
|
|
43
44
|
const buttonId = (0, _utils.unstable_useId)();
|
|
44
45
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
46
|
+
if (!hasActions(colDef)) {
|
|
47
|
+
throw new Error('MUI: Missing the `getActions` property in the `GridColDef`.');
|
|
48
|
+
}
|
|
49
|
+
const options = colDef.getActions(apiRef.current.getRowParams(id));
|
|
50
|
+
const iconButtons = options.filter(option => !option.props.showInMenu);
|
|
51
|
+
const menuButtons = options.filter(option => option.props.showInMenu);
|
|
52
|
+
const numberOfButtons = iconButtons.length + (menuButtons.length ? 1 : 0);
|
|
45
53
|
React.useLayoutEffect(() => {
|
|
46
54
|
if (!hasFocus) {
|
|
47
55
|
Object.entries(touchRippleRefs.current).forEach(([index, ref]) => {
|
|
@@ -77,13 +85,6 @@ function GridActionsCell(props) {
|
|
|
77
85
|
}
|
|
78
86
|
}
|
|
79
87
|
}), []);
|
|
80
|
-
if (!hasActions(colDef)) {
|
|
81
|
-
throw new Error('MUI: Missing the `getActions` property in the `GridColDef`.');
|
|
82
|
-
}
|
|
83
|
-
const options = colDef.getActions(apiRef.current.getRowParams(id));
|
|
84
|
-
const iconButtons = options.filter(option => !option.props.showInMenu);
|
|
85
|
-
const menuButtons = options.filter(option => option.props.showInMenu);
|
|
86
|
-
const numberOfButtons = iconButtons.length + (menuButtons.length ? 1 : 0);
|
|
87
88
|
React.useEffect(() => {
|
|
88
89
|
if (focusedButtonIndex >= numberOfButtons) {
|
|
89
90
|
setFocusedButtonIndex(numberOfButtons - 1);
|
|
@@ -113,9 +114,17 @@ function GridActionsCell(props) {
|
|
|
113
114
|
}
|
|
114
115
|
let newIndex = focusedButtonIndex;
|
|
115
116
|
if (event.key === 'ArrowRight') {
|
|
116
|
-
|
|
117
|
+
if (theme.direction === 'rtl') {
|
|
118
|
+
newIndex -= 1;
|
|
119
|
+
} else {
|
|
120
|
+
newIndex += 1;
|
|
121
|
+
}
|
|
117
122
|
} else if (event.key === 'ArrowLeft') {
|
|
118
|
-
|
|
123
|
+
if (theme.direction === 'rtl') {
|
|
124
|
+
newIndex += 1;
|
|
125
|
+
} else {
|
|
126
|
+
newIndex -= 1;
|
|
127
|
+
}
|
|
119
128
|
}
|
|
120
129
|
if (newIndex < 0 || newIndex >= numberOfButtons) {
|
|
121
130
|
return; // We're already in the first or last item = do nothing and let the grid listen the event
|
|
@@ -147,7 +156,7 @@ function GridActionsCell(props) {
|
|
|
147
156
|
touchRippleRef: handleTouchRippleRef(index),
|
|
148
157
|
onClick: handleButtonClick(index, button.props.onClick),
|
|
149
158
|
tabIndex: focusedButtonIndex === index ? tabIndex : -1
|
|
150
|
-
})), menuButtons.length > 0 && buttonId && /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
159
|
+
})), menuButtons.length > 0 && buttonId && /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.BaseIconButton, (0, _extends2.default)({
|
|
151
160
|
ref: buttonRef,
|
|
152
161
|
id: buttonId,
|
|
153
162
|
"aria-label": apiRef.current.getLocaleText('actionsCellMore'),
|
|
@@ -158,11 +167,12 @@ function GridActionsCell(props) {
|
|
|
158
167
|
size: "small",
|
|
159
168
|
onClick: showMenu,
|
|
160
169
|
touchRippleRef: handleTouchRippleRef(buttonId),
|
|
161
|
-
tabIndex: focusedButtonIndex === iconButtons.length ? tabIndex : -1
|
|
170
|
+
tabIndex: focusedButtonIndex === iconButtons.length ? tabIndex : -1
|
|
171
|
+
}, rootProps.componentsProps?.baseIconButton, {
|
|
162
172
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.MoreActionsIcon, {
|
|
163
173
|
fontSize: "small"
|
|
164
174
|
})
|
|
165
|
-
}), menuButtons.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridMenu.GridMenu, {
|
|
175
|
+
})), menuButtons.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridMenu.GridMenu, {
|
|
166
176
|
onClickAway: hideMenu,
|
|
167
177
|
onClick: hideMenu,
|
|
168
178
|
open: open,
|
|
@@ -9,9 +9,9 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
9
9
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
|
-
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
13
12
|
var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
|
|
14
13
|
var _ListItemIcon = _interopRequireDefault(require("@mui/material/ListItemIcon"));
|
|
14
|
+
var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
|
|
15
15
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
16
16
|
const _excluded = ["label", "icon", "showInMenu", "onClick"];
|
|
17
17
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
@@ -24,19 +24,21 @@ const GridActionsCellItem = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
24
24
|
onClick
|
|
25
25
|
} = props,
|
|
26
26
|
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
27
|
+
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
27
28
|
const handleClick = event => {
|
|
28
29
|
if (onClick) {
|
|
29
30
|
onClick(event);
|
|
30
31
|
}
|
|
31
32
|
};
|
|
32
33
|
if (!showInMenu) {
|
|
33
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
34
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.BaseIconButton, (0, _extends2.default)({
|
|
34
35
|
ref: ref,
|
|
35
36
|
size: "small",
|
|
36
37
|
role: "menuitem",
|
|
37
38
|
"aria-label": label
|
|
38
39
|
}, other, {
|
|
39
|
-
onClick: handleClick
|
|
40
|
+
onClick: handleClick
|
|
41
|
+
}, rootProps.componentsProps?.baseIconButton, {
|
|
40
42
|
children: /*#__PURE__*/React.cloneElement(icon, {
|
|
41
43
|
fontSize: 'small'
|
|
42
44
|
})
|
|
@@ -8,7 +8,6 @@ exports.ColumnHeaderMenuIcon = void 0;
|
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
var React = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _utils = require("@mui/utils");
|
|
11
|
-
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
12
11
|
var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
|
|
13
12
|
var _gridClasses = require("../../constants/gridClasses");
|
|
14
13
|
var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
|
|
@@ -47,7 +46,7 @@ const ColumnHeaderMenuIcon = /*#__PURE__*/React.memo(props => {
|
|
|
47
46
|
}, [apiRef, colDef.field]);
|
|
48
47
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
49
48
|
className: classes.root,
|
|
50
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
49
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.BaseIconButton, (0, _extends2.default)({
|
|
51
50
|
ref: iconButtonRef,
|
|
52
51
|
tabIndex: -1,
|
|
53
52
|
className: classes.button,
|
|
@@ -58,11 +57,12 @@ const ColumnHeaderMenuIcon = /*#__PURE__*/React.memo(props => {
|
|
|
58
57
|
"aria-expanded": open ? 'true' : undefined,
|
|
59
58
|
"aria-haspopup": "true",
|
|
60
59
|
"aria-controls": columnMenuId,
|
|
61
|
-
id: columnMenuButtonId
|
|
60
|
+
id: columnMenuButtonId
|
|
61
|
+
}, rootProps.componentsProps?.baseIconButton, {
|
|
62
62
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.ColumnMenuIcon, {
|
|
63
63
|
fontSize: "small"
|
|
64
64
|
})
|
|
65
|
-
})
|
|
65
|
+
}))
|
|
66
66
|
});
|
|
67
67
|
});
|
|
68
68
|
exports.ColumnHeaderMenuIcon = ColumnHeaderMenuIcon;
|
|
@@ -9,7 +9,6 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
9
9
|
var React = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
11
|
var _utils = require("@mui/utils");
|
|
12
|
-
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
13
12
|
var _Badge = _interopRequireDefault(require("@mui/material/Badge"));
|
|
14
13
|
var _gridPreferencePanelSelector = require("../../hooks/features/preferencesPanel/gridPreferencePanelSelector");
|
|
15
14
|
var _gridPreferencePanelsValue = require("../../hooks/features/preferencesPanel/gridPreferencePanelsValue");
|
|
@@ -60,17 +59,18 @@ function GridColumnHeaderFilterIconButton(props) {
|
|
|
60
59
|
if (!counter) {
|
|
61
60
|
return null;
|
|
62
61
|
}
|
|
63
|
-
const iconButton = /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
62
|
+
const iconButton = /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.BaseIconButton, (0, _extends2.default)({
|
|
64
63
|
onClick: toggleFilter,
|
|
65
64
|
color: "default",
|
|
66
65
|
"aria-label": apiRef.current.getLocaleText('columnHeaderFiltersLabel'),
|
|
67
66
|
size: "small",
|
|
68
|
-
tabIndex: -1
|
|
67
|
+
tabIndex: -1
|
|
68
|
+
}, rootProps.componentsProps?.baseIconButton, {
|
|
69
69
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.ColumnFilteredIcon, {
|
|
70
70
|
className: classes.icon,
|
|
71
71
|
fontSize: "small"
|
|
72
72
|
})
|
|
73
|
-
});
|
|
73
|
+
}));
|
|
74
74
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.BaseTooltip, (0, _extends2.default)({
|
|
75
75
|
title: apiRef.current.getLocaleText('columnHeaderFiltersTooltipActive')(counter),
|
|
76
76
|
enterDelay: 1000
|
|
@@ -10,7 +10,6 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
10
10
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
11
|
var _utils = require("@mui/utils");
|
|
12
12
|
var _Badge = _interopRequireDefault(require("@mui/material/Badge"));
|
|
13
|
-
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
14
13
|
var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
|
|
15
14
|
var _gridClasses = require("../../constants/gridClasses");
|
|
16
15
|
var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
|
|
@@ -59,13 +58,14 @@ function GridColumnHeaderSortIconRaw(props) {
|
|
|
59
58
|
if (!iconElement) {
|
|
60
59
|
return null;
|
|
61
60
|
}
|
|
62
|
-
const iconButton = /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
61
|
+
const iconButton = /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.BaseIconButton, (0, _extends2.default)({
|
|
63
62
|
tabIndex: -1,
|
|
64
63
|
"aria-label": apiRef.current.getLocaleText('columnHeaderSortIconLabel'),
|
|
65
64
|
title: apiRef.current.getLocaleText('columnHeaderSortIconLabel'),
|
|
66
|
-
size: "small"
|
|
65
|
+
size: "small"
|
|
66
|
+
}, rootProps.componentsProps?.baseIconButton, {
|
|
67
67
|
children: iconElement
|
|
68
|
-
});
|
|
68
|
+
}));
|
|
69
69
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridIconButtonContainer.GridIconButtonContainer, {
|
|
70
70
|
children: [index != null && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Badge.default, {
|
|
71
71
|
badgeContent: index,
|
|
@@ -10,7 +10,6 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
|
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
12
|
var _utils = require("@mui/utils");
|
|
13
|
-
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
14
13
|
var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
|
|
15
14
|
var _InputLabel = _interopRequireDefault(require("@mui/material/InputLabel"));
|
|
16
15
|
var _FormControl = _interopRequireDefault(require("@mui/material/FormControl"));
|
|
@@ -243,15 +242,16 @@ const GridFilterForm = /*#__PURE__*/React.forwardRef(function GridFilterForm(pro
|
|
|
243
242
|
as: rootProps.components.BaseFormControl
|
|
244
243
|
}, baseFormControlProps, deleteIconProps, {
|
|
245
244
|
className: (0, _clsx.default)(classes.deleteIcon, baseFormControlProps.className, deleteIconProps.className),
|
|
246
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
245
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.BaseIconButton, (0, _extends2.default)({
|
|
247
246
|
"aria-label": apiRef.current.getLocaleText('filterPanelDeleteIconLabel'),
|
|
248
247
|
title: apiRef.current.getLocaleText('filterPanelDeleteIconLabel'),
|
|
249
248
|
onClick: handleDeleteFilter,
|
|
250
|
-
size: "small"
|
|
249
|
+
size: "small"
|
|
250
|
+
}, rootProps.componentsProps?.baseIconButton, {
|
|
251
251
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.FilterPanelDeleteIcon, {
|
|
252
252
|
fontSize: "small"
|
|
253
253
|
})
|
|
254
|
-
})
|
|
254
|
+
}))
|
|
255
255
|
})), /*#__PURE__*/(0, _jsxRuntime.jsx)(FilterFormLogicOperatorInput, (0, _extends2.default)({
|
|
256
256
|
variant: "standard",
|
|
257
257
|
as: rootProps.components.BaseFormControl
|
|
@@ -66,13 +66,19 @@ const GridToolbarFilterButton = /*#__PURE__*/React.forwardRef(function GridToolb
|
|
|
66
66
|
return apiRef.current.getLocaleText('toolbarFiltersTooltipShow');
|
|
67
67
|
}
|
|
68
68
|
const getOperatorLabel = item => lookup[item.field].filterOperators.find(operator => operator.value === item.operator).label || apiRef.current.getLocaleText(`filterOperator${(0, _utils.unstable_capitalize)(item.operator)}`).toString();
|
|
69
|
+
const getFilterItemValue = item => {
|
|
70
|
+
const {
|
|
71
|
+
getValueAsString
|
|
72
|
+
} = lookup[item.field].filterOperators.find(operator => operator.value === item.operator);
|
|
73
|
+
return getValueAsString ? getValueAsString(item.value) : item.value;
|
|
74
|
+
};
|
|
69
75
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
70
76
|
children: [apiRef.current.getLocaleText('toolbarFiltersTooltipActive')(activeFilters.length), /*#__PURE__*/(0, _jsxRuntime.jsx)(GridToolbarFilterListRoot, {
|
|
71
77
|
className: classes.root,
|
|
72
78
|
children: activeFilters.map((item, index) => (0, _extends2.default)({}, lookup[item.field] && /*#__PURE__*/(0, _jsxRuntime.jsx)("li", {
|
|
73
79
|
children: `${lookup[item.field].headerName || item.field}
|
|
74
80
|
${getOperatorLabel(item)}
|
|
75
|
-
${item.value
|
|
81
|
+
${item.value ? getFilterItemValue(item) : ''}`
|
|
76
82
|
}, index)))
|
|
77
83
|
})]
|
|
78
84
|
});
|
|
@@ -10,7 +10,6 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
|
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
12
|
var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
|
|
13
|
-
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
14
13
|
var _styles = require("@mui/material/styles");
|
|
15
14
|
var _utils = require("@mui/utils");
|
|
16
15
|
var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
|
|
@@ -100,17 +99,18 @@ function GridToolbarQuickFilter(props) {
|
|
|
100
99
|
startAdornment: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.QuickFilterIcon, {
|
|
101
100
|
fontSize: "small"
|
|
102
101
|
}),
|
|
103
|
-
endAdornment: /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
102
|
+
endAdornment: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.BaseIconButton, (0, _extends2.default)({
|
|
104
103
|
"aria-label": apiRef.current.getLocaleText('toolbarQuickFilterDeleteIconLabel'),
|
|
105
104
|
size: "small",
|
|
106
105
|
sx: {
|
|
107
106
|
visibility: searchValue ? 'visible' : 'hidden'
|
|
108
107
|
},
|
|
109
|
-
onClick: handleSearchReset
|
|
108
|
+
onClick: handleSearchReset
|
|
109
|
+
}, rootProps.componentsProps?.baseIconButton, {
|
|
110
110
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.QuickFilterClearIcon, {
|
|
111
111
|
fontSize: "small"
|
|
112
112
|
})
|
|
113
|
-
})
|
|
113
|
+
}))
|
|
114
114
|
}
|
|
115
115
|
}, other, rootProps.componentsProps?.baseTextField));
|
|
116
116
|
}
|
|
@@ -12,6 +12,7 @@ var _FormControl = _interopRequireDefault(require("@mui/material/FormControl"));
|
|
|
12
12
|
var _Select = _interopRequireDefault(require("@mui/material/Select"));
|
|
13
13
|
var _Switch = _interopRequireDefault(require("@mui/material/Switch"));
|
|
14
14
|
var _Button = _interopRequireDefault(require("@mui/material/Button"));
|
|
15
|
+
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
15
16
|
var _Tooltip = _interopRequireDefault(require("@mui/material/Tooltip"));
|
|
16
17
|
var _Popper = _interopRequireDefault(require("@mui/material/Popper"));
|
|
17
18
|
var _components = require("../components");
|
|
@@ -58,6 +59,7 @@ const DATA_GRID_DEFAULT_SLOTS_COMPONENTS = (0, _extends2.default)({}, DEFAULT_GR
|
|
|
58
59
|
BaseSelect: _Select.default,
|
|
59
60
|
BaseSwitch: _Switch.default,
|
|
60
61
|
BaseButton: _Button.default,
|
|
62
|
+
BaseIconButton: _IconButton.default,
|
|
61
63
|
BaseTooltip: _Tooltip.default,
|
|
62
64
|
BasePopper: _Popper.default,
|
|
63
65
|
Cell: _components.GridCell,
|
|
@@ -45,6 +45,7 @@ const useGridColumnHeaders = props => {
|
|
|
45
45
|
innerRef: innerRefProp,
|
|
46
46
|
minColumnIndex = 0
|
|
47
47
|
} = props;
|
|
48
|
+
const theme = (0, _styles.useTheme)();
|
|
48
49
|
const [dragCol, setDragCol] = React.useState('');
|
|
49
50
|
const [resizeCol, setResizeCol] = React.useState('');
|
|
50
51
|
const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
|
|
@@ -96,9 +97,10 @@ const useGridColumnHeaders = props => {
|
|
|
96
97
|
apiRef,
|
|
97
98
|
visibleRows: currentPage.rows
|
|
98
99
|
});
|
|
99
|
-
const
|
|
100
|
+
const direction = theme.direction === 'ltr' ? 1 : -1;
|
|
101
|
+
const offset = firstColumnToRender > 0 ? prevScrollLeft.current - direction * columnPositions[firstColumnToRender] : prevScrollLeft.current;
|
|
100
102
|
innerRef.current.style.transform = `translate3d(${-offset}px, 0px, 0px)`;
|
|
101
|
-
}, [columnPositions, minColumnIndex, rootProps.columnBuffer, apiRef, currentPage.rows, rootProps.rowBuffer]);
|
|
103
|
+
}, [columnPositions, minColumnIndex, rootProps.columnBuffer, apiRef, currentPage.rows, rootProps.rowBuffer, theme.direction]);
|
|
102
104
|
React.useLayoutEffect(() => {
|
|
103
105
|
if (renderContext) {
|
|
104
106
|
updateInnerPosition(renderContext);
|
|
@@ -391,10 +391,13 @@ const useGridCellEditing = (apiRef, props) => {
|
|
|
391
391
|
const getRowWithUpdatedValuesFromCellEditing = React.useCallback((id, field) => {
|
|
392
392
|
const column = apiRef.current.getColumn(field);
|
|
393
393
|
const editingState = (0, _gridEditingSelectors.gridEditRowsStateSelector)(apiRef.current.state);
|
|
394
|
+
const row = apiRef.current.getRow(id);
|
|
395
|
+
if (!editingState[id] || !editingState[id][field]) {
|
|
396
|
+
return apiRef.current.getRow(id);
|
|
397
|
+
}
|
|
394
398
|
const {
|
|
395
399
|
value
|
|
396
400
|
} = editingState[id][field];
|
|
397
|
-
const row = apiRef.current.getRow(id);
|
|
398
401
|
return column.valueSetter ? column.valueSetter({
|
|
399
402
|
value,
|
|
400
403
|
row
|
|
@@ -127,7 +127,7 @@ const useGridEditing = (apiRef, props) => {
|
|
|
127
127
|
const editingSharedApi = {
|
|
128
128
|
isCellEditable,
|
|
129
129
|
setEditCellValue,
|
|
130
|
-
|
|
130
|
+
getRowWithUpdatedValues,
|
|
131
131
|
unstable_getEditCellMeta: getEditCellMeta
|
|
132
132
|
};
|
|
133
133
|
const editingSharedPrivateApi = {
|
|
@@ -512,6 +512,9 @@ const useGridRowEditing = (apiRef, props) => {
|
|
|
512
512
|
const getRowWithUpdatedValuesFromRowEditing = React.useCallback(id => {
|
|
513
513
|
const editingState = (0, _gridEditingSelectors.gridEditRowsStateSelector)(apiRef.current.state);
|
|
514
514
|
const row = apiRef.current.getRow(id);
|
|
515
|
+
if (!editingState[id]) {
|
|
516
|
+
return apiRef.current.getRow(id);
|
|
517
|
+
}
|
|
515
518
|
let rowUpdate = (0, _extends2.default)({}, row);
|
|
516
519
|
Object.entries(editingState[id]).forEach(([field, fieldProps]) => {
|
|
517
520
|
const column = apiRef.current.getColumn(field);
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.useGridKeyboardNavigation = void 0;
|
|
7
7
|
var React = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _styles = require("@mui/material/styles");
|
|
8
9
|
var _gridColumnsSelector = require("../columns/gridColumnsSelector");
|
|
9
10
|
var _useGridLogger = require("../../utils/useGridLogger");
|
|
10
11
|
var _useGridApiEventHandler = require("../../utils/useGridApiEventHandler");
|
|
@@ -25,6 +26,40 @@ function enrichPageRowsWithPinnedRows(apiRef, rows) {
|
|
|
25
26
|
const pinnedRows = (0, _gridRowsSelector.gridPinnedRowsSelector)(apiRef) || {};
|
|
26
27
|
return [...(pinnedRows.top || []), ...rows, ...(pinnedRows.bottom || [])];
|
|
27
28
|
}
|
|
29
|
+
const getLeftColumnIndex = ({
|
|
30
|
+
currentColIndex,
|
|
31
|
+
firstColIndex,
|
|
32
|
+
lastColIndex,
|
|
33
|
+
direction
|
|
34
|
+
}) => {
|
|
35
|
+
if (direction === 'rtl') {
|
|
36
|
+
if (currentColIndex < lastColIndex) {
|
|
37
|
+
return currentColIndex + 1;
|
|
38
|
+
}
|
|
39
|
+
} else if (direction === 'ltr') {
|
|
40
|
+
if (currentColIndex > firstColIndex) {
|
|
41
|
+
return currentColIndex - 1;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
};
|
|
46
|
+
const getRightColumnIndex = ({
|
|
47
|
+
currentColIndex,
|
|
48
|
+
firstColIndex,
|
|
49
|
+
lastColIndex,
|
|
50
|
+
direction
|
|
51
|
+
}) => {
|
|
52
|
+
if (direction === 'rtl') {
|
|
53
|
+
if (currentColIndex > firstColIndex) {
|
|
54
|
+
return currentColIndex - 1;
|
|
55
|
+
}
|
|
56
|
+
} else if (direction === 'ltr') {
|
|
57
|
+
if (currentColIndex < lastColIndex) {
|
|
58
|
+
return currentColIndex + 1;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
};
|
|
28
63
|
|
|
29
64
|
/**
|
|
30
65
|
* @requires useGridSorting (method) - can be after
|
|
@@ -38,6 +73,7 @@ function enrichPageRowsWithPinnedRows(apiRef, rows) {
|
|
|
38
73
|
const useGridKeyboardNavigation = (apiRef, props) => {
|
|
39
74
|
const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useGridKeyboardNavigation');
|
|
40
75
|
const initialCurrentPageRows = (0, _useGridVisibleRows.useGridVisibleRows)(apiRef, props).rows;
|
|
76
|
+
const theme = (0, _styles.useTheme)();
|
|
41
77
|
const currentPageRows = React.useMemo(() => enrichPageRowsWithPinnedRows(apiRef, initialCurrentPageRows), [apiRef, initialCurrentPageRows]);
|
|
42
78
|
|
|
43
79
|
/**
|
|
@@ -118,15 +154,27 @@ const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
118
154
|
}
|
|
119
155
|
case 'ArrowRight':
|
|
120
156
|
{
|
|
121
|
-
|
|
122
|
-
|
|
157
|
+
const rightColIndex = getRightColumnIndex({
|
|
158
|
+
currentColIndex: colIndexBefore,
|
|
159
|
+
firstColIndex,
|
|
160
|
+
lastColIndex,
|
|
161
|
+
direction: theme.direction
|
|
162
|
+
});
|
|
163
|
+
if (rightColIndex !== null) {
|
|
164
|
+
goToHeader(rightColIndex, event);
|
|
123
165
|
}
|
|
124
166
|
break;
|
|
125
167
|
}
|
|
126
168
|
case 'ArrowLeft':
|
|
127
169
|
{
|
|
128
|
-
|
|
129
|
-
|
|
170
|
+
const leftColIndex = getLeftColumnIndex({
|
|
171
|
+
currentColIndex: colIndexBefore,
|
|
172
|
+
firstColIndex,
|
|
173
|
+
lastColIndex,
|
|
174
|
+
direction: theme.direction
|
|
175
|
+
});
|
|
176
|
+
if (leftColIndex !== null) {
|
|
177
|
+
goToHeader(leftColIndex, event);
|
|
130
178
|
}
|
|
131
179
|
break;
|
|
132
180
|
}
|
|
@@ -174,7 +222,7 @@ const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
174
222
|
if (shouldPreventDefault) {
|
|
175
223
|
event.preventDefault();
|
|
176
224
|
}
|
|
177
|
-
}, [apiRef, currentPageRows.length, goToCell, getRowIdFromIndex, goToHeader, goToGroupHeader]);
|
|
225
|
+
}, [apiRef, currentPageRows.length, theme.direction, goToCell, getRowIdFromIndex, goToHeader, goToGroupHeader]);
|
|
178
226
|
const focusedColumnGroup = (0, _useGridSelector.useGridSelector)(apiRef, _focus.unstable_gridFocusColumnGroupHeaderSelector);
|
|
179
227
|
const handleColumnGroupHeaderKeyDown = React.useCallback((params, event) => {
|
|
180
228
|
const dimensions = apiRef.current.getRootDimensions();
|
|
@@ -287,6 +335,7 @@ const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
287
335
|
if (currentPageRows.length === 0 || !dimensions) {
|
|
288
336
|
return;
|
|
289
337
|
}
|
|
338
|
+
const direction = theme.direction;
|
|
290
339
|
const viewportPageSize = apiRef.current.getViewportPageSize();
|
|
291
340
|
const colIndexBefore = params.field ? apiRef.current.getColumnIndex(params.field) : 0;
|
|
292
341
|
const rowIndexBefore = currentPageRows.findIndex(row => row.id === params.id);
|
|
@@ -315,15 +364,27 @@ const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
315
364
|
}
|
|
316
365
|
case 'ArrowRight':
|
|
317
366
|
{
|
|
318
|
-
|
|
319
|
-
|
|
367
|
+
const rightColIndex = getRightColumnIndex({
|
|
368
|
+
currentColIndex: colIndexBefore,
|
|
369
|
+
firstColIndex,
|
|
370
|
+
lastColIndex,
|
|
371
|
+
direction
|
|
372
|
+
});
|
|
373
|
+
if (rightColIndex !== null) {
|
|
374
|
+
goToCell(rightColIndex, getRowIdFromIndex(rowIndexBefore), direction === 'rtl' ? 'left' : 'right');
|
|
320
375
|
}
|
|
321
376
|
break;
|
|
322
377
|
}
|
|
323
378
|
case 'ArrowLeft':
|
|
324
379
|
{
|
|
325
|
-
|
|
326
|
-
|
|
380
|
+
const leftColIndex = getLeftColumnIndex({
|
|
381
|
+
currentColIndex: colIndexBefore,
|
|
382
|
+
firstColIndex,
|
|
383
|
+
lastColIndex,
|
|
384
|
+
direction
|
|
385
|
+
});
|
|
386
|
+
if (leftColIndex !== null) {
|
|
387
|
+
goToCell(leftColIndex, getRowIdFromIndex(rowIndexBefore), direction === 'rtl' ? 'right' : 'left');
|
|
327
388
|
}
|
|
328
389
|
break;
|
|
329
390
|
}
|
|
@@ -396,7 +457,7 @@ const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
396
457
|
if (shouldPreventDefault) {
|
|
397
458
|
event.preventDefault();
|
|
398
459
|
}
|
|
399
|
-
}, [apiRef, currentPageRows, getRowIdFromIndex, goToCell, goToHeader]);
|
|
460
|
+
}, [apiRef, currentPageRows, theme.direction, getRowIdFromIndex, goToCell, goToHeader]);
|
|
400
461
|
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnHeaderKeyDown', handleColumnHeaderKeyDown);
|
|
401
462
|
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'columnGroupHeaderKeyDown', handleColumnGroupHeaderKeyDown);
|
|
402
463
|
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'cellKeyDown', handleCellKeyDown);
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.useGridScroll = void 0;
|
|
7
7
|
var React = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _styles = require("@mui/material/styles");
|
|
8
9
|
var _useGridLogger = require("../../utils/useGridLogger");
|
|
9
10
|
var _gridColumnsSelector = require("../columns/gridColumnsSelector");
|
|
10
11
|
var _useGridSelector = require("../../utils/useGridSelector");
|
|
@@ -49,6 +50,7 @@ function scrollIntoView(dimensions) {
|
|
|
49
50
|
* @requires useGridColumnSpanning (method)
|
|
50
51
|
*/
|
|
51
52
|
const useGridScroll = (apiRef, props) => {
|
|
53
|
+
const theme = (0, _styles.useTheme)();
|
|
52
54
|
const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useGridScroll');
|
|
53
55
|
const colRef = apiRef.current.columnHeadersElementRef;
|
|
54
56
|
const virtualScrollerRef = apiRef.current.virtualScrollerRef;
|
|
@@ -75,9 +77,10 @@ const useGridScroll = (apiRef, props) => {
|
|
|
75
77
|
if (typeof cellWidth === 'undefined') {
|
|
76
78
|
cellWidth = visibleColumns[params.colIndex].computedWidth;
|
|
77
79
|
}
|
|
80
|
+
// When using RTL, `scrollLeft` becomes negative, so we must ensure that we only compare values.
|
|
78
81
|
scrollCoordinates.left = scrollIntoView({
|
|
79
82
|
clientHeight: virtualScrollerRef.current.clientWidth,
|
|
80
|
-
scrollTop: virtualScrollerRef.current.scrollLeft,
|
|
83
|
+
scrollTop: Math.abs(virtualScrollerRef.current.scrollLeft),
|
|
81
84
|
offsetHeight: cellWidth,
|
|
82
85
|
offsetTop: columnPositions[params.colIndex]
|
|
83
86
|
});
|
|
@@ -106,8 +109,9 @@ const useGridScroll = (apiRef, props) => {
|
|
|
106
109
|
}, [logger, apiRef, virtualScrollerRef, props.pagination, visibleSortedRows]);
|
|
107
110
|
const scroll = React.useCallback(params => {
|
|
108
111
|
if (virtualScrollerRef.current && params.left != null && colRef.current) {
|
|
112
|
+
const direction = theme.direction === 'rtl' ? -1 : 1;
|
|
109
113
|
colRef.current.scrollLeft = params.left;
|
|
110
|
-
virtualScrollerRef.current.scrollLeft = params.left;
|
|
114
|
+
virtualScrollerRef.current.scrollLeft = direction * params.left;
|
|
111
115
|
logger.debug(`Scrolling left: ${params.left}`);
|
|
112
116
|
}
|
|
113
117
|
if (virtualScrollerRef.current && params.top != null) {
|
|
@@ -115,7 +119,7 @@ const useGridScroll = (apiRef, props) => {
|
|
|
115
119
|
logger.debug(`Scrolling top: ${params.top}`);
|
|
116
120
|
}
|
|
117
121
|
logger.debug(`Scrolling, updating container, and viewport`);
|
|
118
|
-
}, [virtualScrollerRef, colRef, logger]);
|
|
122
|
+
}, [virtualScrollerRef, theme.direction, colRef, logger]);
|
|
119
123
|
const getScrollPosition = React.useCallback(() => {
|
|
120
124
|
if (!virtualScrollerRef?.current) {
|
|
121
125
|
return {
|
|
@@ -11,6 +11,7 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
|
|
|
11
11
|
var React = _interopRequireWildcard(require("react"));
|
|
12
12
|
var ReactDOM = _interopRequireWildcard(require("react-dom"));
|
|
13
13
|
var _utils = require("@mui/utils");
|
|
14
|
+
var _styles = require("@mui/material/styles");
|
|
14
15
|
var _useGridPrivateApiContext = require("../../utils/useGridPrivateApiContext");
|
|
15
16
|
var _useGridRootProps = require("../../utils/useGridRootProps");
|
|
16
17
|
var _useGridSelector = require("../../utils/useGridSelector");
|
|
@@ -44,7 +45,7 @@ function binarySearch(offset, positions, sliceStart = 0, sliceEnd = positions.le
|
|
|
44
45
|
}
|
|
45
46
|
function exponentialSearch(offset, positions, index) {
|
|
46
47
|
let interval = 1;
|
|
47
|
-
while (index < positions.length && positions[index] < offset) {
|
|
48
|
+
while (index < positions.length && Math.abs(positions[index]) < offset) {
|
|
48
49
|
index += interval;
|
|
49
50
|
interval *= 2;
|
|
50
51
|
}
|
|
@@ -72,6 +73,7 @@ const useGridVirtualScroller = props => {
|
|
|
72
73
|
renderZoneMaxColumnIndex = visibleColumns.length,
|
|
73
74
|
getRowProps
|
|
74
75
|
} = props;
|
|
76
|
+
const theme = (0, _styles.useTheme)();
|
|
75
77
|
const columnPositions = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridColumnPositionsSelector);
|
|
76
78
|
const columnsTotalWidth = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridColumnsTotalWidthSelector);
|
|
77
79
|
const cellFocus = (0, _useGridSelector.useGridSelector)(apiRef, _gridFocusStateSelector.gridFocusCellSelector);
|
|
@@ -147,8 +149,8 @@ const useGridVirtualScroller = props => {
|
|
|
147
149
|
hasRowWithAutoHeight = apiRef.current.rowHasAutoHeight(row.id);
|
|
148
150
|
}
|
|
149
151
|
if (!hasRowWithAutoHeight) {
|
|
150
|
-
firstColumnIndex = binarySearch(left, columnPositions);
|
|
151
|
-
lastColumnIndex = binarySearch(left + containerDimensions.width, columnPositions);
|
|
152
|
+
firstColumnIndex = binarySearch(Math.abs(left), columnPositions);
|
|
153
|
+
lastColumnIndex = binarySearch(Math.abs(left) + containerDimensions.width, columnPositions);
|
|
152
154
|
}
|
|
153
155
|
return {
|
|
154
156
|
firstRowIndex,
|
|
@@ -178,7 +180,7 @@ const useGridVirtualScroller = props => {
|
|
|
178
180
|
height: params.height
|
|
179
181
|
});
|
|
180
182
|
}, []);
|
|
181
|
-
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, '
|
|
183
|
+
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'debouncedResize', handleResize);
|
|
182
184
|
const updateRenderZonePosition = React.useCallback(nextRenderContext => {
|
|
183
185
|
const [firstRowToRender, lastRowToRender] = getRenderableIndexes({
|
|
184
186
|
firstIndex: nextRenderContext.firstRowIndex,
|
|
@@ -201,8 +203,9 @@ const useGridVirtualScroller = props => {
|
|
|
201
203
|
lastRowToRender,
|
|
202
204
|
visibleRows: currentPage.rows
|
|
203
205
|
});
|
|
206
|
+
const direction = theme.direction === 'ltr' ? 1 : -1;
|
|
204
207
|
const top = (0, _gridRowsMetaSelector.gridRowsMetaSelector)(apiRef.current.state).positions[firstRowToRender];
|
|
205
|
-
const left = (0, _gridColumnsSelector.gridColumnPositionsSelector)(apiRef)[firstColumnToRender]; // Call directly the selector because it might be outdated when this method is called
|
|
208
|
+
const left = direction * (0, _gridColumnsSelector.gridColumnPositionsSelector)(apiRef)[firstColumnToRender]; // Call directly the selector because it might be outdated when this method is called
|
|
206
209
|
renderZoneRef.current.style.transform = `translate3d(${left}px, ${top}px, 0px)`;
|
|
207
210
|
if (typeof onRenderZonePositioning === 'function') {
|
|
208
211
|
onRenderZonePositioning({
|
|
@@ -210,7 +213,7 @@ const useGridVirtualScroller = props => {
|
|
|
210
213
|
left
|
|
211
214
|
});
|
|
212
215
|
}
|
|
213
|
-
}, [apiRef, currentPage.rows, onRenderZonePositioning, renderZoneMinColumnIndex, renderZoneMaxColumnIndex, rootProps.columnBuffer, rootProps.rowBuffer]);
|
|
216
|
+
}, [apiRef, currentPage.rows, onRenderZonePositioning, renderZoneMinColumnIndex, renderZoneMaxColumnIndex, rootProps.columnBuffer, rootProps.rowBuffer, theme.direction]);
|
|
214
217
|
const updateRenderContext = React.useCallback(nextRenderContext => {
|
|
215
218
|
setRenderContext(nextRenderContext);
|
|
216
219
|
updateRenderZonePosition(nextRenderContext);
|
|
@@ -253,9 +256,19 @@ const useGridVirtualScroller = props => {
|
|
|
253
256
|
scrollPosition.current.left = scrollLeft;
|
|
254
257
|
|
|
255
258
|
// On iOS and macOS, negative offsets are possible when swiping past the start
|
|
256
|
-
if (
|
|
259
|
+
if (!prevRenderContext.current || scrollTop < 0) {
|
|
257
260
|
return;
|
|
258
261
|
}
|
|
262
|
+
if (theme.direction === 'ltr') {
|
|
263
|
+
if (scrollLeft < 0) {
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
if (theme.direction === 'rtl') {
|
|
268
|
+
if (scrollLeft > 0) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
259
272
|
|
|
260
273
|
// When virtualization is disabled, the context never changes during scroll
|
|
261
274
|
const nextRenderContext = disableVirtualization ? prevRenderContext.current : computeRenderContext();
|
package/node/index.js
CHANGED