Skip to content

Commit

Permalink
Fix share button not working for some users (#5849)
Browse files Browse the repository at this point in the history
* fix share button

* Revert "fix share button"

This reverts commit 3521c24.

* tweak

* Clean up context

---------

Co-authored-by: Eric Bailey <[email protected]>
  • Loading branch information
haileyok and estrattonbailey authored Dec 12, 2024
1 parent 2808f8b commit 2276cb0
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 27 deletions.
20 changes: 20 additions & 0 deletions src/components/Menu/context.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,23 @@ export const Context = React.createContext<ContextType>({
export const ItemContext = React.createContext<ItemContextType>({
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
}
36 changes: 18 additions & 18 deletions src/components/Menu/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -25,10 +30,6 @@ export {
useDialogControl as useMenuControl,
} from '#/components/Dialog'

export function useMemoControlContext() {
return React.useContext(Context)
}

export function Root({
children,
control,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -82,7 +83,7 @@ export function Outer({
showCancel?: boolean
style?: StyleProp<ViewStyle>
}>) {
const context = React.useContext(Context)
const context = useMenuContext()
const {_} = useLingui()

return (
Expand All @@ -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,
Expand All @@ -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()
Expand Down Expand Up @@ -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}
Expand All @@ -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"
Expand Down Expand Up @@ -223,15 +223,15 @@ export function Group({children, style}: GroupProps) {

function Cancel() {
const {_} = useLingui()
const {control} = React.useContext(Context)
const context = useMenuContext()

return (
<Button
label={_(msg`Close this dialog`)}
size="small"
variant="ghost"
color="secondary"
onPress={() => control.close()}>
onPress={() => context.control.close()}>
<ButtonText>
<Trans>Cancel</Trans>
</ButtonText>
Expand Down
19 changes: 10 additions & 9 deletions src/components/Menu/index.web.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -40,10 +45,6 @@ export function useMenuControl(): Dialog.DialogControlProps {
)
}

export function useMemoControlContext() {
return React.useContext(Context)
}

export function Root({
children,
control,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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 (
<Text
style={[
Expand All @@ -279,7 +280,7 @@ export function ItemText({children, style}: ItemTextProps) {

export function ItemIcon({icon: Comp, position = 'left'}: ItemIconProps) {
const t = useTheme()
const {disabled} = React.useContext(ItemContext)
const {disabled} = useMenuItemContext()
return (
<View
style={[
Expand Down

0 comments on commit 2276cb0

Please sign in to comment.