MCPcopy Index your code
hub / github.com/primer/react / AutocompleteMenu

Function AutocompleteMenu

packages/react/src/Autocomplete/AutocompleteMenu.tsx:119–375  ·  view source on GitHub ↗
(props: AutocompleteMenuInternalProps<T>)

Source from the content-addressed store, hash-verified

117}
118
119function 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[],

Callers

nothing calls this directly

Calls 9

useIdFunction · 0.90
useFocusZoneFunction · 0.90
getItemByIdFunction · 0.85
getDefaultItemFilterFunction · 0.85
getDefaultSortFnFunction · 0.85
onActionFunction · 0.85
isItemSelectedFunction · 0.70
onOpenChangeFunction · 0.70

Tested by

no test coverage detected