diff options
author | Eric Bailey <git@esb.lol> | 2024-03-12 11:23:01 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-12 11:23:01 -0500 |
commit | b8afb935f4eafbe64e83512ec5a97bb7b38a6ecb (patch) | |
tree | aabbd870c4242ed08ced359fe1e1539db476285e /src/components/Menu/index.web.tsx | |
parent | 17d921fd9d885972d72450abbd539946d7078cf9 (diff) | |
download | voidsky-b8afb935f4eafbe64e83512ec5a97bb7b38a6ecb.tar.zst |
Unwrap Menu.Trigger on web (#3182)
Diffstat (limited to 'src/components/Menu/index.web.tsx')
-rw-r--r-- | src/components/Menu/index.web.tsx | 65 |
1 files changed, 42 insertions, 23 deletions
diff --git a/src/components/Menu/index.web.tsx b/src/components/Menu/index.web.tsx index 054e51b01..f23c39ced 100644 --- a/src/components/Menu/index.web.tsx +++ b/src/components/Menu/index.web.tsx @@ -1,3 +1,5 @@ +/* eslint-disable react/prop-types */ + import React from 'react' import {View, Pressable} from 'react-native' import * as DropdownMenu from '@radix-ui/react-dropdown-menu' @@ -14,6 +16,7 @@ import { GroupProps, ItemTextProps, ItemIconProps, + RadixPassThroughTriggerProps, } from '#/components/Menu/types' import {Context} from '#/components/Menu/context' @@ -76,7 +79,24 @@ export function Root({ ) } -export function Trigger({children, label, style}: TriggerProps) { +const RadixTriggerPassThrough = React.forwardRef( + ( + props: { + children: ( + props: RadixPassThroughTriggerProps & { + ref: React.Ref<any> + }, + ) => React.ReactNode + }, + ref, + ) => { + // @ts-expect-error Radix provides no types of this stuff + return props.children({...props, ref}) + }, +) +RadixTriggerPassThrough.displayName = 'RadixTriggerPassThrough' + +export function Trigger({children, label}: TriggerProps) { const {control} = React.useContext(Context) const { state: hovered, @@ -87,28 +107,27 @@ export function Trigger({children, label, style}: TriggerProps) { return ( <DropdownMenu.Trigger asChild> - <Pressable - accessibilityHint="" - accessibilityLabel={label} - onFocus={onFocus} - onBlur={onBlur} - style={flatten([style, focused && web({outline: 0})])} - onPointerDown={() => control.open()} - {...web({ - onMouseEnter, - onMouseLeave, - })}> - {children({ - isNative: false, - control, - state: { - hovered, - focused, - pressed: false, - }, - props: {}, - })} - </Pressable> + <RadixTriggerPassThrough> + {props => + children({ + isNative: false, + control, + state: { + hovered, + focused, + pressed: false, + }, + props: { + ...props, + onFocus: onFocus, + onBlur: onBlur, + onMouseEnter, + onMouseLeave, + accessibilityLabel: label, + }, + }) + } + </RadixTriggerPassThrough> </DropdownMenu.Trigger> ) } |