wip:milestone 0 fixes
Some checks failed
CI/CD Pipeline / unit-tests (push) Failing after 1m16s
CI/CD Pipeline / integration-tests (push) Failing after 2m32s
CI/CD Pipeline / lint (push) Successful in 5m22s
CI/CD Pipeline / e2e-tests (push) Has been skipped
CI/CD Pipeline / build (push) Has been skipped

This commit is contained in:
2026-03-15 12:35:42 +02:00
parent 6708cf28a7
commit cffdf8af86
61266 changed files with 4511646 additions and 1938 deletions

View File

@@ -0,0 +1,61 @@
import _extends from "@babel/runtime/helpers/esm/extends";
import * as React from 'react';
import PropTypes from 'prop-types';
import { unstable_useEventCallback as useEventCallback, HTMLElementType } from '@mui/utils';
import { useGridApiContext } from '../../../hooks/utils/useGridApiContext';
import { GridMenu } from '../GridMenu';
import { jsx as _jsx } from "react/jsx-runtime";
function GridColumnHeaderMenu(_ref) {
var columnMenuId = _ref.columnMenuId,
columnMenuButtonId = _ref.columnMenuButtonId,
ContentComponent = _ref.ContentComponent,
contentComponentProps = _ref.contentComponentProps,
field = _ref.field,
open = _ref.open,
target = _ref.target,
onExited = _ref.onExited;
var apiRef = useGridApiContext();
var colDef = apiRef.current.getColumn(field);
var hideMenu = useEventCallback(function (event) {
if (event) {
// Prevent triggering the sorting
event.stopPropagation();
if (target != null && target.contains(event.target)) {
return;
}
}
apiRef.current.hideColumnMenu();
});
if (!target || !colDef) {
return null;
}
return /*#__PURE__*/_jsx(GridMenu, {
placement: "bottom-".concat(colDef.align === 'right' ? 'start' : 'end'),
open: open,
target: target,
onClose: hideMenu,
onExited: onExited,
children: /*#__PURE__*/_jsx(ContentComponent, _extends({
colDef: colDef,
hideMenu: hideMenu,
open: open,
id: columnMenuId,
labelledby: columnMenuButtonId
}, contentComponentProps))
});
}
process.env.NODE_ENV !== "production" ? GridColumnHeaderMenu.propTypes = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "yarn proptypes" |
// ----------------------------------------------------------------------
columnMenuButtonId: PropTypes.string,
columnMenuId: PropTypes.string,
ContentComponent: PropTypes.elementType.isRequired,
contentComponentProps: PropTypes.any,
field: PropTypes.string.isRequired,
onExited: PropTypes.func,
open: PropTypes.bool.isRequired,
target: HTMLElementType
} : void 0;
export { GridColumnHeaderMenu };

View File

@@ -0,0 +1,81 @@
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
var _excluded = ["defaultSlots", "defaultSlotProps", "slots", "slotProps"];
import * as React from 'react';
import PropTypes from 'prop-types';
import { useGridColumnMenuSlots } from '../../../hooks/features/columnMenu/useGridColumnMenuSlots';
import { GridColumnMenuContainer } from './GridColumnMenuContainer';
import { GridColumnMenuColumnsItem } from './menuItems/GridColumnMenuColumnsItem';
import { GridColumnMenuFilterItem } from './menuItems/GridColumnMenuFilterItem';
import { GridColumnMenuSortItem } from './menuItems/GridColumnMenuSortItem';
import { jsx as _jsx } from "react/jsx-runtime";
export var GRID_COLUMN_MENU_SLOTS = {
columnMenuSortItem: GridColumnMenuSortItem,
columnMenuFilterItem: GridColumnMenuFilterItem,
columnMenuColumnsItem: GridColumnMenuColumnsItem
};
export var GRID_COLUMN_MENU_SLOT_PROPS = {
columnMenuSortItem: {
displayOrder: 10
},
columnMenuFilterItem: {
displayOrder: 20
},
columnMenuColumnsItem: {
displayOrder: 30
}
};
var GridGenericColumnMenu = /*#__PURE__*/React.forwardRef(function GridGenericColumnMenu(props, ref) {
var defaultSlots = props.defaultSlots,
defaultSlotProps = props.defaultSlotProps,
slots = props.slots,
slotProps = props.slotProps,
other = _objectWithoutProperties(props, _excluded);
var orderedSlots = useGridColumnMenuSlots(_extends({}, other, {
defaultSlots: defaultSlots,
defaultSlotProps: defaultSlotProps,
slots: slots,
slotProps: slotProps
}));
return /*#__PURE__*/_jsx(GridColumnMenuContainer, _extends({
ref: ref
}, other, {
children: orderedSlots.map(function (_ref, index) {
var _ref2 = _slicedToArray(_ref, 2),
Component = _ref2[0],
otherProps = _ref2[1];
return /*#__PURE__*/_jsx(Component, _extends({}, otherProps), index);
})
}));
});
var GridColumnMenu = /*#__PURE__*/React.forwardRef(function GridColumnMenu(props, ref) {
return /*#__PURE__*/_jsx(GridGenericColumnMenu, _extends({}, props, {
ref: ref,
defaultSlots: GRID_COLUMN_MENU_SLOTS,
defaultSlotProps: GRID_COLUMN_MENU_SLOT_PROPS
}));
});
process.env.NODE_ENV !== "production" ? GridColumnMenu.propTypes = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "yarn proptypes" |
// ----------------------------------------------------------------------
colDef: PropTypes.object.isRequired,
hideMenu: PropTypes.func.isRequired,
id: PropTypes.string,
labelledby: PropTypes.string,
open: PropTypes.bool.isRequired,
/**
* Could be used to pass new props or override props specific to a column menu component
* e.g. `displayOrder`
*/
slotProps: PropTypes.object,
/**
* `slots` could be used to add new and (or) override default column menu items
* If you register a nee component you must pass it's `displayOrder` in `slotProps`
* or it will be placed in the end of the list
*/
slots: PropTypes.object
} : void 0;
export { GridColumnMenu, GridGenericColumnMenu };

View File

@@ -0,0 +1,56 @@
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
var _excluded = ["hideMenu", "colDef", "id", "labelledby", "className", "children", "open"];
import clsx from 'clsx';
import PropTypes from 'prop-types';
import * as React from 'react';
import MenuList from '@mui/material/MenuList';
import { styled } from '@mui/material/styles';
import { isHideMenuKey, isTabKey } from '../../../utils/keyboardUtils';
import { gridClasses } from '../../../constants/gridClasses';
import { jsx as _jsx } from "react/jsx-runtime";
var StyledMenuList = styled(MenuList)(function () {
return {
minWidth: 248
};
});
var GridColumnMenuContainer = /*#__PURE__*/React.forwardRef(function GridColumnMenuContainer(props, ref) {
var hideMenu = props.hideMenu,
colDef = props.colDef,
id = props.id,
labelledby = props.labelledby,
className = props.className,
children = props.children,
open = props.open,
other = _objectWithoutProperties(props, _excluded);
var handleListKeyDown = React.useCallback(function (event) {
if (isTabKey(event.key)) {
event.preventDefault();
}
if (isHideMenuKey(event.key)) {
hideMenu(event);
}
}, [hideMenu]);
return /*#__PURE__*/_jsx(StyledMenuList, _extends({
id: id,
ref: ref,
className: clsx(gridClasses.menuList, className),
"aria-labelledby": labelledby,
onKeyDown: handleListKeyDown,
autoFocus: open
}, other, {
children: children
}));
});
process.env.NODE_ENV !== "production" ? GridColumnMenuContainer.propTypes = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "yarn proptypes" |
// ----------------------------------------------------------------------
colDef: PropTypes.object.isRequired,
hideMenu: PropTypes.func.isRequired,
id: PropTypes.string,
labelledby: PropTypes.string,
open: PropTypes.bool.isRequired
} : void 0;
export { GridColumnMenuContainer };

View File

@@ -0,0 +1 @@
export {};

View File

@@ -0,0 +1,9 @@
// shared modules
export * from './GridColumnHeaderMenu';
export * from './GridColumnMenuProps';
export * from './GridColumnMenuItemProps';
export * from './GridColumnMenuContainer';
export { GridGenericColumnMenu } from './GridColumnMenu';
// items
export * from './menuItems';

View File

@@ -0,0 +1,21 @@
import _extends from "@babel/runtime/helpers/esm/extends";
import * as React from 'react';
import PropTypes from 'prop-types';
import { GridColumnMenuHideItem } from './GridColumnMenuHideItem';
import { GridColumnMenuManageItem } from './GridColumnMenuManageItem';
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
function GridColumnMenuColumnsItem(props) {
return /*#__PURE__*/_jsxs(React.Fragment, {
children: [/*#__PURE__*/_jsx(GridColumnMenuHideItem, _extends({}, props)), /*#__PURE__*/_jsx(GridColumnMenuManageItem, _extends({}, props))]
});
}
process.env.NODE_ENV !== "production" ? GridColumnMenuColumnsItem.propTypes = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "yarn proptypes" |
// ----------------------------------------------------------------------
colDef: PropTypes.object.isRequired,
onClick: PropTypes.func.isRequired
} : void 0;
export { GridColumnMenuColumnsItem };

View File

@@ -0,0 +1,41 @@
import * as React from 'react';
import PropTypes from 'prop-types';
import MenuItem from '@mui/material/MenuItem';
import ListItemIcon from '@mui/material/ListItemIcon';
import ListItemText from '@mui/material/ListItemText';
import { useGridApiContext } from '../../../../hooks/utils/useGridApiContext';
import { useGridRootProps } from '../../../../hooks/utils/useGridRootProps';
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
function GridColumnMenuFilterItem(props) {
var colDef = props.colDef,
onClick = props.onClick;
var apiRef = useGridApiContext();
var rootProps = useGridRootProps();
var showFilter = React.useCallback(function (event) {
onClick(event);
apiRef.current.showFilterPanel(colDef.field);
}, [apiRef, colDef.field, onClick]);
if (rootProps.disableColumnFilter || !colDef.filterable) {
return null;
}
return /*#__PURE__*/_jsxs(MenuItem, {
onClick: showFilter,
children: [/*#__PURE__*/_jsx(ListItemIcon, {
children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuFilterIcon, {
fontSize: "small"
})
}), /*#__PURE__*/_jsx(ListItemText, {
children: apiRef.current.getLocaleText('columnMenuFilter')
})]
});
}
process.env.NODE_ENV !== "production" ? GridColumnMenuFilterItem.propTypes = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "yarn proptypes" |
// ----------------------------------------------------------------------
colDef: PropTypes.object.isRequired,
onClick: PropTypes.func.isRequired
} : void 0;
export { GridColumnMenuFilterItem };

View File

@@ -0,0 +1,60 @@
import * as React from 'react';
import PropTypes from 'prop-types';
import MenuItem from '@mui/material/MenuItem';
import ListItemIcon from '@mui/material/ListItemIcon';
import ListItemText from '@mui/material/ListItemText';
import { useGridApiContext } from '../../../../hooks/utils/useGridApiContext';
import { useGridRootProps } from '../../../../hooks/utils/useGridRootProps';
import { gridVisibleColumnDefinitionsSelector } from '../../../../hooks/features/columns';
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
function GridColumnMenuHideItem(props) {
var colDef = props.colDef,
onClick = props.onClick;
var apiRef = useGridApiContext();
var rootProps = useGridRootProps();
var visibleColumns = gridVisibleColumnDefinitionsSelector(apiRef);
var columnsWithMenu = visibleColumns.filter(function (col) {
return col.disableColumnMenu !== true;
});
// do not allow to hide the last column with menu
var disabled = columnsWithMenu.length === 1;
var toggleColumn = React.useCallback(function (event) {
/**
* Disabled `MenuItem` would trigger `click` event
* after imperative `.click()` call on HTML element.
* Also, click is triggered in testing environment as well.
*/
if (disabled) {
return;
}
apiRef.current.setColumnVisibility(colDef.field, false);
onClick(event);
}, [apiRef, colDef.field, onClick, disabled]);
if (rootProps.disableColumnSelector) {
return null;
}
if (colDef.hideable === false) {
return null;
}
return /*#__PURE__*/_jsxs(MenuItem, {
onClick: toggleColumn,
disabled: disabled,
children: [/*#__PURE__*/_jsx(ListItemIcon, {
children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuHideIcon, {
fontSize: "small"
})
}), /*#__PURE__*/_jsx(ListItemText, {
children: apiRef.current.getLocaleText('columnMenuHideColumn')
})]
});
}
process.env.NODE_ENV !== "production" ? GridColumnMenuHideItem.propTypes = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "yarn proptypes" |
// ----------------------------------------------------------------------
colDef: PropTypes.object.isRequired,
onClick: PropTypes.func.isRequired
} : void 0;
export { GridColumnMenuHideItem };

View File

@@ -0,0 +1,41 @@
import * as React from 'react';
import PropTypes from 'prop-types';
import MenuItem from '@mui/material/MenuItem';
import ListItemIcon from '@mui/material/ListItemIcon';
import ListItemText from '@mui/material/ListItemText';
import { GridPreferencePanelsValue } from '../../../../hooks/features/preferencesPanel/gridPreferencePanelsValue';
import { useGridApiContext } from '../../../../hooks/utils/useGridApiContext';
import { useGridRootProps } from '../../../../hooks/utils/useGridRootProps';
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
function GridColumnMenuManageItem(props) {
var onClick = props.onClick;
var apiRef = useGridApiContext();
var rootProps = useGridRootProps();
var showColumns = React.useCallback(function (event) {
onClick(event); // hide column menu
apiRef.current.showPreferences(GridPreferencePanelsValue.columns);
}, [apiRef, onClick]);
if (rootProps.disableColumnSelector) {
return null;
}
return /*#__PURE__*/_jsxs(MenuItem, {
onClick: showColumns,
children: [/*#__PURE__*/_jsx(ListItemIcon, {
children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuManageColumnsIcon, {
fontSize: "small"
})
}), /*#__PURE__*/_jsx(ListItemText, {
children: apiRef.current.getLocaleText('columnMenuManageColumns')
})]
});
}
process.env.NODE_ENV !== "production" ? GridColumnMenuManageItem.propTypes = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "yarn proptypes" |
// ----------------------------------------------------------------------
colDef: PropTypes.object.isRequired,
onClick: PropTypes.func.isRequired
} : void 0;
export { GridColumnMenuManageItem };

View File

@@ -0,0 +1,80 @@
import * as React from 'react';
import PropTypes from 'prop-types';
import MenuItem from '@mui/material/MenuItem';
import ListItemIcon from '@mui/material/ListItemIcon';
import ListItemText from '@mui/material/ListItemText';
import { useGridSelector } from '../../../../hooks/utils/useGridSelector';
import { gridSortModelSelector } from '../../../../hooks/features/sorting/gridSortingSelector';
import { useGridApiContext } from '../../../../hooks/utils/useGridApiContext';
import { useGridRootProps } from '../../../../hooks/utils/useGridRootProps';
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
function GridColumnMenuSortItem(props) {
var _colDef$sortingOrder;
var colDef = props.colDef,
onClick = props.onClick;
var apiRef = useGridApiContext();
var sortModel = useGridSelector(apiRef, gridSortModelSelector);
var rootProps = useGridRootProps();
var sortDirection = React.useMemo(function () {
if (!colDef) {
return null;
}
var sortItem = sortModel.find(function (item) {
return item.field === colDef.field;
});
return sortItem == null ? void 0 : sortItem.sort;
}, [colDef, sortModel]);
var sortingOrder = (_colDef$sortingOrder = colDef.sortingOrder) != null ? _colDef$sortingOrder : rootProps.sortingOrder;
var onSortMenuItemClick = React.useCallback(function (event) {
onClick(event);
var direction = event.currentTarget.getAttribute('data-value') || null;
apiRef.current.sortColumn(colDef, direction === sortDirection ? null : direction);
}, [apiRef, colDef, onClick, sortDirection]);
if (!colDef || !colDef.sortable || !sortingOrder.some(function (item) {
return !!item;
})) {
return null;
}
var getLabel = function getLabel(key) {
var label = apiRef.current.getLocaleText(key);
return typeof label === 'function' ? label(colDef) : label;
};
return /*#__PURE__*/_jsxs(React.Fragment, {
children: [sortingOrder.includes('asc') && sortDirection !== 'asc' ? /*#__PURE__*/_jsxs(MenuItem, {
onClick: onSortMenuItemClick,
"data-value": "asc",
children: [/*#__PURE__*/_jsx(ListItemIcon, {
children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuSortAscendingIcon, {
fontSize: "small"
})
}), /*#__PURE__*/_jsx(ListItemText, {
children: getLabel('columnMenuSortAsc')
})]
}) : null, sortingOrder.includes('desc') && sortDirection !== 'desc' ? /*#__PURE__*/_jsxs(MenuItem, {
onClick: onSortMenuItemClick,
"data-value": "desc",
children: [/*#__PURE__*/_jsx(ListItemIcon, {
children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuSortDescendingIcon, {
fontSize: "small"
})
}), /*#__PURE__*/_jsx(ListItemText, {
children: getLabel('columnMenuSortDesc')
})]
}) : null, sortingOrder.includes(null) && sortDirection != null ? /*#__PURE__*/_jsxs(MenuItem, {
onClick: onSortMenuItemClick,
children: [/*#__PURE__*/_jsx(ListItemIcon, {}), /*#__PURE__*/_jsx(ListItemText, {
children: apiRef.current.getLocaleText('columnMenuUnsort')
})]
}) : null]
});
}
process.env.NODE_ENV !== "production" ? GridColumnMenuSortItem.propTypes = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "yarn proptypes" |
// ----------------------------------------------------------------------
colDef: PropTypes.object.isRequired,
onClick: PropTypes.func.isRequired
} : void 0;
export { GridColumnMenuSortItem };

View File

@@ -0,0 +1,5 @@
export * from './GridColumnMenuColumnsItem';
export * from './GridColumnMenuManageItem';
export * from './GridColumnMenuFilterItem';
export * from './GridColumnMenuHideItem';
export * from './GridColumnMenuSortItem';