| 698 | } |
| 699 | |
| 700 | const MenuSub: React.FC<MenuSub> = props => { |
| 701 | const { children, open = false, onOpenChange } = props |
| 702 | const parentMenuContext = useMenuContext() |
| 703 | const [trigger, setTrigger] = React.useState<MenuSubTriggerElement | null>(null) |
| 704 | const [content, setContent] = React.useState<MenuContentElement | null>(null) |
| 705 | const handleOpenChange = useCallbackRef(onOpenChange) |
| 706 | |
| 707 | // Prevent the parent menu from reopening with open submenus. |
| 708 | React.useEffect(() => { |
| 709 | if (parentMenuContext.open === false) handleOpenChange(false) |
| 710 | return () => handleOpenChange(false) |
| 711 | }, [parentMenuContext.open, handleOpenChange]) |
| 712 | |
| 713 | return ( |
| 714 | <Popper> |
| 715 | <MenuContext.Provider |
| 716 | value={{ |
| 717 | open, |
| 718 | onOpenChange: handleOpenChange, |
| 719 | content, |
| 720 | onContentChange: setContent, |
| 721 | }} |
| 722 | > |
| 723 | <MenuSubContext.Provider |
| 724 | value={{ |
| 725 | contentId: useId(), |
| 726 | triggerId: useId(), |
| 727 | trigger, |
| 728 | onTriggerChange: setTrigger, |
| 729 | }} |
| 730 | > |
| 731 | {children} |
| 732 | </MenuSubContext.Provider> |
| 733 | </MenuContext.Provider> |
| 734 | </Popper> |
| 735 | ) |
| 736 | } |
| 737 | |
| 738 | MenuSub.displayName = SUB_NAME |
| 739 |
nothing calls this directly
no test coverage detected