diff options
author | Eric Bailey <git@esb.lol> | 2024-10-03 10:45:01 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-03 10:45:01 -0500 |
commit | eb3b01d0adc5d5c053e1d350c087941b56106497 (patch) | |
tree | 2b8ef5b8a497c77fea4ef6174d06e53f074e0b57 /src | |
parent | 7e79c7f768e40ef192decfeac0dfac63c3d37468 (diff) | |
download | voidsky-eb3b01d0adc5d5c053e1d350c087941b56106497.tar.zst |
Fix profile header buttons (#5558)
* Fix profile header buttons * Adjust labeler buttons too * Fix load state jumps * Small tweak for web * Remove log
Diffstat (limited to 'src')
-rw-r--r-- | src/components/Button.tsx | 10 | ||||
-rw-r--r-- | src/components/dms/MessageProfileButton.tsx | 26 | ||||
-rw-r--r-- | src/screens/Profile/Header/ProfileHeaderLabeler.tsx | 14 | ||||
-rw-r--r-- | src/screens/Profile/Header/ProfileHeaderStandard.tsx | 9 | ||||
-rw-r--r-- | src/screens/Profile/Header/index.tsx | 7 | ||||
-rw-r--r-- | src/view/com/profile/ProfileMenu.tsx | 39 |
6 files changed, 42 insertions, 63 deletions
diff --git a/src/components/Button.tsx b/src/components/Button.tsx index 17179994a..1c14b48c7 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -14,7 +14,7 @@ import { } from 'react-native' import {LinearGradient} from 'expo-linear-gradient' -import {atoms as a, flatten, select, tokens, useTheme, web} from '#/alf' +import {atoms as a, flatten, select, tokens, useTheme} from '#/alf' import {Props as SVGIconProps} from '#/components/icons/common' import {Text} from '#/components/Typography' @@ -352,7 +352,7 @@ export const Button = React.forwardRef<View, ButtonProps>( }) } else if (size === 'small') { baseStyles.push({ - paddingVertical: 8, + paddingVertical: 9, paddingHorizontal: 12, borderRadius: 6, gap: 6, @@ -374,7 +374,7 @@ export const Button = React.forwardRef<View, ButtonProps>( } } else if (size === 'small') { if (shape === 'round') { - baseStyles.push({height: 36, width: 36}) + baseStyles.push({height: 34, width: 34}) } else { baseStyles.push({height: 34, width: 34}) } @@ -627,9 +627,9 @@ export function useSharedButtonTextStyles() { } if (size === 'large') { - baseStyles.push(a.text_md, a.leading_tight, web({top: -0.4})) + baseStyles.push(a.text_md, a.leading_tight) } else if (size === 'small') { - baseStyles.push(a.text_sm, a.leading_tight, web({top: -0.4})) + baseStyles.push(a.text_sm, a.leading_tight) } else if (size === 'tiny') { baseStyles.push(a.text_xs, a.leading_tight) } diff --git a/src/components/dms/MessageProfileButton.tsx b/src/components/dms/MessageProfileButton.tsx index 7f440d621..932982d05 100644 --- a/src/components/dms/MessageProfileButton.tsx +++ b/src/components/dms/MessageProfileButton.tsx @@ -4,12 +4,13 @@ import {AppBskyActorDefs} from '@atproto/api' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' +import {logEvent} from '#/lib/statsig/statsig' import {useMaybeConvoForUser} from '#/state/queries/messages/get-convo-for-members' -import {logEvent} from 'lib/statsig/statsig' import {atoms as a, useTheme} from '#/alf' -import {Message_Stroke2_Corner0_Rounded as Message} from '../icons/Message' -import {Link} from '../Link' -import {canBeMessaged} from './util' +import {ButtonIcon} from '#/components/Button' +import {canBeMessaged} from '#/components/dms/util' +import {Message_Stroke2_Corner0_Rounded as Message} from '#/components/icons/Message' +import {Link} from '#/components/Link' export function MessageProfileButton({ profile, @@ -40,15 +41,9 @@ export function MessageProfileButton({ a.align_center, t.atoms.bg_contrast_25, a.rounded_full, - {width: 36, height: 36}, + {width: 34, height: 34}, ]}> - <Message - style={[ - t.atoms.text, - {marginLeft: 1, marginBottom: 1, opacity: 0.3}, - ]} - size="md" - /> + <Message style={[t.atoms.text, {opacity: 0.3}]} size="md" /> </View> ) } else { @@ -66,12 +61,9 @@ export function MessageProfileButton({ shape="round" label={_(msg`Message ${profile.handle}`)} to={`/messages/${convo.id}`} - style={[a.justify_center, {width: 36, height: 36}]} + style={[a.justify_center]} onPress={onPress}> - <Message - style={[t.atoms.text, {marginLeft: 1, marginBottom: 1}]} - size="md" - /> + <ButtonIcon icon={Message} size="md" /> </Link> ) } else { diff --git a/src/screens/Profile/Header/ProfileHeaderLabeler.tsx b/src/screens/Profile/Header/ProfileHeaderLabeler.tsx index 7b44e5869..8c95413a8 100644 --- a/src/screens/Profile/Header/ProfileHeaderLabeler.tsx +++ b/src/screens/Profile/Header/ProfileHeaderLabeler.tsx @@ -25,7 +25,7 @@ import {usePreferencesQuery} from '#/state/queries/preferences' import {useRequireAuth, useSession} from '#/state/session' import {ProfileMenu} from '#/view/com/profile/ProfileMenu' import * as Toast from '#/view/com/util/Toast' -import {atoms as a, tokens, useBreakpoints, useTheme} from '#/alf' +import {atoms as a, tokens, useTheme} from '#/alf' import {Button, ButtonText} from '#/components/Button' import {DialogOuterProps} from '#/components/Dialog' import { @@ -61,7 +61,6 @@ let ProfileHeaderLabeler = ({ const profile: Shadow<AppBskyActorDefs.ProfileViewDetailed> = useProfileShadow(profileUnshadowed) const t = useTheme() - const {gtMobile} = useBreakpoints() const {_} = useLingui() const {currentAccount, hasSession} = useSession() const {openModal} = useModalControls() @@ -167,7 +166,7 @@ let ProfileHeaderLabeler = ({ style={[a.px_lg, a.pt_md, a.pb_sm]} pointerEvents={isIOS ? 'auto' : 'box-none'}> <View - style={[a.flex_row, a.justify_end, a.gap_sm, a.pb_lg]} + style={[a.flex_row, a.justify_end, a.align_center, a.gap_xs, a.pb_lg]} pointerEvents={isIOS ? 'auto' : 'box-none'}> {isMe ? ( <Button @@ -196,7 +195,10 @@ let ProfileHeaderLabeler = ({ <View style={[ { - paddingVertical: gtMobile ? 12 : 10, + paddingVertical: 9, + paddingHorizontal: 12, + borderRadius: 6, + gap: 6, backgroundColor: isSubscribed ? state.hovered || state.pressed ? t.palette.contrast_50 @@ -205,9 +207,6 @@ let ProfileHeaderLabeler = ({ ? tokens.color.temp_purple_dark : tokens.color.temp_purple, }, - a.px_lg, - a.rounded_sm, - a.gap_sm, ]}> <Text style={[ @@ -218,6 +217,7 @@ let ProfileHeaderLabeler = ({ }, a.font_bold, a.text_center, + a.leading_tight, ]}> {isSubscribed ? ( <Trans>Unsubscribe</Trans> diff --git a/src/screens/Profile/Header/ProfileHeaderStandard.tsx b/src/screens/Profile/Header/ProfileHeaderStandard.tsx index 3bfc4bf2f..1bdafa92f 100644 --- a/src/screens/Profile/Header/ProfileHeaderStandard.tsx +++ b/src/screens/Profile/Header/ProfileHeaderStandard.tsx @@ -153,8 +153,9 @@ let ProfileHeaderStandard = ({ style={[ {paddingLeft: 90}, a.flex_row, + a.align_center, a.justify_end, - a.gap_sm, + a.gap_xs, a.pb_sm, a.flex_wrap, ]} @@ -167,7 +168,7 @@ let ProfileHeaderStandard = ({ variant="solid" onPress={onPressEditProfile} label={_(msg`Edit profile`)} - style={[a.rounded_full, a.py_sm]}> + style={[a.rounded_full]}> <ButtonText> <Trans>Edit Profile</Trans> </ButtonText> @@ -182,7 +183,7 @@ let ProfileHeaderStandard = ({ label={_(msg`Unblock`)} disabled={!hasSession} onPress={() => unblockPromptControl.open()} - style={[a.rounded_full, a.py_sm]}> + style={[a.rounded_full]}> <ButtonText> <Trans context="action">Unblock</Trans> </ButtonText> @@ -205,7 +206,7 @@ let ProfileHeaderStandard = ({ onPress={ profile.viewer?.following ? onPressUnfollow : onPressFollow } - style={[a.rounded_full, a.gap_xs, a.py_sm]}> + style={[a.rounded_full]}> <ButtonIcon position="left" icon={profile.viewer?.following ? Check : Plus} diff --git a/src/screens/Profile/Header/index.tsx b/src/screens/Profile/Header/index.tsx index cdb0667d0..deb8063d9 100644 --- a/src/screens/Profile/Header/index.tsx +++ b/src/screens/Profile/Header/index.tsx @@ -27,7 +27,7 @@ let ProfileHeaderLoading = (_props: {}): React.ReactNode => { </View> <View style={styles.content}> <View style={[styles.buttonsLine]}> - <LoadingPlaceholder width={167} height={36} style={styles.br50} /> + <LoadingPlaceholder width={140} height={34} style={styles.br50} /> </View> </View> </View> @@ -69,13 +69,12 @@ const styles = StyleSheet.create({ }, content: { paddingTop: 12, - paddingHorizontal: 14, - paddingBottom: 4, + paddingHorizontal: 16, + paddingBottom: 8, }, buttonsLine: { flexDirection: 'row', marginLeft: 'auto', - marginBottom: 12, }, br45: {borderRadius: 45}, br50: {borderRadius: 50}, diff --git a/src/view/com/profile/ProfileMenu.tsx b/src/view/com/profile/ProfileMenu.tsx index aaa8a93e6..f01fb5e17 100644 --- a/src/view/com/profile/ProfileMenu.tsx +++ b/src/view/com/profile/ProfileMenu.tsx @@ -1,12 +1,10 @@ import React, {memo} from 'react' -import {TouchableOpacity} from 'react-native' import {AppBskyActorDefs} from '@atproto/api' -import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useQueryClient} from '@tanstack/react-query' -import {HITSLOP_10} from '#/lib/constants' +import {HITSLOP_20} from '#/lib/constants' import {makeProfileLink} from '#/lib/routes/links' import {shareUrl} from '#/lib/sharing' import {toShareUrl} from '#/lib/strings/url-helpers' @@ -22,8 +20,9 @@ import { import {useSession} from '#/state/session' import {EventStopper} from '#/view/com/util/EventStopper' import * as Toast from '#/view/com/util/Toast' -import {atoms as a, useTheme} from '#/alf' +import {Button, ButtonIcon} from '#/components/Button' import {ArrowOutOfBox_Stroke2_Corner0_Rounded as Share} from '#/components/icons/ArrowOutOfBox' +import {DotGrid_Stroke2_Corner0_Rounded as Ellipsis} from '#/components/icons/DotGrid' import {Flag_Stroke2_Corner0_Rounded as Flag} from '#/components/icons/Flag' import {ListSparkle_Stroke2_Corner0_Rounded as List} from '#/components/icons/ListSparkle' import {Mute_Stroke2_Corner0_Rounded as Mute} from '#/components/icons/Mute' @@ -45,9 +44,6 @@ let ProfileMenu = ({ }): React.ReactNode => { const {_} = useLingui() const {currentAccount, hasSession} = useSession() - const t = useTheme() - // TODO ALF this - const alf = useTheme() const {openModal} = useModalControls() const reportDialogControl = useReportDialogControl() const queryClient = useQueryClient() @@ -175,28 +171,19 @@ let ProfileMenu = ({ <EventStopper onKeyDown={false}> <Menu.Root> <Menu.Trigger label={_(`More options`)}> - {({props, state}) => { + {({props}) => { return ( - <TouchableOpacity + <Button {...props} - hitSlop={HITSLOP_10} testID="profileHeaderDropdownBtn" - style={[ - a.rounded_full, - a.justify_center, - a.align_center, - {width: 36, height: 36}, - alf.atoms.bg_contrast_25, - (state.hovered || state.pressed) && [ - alf.atoms.bg_contrast_50, - ], - ]}> - <FontAwesomeIcon - icon="ellipsis" - size={20} - style={t.atoms.text} - /> - </TouchableOpacity> + label={_(msg`More options`)} + hitSlop={HITSLOP_20} + variant="solid" + color="secondary" + size="small" + shape="round"> + <ButtonIcon icon={Ellipsis} size="sm" /> + </Button> ) }} </Menu.Trigger> |