@mui/base
Version:
A library of headless ('unstyled') React UI components and low-level hooks.
31 lines (30 loc) • 959 B
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import { ListActionTypes, listReducer } from '../useList';
export default function menuReducer(state, action) {
if (action.type === ListActionTypes.itemHover) {
return state;
}
const newState = listReducer(state, action);
// make sure an item is always highlighted
if (newState.highlightedValue === null && action.context.items.length > 0) {
return _extends({}, newState, {
highlightedValue: action.context.items[0]
});
}
if (action.type === ListActionTypes.keyDown) {
if (action.event.key === 'Escape') {
return _extends({}, newState, {
open: false
});
}
}
if (action.type === ListActionTypes.blur) {
if (!action.context.listboxRef.current?.contains(action.event.relatedTarget)) {
return _extends({}, newState, {
open: false,
highlightedValue: action.context.items[0]
});
}
}
return newState;
}