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

Function MenuInner

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

Source from the content-addressed store, hash-verified

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

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