@engie-group/fluid-design-system-react
Version:
Fluid Design System React
29 lines (26 loc) • 1.23 kB
JavaScript
import { jsx } from 'react/jsx-runtime';
import { useCallback } from 'react';
import { useStateControl } from '../../../utils/hook.js';
import { NJMenuSelectionContext } from '../NJMenuSelectionContext.js';
const NJMenuSelection = ({ children, multiselection, closeOnSelect = true, onSelection, initialSelectedIndexes = [], selectedIndexes: controlledSelectedIndexes }) => {
const [selectedIndexes, setSelectedIndexes] = useStateControl(initialSelectedIndexes, controlledSelectedIndexes);
const selectItem = useCallback((index) => {
let newSelectedIndexes;
if (multiselection) {
newSelectedIndexes = selectedIndexes?.includes(index)
? selectedIndexes?.filter((i) => i !== index)
: [...(selectedIndexes ?? []), index];
}
else {
newSelectedIndexes = [index];
}
setSelectedIndexes(newSelectedIndexes);
onSelection?.(newSelectedIndexes);
}, [multiselection, selectedIndexes]);
return (jsx(NJMenuSelectionContext.Provider, { value: {
selectItem,
closeOnSelect,
selectedIndexes: selectedIndexes ?? []
}, children: children }));
};
export { NJMenuSelection };