@mui/x-data-grid 8.27.0 → 8.27.1

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 (66) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/DataGrid/index.js +0 -1
  3. package/components/GridColumnSortButton.js +2 -2
  4. package/components/GridScrollArea.js +2 -2
  5. package/components/GridScrollShadows.js +2 -2
  6. package/components/GridSkeletonLoadingOverlay.js +2 -2
  7. package/components/base/GridOverlays.js +3 -3
  8. package/components/columnHeaders/GridColumnHeaderItem.js +31 -1
  9. package/components/columnHeaders/GridColumnHeaderTitle.js +2 -2
  10. package/components/columnHeaders/GridIconButtonContainer.js +2 -2
  11. package/components/containers/GridRootStyles.js +23 -217
  12. package/components/menu/columnMenu/GridColumnMenu.d.ts +2 -2
  13. package/components/menu/columnMenu/GridColumnMenu.js +2 -0
  14. package/components/menu/columnMenu/GridColumnMenuProps.d.ts +9 -1
  15. package/components/menu/columnMenu/index.d.ts +1 -1
  16. package/components/menu/columnMenu/index.js +0 -12
  17. package/components/toolbar/GridToolbarQuickFilter.js +4 -4
  18. package/components/toolbarV8/GridToolbar.js +3 -3
  19. package/components/toolbarV8/Toolbar.d.ts +1 -1
  20. package/components/toolbarV8/Toolbar.js +2 -2
  21. package/components/virtualization/GridBottomContainer.js +2 -2
  22. package/components/virtualization/GridMainContainer.js +3 -3
  23. package/components/virtualization/GridTopContainer.js +2 -2
  24. package/components/virtualization/GridVirtualScrollbar.d.ts +1 -1
  25. package/components/virtualization/GridVirtualScrollbar.js +5 -5
  26. package/components/virtualization/GridVirtualScroller.js +2 -2
  27. package/components/virtualization/GridVirtualScrollerFiller.js +6 -6
  28. package/esm/DataGrid/index.js +0 -1
  29. package/esm/components/GridColumnSortButton.js +1 -1
  30. package/esm/components/GridScrollArea.js +1 -1
  31. package/esm/components/GridScrollShadows.js +1 -1
  32. package/esm/components/GridSkeletonLoadingOverlay.js +1 -1
  33. package/esm/components/base/GridOverlays.js +1 -1
  34. package/esm/components/columnHeaders/GridColumnHeaderItem.js +31 -1
  35. package/esm/components/columnHeaders/GridColumnHeaderTitle.js +1 -1
  36. package/esm/components/columnHeaders/GridIconButtonContainer.js +1 -1
  37. package/esm/components/containers/GridRootStyles.js +23 -217
  38. package/esm/components/menu/columnMenu/GridColumnMenu.d.ts +2 -2
  39. package/esm/components/menu/columnMenu/GridColumnMenu.js +2 -0
  40. package/esm/components/menu/columnMenu/GridColumnMenuProps.d.ts +9 -1
  41. package/esm/components/menu/columnMenu/index.d.ts +1 -1
  42. package/esm/components/menu/columnMenu/index.js +0 -1
  43. package/esm/components/toolbar/GridToolbarQuickFilter.js +1 -1
  44. package/esm/components/toolbarV8/GridToolbar.js +1 -1
  45. package/esm/components/toolbarV8/Toolbar.d.ts +1 -1
  46. package/esm/components/toolbarV8/Toolbar.js +1 -1
  47. package/esm/components/virtualization/GridBottomContainer.js +1 -1
  48. package/esm/components/virtualization/GridMainContainer.js +1 -1
  49. package/esm/components/virtualization/GridTopContainer.js +1 -1
  50. package/esm/components/virtualization/GridVirtualScrollbar.d.ts +1 -1
  51. package/esm/components/virtualization/GridVirtualScrollbar.js +1 -1
  52. package/esm/components/virtualization/GridVirtualScroller.js +1 -1
  53. package/esm/components/virtualization/GridVirtualScrollerFiller.js +1 -1
  54. package/esm/hooks/features/columnMenu/getColumnMenuItemKeys.d.ts +17 -0
  55. package/esm/hooks/features/columnMenu/getColumnMenuItemKeys.js +36 -0
  56. package/esm/hooks/features/columnMenu/useGridColumnMenuSlots.js +11 -16
  57. package/esm/index.js +1 -1
  58. package/esm/internals/index.d.ts +1 -0
  59. package/hooks/features/columnMenu/getColumnMenuItemKeys.d.ts +17 -0
  60. package/hooks/features/columnMenu/getColumnMenuItemKeys.js +43 -0
  61. package/hooks/features/columnMenu/useGridColumnMenuSlots.js +11 -16
  62. package/index.js +1 -1
  63. package/internals/index.d.ts +1 -0
  64. package/package.json +1 -1
  65. package/esm/index.css +0 -5
  66. package/index.css +0 -5
@@ -87,6 +87,8 @@ const GridColumnMenu = forwardRef(function GridColumnMenu(props, ref) {
87
87
  }));
88
88
  });
89
89
  if (process.env.NODE_ENV !== "production") GridColumnMenu.displayName = "GridColumnMenu";
90
+ GridColumnMenu.defaultSlots = GRID_COLUMN_MENU_SLOTS;
91
+ GridColumnMenu.defaultSlotProps = GRID_COLUMN_MENU_SLOT_PROPS;
90
92
  process.env.NODE_ENV !== "production" ? GridColumnMenu.propTypes = {
91
93
  // ----------------------------- Warning --------------------------------
92
94
  // | These PropTypes are generated from the TypeScript type definitions |
@@ -9,4 +9,12 @@ export interface GridColumnMenuContainerProps extends React.HTMLAttributes<HTMLU
9
9
  labelledby?: string;
10
10
  }
11
11
  export interface GridGenericColumnMenuProps extends GridColumnMenuRootProps, GridColumnMenuContainerProps {}
12
- export interface GridColumnMenuProps extends Omit<GridGenericColumnMenuProps, 'defaultSlots' | 'defaultSlotProps'> {}
12
+ export interface GridColumnMenuProps extends Omit<GridGenericColumnMenuProps, 'defaultSlots' | 'defaultSlotProps'> {}
13
+ /**
14
+ * Type for column menu components with static defaultSlots and defaultSlotProps.
15
+ * Used by GridColumnMenu, GridProColumnMenu, and GridPremiumColumnMenu.
16
+ */
17
+ export type GridColumnMenuComponent = React.ForwardRefExoticComponent<GridColumnMenuProps & React.RefAttributes<HTMLUListElement>> & {
18
+ defaultSlots: GridColumnMenuRootProps['defaultSlots'];
19
+ defaultSlotProps: GridColumnMenuRootProps['defaultSlotProps'];
20
+ };
@@ -1,5 +1,5 @@
1
1
  export * from "./GridColumnHeaderMenu.js";
2
- export * from "./GridColumnMenuProps.js";
2
+ export type { GridColumnMenuContainerProps, GridGenericColumnMenuProps, GridColumnMenuProps } from "./GridColumnMenuProps.js";
3
3
  export * from "./GridColumnMenuItemProps.js";
4
4
  export * from "./GridColumnMenuContainer.js";
5
5
  export { GridGenericColumnMenu } from "./GridColumnMenu.js";
@@ -1,6 +1,5 @@
1
1
  // shared modules
2
2
  export * from "./GridColumnHeaderMenu.js";
3
- export * from "./GridColumnMenuProps.js";
4
3
  export * from "./GridColumnMenuItemProps.js";
5
4
  export * from "./GridColumnMenuContainer.js";
6
5
  export { GridGenericColumnMenu } from "./GridColumnMenu.js";
@@ -4,7 +4,7 @@ const _excluded = ["quickFilterParser", "quickFilterFormatter", "debounceMs", "c
4
4
  _excluded2 = ["ref", "slotProps"];
5
5
  import PropTypes from 'prop-types';
6
6
  import composeClasses from '@mui/utils/composeClasses';
7
- import { styled } from '@mui/system';
7
+ import { styled } from '@mui/material/styles';
8
8
  import clsx from 'clsx';
9
9
  import { getDataGridUtilityClass } from "../../constants/index.js";
10
10
  import { useGridApiContext } from "../../hooks/utils/useGridApiContext.js";
@@ -8,7 +8,7 @@ const _excluded = ["className"],
8
8
  import * as React from 'react';
9
9
  import PropTypes from 'prop-types';
10
10
  import useId from '@mui/utils/useId';
11
- import { styled } from '@mui/system';
11
+ import { styled } from '@mui/material/styles';
12
12
  import composeClasses from '@mui/utils/composeClasses';
13
13
  import { GridMenu } from "../menu/GridMenu.js";
14
14
  import { Toolbar } from "./Toolbar.js";
@@ -6,7 +6,7 @@ export type ToolbarProps = React.HTMLAttributes<HTMLDivElement> & {
6
6
  */
7
7
  render?: RenderProp<React.ComponentProps<typeof ToolbarRoot>>;
8
8
  };
9
- declare const ToolbarRoot: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/system").Theme>, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, {}>;
9
+ declare const ToolbarRoot: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, {}>;
10
10
  /**
11
11
  * The top level Toolbar component that provides context to child components.
12
12
  * It renders a styled `<div />` element.
@@ -5,7 +5,7 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWith
5
5
  const _excluded = ["render", "className"];
6
6
  import * as React from 'react';
7
7
  import PropTypes from 'prop-types';
8
- import { styled } from '@mui/system';
8
+ import { styled } from '@mui/material/styles';
9
9
  import composeClasses from '@mui/utils/composeClasses';
10
10
  import clsx from 'clsx';
11
11
  import { forwardRef } from '@mui/x-internals/forwardRef';
@@ -1,7 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import clsx from 'clsx';
4
- import { styled } from '@mui/system';
4
+ import { styled } from '@mui/material/styles';
5
5
  import composeClasses from '@mui/utils/composeClasses';
6
6
  import { gridClasses, getDataGridUtilityClass } from "../../constants/gridClasses.js";
7
7
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -2,7 +2,7 @@
2
2
 
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import * as React from 'react';
5
- import { styled } from '@mui/system';
5
+ import { styled } from '@mui/material/styles';
6
6
  import { forwardRef } from '@mui/x-internals/forwardRef';
7
7
  import { useGridRootProps } from "../../hooks/utils/useGridRootProps.js";
8
8
  import { useGridConfiguration } from "../../hooks/utils/useGridConfiguration.js";
@@ -1,7 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import clsx from 'clsx';
4
- import { styled } from '@mui/system';
4
+ import { styled } from '@mui/material/styles';
5
5
  import composeClasses from '@mui/utils/composeClasses';
6
6
  import { gridClasses, getDataGridUtilityClass } from "../../constants/gridClasses.js";
7
7
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -8,6 +8,6 @@ type GridVirtualScrollbarProps = {
8
8
  }>;
9
9
  };
10
10
  export declare const scrollbarSizeCssExpression = "calc(max(var(--DataGrid-scrollbarSize), 14px))";
11
- export declare const ScrollbarCorner: import("@emotion/styled").StyledComponent<Pick<import("@mui/system").MUIStyledCommonProps<import("@mui/system").Theme> & Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement> | keyof import("@mui/system").MUIStyledCommonProps<import("@mui/system").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/system").Theme>, {}, {}>;
11
+ export declare const ScrollbarCorner: import("@emotion/styled").StyledComponent<Pick<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme> & Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement> | keyof import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
12
12
  declare const GridVirtualScrollbar: React.ForwardRefExoticComponent<GridVirtualScrollbarProps> | React.ForwardRefExoticComponent<GridVirtualScrollbarProps & React.RefAttributes<HTMLDivElement>>;
13
13
  export { GridVirtualScrollbar };
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import * as React from 'react';
4
- import { styled } from '@mui/system';
4
+ import { styled } from '@mui/material/styles';
5
5
  import useEventCallback from '@mui/utils/useEventCallback';
6
6
  import useForkRef from '@mui/utils/useForkRef';
7
7
  import composeClasses from '@mui/utils/composeClasses';
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
- import { styled } from '@mui/system';
3
+ import { styled } from '@mui/material/styles';
4
4
  import composeClasses from '@mui/utils/composeClasses';
5
5
  import { gridHasBottomFillerSelector, gridHasScrollXSelector, gridHasScrollYSelector } from "../../hooks/features/dimensions/gridDimensionsSelectors.js";
6
6
  import { gridRowTreeSelector } from "../../hooks/features/rows/index.js";
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { styled } from '@mui/system';
2
+ import { styled } from '@mui/material/styles';
3
3
  import { fastMemo } from '@mui/x-internals/fastMemo';
4
4
  import { vars } from "../../constants/cssVariables.js";
5
5
  import { useGridSelector } from "../../hooks/utils/useGridSelector.js";
@@ -0,0 +1,17 @@
1
+ import type { RefObject } from '@mui/x-internals/types';
2
+ import type { GridPrivateApiCommunity } from "../../../models/api/gridApiCommunity.js";
3
+ import type { GridColDef } from "../../../models/colDef/gridColDef.js";
4
+ import type { GridColumnMenuSlotProps } from "./columnMenuInterfaces.js";
5
+ export interface GetColumnMenuItemKeysParams {
6
+ apiRef: RefObject<GridPrivateApiCommunity>;
7
+ colDef: GridColDef;
8
+ defaultSlots: Record<string, any>;
9
+ defaultSlotProps: Record<string, GridColumnMenuSlotProps>;
10
+ slots?: Record<string, any>;
11
+ slotProps?: Record<string, GridColumnMenuSlotProps>;
12
+ }
13
+ /**
14
+ * Returns the list of column menu item keys (sorted by `displayOrder`) that should be rendered for a given column.
15
+ * This is shared between the column header (to know if menu is empty) and the menu itself (to render items).
16
+ */
17
+ export declare function getColumnMenuItemKeys(params: GetColumnMenuItemKeysParams): string[];
@@ -0,0 +1,36 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ /**
3
+ * Returns the list of column menu item keys (sorted by `displayOrder`) that should be rendered for a given column.
4
+ * This is shared between the column header (to know if menu is empty) and the menu itself (to render items).
5
+ */
6
+ export function getColumnMenuItemKeys(params) {
7
+ const {
8
+ apiRef,
9
+ colDef,
10
+ defaultSlots,
11
+ defaultSlotProps,
12
+ slots = {},
13
+ slotProps = {}
14
+ } = params;
15
+ const processedComponents = _extends({}, defaultSlots, slots);
16
+ let processedSlotProps = defaultSlotProps;
17
+ if (slotProps && Object.keys(slotProps).length > 0) {
18
+ const mergedProps = _extends({}, slotProps);
19
+ Object.entries(defaultSlotProps).forEach(([key, currentSlotProps]) => {
20
+ mergedProps[key] = _extends({}, currentSlotProps, slotProps[key] || {});
21
+ });
22
+ processedSlotProps = mergedProps;
23
+ }
24
+ const defaultItems = apiRef.current.unstable_applyPipeProcessors('columnMenu', [], colDef);
25
+ const defaultComponentKeys = Object.keys(defaultSlots);
26
+ const userItems = Object.keys(slots).filter(key => !defaultComponentKeys.includes(key));
27
+ const uniqueItems = Array.from(new Set([...defaultItems, ...userItems]));
28
+ const cleansedItems = uniqueItems.filter(key => processedComponents[key] != null);
29
+ return cleansedItems.sort((a, b) => {
30
+ const leftItemProps = processedSlotProps[a];
31
+ const rightItemProps = processedSlotProps[b];
32
+ const leftDisplayOrder = Number.isFinite(leftItemProps?.displayOrder) ? leftItemProps.displayOrder : 100;
33
+ const rightDisplayOrder = Number.isFinite(rightItemProps?.displayOrder) ? rightItemProps.displayOrder : 100;
34
+ return leftDisplayOrder - rightDisplayOrder;
35
+ });
36
+ }
@@ -4,6 +4,7 @@ const _excluded = ["displayOrder"];
4
4
  import * as React from 'react';
5
5
  import { useGridRootProps } from "../../utils/useGridRootProps.js";
6
6
  import { useGridPrivateApiContext } from "../../utils/useGridPrivateApiContext.js";
7
+ import { getColumnMenuItemKeys } from "./getColumnMenuItemKeys.js";
7
8
  const useGridColumnMenuSlots = props => {
8
9
  const apiRef = useGridPrivateApiContext();
9
10
  const rootProps = useGridRootProps();
@@ -27,22 +28,16 @@ const useGridColumnMenuSlots = props => {
27
28
  });
28
29
  return mergedProps;
29
30
  }, [defaultSlotProps, slotProps]);
30
- const defaultItems = apiRef.current.unstable_applyPipeProcessors('columnMenu', [], props.colDef);
31
- const userItems = React.useMemo(() => {
32
- const defaultComponentKeys = Object.keys(defaultSlots);
33
- return Object.keys(slots).filter(key => !defaultComponentKeys.includes(key));
34
- }, [slots, defaultSlots]);
35
31
  return React.useMemo(() => {
36
- const uniqueItems = Array.from(new Set([...defaultItems, ...userItems]));
37
- const cleansedItems = uniqueItems.filter(key => processedComponents[key] != null);
38
- const sorted = cleansedItems.sort((a, b) => {
39
- const leftItemProps = processedSlotProps[a];
40
- const rightItemProps = processedSlotProps[b];
41
- const leftDisplayOrder = Number.isFinite(leftItemProps?.displayOrder) ? leftItemProps.displayOrder : 100;
42
- const rightDisplayOrder = Number.isFinite(rightItemProps?.displayOrder) ? rightItemProps.displayOrder : 100;
43
- return leftDisplayOrder - rightDisplayOrder;
32
+ const sortedKeys = getColumnMenuItemKeys({
33
+ apiRef,
34
+ colDef,
35
+ defaultSlots,
36
+ defaultSlotProps,
37
+ slots,
38
+ slotProps
44
39
  });
45
- return sorted.reduce((acc, key, index) => {
40
+ return sortedKeys.reduce((acc, key, index) => {
46
41
  let itemProps = {
47
42
  colDef,
48
43
  onClick: hideMenu
@@ -52,8 +47,8 @@ const useGridColumnMenuSlots = props => {
52
47
  const customProps = _objectWithoutPropertiesLoose(processedComponentProps, _excluded);
53
48
  itemProps = _extends({}, itemProps, customProps);
54
49
  }
55
- return addDividers && index !== sorted.length - 1 ? [...acc, [processedComponents[key], itemProps], [rootProps.slots.baseDivider, {}]] : [...acc, [processedComponents[key], itemProps]];
50
+ return addDividers && index !== sortedKeys.length - 1 ? [...acc, [processedComponents[key], itemProps], [rootProps.slots.baseDivider, {}]] : [...acc, [processedComponents[key], itemProps]];
56
51
  }, []);
57
- }, [addDividers, colDef, defaultItems, hideMenu, processedComponents, processedSlotProps, userItems, rootProps.slots.baseDivider]);
52
+ }, [addDividers, apiRef, colDef, defaultSlotProps, defaultSlots, hideMenu, processedComponents, processedSlotProps, slotProps, slots, rootProps.slots.baseDivider]);
58
53
  };
59
54
  export { useGridColumnMenuSlots };
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v8.27.0
2
+ * @mui/x-data-grid v8.27.1
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -29,6 +29,7 @@ export { gridHeaderFilteringEditFieldSelector, gridHeaderFilteringMenuSelector }
29
29
  export type { GridSlotsComponentsProps } from "../models/gridSlotsComponentsProps.js";
30
30
  export type { GridFilterInputValueProps } from "../models/gridFilterInputComponent.js";
31
31
  export { useGridColumnMenu, columnMenuStateInitializer } from "../hooks/features/columnMenu/useGridColumnMenu.js";
32
+ export type { GridColumnMenuComponent } from "../components/menu/columnMenu/GridColumnMenuProps.js";
32
33
  export { useGridColumns, columnsStateInitializer } from "../hooks/features/columns/useGridColumns.js";
33
34
  export * from "../hooks/features/columns/gridColumnsUtils.js";
34
35
  export { useGridColumnSpanning } from "../hooks/features/columns/useGridColumnSpanning.js";
@@ -0,0 +1,17 @@
1
+ import type { RefObject } from '@mui/x-internals/types';
2
+ import type { GridPrivateApiCommunity } from "../../../models/api/gridApiCommunity.js";
3
+ import type { GridColDef } from "../../../models/colDef/gridColDef.js";
4
+ import type { GridColumnMenuSlotProps } from "./columnMenuInterfaces.js";
5
+ export interface GetColumnMenuItemKeysParams {
6
+ apiRef: RefObject<GridPrivateApiCommunity>;
7
+ colDef: GridColDef;
8
+ defaultSlots: Record<string, any>;
9
+ defaultSlotProps: Record<string, GridColumnMenuSlotProps>;
10
+ slots?: Record<string, any>;
11
+ slotProps?: Record<string, GridColumnMenuSlotProps>;
12
+ }
13
+ /**
14
+ * Returns the list of column menu item keys (sorted by `displayOrder`) that should be rendered for a given column.
15
+ * This is shared between the column header (to know if menu is empty) and the menu itself (to render items).
16
+ */
17
+ export declare function getColumnMenuItemKeys(params: GetColumnMenuItemKeysParams): string[];
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getColumnMenuItemKeys = getColumnMenuItemKeys;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ /**
10
+ * Returns the list of column menu item keys (sorted by `displayOrder`) that should be rendered for a given column.
11
+ * This is shared between the column header (to know if menu is empty) and the menu itself (to render items).
12
+ */
13
+ function getColumnMenuItemKeys(params) {
14
+ const {
15
+ apiRef,
16
+ colDef,
17
+ defaultSlots,
18
+ defaultSlotProps,
19
+ slots = {},
20
+ slotProps = {}
21
+ } = params;
22
+ const processedComponents = (0, _extends2.default)({}, defaultSlots, slots);
23
+ let processedSlotProps = defaultSlotProps;
24
+ if (slotProps && Object.keys(slotProps).length > 0) {
25
+ const mergedProps = (0, _extends2.default)({}, slotProps);
26
+ Object.entries(defaultSlotProps).forEach(([key, currentSlotProps]) => {
27
+ mergedProps[key] = (0, _extends2.default)({}, currentSlotProps, slotProps[key] || {});
28
+ });
29
+ processedSlotProps = mergedProps;
30
+ }
31
+ const defaultItems = apiRef.current.unstable_applyPipeProcessors('columnMenu', [], colDef);
32
+ const defaultComponentKeys = Object.keys(defaultSlots);
33
+ const userItems = Object.keys(slots).filter(key => !defaultComponentKeys.includes(key));
34
+ const uniqueItems = Array.from(new Set([...defaultItems, ...userItems]));
35
+ const cleansedItems = uniqueItems.filter(key => processedComponents[key] != null);
36
+ return cleansedItems.sort((a, b) => {
37
+ const leftItemProps = processedSlotProps[a];
38
+ const rightItemProps = processedSlotProps[b];
39
+ const leftDisplayOrder = Number.isFinite(leftItemProps?.displayOrder) ? leftItemProps.displayOrder : 100;
40
+ const rightDisplayOrder = Number.isFinite(rightItemProps?.displayOrder) ? rightItemProps.displayOrder : 100;
41
+ return leftDisplayOrder - rightDisplayOrder;
42
+ });
43
+ }
@@ -11,6 +11,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
  var React = _interopRequireWildcard(require("react"));
12
12
  var _useGridRootProps = require("../../utils/useGridRootProps");
13
13
  var _useGridPrivateApiContext = require("../../utils/useGridPrivateApiContext");
14
+ var _getColumnMenuItemKeys = require("./getColumnMenuItemKeys");
14
15
  const _excluded = ["displayOrder"];
15
16
  const useGridColumnMenuSlots = props => {
16
17
  const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
@@ -35,22 +36,16 @@ const useGridColumnMenuSlots = props => {
35
36
  });
36
37
  return mergedProps;
37
38
  }, [defaultSlotProps, slotProps]);
38
- const defaultItems = apiRef.current.unstable_applyPipeProcessors('columnMenu', [], props.colDef);
39
- const userItems = React.useMemo(() => {
40
- const defaultComponentKeys = Object.keys(defaultSlots);
41
- return Object.keys(slots).filter(key => !defaultComponentKeys.includes(key));
42
- }, [slots, defaultSlots]);
43
39
  return React.useMemo(() => {
44
- const uniqueItems = Array.from(new Set([...defaultItems, ...userItems]));
45
- const cleansedItems = uniqueItems.filter(key => processedComponents[key] != null);
46
- const sorted = cleansedItems.sort((a, b) => {
47
- const leftItemProps = processedSlotProps[a];
48
- const rightItemProps = processedSlotProps[b];
49
- const leftDisplayOrder = Number.isFinite(leftItemProps?.displayOrder) ? leftItemProps.displayOrder : 100;
50
- const rightDisplayOrder = Number.isFinite(rightItemProps?.displayOrder) ? rightItemProps.displayOrder : 100;
51
- return leftDisplayOrder - rightDisplayOrder;
40
+ const sortedKeys = (0, _getColumnMenuItemKeys.getColumnMenuItemKeys)({
41
+ apiRef,
42
+ colDef,
43
+ defaultSlots,
44
+ defaultSlotProps,
45
+ slots,
46
+ slotProps
52
47
  });
53
- return sorted.reduce((acc, key, index) => {
48
+ return sortedKeys.reduce((acc, key, index) => {
54
49
  let itemProps = {
55
50
  colDef,
56
51
  onClick: hideMenu
@@ -60,8 +55,8 @@ const useGridColumnMenuSlots = props => {
60
55
  const customProps = (0, _objectWithoutPropertiesLoose2.default)(processedComponentProps, _excluded);
61
56
  itemProps = (0, _extends2.default)({}, itemProps, customProps);
62
57
  }
63
- return addDividers && index !== sorted.length - 1 ? [...acc, [processedComponents[key], itemProps], [rootProps.slots.baseDivider, {}]] : [...acc, [processedComponents[key], itemProps]];
58
+ return addDividers && index !== sortedKeys.length - 1 ? [...acc, [processedComponents[key], itemProps], [rootProps.slots.baseDivider, {}]] : [...acc, [processedComponents[key], itemProps]];
64
59
  }, []);
65
- }, [addDividers, colDef, defaultItems, hideMenu, processedComponents, processedSlotProps, userItems, rootProps.slots.baseDivider]);
60
+ }, [addDividers, apiRef, colDef, defaultSlotProps, defaultSlots, hideMenu, processedComponents, processedSlotProps, slotProps, slots, rootProps.slots.baseDivider]);
66
61
  };
67
62
  exports.useGridColumnMenuSlots = useGridColumnMenuSlots;
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-data-grid v8.27.0
2
+ * @mui/x-data-grid v8.27.1
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -29,6 +29,7 @@ export { gridHeaderFilteringEditFieldSelector, gridHeaderFilteringMenuSelector }
29
29
  export type { GridSlotsComponentsProps } from "../models/gridSlotsComponentsProps.js";
30
30
  export type { GridFilterInputValueProps } from "../models/gridFilterInputComponent.js";
31
31
  export { useGridColumnMenu, columnMenuStateInitializer } from "../hooks/features/columnMenu/useGridColumnMenu.js";
32
+ export type { GridColumnMenuComponent } from "../components/menu/columnMenu/GridColumnMenuProps.js";
32
33
  export { useGridColumns, columnsStateInitializer } from "../hooks/features/columns/useGridColumns.js";
33
34
  export * from "../hooks/features/columns/gridColumnsUtils.js";
34
35
  export { useGridColumnSpanning } from "../hooks/features/columns/useGridColumnSpanning.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-data-grid",
3
- "version": "8.27.0",
3
+ "version": "8.27.1",
4
4
  "author": "MUI Team",
5
5
  "description": "The Community plan edition of the MUI X Data Grid components.",
6
6
  "license": "MIT",
package/esm/index.css DELETED
@@ -1,5 +0,0 @@
1
- /* Placeholder file to ensure CSS imports are working */
2
-
3
- .MuiDataGrid {
4
- display: block;
5
- }
package/index.css DELETED
@@ -1,5 +0,0 @@
1
- /* Placeholder file to ensure CSS imports are working */
2
-
3
- .MuiDataGrid {
4
- display: block;
5
- }