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 @@
export {};

View File

@@ -0,0 +1,3 @@
export var gridColumnMenuSelector = function gridColumnMenuSelector(state) {
return state.columnMenu;
};

View File

@@ -0,0 +1,2 @@
export * from './columnMenuInterfaces';
export * from './columnMenuSelector';

View File

@@ -0,0 +1,103 @@
import _extends from "@babel/runtime/helpers/esm/extends";
import * as React from 'react';
import { useGridLogger, useGridApiMethod, useGridApiEventHandler } from '../../utils';
import { gridColumnMenuSelector } from './columnMenuSelector';
import { gridColumnLookupSelector, gridColumnVisibilityModelSelector, gridColumnFieldsSelector } from '../columns/gridColumnsSelector';
export var columnMenuStateInitializer = function columnMenuStateInitializer(state) {
return _extends({}, state, {
columnMenu: {
open: false
}
});
};
/**
* @requires useGridColumnResize (event)
* @requires useGridInfiniteLoader (event)
*/
export var useGridColumnMenu = function useGridColumnMenu(apiRef) {
var logger = useGridLogger(apiRef, 'useGridColumnMenu');
/**
* API METHODS
*/
var showColumnMenu = React.useCallback(function (field) {
var shouldUpdate = apiRef.current.setState(function (state) {
if (state.columnMenu.open && state.columnMenu.field === field) {
return state;
}
logger.debug('Opening Column Menu');
return _extends({}, state, {
columnMenu: {
open: true,
field: field
}
});
});
if (shouldUpdate) {
apiRef.current.hidePreferences();
apiRef.current.forceUpdate();
}
}, [apiRef, logger]);
var hideColumnMenu = React.useCallback(function () {
var columnMenuState = gridColumnMenuSelector(apiRef.current.state);
if (columnMenuState.field) {
var columnLookup = gridColumnLookupSelector(apiRef);
var columnVisibilityModel = gridColumnVisibilityModelSelector(apiRef);
var orderedFields = gridColumnFieldsSelector(apiRef);
var fieldToFocus = columnMenuState.field;
// If the column was removed from the grid, we need to find the closest visible field
if (!columnLookup[fieldToFocus]) {
fieldToFocus = orderedFields[0];
}
// If the field to focus is hidden, we need to find the closest visible field
if (columnVisibilityModel[fieldToFocus] === false) {
// contains visible column fields + the field that was just hidden
var visibleOrderedFields = orderedFields.filter(function (field) {
if (field === fieldToFocus) {
return true;
}
return columnVisibilityModel[field] !== false;
});
var fieldIndex = visibleOrderedFields.indexOf(fieldToFocus);
fieldToFocus = visibleOrderedFields[fieldIndex + 1] || visibleOrderedFields[fieldIndex - 1];
}
apiRef.current.setColumnHeaderFocus(fieldToFocus);
}
var shouldUpdate = apiRef.current.setState(function (state) {
if (!state.columnMenu.open && state.columnMenu.field === undefined) {
return state;
}
logger.debug('Hiding Column Menu');
return _extends({}, state, {
columnMenu: _extends({}, state.columnMenu, {
open: false,
field: undefined
})
});
});
if (shouldUpdate) {
apiRef.current.forceUpdate();
}
}, [apiRef, logger]);
var toggleColumnMenu = React.useCallback(function (field) {
logger.debug('Toggle Column Menu');
var columnMenu = gridColumnMenuSelector(apiRef.current.state);
if (!columnMenu.open || columnMenu.field !== field) {
showColumnMenu(field);
} else {
hideColumnMenu();
}
}, [apiRef, logger, showColumnMenu, hideColumnMenu]);
var columnMenuApi = {
showColumnMenu: showColumnMenu,
hideColumnMenu: hideColumnMenu,
toggleColumnMenu: toggleColumnMenu
};
useGridApiMethod(apiRef, columnMenuApi, 'public');
useGridApiEventHandler(apiRef, 'columnResizeStart', hideColumnMenu);
useGridApiEventHandler(apiRef, 'virtualScrollerWheel', apiRef.current.hideColumnMenu);
useGridApiEventHandler(apiRef, 'virtualScrollerTouchMove', apiRef.current.hideColumnMenu);
};

View File

@@ -0,0 +1,71 @@
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _extends from "@babel/runtime/helpers/esm/extends";
var _excluded = ["displayOrder"];
import * as React from 'react';
import Divider from '@mui/material/Divider';
import { useGridPrivateApiContext } from '../../utils/useGridPrivateApiContext';
var useGridColumnMenuSlots = function useGridColumnMenuSlots(props) {
var apiRef = useGridPrivateApiContext();
var defaultSlots = props.defaultSlots,
defaultSlotProps = props.defaultSlotProps,
_props$slots = props.slots,
slots = _props$slots === void 0 ? {} : _props$slots,
_props$slotProps = props.slotProps,
slotProps = _props$slotProps === void 0 ? {} : _props$slotProps,
hideMenu = props.hideMenu,
colDef = props.colDef,
_props$addDividers = props.addDividers,
addDividers = _props$addDividers === void 0 ? true : _props$addDividers;
var processedComponents = React.useMemo(function () {
return _extends({}, defaultSlots, slots);
}, [defaultSlots, slots]);
var processedSlotProps = React.useMemo(function () {
if (!slotProps || Object.keys(slotProps).length === 0) {
return defaultSlotProps;
}
var mergedProps = _extends({}, slotProps);
Object.entries(defaultSlotProps).forEach(function (_ref) {
var _ref2 = _slicedToArray(_ref, 2),
key = _ref2[0],
currentSlotProps = _ref2[1];
mergedProps[key] = _extends({}, currentSlotProps, slotProps[key] || {});
});
return mergedProps;
}, [defaultSlotProps, slotProps]);
var defaultItems = apiRef.current.unstable_applyPipeProcessors('columnMenu', [], props.colDef);
var userItems = React.useMemo(function () {
var defaultComponentKeys = Object.keys(defaultSlots);
return Object.keys(slots).filter(function (key) {
return !defaultComponentKeys.includes(key);
});
}, [slots, defaultSlots]);
return React.useMemo(function () {
var uniqueItems = Array.from(new Set([].concat(_toConsumableArray(defaultItems), _toConsumableArray(userItems))));
var cleansedItems = uniqueItems.filter(function (key) {
return processedComponents[key] != null;
});
var sorted = cleansedItems.sort(function (a, b) {
var leftItemProps = processedSlotProps[a];
var rightItemProps = processedSlotProps[b];
var leftDisplayOrder = Number.isFinite(leftItemProps == null ? void 0 : leftItemProps.displayOrder) ? leftItemProps.displayOrder : 100;
var rightDisplayOrder = Number.isFinite(rightItemProps == null ? void 0 : rightItemProps.displayOrder) ? rightItemProps.displayOrder : 100;
return leftDisplayOrder - rightDisplayOrder;
});
return sorted.reduce(function (acc, key, index) {
var itemProps = {
colDef: colDef,
onClick: hideMenu
};
var processedComponentProps = processedSlotProps[key];
if (processedComponentProps) {
var displayOrder = processedComponentProps.displayOrder,
customProps = _objectWithoutProperties(processedComponentProps, _excluded);
itemProps = _extends({}, itemProps, customProps);
}
return addDividers && index !== sorted.length - 1 ? [].concat(_toConsumableArray(acc), [[processedComponents[key], itemProps], [Divider, {}]]) : [].concat(_toConsumableArray(acc), [[processedComponents[key], itemProps]]);
}, []);
}, [addDividers, colDef, defaultItems, hideMenu, processedComponents, processedSlotProps, userItems]);
};
export { useGridColumnMenuSlots };