diff options
author | Eric Bailey <git@esb.lol> | 2024-08-19 14:21:29 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-19 12:21:29 -0700 |
commit | e54298ec2c9a04aabe40ee7719962e2e33be23ec (patch) | |
tree | 7b042cb6cea29dbc0c1a37af6949cc5ec452dae2 /src/components/Menu/index.web.tsx | |
parent | f235be9819286c38e7c76142a62d39e22a7746d1 (diff) | |
download | voidsky-e54298ec2c9a04aabe40ee7719962e2e33be23ec.tar.zst |
Expose more methods, support disabled items (#4954)
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> ) } |