diff options
Diffstat (limited to 'src/components/Menu/index.tsx')
-rw-r--r-- | src/components/Menu/index.tsx | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/src/components/Menu/index.tsx b/src/components/Menu/index.tsx index a171e9772..73eb9da52 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<ViewStyle> }>) { - 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 ( <Text numberOfLines={1} @@ -177,7 +177,7 @@ export function ItemText({children, style}: ItemTextProps) { export function ItemIcon({icon: Comp}: ItemIconProps) { const t = useTheme() - const {disabled} = React.useContext(ItemContext) + const {disabled} = useMenuItemContext() return ( <Comp size="lg" @@ -223,7 +223,7 @@ export function Group({children, style}: GroupProps) { function Cancel() { const {_} = useLingui() - const {control} = React.useContext(Context) + const context = useMenuContext() return ( <Button @@ -231,7 +231,7 @@ function Cancel() { size="small" variant="ghost" color="secondary" - onPress={() => control.close()}> + onPress={() => context.control.close()}> <ButtonText> <Trans>Cancel</Trans> </ButtonText> |