MCPcopy Create free account
hub / github.com/adobe/react-spectrum / MenuInner

Function MenuInner

packages/react-aria-components/src/Menu.tsx:325–405  ·  view source on GitHub ↗
({props, collection, menuRef: ref}: MenuInnerProps<T>)

Source from the content-addressed store, hash-verified

323}
324
325function MenuInner<T>({props, collection, menuRef: ref}: MenuInnerProps<T>) {
326 [props, ref] = useContextProps(props, ref, SelectableCollectionContext);
327 let {filter, ...autocompleteMenuProps} = props;
328 let filteredCollection = useMemo(
329 () => (filter ? collection.filter(filter) : collection),
330 [collection, filter]
331 );
332 let state = useTreeState({
333 ...props,
334 collection: filteredCollection,
335 children: undefined
336 });
337 let triggerState = useContext(RootMenuTriggerStateContext);
338 let {isVirtualized, CollectionRoot} = useContext(CollectionRendererContext);
339 let {menuProps} = useMenu(
340 {...props, isVirtualized, onClose: props.onClose || triggerState?.close},
341 state,
342 ref
343 );
344 let renderProps = useRenderProps({
345 ...props,
346 children: undefined,
347 defaultClassName: 'react-aria-Menu',
348 values: {
349 isEmpty: state.collection.size === 0
350 }
351 });
352
353 let emptyState: ReactElement | null = null;
354 if (state.collection.size === 0 && props.renderEmptyState) {
355 emptyState = (
356 <div role="menuitem" style={{display: 'contents'}}>
357 {props.renderEmptyState()}
358 </div>
359 );
360 }
361
362 let DOMProps = filterDOMProps(props, {global: true});
363
364 return (
365 <FocusScope>
366 <dom.div
367 {...mergeProps(DOMProps, renderProps, menuProps)}
368 ref={ref as RefObject<HTMLDivElement>}
369 slot={props.slot || undefined}
370 data-empty={state.collection.size === 0 || undefined}
371 onScroll={props.onScroll}>
372 <Provider
373 values={[
374 [MenuStateContext, state],
375 [SeparatorContext, {elementType: 'div'}],
376 [SectionContext, {name: 'MenuSection', render: MenuSectionInner}],
377 [
378 SubmenuTriggerContext,
379 {
380 parentMenuRef: ref,
381 shouldUseVirtualFocus: autocompleteMenuProps?.shouldUseVirtualFocus
382 }

Callers

nothing calls this directly

Calls 9

useContextPropsFunction · 0.90
useTreeStateFunction · 0.90
useMenuFunction · 0.90
useRenderPropsFunction · 0.90
filterDOMPropsFunction · 0.90
mergePropsFunction · 0.90
useMenuTriggerStateFunction · 0.90
usePersistedKeysFunction · 0.90
filterMethod · 0.65

Tested by

no test coverage detected