import { type MultiSelectMenuItemType } from './types' // eslint-disable-next-line import-x/no-cycle -- intentional recursion: MenuItem renders SubMenu which renders MenuItem import MultiSelectSubMenu from './MultiSelectSubMenu' import SelectItem, { SelectItemType } from '../Select/SelectItem' const MultiSelectMenuItem = ({ item, onSelect, selected, maxSelections, allItems, index, focusIdentityEnabled, }: { item: MultiSelectMenuItemType onSelect: (value: string) => void selected: string[] maxSelections?: number allItems?: MultiSelectMenuItemType[] index?: number focusIdentityEnabled?: boolean }) => { const isSelected = selected.includes(item.value) const isMaxReached = maxSelections !== undefined && selected.length >= maxSelections && !isSelected const isItemDisabled = item.disabled || isMaxReached || item.alwaysSelected const getSelectedPosition = (): | 'first' | 'middle' | 'last' | 'only' | 'none' => { if (!isSelected || !allItems) return 'none' const selectedItems = allItems.filter((listItem) => selected.includes(listItem.value) ) if (selectedItems.length === 1) return 'only' const currentIndex = selectedItems.findIndex( (selectedItem) => selectedItem.value === item.value ) if (currentIndex === 0) return 'first' if (currentIndex === selectedItems.length - 1) return 'last' return 'middle' } if (item.subMenu) { return ( ) } return ( ) } MultiSelectMenuItem.displayName = 'MultiSelectMenuItem' export default MultiSelectMenuItem