@mui/x-data-grid 6.12.0 → 6.13.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 +184 -47
- package/components/GridFooter.js +4 -5
- package/components/GridRowCount.d.ts +3 -0
- package/components/base/GridOverlays.js +22 -3
- package/components/containers/GridRootStyles.js +4 -1
- package/constants/defaultGridSlotsComponents.js +2 -1
- package/hooks/features/columns/gridColumnsUtils.js +1 -1
- package/hooks/features/columns/useGridColumns.js +11 -4
- package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -2
- package/hooks/features/rows/gridRowsUtils.d.ts +1 -1
- package/hooks/features/rows/gridRowsUtils.js +1 -1
- package/hooks/features/rows/useGridRows.js +5 -19
- package/hooks/features/virtualization/useGridVirtualScroller.d.ts +1 -5
- package/index.js +1 -1
- package/internals/index.d.ts +1 -0
- package/internals/index.js +1 -0
- package/legacy/components/GridFooter.js +4 -5
- package/legacy/components/base/GridOverlays.js +34 -10
- package/legacy/components/containers/GridRootStyles.js +1 -1
- package/legacy/constants/defaultGridSlotsComponents.js +2 -1
- package/legacy/hooks/features/columns/gridColumnsUtils.js +1 -1
- package/legacy/hooks/features/columns/useGridColumns.js +9 -4
- package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -2
- package/legacy/hooks/features/rows/gridRowsUtils.js +1 -1
- package/legacy/hooks/features/rows/useGridRows.js +5 -19
- package/legacy/index.js +1 -1
- package/legacy/internals/index.js +1 -0
- package/legacy/locales/skSK.js +27 -29
- package/legacy/utils/createSelector.js +1 -1
- package/locales/skSK.js +27 -29
- package/models/colDef/gridColDef.d.ts +2 -4
- package/models/gridSlotsComponent.d.ts +5 -0
- package/models/gridSlotsComponentsProps.d.ts +4 -0
- package/modern/components/GridFooter.js +2 -3
- package/modern/components/base/GridOverlays.js +22 -3
- package/modern/components/containers/GridRootStyles.js +4 -1
- package/modern/constants/defaultGridSlotsComponents.js +2 -1
- package/modern/hooks/features/columns/gridColumnsUtils.js +1 -1
- package/modern/hooks/features/columns/useGridColumns.js +10 -4
- package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -2
- package/modern/hooks/features/rows/gridRowsUtils.js +1 -1
- package/modern/hooks/features/rows/useGridRows.js +5 -19
- package/modern/index.js +1 -1
- package/modern/internals/index.js +1 -0
- package/modern/locales/skSK.js +27 -29
- package/modern/utils/createSelector.js +1 -1
- package/node/components/GridFooter.js +2 -3
- package/node/components/base/GridOverlays.js +22 -3
- package/node/components/containers/GridRootStyles.js +4 -1
- package/node/constants/defaultGridSlotsComponents.js +1 -0
- package/node/hooks/features/columns/gridColumnsUtils.js +1 -1
- package/node/hooks/features/columns/useGridColumns.js +10 -4
- package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -2
- package/node/hooks/features/rows/gridRowsUtils.js +1 -1
- package/node/hooks/features/rows/useGridRows.js +5 -19
- package/node/index.js +1 -1
- package/node/internals/index.js +8 -0
- package/node/locales/skSK.js +27 -29
- package/node/utils/createSelector.js +1 -1
- package/package.json +3 -3
- package/utils/createSelector.js +1 -1
|
@@ -21,6 +21,7 @@ import { GridOverlayProps } from '../components/containers/GridOverlay';
|
|
|
21
21
|
import { GridPanelProps } from '../components/panel/GridPanel';
|
|
22
22
|
import type { GridRowProps } from '../components/GridRow';
|
|
23
23
|
import type { GridCellProps } from '../components/cell/GridCell';
|
|
24
|
+
import type { GridRowCountProps } from '../components';
|
|
24
25
|
export interface BaseCheckboxPropsOverrides {
|
|
25
26
|
}
|
|
26
27
|
export interface BaseTextFieldPropsOverrides {
|
|
@@ -59,6 +60,8 @@ export interface FilterPanelPropsOverrides {
|
|
|
59
60
|
}
|
|
60
61
|
export interface FooterPropsOverrides {
|
|
61
62
|
}
|
|
63
|
+
export interface FooterRowCountOverrides {
|
|
64
|
+
}
|
|
62
65
|
export interface PaginationPropsOverrides {
|
|
63
66
|
}
|
|
64
67
|
export interface LoadingOverlayPropsOverrides {
|
|
@@ -100,6 +103,7 @@ export interface GridSlotsComponentsProps {
|
|
|
100
103
|
columnsPanel?: SlotProps<GridColumnsPanelProps, ColumnsPanelPropsOverrides>;
|
|
101
104
|
filterPanel?: SlotProps<GridFilterPanelProps, FilterPanelPropsOverrides>;
|
|
102
105
|
footer?: SlotProps<GridFooterContainerProps, FooterPropsOverrides>;
|
|
106
|
+
footerRowCount?: SlotProps<GridRowCountProps, FooterRowCountOverrides>;
|
|
103
107
|
loadingOverlay?: SlotProps<GridOverlayProps, LoadingOverlayPropsOverrides>;
|
|
104
108
|
noResultsOverlay?: SlotProps<GridOverlayProps, NoResultsOverlayPropsOverrides>;
|
|
105
109
|
noRowsOverlay?: SlotProps<GridOverlayProps, NoRowsOverlayPropsOverrides>;
|
|
@@ -6,7 +6,6 @@ import { gridTopLevelRowCountSelector } from '../hooks/features/rows/gridRowsSel
|
|
|
6
6
|
import { selectedGridRowsCountSelector } from '../hooks/features/rowSelection/gridRowSelectionSelector';
|
|
7
7
|
import { gridFilteredTopLevelRowCountSelector } from '../hooks/features/filter/gridFilterSelector';
|
|
8
8
|
import { useGridApiContext } from '../hooks/utils/useGridApiContext';
|
|
9
|
-
import { GridRowCount } from './GridRowCount';
|
|
10
9
|
import { GridSelectedRowCount } from './GridSelectedRowCount';
|
|
11
10
|
import { GridFooterContainer } from './containers/GridFooterContainer';
|
|
12
11
|
import { useGridRootProps } from '../hooks/utils/useGridRootProps';
|
|
@@ -21,10 +20,10 @@ const GridFooter = /*#__PURE__*/React.forwardRef(function GridFooter(props, ref)
|
|
|
21
20
|
const selectedRowCountElement = !rootProps.hideFooterSelectedRowCount && selectedRowCount > 0 ? /*#__PURE__*/_jsx(GridSelectedRowCount, {
|
|
22
21
|
selectedRowCount: selectedRowCount
|
|
23
22
|
}) : /*#__PURE__*/_jsx("div", {});
|
|
24
|
-
const rowCountElement = !rootProps.hideFooterRowCount && !rootProps.pagination ? /*#__PURE__*/_jsx(
|
|
23
|
+
const rowCountElement = !rootProps.hideFooterRowCount && !rootProps.pagination ? /*#__PURE__*/_jsx(rootProps.slots.footerRowCount, _extends({}, rootProps.slotProps?.footerRowCount, {
|
|
25
24
|
rowCount: totalTopLevelRowCount,
|
|
26
25
|
visibleRowCount: visibleTopLevelRowCount
|
|
27
|
-
}) : null;
|
|
26
|
+
})) : null;
|
|
28
27
|
const paginationElement = rootProps.pagination && !rootProps.hideFooterPagination && rootProps.slots.pagination && /*#__PURE__*/_jsx(rootProps.slots.pagination, _extends({}, rootProps.slotProps?.pagination));
|
|
29
28
|
return /*#__PURE__*/_jsxs(GridFooterContainer, _extends({
|
|
30
29
|
ref: ref
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import * as React from 'react';
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
3
4
|
import { styled } from '@mui/system';
|
|
4
5
|
import { unstable_composeClasses as composeClasses, unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';
|
|
5
6
|
import clsx from 'clsx';
|
|
@@ -14,8 +15,11 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
14
15
|
const GridOverlayWrapperRoot = styled('div', {
|
|
15
16
|
name: 'MuiDataGrid',
|
|
16
17
|
slot: 'OverlayWrapper',
|
|
18
|
+
shouldForwardProp: prop => prop !== 'overlayType',
|
|
17
19
|
overridesResolver: (props, styles) => styles.overlayWrapper
|
|
18
|
-
})({
|
|
20
|
+
})(({
|
|
21
|
+
overlayType
|
|
22
|
+
}) => ({
|
|
19
23
|
position: 'sticky',
|
|
20
24
|
// To stay in place while scrolling
|
|
21
25
|
top: 0,
|
|
@@ -24,12 +28,14 @@ const GridOverlayWrapperRoot = styled('div', {
|
|
|
24
28
|
// To stay above the content instead of shifting it down
|
|
25
29
|
height: 0,
|
|
26
30
|
// To stay above the content instead of shifting it down
|
|
27
|
-
zIndex:
|
|
28
|
-
|
|
31
|
+
zIndex: overlayType === 'loadingOverlay' ? 5 // Should be above pinned columns, pinned rows, and detail panel
|
|
32
|
+
: 4 // Should be above pinned columns and detail panel
|
|
33
|
+
}));
|
|
29
34
|
|
|
30
35
|
const GridOverlayWrapperInner = styled('div', {
|
|
31
36
|
name: 'MuiDataGrid',
|
|
32
37
|
slot: 'OverlayWrapperInner',
|
|
38
|
+
shouldForwardProp: prop => prop !== 'overlayType',
|
|
33
39
|
overridesResolver: (props, styles) => styles.overlayWrapperInner
|
|
34
40
|
})({});
|
|
35
41
|
const useUtilityClasses = ownerState => {
|
|
@@ -65,6 +71,7 @@ function GridOverlayWrapper(props) {
|
|
|
65
71
|
}
|
|
66
72
|
return /*#__PURE__*/_jsx(GridOverlayWrapperRoot, {
|
|
67
73
|
className: clsx(classes.root),
|
|
74
|
+
overlayType: props.overlayType,
|
|
68
75
|
children: /*#__PURE__*/_jsx(GridOverlayWrapperInner, _extends({
|
|
69
76
|
className: clsx(classes.inner),
|
|
70
77
|
style: {
|
|
@@ -74,6 +81,13 @@ function GridOverlayWrapper(props) {
|
|
|
74
81
|
}, props))
|
|
75
82
|
});
|
|
76
83
|
}
|
|
84
|
+
process.env.NODE_ENV !== "production" ? GridOverlayWrapper.propTypes = {
|
|
85
|
+
// ----------------------------- Warning --------------------------------
|
|
86
|
+
// | These PropTypes are generated from the TypeScript type definitions |
|
|
87
|
+
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
88
|
+
// ----------------------------------------------------------------------
|
|
89
|
+
overlayType: PropTypes.string.isRequired
|
|
90
|
+
} : void 0;
|
|
77
91
|
export function GridOverlays() {
|
|
78
92
|
const apiRef = useGridApiContext();
|
|
79
93
|
const rootProps = useGridRootProps();
|
|
@@ -83,19 +97,24 @@ export function GridOverlays() {
|
|
|
83
97
|
const showNoRowsOverlay = !loading && totalRowCount === 0;
|
|
84
98
|
const showNoResultsOverlay = !loading && totalRowCount > 0 && visibleRowCount === 0;
|
|
85
99
|
let overlay = null;
|
|
100
|
+
let overlayType = '';
|
|
86
101
|
if (showNoRowsOverlay) {
|
|
87
102
|
overlay = /*#__PURE__*/_jsx(rootProps.slots.noRowsOverlay, _extends({}, rootProps.slotProps?.noRowsOverlay));
|
|
103
|
+
overlayType = 'noRowsOverlay';
|
|
88
104
|
}
|
|
89
105
|
if (showNoResultsOverlay) {
|
|
90
106
|
overlay = /*#__PURE__*/_jsx(rootProps.slots.noResultsOverlay, _extends({}, rootProps.slotProps?.noResultsOverlay));
|
|
107
|
+
overlayType = 'noResultsOverlay';
|
|
91
108
|
}
|
|
92
109
|
if (loading) {
|
|
93
110
|
overlay = /*#__PURE__*/_jsx(rootProps.slots.loadingOverlay, _extends({}, rootProps.slotProps?.loadingOverlay));
|
|
111
|
+
overlayType = 'loadingOverlay';
|
|
94
112
|
}
|
|
95
113
|
if (overlay === null) {
|
|
96
114
|
return null;
|
|
97
115
|
}
|
|
98
116
|
return /*#__PURE__*/_jsx(GridOverlayWrapper, {
|
|
117
|
+
overlayType: overlayType,
|
|
99
118
|
children: overlay
|
|
100
119
|
});
|
|
101
120
|
}
|
|
@@ -348,7 +348,10 @@ export const GridRootStyles = styled('div', {
|
|
|
348
348
|
'&.Mui-selected': {
|
|
349
349
|
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),
|
|
350
350
|
'&:hover, &.Mui-hovered': {
|
|
351
|
-
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} /
|
|
351
|
+
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(
|
|
352
|
+
${theme.vars.palette.action.selectedOpacity} +
|
|
353
|
+
${theme.vars.palette.action.hoverOpacity}
|
|
354
|
+
))` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),
|
|
352
355
|
// Reset on touch devices, it doesn't add specificity
|
|
353
356
|
'@media (hover: none)': {
|
|
354
357
|
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
-
import { GridSkeletonCell, GridColumnsPanel, GridFilterPanel, GridFooter, GridLoadingOverlay, GridNoRowsOverlay, GridPagination, GridPanel, GridPreferencesPanel, GridRow, GridColumnHeaderFilterIconButton } from '../components';
|
|
2
|
+
import { GridSkeletonCell, GridColumnsPanel, GridFilterPanel, GridFooter, GridLoadingOverlay, GridNoRowsOverlay, GridPagination, GridPanel, GridPreferencesPanel, GridRow, GridColumnHeaderFilterIconButton, GridRowCount } from '../components';
|
|
3
3
|
import { GridCellV7 } from '../components/cell/GridCell';
|
|
4
4
|
import { GridColumnHeaders } from '../components/GridColumnHeaders';
|
|
5
5
|
import { GridColumnMenu } from '../components/menu/columnMenu/GridColumnMenu';
|
|
@@ -15,6 +15,7 @@ export const DATA_GRID_DEFAULT_SLOTS_COMPONENTS = _extends({}, materialSlots, {
|
|
|
15
15
|
ColumnMenu: GridColumnMenu,
|
|
16
16
|
ColumnHeaders: GridColumnHeaders,
|
|
17
17
|
Footer: GridFooter,
|
|
18
|
+
FooterRowCount: GridRowCount,
|
|
18
19
|
Toolbar: null,
|
|
19
20
|
PreferencesPanel: GridPreferencesPanel,
|
|
20
21
|
LoadingOverlay: GridLoadingOverlay,
|
|
@@ -255,7 +255,7 @@ export const createColumnsState = ({
|
|
|
255
255
|
|
|
256
256
|
// If the column type has changed - merge the existing state with the default column type definition
|
|
257
257
|
if (existingState && existingState.type !== newColumn.type) {
|
|
258
|
-
existingState = _extends({},
|
|
258
|
+
existingState = _extends({}, getDefaultColTypeDef(columnTypes, newColumn.type), {
|
|
259
259
|
field
|
|
260
260
|
});
|
|
261
261
|
}
|
|
@@ -124,17 +124,23 @@ export function useGridColumns(apiRef, props) {
|
|
|
124
124
|
}, [apiRef, logger, setGridColumnsState, getColumnIndexRelativeToVisibleColumns]);
|
|
125
125
|
const setColumnWidth = React.useCallback((field, width) => {
|
|
126
126
|
logger.debug(`Updating column ${field} width to ${width}`);
|
|
127
|
-
const
|
|
127
|
+
const columnsState = gridColumnsStateSelector(apiRef.current.state);
|
|
128
|
+
const column = columnsState.lookup[field];
|
|
128
129
|
const newColumn = _extends({}, column, {
|
|
129
|
-
width
|
|
130
|
+
width,
|
|
131
|
+
hasBeenResized: true
|
|
130
132
|
});
|
|
131
|
-
|
|
133
|
+
setGridColumnsState(hydrateColumnsWidth(_extends({}, columnsState, {
|
|
134
|
+
lookup: _extends({}, columnsState.lookup, {
|
|
135
|
+
[field]: newColumn
|
|
136
|
+
})
|
|
137
|
+
}), apiRef.current.getRootDimensions()?.viewportInnerSize.width ?? 0));
|
|
132
138
|
apiRef.current.publishEvent('columnWidthChange', {
|
|
133
139
|
element: apiRef.current.getColumnHeaderElement(field),
|
|
134
140
|
colDef: newColumn,
|
|
135
141
|
width
|
|
136
142
|
});
|
|
137
|
-
}, [apiRef, logger]);
|
|
143
|
+
}, [apiRef, logger, setGridColumnsState]);
|
|
138
144
|
const columnApi = {
|
|
139
145
|
getColumn,
|
|
140
146
|
getAllColumns,
|
|
@@ -126,7 +126,7 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
126
126
|
apiRef.current.setColumnGroupHeaderFocus(field, depth, event);
|
|
127
127
|
}, [apiRef, logger]);
|
|
128
128
|
const getRowIdFromIndex = React.useCallback(rowIndex => {
|
|
129
|
-
return currentPageRows
|
|
129
|
+
return currentPageRows[rowIndex]?.id;
|
|
130
130
|
}, [currentPageRows]);
|
|
131
131
|
const handleColumnHeaderKeyDown = React.useCallback((params, event) => {
|
|
132
132
|
const headerTitleNode = event.currentTarget.querySelector(`.${gridClasses.columnHeaderTitleContainerContent}`);
|
|
@@ -142,7 +142,7 @@ export const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
142
142
|
}
|
|
143
143
|
const viewportPageSize = apiRef.current.getViewportPageSize();
|
|
144
144
|
const colIndexBefore = params.field ? apiRef.current.getColumnIndex(params.field) : 0;
|
|
145
|
-
const firstRowIndexInPage = 0;
|
|
145
|
+
const firstRowIndexInPage = currentPageRows.length > 0 ? 0 : null;
|
|
146
146
|
const lastRowIndexInPage = currentPageRows.length - 1;
|
|
147
147
|
const firstColIndex = 0;
|
|
148
148
|
const lastColIndex = gridVisibleColumnDefinitionsSelector(apiRef).length - 1;
|
|
@@ -277,5 +277,5 @@ export function calculatePinnedRowsHeight(apiRef) {
|
|
|
277
277
|
}
|
|
278
278
|
export function getMinimalContentHeight(apiRef, rowHeight) {
|
|
279
279
|
const densityFactor = gridDensityFactorSelector(apiRef);
|
|
280
|
-
return 2 * Math.floor(rowHeight * densityFactor)
|
|
280
|
+
return `var(--DataGrid-overlayHeight, ${2 * Math.floor(rowHeight * densityFactor)}px)`;
|
|
281
281
|
}
|
|
@@ -3,6 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
4
4
|
import { useGridLogger } from '../../utils/useGridLogger';
|
|
5
5
|
import { gridRowCountSelector, gridRowsLookupSelector, gridRowTreeSelector, gridRowGroupingNameSelector, gridRowTreeDepthsSelector, gridDataRowIdsSelector, gridRowsDataRowIdToIdLookupSelector, gridRowMaximumTreeDepthSelector } from './gridRowsSelector';
|
|
6
|
+
import { useTimeout } from '../../utils/useTimeout';
|
|
6
7
|
import { GridSignature, useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
|
|
7
8
|
import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
|
|
8
9
|
import { gridSortedRowIdsSelector } from '../sorting/gridSortingSelector';
|
|
@@ -38,7 +39,7 @@ export const useGridRows = (apiRef, props) => {
|
|
|
38
39
|
const logger = useGridLogger(apiRef, 'useGridRows');
|
|
39
40
|
const currentPage = useGridVisibleRows(apiRef, props);
|
|
40
41
|
const lastUpdateMs = React.useRef(Date.now());
|
|
41
|
-
const timeout =
|
|
42
|
+
const timeout = useTimeout();
|
|
42
43
|
const getRow = React.useCallback(id => {
|
|
43
44
|
const model = gridRowsLookupSelector(apiRef)[id];
|
|
44
45
|
if (model) {
|
|
@@ -73,7 +74,6 @@ export const useGridRows = (apiRef, props) => {
|
|
|
73
74
|
throttle
|
|
74
75
|
}) => {
|
|
75
76
|
const run = () => {
|
|
76
|
-
timeout.current = null;
|
|
77
77
|
lastUpdateMs.current = Date.now();
|
|
78
78
|
apiRef.current.setState(state => _extends({}, state, {
|
|
79
79
|
rows: getRowsStateFromCache({
|
|
@@ -87,10 +87,7 @@ export const useGridRows = (apiRef, props) => {
|
|
|
87
87
|
apiRef.current.publishEvent('rowsSet');
|
|
88
88
|
apiRef.current.forceUpdate();
|
|
89
89
|
};
|
|
90
|
-
|
|
91
|
-
clearTimeout(timeout.current);
|
|
92
|
-
timeout.current = null;
|
|
93
|
-
}
|
|
90
|
+
timeout.clear();
|
|
94
91
|
apiRef.current.caches.rows = cache;
|
|
95
92
|
if (!throttle) {
|
|
96
93
|
run();
|
|
@@ -98,11 +95,11 @@ export const useGridRows = (apiRef, props) => {
|
|
|
98
95
|
}
|
|
99
96
|
const throttleRemainingTimeMs = props.throttleRowsMs - (Date.now() - lastUpdateMs.current);
|
|
100
97
|
if (throttleRemainingTimeMs > 0) {
|
|
101
|
-
timeout.
|
|
98
|
+
timeout.start(throttleRemainingTimeMs, run);
|
|
102
99
|
return;
|
|
103
100
|
}
|
|
104
101
|
run();
|
|
105
|
-
}, [props.throttleRowsMs, props.rowCount, props.loading, apiRef]);
|
|
102
|
+
}, [props.throttleRowsMs, props.rowCount, props.loading, apiRef, timeout]);
|
|
106
103
|
|
|
107
104
|
/**
|
|
108
105
|
* API METHODS
|
|
@@ -391,17 +388,6 @@ export const useGridRows = (apiRef, props) => {
|
|
|
391
388
|
useGridApiMethod(apiRef, rowApi, 'public');
|
|
392
389
|
useGridApiMethod(apiRef, rowProApi, props.signature === GridSignature.DataGrid ? 'private' : 'public');
|
|
393
390
|
|
|
394
|
-
/**
|
|
395
|
-
* EFFECTS
|
|
396
|
-
*/
|
|
397
|
-
React.useEffect(() => {
|
|
398
|
-
return () => {
|
|
399
|
-
if (timeout.current !== null) {
|
|
400
|
-
clearTimeout(timeout.current);
|
|
401
|
-
}
|
|
402
|
-
};
|
|
403
|
-
}, []);
|
|
404
|
-
|
|
405
391
|
// The effect do not track any value defined synchronously during the 1st render by hooks called after `useGridRows`
|
|
406
392
|
// As a consequence, the state generated by the 1st run of this useEffect will always be equal to the initialization one
|
|
407
393
|
const isFirstRender = React.useRef(true);
|
package/modern/index.js
CHANGED
|
@@ -46,6 +46,7 @@ export { useGridEvents } from '../hooks/features/events/useGridEvents';
|
|
|
46
46
|
export { useGridDimensions } from '../hooks/features/dimensions/useGridDimensions';
|
|
47
47
|
export { useGridStatePersistence } from '../hooks/features/statePersistence/useGridStatePersistence';
|
|
48
48
|
export { useGridVirtualScroller, getRenderableIndexes } from '../hooks/features/virtualization/useGridVirtualScroller';
|
|
49
|
+
export { useTimeout } from '../hooks/utils/useTimeout';
|
|
49
50
|
export { useGridVisibleRows, getVisibleRows } from '../hooks/utils/useGridVisibleRows';
|
|
50
51
|
export { useGridInitializeState } from '../hooks/utils/useGridInitializeState';
|
|
51
52
|
export { getColumnsToExport, defaultGetRowsToExport } from '../hooks/features/export/utils';
|
package/modern/locales/skSK.js
CHANGED
|
@@ -45,7 +45,7 @@ const skSKGrid = {
|
|
|
45
45
|
columnsPanelHideAllButton: 'Skryť všetko',
|
|
46
46
|
// Filter panel text
|
|
47
47
|
filterPanelAddFilter: 'Pridať filter',
|
|
48
|
-
|
|
48
|
+
filterPanelRemoveAll: 'Odstrániť všetky',
|
|
49
49
|
filterPanelDeleteIconLabel: 'Odstrániť',
|
|
50
50
|
filterPanelLogicOperator: 'Logický operátor',
|
|
51
51
|
filterPanelOperator: 'Operátory',
|
|
@@ -68,34 +68,32 @@ const skSKGrid = {
|
|
|
68
68
|
filterOperatorIsEmpty: 'je prázdny',
|
|
69
69
|
filterOperatorIsNotEmpty: 'nie je prázdny',
|
|
70
70
|
filterOperatorIsAnyOf: 'je jeden z',
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
71
|
+
'filterOperator=': '=',
|
|
72
|
+
'filterOperator!=': '!=',
|
|
73
|
+
'filterOperator>': '>',
|
|
74
|
+
'filterOperator>=': '>=',
|
|
75
|
+
'filterOperator<': '<',
|
|
76
|
+
'filterOperator<=': '<=',
|
|
78
77
|
// Header filter operators text
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
78
|
+
headerFilterOperatorContains: 'Obsahuje',
|
|
79
|
+
headerFilterOperatorEquals: 'Rovná sa',
|
|
80
|
+
headerFilterOperatorStartsWith: 'Začína s',
|
|
81
|
+
headerFilterOperatorEndsWith: 'Končí na',
|
|
82
|
+
headerFilterOperatorIs: 'Je',
|
|
83
|
+
headerFilterOperatorNot: 'Nie je',
|
|
84
|
+
headerFilterOperatorAfter: 'Je po',
|
|
85
|
+
headerFilterOperatorOnOrAfter: 'Je na alebo po',
|
|
86
|
+
headerFilterOperatorBefore: 'Je pred',
|
|
87
|
+
headerFilterOperatorOnOrBefore: 'Je na alebo skôr',
|
|
88
|
+
headerFilterOperatorIsEmpty: 'Je prázdny',
|
|
89
|
+
headerFilterOperatorIsNotEmpty: 'Nie je prázdny',
|
|
90
|
+
headerFilterOperatorIsAnyOf: 'Je jeden z',
|
|
91
|
+
'headerFilterOperator=': 'Rovná sa',
|
|
92
|
+
'headerFilterOperator!=': 'Nerovná sa',
|
|
93
|
+
'headerFilterOperator>': 'Väčší ako',
|
|
94
|
+
'headerFilterOperator>=': 'Väčší ako alebo rovný',
|
|
95
|
+
'headerFilterOperator<': 'Menší ako',
|
|
96
|
+
'headerFilterOperator<=': 'Menší ako alebo rovný',
|
|
99
97
|
// Filter values text
|
|
100
98
|
filterValueAny: 'akýkoľvek',
|
|
101
99
|
filterValueTrue: 'áno',
|
|
@@ -103,7 +101,7 @@ const skSKGrid = {
|
|
|
103
101
|
// Column menu text
|
|
104
102
|
columnMenuLabel: 'Menu',
|
|
105
103
|
columnMenuShowColumns: 'Zobraziť stĺpce',
|
|
106
|
-
|
|
104
|
+
columnMenuManageColumns: 'Spravovať stĺpce',
|
|
107
105
|
columnMenuFilter: 'Filter',
|
|
108
106
|
columnMenuHideColumn: 'Skryť',
|
|
109
107
|
columnMenuUnsort: 'Zrušiť filtre',
|
|
@@ -3,7 +3,7 @@ import { buildWarning } from './warning';
|
|
|
3
3
|
const cacheContainer = {
|
|
4
4
|
cache: new WeakMap()
|
|
5
5
|
};
|
|
6
|
-
const missingInstanceIdWarning = buildWarning(['MUI: A selector was called without passing the instance ID, which may impact the performance of the grid.', 'To fix, call it with `apiRef`, e.g. `mySelector(apiRef)`, or pass the instance ID explicitly, e.g `mySelector(state, apiRef.current.instanceId)`.']);
|
|
6
|
+
const missingInstanceIdWarning = buildWarning(['MUI: A selector was called without passing the instance ID, which may impact the performance of the grid.', 'To fix, call it with `apiRef`, e.g. `mySelector(apiRef)`, or pass the instance ID explicitly, e.g. `mySelector(state, apiRef.current.instanceId)`.']);
|
|
7
7
|
function checkIsAPIRef(value) {
|
|
8
8
|
return 'current' in value && 'instanceId' in value.current;
|
|
9
9
|
}
|
|
@@ -13,7 +13,6 @@ var _gridRowsSelector = require("../hooks/features/rows/gridRowsSelector");
|
|
|
13
13
|
var _gridRowSelectionSelector = require("../hooks/features/rowSelection/gridRowSelectionSelector");
|
|
14
14
|
var _gridFilterSelector = require("../hooks/features/filter/gridFilterSelector");
|
|
15
15
|
var _useGridApiContext = require("../hooks/utils/useGridApiContext");
|
|
16
|
-
var _GridRowCount = require("./GridRowCount");
|
|
17
16
|
var _GridSelectedRowCount = require("./GridSelectedRowCount");
|
|
18
17
|
var _GridFooterContainer = require("./containers/GridFooterContainer");
|
|
19
18
|
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
|
|
@@ -29,10 +28,10 @@ const GridFooter = /*#__PURE__*/React.forwardRef(function GridFooter(props, ref)
|
|
|
29
28
|
const selectedRowCountElement = !rootProps.hideFooterSelectedRowCount && selectedRowCount > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridSelectedRowCount.GridSelectedRowCount, {
|
|
30
29
|
selectedRowCount: selectedRowCount
|
|
31
30
|
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {});
|
|
32
|
-
const rowCountElement = !rootProps.hideFooterRowCount && !rootProps.pagination ? /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
31
|
+
const rowCountElement = !rootProps.hideFooterRowCount && !rootProps.pagination ? /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.footerRowCount, (0, _extends2.default)({}, rootProps.slotProps?.footerRowCount, {
|
|
33
32
|
rowCount: totalTopLevelRowCount,
|
|
34
33
|
visibleRowCount: visibleTopLevelRowCount
|
|
35
|
-
}) : null;
|
|
34
|
+
})) : null;
|
|
36
35
|
const paginationElement = rootProps.pagination && !rootProps.hideFooterPagination && rootProps.slots.pagination && /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.pagination, (0, _extends2.default)({}, rootProps.slotProps?.pagination));
|
|
37
36
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridFooterContainer.GridFooterContainer, (0, _extends2.default)({
|
|
38
37
|
ref: ref
|
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.GridOverlays = GridOverlays;
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
10
11
|
var _system = require("@mui/system");
|
|
11
12
|
var _utils = require("@mui/utils");
|
|
12
13
|
var _clsx = _interopRequireDefault(require("clsx"));
|
|
@@ -23,8 +24,11 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
23
24
|
const GridOverlayWrapperRoot = (0, _system.styled)('div', {
|
|
24
25
|
name: 'MuiDataGrid',
|
|
25
26
|
slot: 'OverlayWrapper',
|
|
27
|
+
shouldForwardProp: prop => prop !== 'overlayType',
|
|
26
28
|
overridesResolver: (props, styles) => styles.overlayWrapper
|
|
27
|
-
})({
|
|
29
|
+
})(({
|
|
30
|
+
overlayType
|
|
31
|
+
}) => ({
|
|
28
32
|
position: 'sticky',
|
|
29
33
|
// To stay in place while scrolling
|
|
30
34
|
top: 0,
|
|
@@ -33,12 +37,14 @@ const GridOverlayWrapperRoot = (0, _system.styled)('div', {
|
|
|
33
37
|
// To stay above the content instead of shifting it down
|
|
34
38
|
height: 0,
|
|
35
39
|
// To stay above the content instead of shifting it down
|
|
36
|
-
zIndex:
|
|
37
|
-
|
|
40
|
+
zIndex: overlayType === 'loadingOverlay' ? 5 // Should be above pinned columns, pinned rows, and detail panel
|
|
41
|
+
: 4 // Should be above pinned columns and detail panel
|
|
42
|
+
}));
|
|
38
43
|
|
|
39
44
|
const GridOverlayWrapperInner = (0, _system.styled)('div', {
|
|
40
45
|
name: 'MuiDataGrid',
|
|
41
46
|
slot: 'OverlayWrapperInner',
|
|
47
|
+
shouldForwardProp: prop => prop !== 'overlayType',
|
|
42
48
|
overridesResolver: (props, styles) => styles.overlayWrapperInner
|
|
43
49
|
})({});
|
|
44
50
|
const useUtilityClasses = ownerState => {
|
|
@@ -74,6 +80,7 @@ function GridOverlayWrapper(props) {
|
|
|
74
80
|
}
|
|
75
81
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridOverlayWrapperRoot, {
|
|
76
82
|
className: (0, _clsx.default)(classes.root),
|
|
83
|
+
overlayType: props.overlayType,
|
|
77
84
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(GridOverlayWrapperInner, (0, _extends2.default)({
|
|
78
85
|
className: (0, _clsx.default)(classes.inner),
|
|
79
86
|
style: {
|
|
@@ -83,6 +90,13 @@ function GridOverlayWrapper(props) {
|
|
|
83
90
|
}, props))
|
|
84
91
|
});
|
|
85
92
|
}
|
|
93
|
+
process.env.NODE_ENV !== "production" ? GridOverlayWrapper.propTypes = {
|
|
94
|
+
// ----------------------------- Warning --------------------------------
|
|
95
|
+
// | These PropTypes are generated from the TypeScript type definitions |
|
|
96
|
+
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
97
|
+
// ----------------------------------------------------------------------
|
|
98
|
+
overlayType: _propTypes.default.string.isRequired
|
|
99
|
+
} : void 0;
|
|
86
100
|
function GridOverlays() {
|
|
87
101
|
const apiRef = (0, _useGridApiContext.useGridApiContext)();
|
|
88
102
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
@@ -92,19 +106,24 @@ function GridOverlays() {
|
|
|
92
106
|
const showNoRowsOverlay = !loading && totalRowCount === 0;
|
|
93
107
|
const showNoResultsOverlay = !loading && totalRowCount > 0 && visibleRowCount === 0;
|
|
94
108
|
let overlay = null;
|
|
109
|
+
let overlayType = '';
|
|
95
110
|
if (showNoRowsOverlay) {
|
|
96
111
|
overlay = /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.noRowsOverlay, (0, _extends2.default)({}, rootProps.slotProps?.noRowsOverlay));
|
|
112
|
+
overlayType = 'noRowsOverlay';
|
|
97
113
|
}
|
|
98
114
|
if (showNoResultsOverlay) {
|
|
99
115
|
overlay = /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.noResultsOverlay, (0, _extends2.default)({}, rootProps.slotProps?.noResultsOverlay));
|
|
116
|
+
overlayType = 'noResultsOverlay';
|
|
100
117
|
}
|
|
101
118
|
if (loading) {
|
|
102
119
|
overlay = /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.loadingOverlay, (0, _extends2.default)({}, rootProps.slotProps?.loadingOverlay));
|
|
120
|
+
overlayType = 'loadingOverlay';
|
|
103
121
|
}
|
|
104
122
|
if (overlay === null) {
|
|
105
123
|
return null;
|
|
106
124
|
}
|
|
107
125
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridOverlayWrapper, {
|
|
126
|
+
overlayType: overlayType,
|
|
108
127
|
children: overlay
|
|
109
128
|
});
|
|
110
129
|
}
|
|
@@ -355,7 +355,10 @@ const GridRootStyles = (0, _styles.styled)('div', {
|
|
|
355
355
|
'&.Mui-selected': {
|
|
356
356
|
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : (0, _styles.alpha)(theme.palette.primary.main, theme.palette.action.selectedOpacity),
|
|
357
357
|
'&:hover, &.Mui-hovered': {
|
|
358
|
-
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} /
|
|
358
|
+
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / calc(
|
|
359
|
+
${theme.vars.palette.action.selectedOpacity} +
|
|
360
|
+
${theme.vars.palette.action.hoverOpacity}
|
|
361
|
+
))` : (0, _styles.alpha)(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),
|
|
359
362
|
// Reset on touch devices, it doesn't add specificity
|
|
360
363
|
'@media (hover: none)': {
|
|
361
364
|
backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.selectedOpacity})` : (0, _styles.alpha)(theme.palette.primary.main, theme.palette.action.selectedOpacity)
|
|
@@ -21,6 +21,7 @@ const DATA_GRID_DEFAULT_SLOTS_COMPONENTS = (0, _extends2.default)({}, _material.
|
|
|
21
21
|
ColumnMenu: _GridColumnMenu.GridColumnMenu,
|
|
22
22
|
ColumnHeaders: _GridColumnHeaders.GridColumnHeaders,
|
|
23
23
|
Footer: _components.GridFooter,
|
|
24
|
+
FooterRowCount: _components.GridRowCount,
|
|
24
25
|
Toolbar: null,
|
|
25
26
|
PreferencesPanel: _components.GridPreferencesPanel,
|
|
26
27
|
LoadingOverlay: _components.GridLoadingOverlay,
|
|
@@ -271,7 +271,7 @@ const createColumnsState = ({
|
|
|
271
271
|
|
|
272
272
|
// If the column type has changed - merge the existing state with the default column type definition
|
|
273
273
|
if (existingState && existingState.type !== newColumn.type) {
|
|
274
|
-
existingState = (0, _extends2.default)({},
|
|
274
|
+
existingState = (0, _extends2.default)({}, getDefaultColTypeDef(columnTypes, newColumn.type), {
|
|
275
275
|
field
|
|
276
276
|
});
|
|
277
277
|
}
|
|
@@ -135,17 +135,23 @@ function useGridColumns(apiRef, props) {
|
|
|
135
135
|
}, [apiRef, logger, setGridColumnsState, getColumnIndexRelativeToVisibleColumns]);
|
|
136
136
|
const setColumnWidth = React.useCallback((field, width) => {
|
|
137
137
|
logger.debug(`Updating column ${field} width to ${width}`);
|
|
138
|
-
const
|
|
138
|
+
const columnsState = (0, _gridColumnsSelector.gridColumnsStateSelector)(apiRef.current.state);
|
|
139
|
+
const column = columnsState.lookup[field];
|
|
139
140
|
const newColumn = (0, _extends2.default)({}, column, {
|
|
140
|
-
width
|
|
141
|
+
width,
|
|
142
|
+
hasBeenResized: true
|
|
141
143
|
});
|
|
142
|
-
|
|
144
|
+
setGridColumnsState((0, _gridColumnsUtils.hydrateColumnsWidth)((0, _extends2.default)({}, columnsState, {
|
|
145
|
+
lookup: (0, _extends2.default)({}, columnsState.lookup, {
|
|
146
|
+
[field]: newColumn
|
|
147
|
+
})
|
|
148
|
+
}), apiRef.current.getRootDimensions()?.viewportInnerSize.width ?? 0));
|
|
143
149
|
apiRef.current.publishEvent('columnWidthChange', {
|
|
144
150
|
element: apiRef.current.getColumnHeaderElement(field),
|
|
145
151
|
colDef: newColumn,
|
|
146
152
|
width
|
|
147
153
|
});
|
|
148
|
-
}, [apiRef, logger]);
|
|
154
|
+
}, [apiRef, logger, setGridColumnsState]);
|
|
149
155
|
const columnApi = {
|
|
150
156
|
getColumn,
|
|
151
157
|
getAllColumns,
|
|
@@ -134,7 +134,7 @@ const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
134
134
|
apiRef.current.setColumnGroupHeaderFocus(field, depth, event);
|
|
135
135
|
}, [apiRef, logger]);
|
|
136
136
|
const getRowIdFromIndex = React.useCallback(rowIndex => {
|
|
137
|
-
return currentPageRows
|
|
137
|
+
return currentPageRows[rowIndex]?.id;
|
|
138
138
|
}, [currentPageRows]);
|
|
139
139
|
const handleColumnHeaderKeyDown = React.useCallback((params, event) => {
|
|
140
140
|
const headerTitleNode = event.currentTarget.querySelector(`.${_gridClasses.gridClasses.columnHeaderTitleContainerContent}`);
|
|
@@ -150,7 +150,7 @@ const useGridKeyboardNavigation = (apiRef, props) => {
|
|
|
150
150
|
}
|
|
151
151
|
const viewportPageSize = apiRef.current.getViewportPageSize();
|
|
152
152
|
const colIndexBefore = params.field ? apiRef.current.getColumnIndex(params.field) : 0;
|
|
153
|
-
const firstRowIndexInPage = 0;
|
|
153
|
+
const firstRowIndexInPage = currentPageRows.length > 0 ? 0 : null;
|
|
154
154
|
const lastRowIndexInPage = currentPageRows.length - 1;
|
|
155
155
|
const firstColIndex = 0;
|
|
156
156
|
const lastColIndex = (0, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector)(apiRef).length - 1;
|
|
@@ -299,5 +299,5 @@ function calculatePinnedRowsHeight(apiRef) {
|
|
|
299
299
|
}
|
|
300
300
|
function getMinimalContentHeight(apiRef, rowHeight) {
|
|
301
301
|
const densityFactor = (0, _densitySelector.gridDensityFactorSelector)(apiRef);
|
|
302
|
-
return 2 * Math.floor(rowHeight * densityFactor)
|
|
302
|
+
return `var(--DataGrid-overlayHeight, ${2 * Math.floor(rowHeight * densityFactor)}px)`;
|
|
303
303
|
}
|