diff options
Diffstat (limited to 'src/components/Menu/index.web.tsx')
-rw-r--r-- | src/components/Menu/index.web.tsx | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/src/components/Menu/index.web.tsx b/src/components/Menu/index.web.tsx index 031250dde..6d2f5e941 100644 --- a/src/components/Menu/index.web.tsx +++ b/src/components/Menu/index.web.tsx @@ -9,7 +9,7 @@ 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} from '#/components/Menu/context' +import {Context, ItemContext} from '#/components/Menu/context' import { ContextType, GroupProps, @@ -239,18 +239,21 @@ export function Item({children, label, onPress, ...rest}: ItemProps) { a.rounded_xs, {minHeight: 32, paddingHorizontal: 10}, web({outline: 0}), - (hovered || focused) && [ - web({outline: '0 !important'}), - t.name === 'light' - ? t.atoms.bg_contrast_25 - : t.atoms.bg_contrast_50, - ], + (hovered || focused) && + !rest.disabled && [ + web({outline: '0 !important'}), + t.name === 'light' + ? t.atoms.bg_contrast_25 + : t.atoms.bg_contrast_50, + ], ])} {...web({ onMouseEnter, onMouseLeave, })}> - {children} + <ItemContext.Provider value={{disabled: Boolean(rest.disabled)}}> + {children} + </ItemContext.Provider> </Pressable> </DropdownMenu.Item> ) @@ -258,8 +261,16 @@ export function Item({children, label, onPress, ...rest}: ItemProps) { export function ItemText({children, style}: ItemTextProps) { const t = useTheme() + const {disabled} = React.useContext(ItemContext) return ( - <Text style={[a.flex_1, a.font_bold, t.atoms.text_contrast_high, style]}> + <Text + style={[ + a.flex_1, + a.font_bold, + t.atoms.text_contrast_high, + style, + disabled && t.atoms.text_contrast_low, + ]}> {children} </Text> ) @@ -267,10 +278,9 @@ export function ItemText({children, style}: ItemTextProps) { export function ItemIcon({icon: Comp, position = 'left'}: ItemIconProps) { const t = useTheme() + const {disabled} = React.useContext(ItemContext) return ( - <Comp - size="md" - fill={t.atoms.text_contrast_medium.color} + <View style={[ position === 'left' && { marginLeft: -2, @@ -279,8 +289,16 @@ export function ItemIcon({icon: Comp, position = 'left'}: ItemIconProps) { marginRight: -2, marginLeft: 12, }, - ]} - /> + ]}> + <Comp + size="md" + fill={ + disabled + ? t.atoms.text_contrast_low.color + : t.atoms.text_contrast_medium.color + } + /> + </View> ) } |