From 2276cb0e75356779d175e40550469c8c04a7e69a Mon Sep 17 00:00:00 2001 From: Hailey Date: Thu, 12 Dec 2024 11:50:29 -0800 Subject: [PATCH] Fix share button not working for some users (#5849) * fix share button * Revert "fix share button" This reverts commit 3521c241729dc9bbe3dd7b62fc6e3e61e011cdf9. * tweak * Clean up context --------- Co-authored-by: Eric Bailey --- src/components/Menu/context.tsx | 20 +++++++++++++++++ src/components/Menu/index.tsx | 36 +++++++++++++++---------------- src/components/Menu/index.web.tsx | 19 ++++++++-------- 3 files changed, 48 insertions(+), 27 deletions(-) diff --git a/src/components/Menu/context.tsx b/src/components/Menu/context.tsx index 1ddcd583fc..908ad352ea 100644 --- a/src/components/Menu/context.tsx +++ b/src/components/Menu/context.tsx @@ -10,3 +10,23 @@ export const Context = React.createContext({ export const ItemContext = React.createContext({ disabled: false, }) + +export function useMenuContext() { + const context = React.useContext(Context) + + if (!context) { + throw new Error('useMenuContext must be used within a Context.Provider') + } + + return context +} + +export function useMenuItemContext() { + const context = React.useContext(ItemContext) + + if (!context) { + throw new Error('useMenuItemContext must be used within a Context.Provider') + } + + return context +} diff --git a/src/components/Menu/index.tsx b/src/components/Menu/index.tsx index a171e97723..73eb9da526 100644 --- a/src/components/Menu/index.tsx +++ b/src/components/Menu/index.tsx @@ -9,7 +9,12 @@ import {atoms as a, useTheme} from '#/alf' import {Button, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {useInteractionState} from '#/components/hooks/useInteractionState' -import {Context, ItemContext} from '#/components/Menu/context' +import { + Context, + ItemContext, + useMenuContext, + useMenuItemContext, +} from '#/components/Menu/context' import { ContextType, GroupProps, @@ -25,10 +30,6 @@ export { useDialogControl as useMenuControl, } from '#/components/Dialog' -export function useMemoControlContext() { - return React.useContext(Context) -} - export function Root({ children, control, @@ -47,7 +48,7 @@ export function Root({ } export function Trigger({children, label, role = 'button'}: TriggerProps) { - const {control} = React.useContext(Context) + const context = useMenuContext() const {state: focused, onIn: onFocus, onOut: onBlur} = useInteractionState() const { state: pressed, @@ -57,14 +58,14 @@ export function Trigger({children, label, role = 'button'}: TriggerProps) { return children({ isNative: true, - control, + control: context.control, state: { hovered: false, focused, pressed, }, props: { - onPress: control.open, + onPress: context.control.open, onFocus, onBlur, onPressIn, @@ -82,7 +83,7 @@ export function Outer({ showCancel?: boolean style?: StyleProp }>) { - const context = React.useContext(Context) + const context = useMenuContext() const {_} = useLingui() return ( @@ -105,7 +106,7 @@ export function Outer({ export function Item({children, label, style, onPress, ...rest}: ItemProps) { const t = useTheme() - const {control} = React.useContext(Context) + const context = useMenuContext() const {state: focused, onIn: onFocus, onOut: onBlur} = useInteractionState() const { state: pressed, @@ -121,10 +122,9 @@ export function Item({children, label, style, onPress, ...rest}: ItemProps) { onFocus={onFocus} onBlur={onBlur} onPress={async e => { - await onPress(e) - if (!e.defaultPrevented) { - control?.close() - } + context.control.close(() => { + onPress?.(e) + }) }} onPressIn={e => { onPressIn() @@ -156,7 +156,7 @@ export function Item({children, label, style, onPress, ...rest}: ItemProps) { export function ItemText({children, style}: ItemTextProps) { const t = useTheme() - const {disabled} = React.useContext(ItemContext) + const {disabled} = useMenuItemContext() return ( control.close()}> + onPress={() => context.control.close()}> Cancel diff --git a/src/components/Menu/index.web.tsx b/src/components/Menu/index.web.tsx index 37ad67e29f..ab0c9d20a1 100644 --- a/src/components/Menu/index.web.tsx +++ b/src/components/Menu/index.web.tsx @@ -7,7 +7,12 @@ import * as DropdownMenu from '@radix-ui/react-dropdown-menu' import {atoms as a, flatten, useTheme, web} from '#/alf' import * as Dialog from '#/components/Dialog' import {useInteractionState} from '#/components/hooks/useInteractionState' -import {Context, ItemContext} from '#/components/Menu/context' +import { + Context, + ItemContext, + useMenuContext, + useMenuItemContext, +} from '#/components/Menu/context' import { ContextType, GroupProps, @@ -40,10 +45,6 @@ export function useMenuControl(): Dialog.DialogControlProps { ) } -export function useMemoControlContext() { - return React.useContext(Context) -} - export function Root({ children, control, @@ -110,7 +111,7 @@ const RadixTriggerPassThrough = React.forwardRef( RadixTriggerPassThrough.displayName = 'RadixTriggerPassThrough' export function Trigger({children, label, role = 'button'}: TriggerProps) { - const {control} = React.useContext(Context) + const {control} = useMenuContext() const { state: hovered, onIn: onMouseEnter, @@ -203,7 +204,7 @@ export function Outer({ export function Item({children, label, onPress, ...rest}: ItemProps) { const t = useTheme() - const {control} = React.useContext(Context) + const {control} = useMenuContext() const { state: hovered, onIn: onMouseEnter, @@ -262,7 +263,7 @@ export function Item({children, label, onPress, ...rest}: ItemProps) { export function ItemText({children, style}: ItemTextProps) { const t = useTheme() - const {disabled} = React.useContext(ItemContext) + const {disabled} = useMenuItemContext() return (