@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.
Files changed (61) hide show
  1. package/CHANGELOG.md +184 -47
  2. package/components/GridFooter.js +4 -5
  3. package/components/GridRowCount.d.ts +3 -0
  4. package/components/base/GridOverlays.js +22 -3
  5. package/components/containers/GridRootStyles.js +4 -1
  6. package/constants/defaultGridSlotsComponents.js +2 -1
  7. package/hooks/features/columns/gridColumnsUtils.js +1 -1
  8. package/hooks/features/columns/useGridColumns.js +11 -4
  9. package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -2
  10. package/hooks/features/rows/gridRowsUtils.d.ts +1 -1
  11. package/hooks/features/rows/gridRowsUtils.js +1 -1
  12. package/hooks/features/rows/useGridRows.js +5 -19
  13. package/hooks/features/virtualization/useGridVirtualScroller.d.ts +1 -5
  14. package/index.js +1 -1
  15. package/internals/index.d.ts +1 -0
  16. package/internals/index.js +1 -0
  17. package/legacy/components/GridFooter.js +4 -5
  18. package/legacy/components/base/GridOverlays.js +34 -10
  19. package/legacy/components/containers/GridRootStyles.js +1 -1
  20. package/legacy/constants/defaultGridSlotsComponents.js +2 -1
  21. package/legacy/hooks/features/columns/gridColumnsUtils.js +1 -1
  22. package/legacy/hooks/features/columns/useGridColumns.js +9 -4
  23. package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +3 -2
  24. package/legacy/hooks/features/rows/gridRowsUtils.js +1 -1
  25. package/legacy/hooks/features/rows/useGridRows.js +5 -19
  26. package/legacy/index.js +1 -1
  27. package/legacy/internals/index.js +1 -0
  28. package/legacy/locales/skSK.js +27 -29
  29. package/legacy/utils/createSelector.js +1 -1
  30. package/locales/skSK.js +27 -29
  31. package/models/colDef/gridColDef.d.ts +2 -4
  32. package/models/gridSlotsComponent.d.ts +5 -0
  33. package/models/gridSlotsComponentsProps.d.ts +4 -0
  34. package/modern/components/GridFooter.js +2 -3
  35. package/modern/components/base/GridOverlays.js +22 -3
  36. package/modern/components/containers/GridRootStyles.js +4 -1
  37. package/modern/constants/defaultGridSlotsComponents.js +2 -1
  38. package/modern/hooks/features/columns/gridColumnsUtils.js +1 -1
  39. package/modern/hooks/features/columns/useGridColumns.js +10 -4
  40. package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -2
  41. package/modern/hooks/features/rows/gridRowsUtils.js +1 -1
  42. package/modern/hooks/features/rows/useGridRows.js +5 -19
  43. package/modern/index.js +1 -1
  44. package/modern/internals/index.js +1 -0
  45. package/modern/locales/skSK.js +27 -29
  46. package/modern/utils/createSelector.js +1 -1
  47. package/node/components/GridFooter.js +2 -3
  48. package/node/components/base/GridOverlays.js +22 -3
  49. package/node/components/containers/GridRootStyles.js +4 -1
  50. package/node/constants/defaultGridSlotsComponents.js +1 -0
  51. package/node/hooks/features/columns/gridColumnsUtils.js +1 -1
  52. package/node/hooks/features/columns/useGridColumns.js +10 -4
  53. package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +2 -2
  54. package/node/hooks/features/rows/gridRowsUtils.js +1 -1
  55. package/node/hooks/features/rows/useGridRows.js +5 -19
  56. package/node/index.js +1 -1
  57. package/node/internals/index.js +8 -0
  58. package/node/locales/skSK.js +27 -29
  59. package/node/utils/createSelector.js +1 -1
  60. package/package.json +3 -3
  61. 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(GridRowCount, {
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: 4 // Should be above pinned columns, pinned rows and detail panel
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} / ${theme.vars.palette.action.selectedOpacity + theme.palette.action.hoverOpacity})` : alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),
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({}, existingState, getDefaultColTypeDef(columnTypes, newColumn.type), {
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 column = apiRef.current.getColumn(field);
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
- apiRef.current.updateColumns([newColumn]);
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?.[rowIndex].id;
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 = React.useRef(null);
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
- if (timeout.current) {
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.current = setTimeout(run, throttleRemainingTimeMs);
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
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v6.12.0
2
+ * @mui/x-data-grid v6.13.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -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';
@@ -45,7 +45,7 @@ const skSKGrid = {
45
45
  columnsPanelHideAllButton: 'Skryť všetko',
46
46
  // Filter panel text
47
47
  filterPanelAddFilter: 'Pridať filter',
48
- // filterPanelRemoveAll: 'Remove all',
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
- // 'filterOperator=': '=',
72
- // 'filterOperator!=': '!=',
73
- // 'filterOperator>': '>',
74
- // 'filterOperator>=': '>=',
75
- // 'filterOperator<': '<',
76
- // 'filterOperator<=': '<=',
77
-
71
+ 'filterOperator=': '=',
72
+ 'filterOperator!=': '!=',
73
+ 'filterOperator>': '>',
74
+ 'filterOperator>=': '>=',
75
+ 'filterOperator<': '<',
76
+ 'filterOperator<=': '<=',
78
77
  // Header filter operators text
79
- // headerFilterOperatorContains: 'Contains',
80
- // headerFilterOperatorEquals: 'Equals',
81
- // headerFilterOperatorStartsWith: 'Starts with',
82
- // headerFilterOperatorEndsWith: 'Ends with',
83
- // headerFilterOperatorIs: 'Is',
84
- // headerFilterOperatorNot: 'Is not',
85
- // headerFilterOperatorAfter: 'Is after',
86
- // headerFilterOperatorOnOrAfter: 'Is on or after',
87
- // headerFilterOperatorBefore: 'Is before',
88
- // headerFilterOperatorOnOrBefore: 'Is on or before',
89
- // headerFilterOperatorIsEmpty: 'Is empty',
90
- // headerFilterOperatorIsNotEmpty: 'Is not empty',
91
- // headerFilterOperatorIsAnyOf: 'Is any of',
92
- // 'headerFilterOperator=': 'Equals',
93
- // 'headerFilterOperator!=': 'Not equals',
94
- // 'headerFilterOperator>': 'Greater than',
95
- // 'headerFilterOperator>=': 'Greater than or equal to',
96
- // 'headerFilterOperator<': 'Less than',
97
- // 'headerFilterOperator<=': 'Less than or equal to',
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
- // columnMenuManageColumns: 'Manage columns',
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)(_GridRowCount.GridRowCount, {
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: 4 // Should be above pinned columns, pinned rows and detail panel
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} / ${theme.vars.palette.action.selectedOpacity + theme.palette.action.hoverOpacity})` : (0, _styles.alpha)(theme.palette.primary.main, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),
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)({}, existingState, getDefaultColTypeDef(columnTypes, newColumn.type), {
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 column = apiRef.current.getColumn(field);
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
- apiRef.current.updateColumns([newColumn]);
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?.[rowIndex].id;
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
  }