(props: MenuTriggerProps)
| 119 | } |
| 120 | |
| 121 | export function MenuTrigger(props: MenuTriggerProps): JSX.Element | null { |
| 122 | let state = useMenuTriggerState(props); |
| 123 | let ref = useRef<HTMLButtonElement>(null); |
| 124 | let {menuTriggerProps, menuProps} = useMenuTrigger( |
| 125 | { |
| 126 | ...props, |
| 127 | type: 'menu' |
| 128 | }, |
| 129 | state, |
| 130 | ref |
| 131 | ); |
| 132 | let scrollRef = useRef(null); |
| 133 | |
| 134 | // If within a collection (e.g. Tabs), render nothing. |
| 135 | // Not using createHideableComponent for this because that also creates a forwardRef. |
| 136 | let isHidden = useIsHidden(); |
| 137 | if (isHidden) { |
| 138 | return null; |
| 139 | } |
| 140 | |
| 141 | return ( |
| 142 | <Provider |
| 143 | values={[ |
| 144 | [MenuContext, {...menuProps, ref: scrollRef}], |
| 145 | [OverlayTriggerStateContext, state], |
| 146 | [RootMenuTriggerStateContext, state], |
| 147 | [ |
| 148 | PopoverContext, |
| 149 | { |
| 150 | trigger: 'MenuTrigger', |
| 151 | triggerRef: ref, |
| 152 | scrollRef, |
| 153 | placement: 'bottom start', |
| 154 | 'aria-labelledby': menuProps['aria-labelledby'] |
| 155 | } |
| 156 | ] |
| 157 | ]}> |
| 158 | <PressResponder {...menuTriggerProps} ref={ref} isPressed={state.isOpen}> |
| 159 | {props.children} |
| 160 | </PressResponder> |
| 161 | </Provider> |
| 162 | ); |
| 163 | } |
| 164 | |
| 165 | export interface SubmenuTriggerProps { |
| 166 | /** |
nothing calls this directly
no test coverage detected