(props: AutocompleteMenuInternalProps<T>)
| 117 | } |
| 118 | |
| 119 | function AutocompleteMenu<T extends AutocompleteItemProps>(props: AutocompleteMenuInternalProps<T>) { |
| 120 | const autocompleteContext = useContext(AutocompleteContext) |
| 121 | if (autocompleteContext === null) { |
| 122 | throw new Error('AutocompleteContext returned null values') |
| 123 | } |
| 124 | const { |
| 125 | activeDescendantRef, |
| 126 | id, |
| 127 | inputRef, |
| 128 | inputValue = '', |
| 129 | scrollContainerRef, |
| 130 | setAutocompleteSuggestion, |
| 131 | setShowMenu, |
| 132 | setInputValue, |
| 133 | setIsMenuDirectlyActivated, |
| 134 | setSelectedItemLength, |
| 135 | showMenu, |
| 136 | } = autocompleteContext |
| 137 | const { |
| 138 | items, |
| 139 | selectedItemIds, |
| 140 | sortOnCloseFn, |
| 141 | emptyStateText = 'No selectable options', |
| 142 | addNewItem, |
| 143 | loading, |
| 144 | selectionVariant = 'single', |
| 145 | filterFn, |
| 146 | 'aria-labelledby': ariaLabelledBy, |
| 147 | onOpenChange, |
| 148 | onSelectedChange, |
| 149 | customScrollContainerRef, |
| 150 | } = props |
| 151 | const listContainerRef = useRef<HTMLDivElement>(null) |
| 152 | const allItemsToRenderRef = useRef<T[]>([]) |
| 153 | const [highlightedItem, setHighlightedItem] = useState<T>() |
| 154 | const [sortedItemIds, setSortedItemIds] = useState<Array<string>>(items.map(({id: itemId}) => itemId)) |
| 155 | const generatedUniqueId = useId(id) |
| 156 | |
| 157 | const selectableItems = useMemo( |
| 158 | () => |
| 159 | items.map(selectableItem => { |
| 160 | return { |
| 161 | ...selectableItem, |
| 162 | role: 'option', |
| 163 | id: selectableItem.id, |
| 164 | active: highlightedItem?.id === selectableItem.id, |
| 165 | selected: selectionVariant === 'multiple' ? selectedItemIds.includes(selectableItem.id) : undefined, |
| 166 | onAction: (item: T) => { |
| 167 | const otherSelectedItemIds = selectedItemIds.filter(selectedItemId => selectedItemId !== item.id) |
| 168 | const newSelectedItemIds = selectedItemIds.includes(item.id) |
| 169 | ? otherSelectedItemIds |
| 170 | : [...otherSelectedItemIds, item.id] |
| 171 | const onSelectedChangeFn = onSelectedChange |
| 172 | ? onSelectedChange |
| 173 | : getdefaultCheckedSelectionChange(setInputValue) |
| 174 | |
| 175 | onSelectedChangeFn( |
| 176 | newSelectedItemIds.map(newSelectedItemId => getItemById(newSelectedItemId, items)) as T[], |
nothing calls this directly
no test coverage detected