diff options
Diffstat (limited to 'src/components/dms/EmojiReactionPicker.web.tsx')
-rw-r--r-- | src/components/dms/EmojiReactionPicker.web.tsx | 104 |
1 files changed, 59 insertions, 45 deletions
diff --git a/src/components/dms/EmojiReactionPicker.web.tsx b/src/components/dms/EmojiReactionPicker.web.tsx index 0425a879a..a1272b293 100644 --- a/src/components/dms/EmojiReactionPicker.web.tsx +++ b/src/components/dms/EmojiReactionPicker.web.tsx @@ -1,15 +1,14 @@ import {useState} from 'react' -import {View} from 'react-native' +import {Pressable, View} from 'react-native' import {type ChatBskyConvoDefs} from '@atproto/api' import EmojiPicker from '@emoji-mart/react' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' +import * as DropdownMenu from '@radix-ui/react-dropdown-menu' import {useSession} from '#/state/session' import {type Emoji} from '#/view/com/composer/text-input/web/EmojiPicker.web' -import {PressableWithHover} from '#/view/com/util/PressableWithHover' -import {atoms as a} from '#/alf' -import {useTheme} from '#/alf' +import {atoms as a, flatten, useTheme} from '#/alf' import {DotGrid_Stroke2_Corner0_Rounded as DotGridIcon} from '#/components/icons/DotGrid' import * as Menu from '#/components/Menu' import {type TriggerProps} from '#/components/Menu/types' @@ -67,48 +66,63 @@ function MenuInner({ return expanded ? ( <EmojiPicker onEmojiSelect={handleEmojiPickerResponse} autoFocus={true} /> ) : ( - <View style={[a.flex_row, a.gap_xs]}> - {['👍', '😆', '❤️', '👀', '😢'].map(emoji => { - const alreadyReacted = hasAlreadyReacted( - message, - currentAccount?.did, - emoji, - ) - return ( - <PressableWithHover - key={emoji} - onPress={() => handleEmojiSelect(emoji)} - hoverStyle={{ - backgroundColor: alreadyReacted - ? t.palette.negative_200 - : !limitReacted - ? t.palette.primary_300 - : undefined, - }} - style={[ - a.rounded_xs, - {height: 40, width: 40}, + <Menu.Outer style={[a.rounded_full]}> + <View style={[a.flex_row, a.gap_xs]}> + {['👍', '😆', '❤️', '👀', '😢'].map(emoji => { + const alreadyReacted = hasAlreadyReacted( + message, + currentAccount?.did, + emoji, + ) + return ( + <DropdownMenu.Item + key={emoji} + className={[ + 'EmojiReactionPicker__Pressable', + alreadyReacted && '__selected', + limitReacted && '__disabled', + ] + .filter(Boolean) + .join(' ')} + onSelect={() => handleEmojiSelect(emoji)} + style={flatten([ + a.flex, + a.flex_col, + a.rounded_full, + a.justify_center, + a.align_center, + a.transition_transform, + { + width: 34, + height: 34, + }, + alreadyReacted && { + backgroundColor: t.atoms.bg_contrast_100.backgroundColor, + }, + ])}> + <Text style={[a.text_center, {fontSize: 28}]} emoji> + {emoji} + </Text> + </DropdownMenu.Item> + ) + })} + <DropdownMenu.Item + asChild + className="EmojiReactionPicker__PickerButton"> + <Pressable + accessibilityRole="button" + role="button" + onPress={() => setExpanded(true)} + style={flatten([ + a.rounded_full, + {height: 34, width: 34}, a.justify_center, a.align_center, - alreadyReacted && {backgroundColor: t.palette.primary_100}, - ]}> - <Text style={[a.text_center, {fontSize: 30}]} emoji> - {emoji} - </Text> - </PressableWithHover> - ) - })} - <PressableWithHover - onPress={() => setExpanded(true)} - hoverStyle={{backgroundColor: t.palette.primary_100}} - style={[ - a.rounded_xs, - {height: 40, width: 40}, - a.justify_center, - a.align_center, - ]}> - <DotGridIcon size="lg" style={t.atoms.text_contrast_medium} /> - </PressableWithHover> - </View> + ])}> + <DotGridIcon size="lg" style={t.atoms.text_contrast_medium} /> + </Pressable> + </DropdownMenu.Item> + </View> + </Menu.Outer> ) } |