diff options
author | Eric Bailey <git@esb.lol> | 2024-06-12 21:53:32 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-13 04:53:32 +0200 |
commit | 28ba99917afb5d556a3cb3819cd45712eaf6d196 (patch) | |
tree | e875ae38baf9244062489399a35e336680943c90 /src | |
parent | d989128e5b086fc60aea01ba991039c4e66165c6 (diff) | |
download | voidsky-28ba99917afb5d556a3cb3819cd45712eaf6d196.tar.zst |
Fix profile hover card blocked state (#4480)
* Fix: mini profile on hover allows following a blocker/blocked user (#4423) (#4440) * Tweaks --------- Co-authored-by: Michał Gołda <michal.golda@hotmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/components/ProfileHoverCard/index.web.tsx | 79 | ||||
-rw-r--r-- | src/components/moderation/ProfileHeaderAlerts.tsx | 13 |
2 files changed, 65 insertions, 27 deletions
diff --git a/src/components/ProfileHoverCard/index.web.tsx b/src/components/ProfileHoverCard/index.web.tsx index 1fd74fd19..e17977af4 100644 --- a/src/components/ProfileHoverCard/index.web.tsx +++ b/src/components/ProfileHoverCard/index.web.tsx @@ -5,6 +5,7 @@ import {flip, offset, shift, size, useFloating} from '@floating-ui/react-dom' import {msg, plural} from '@lingui/macro' import {useLingui} from '@lingui/react' +import {getModerationCauseKey} from '#/lib/moderation' import {makeProfileLink} from '#/lib/routes/links' import {sanitizeDisplayName} from '#/lib/strings/display-names' import {sanitizeHandle} from '#/lib/strings/handles' @@ -31,6 +32,7 @@ import {Loader} from '#/components/Loader' import {Portal} from '#/components/Portal' import {RichText} from '#/components/RichText' import {Text} from '#/components/Typography' +import {ProfileLabel} from '../moderation/ProfileHeaderAlerts' import {ProfileHoverCardProps} from './types' const floatingMiddlewares = [ @@ -374,7 +376,10 @@ function Inner({ profile: profileShadow, logContext: 'ProfileHoverCard', }) - const blockHide = profile.viewer?.blocking || profile.viewer?.blockedBy + const isBlockedUser = + profile.viewer?.blocking || + profile.viewer?.blockedBy || + profile.viewer?.blockingByList const following = formatCount(profile.followsCount || 0) const followers = formatCount(profile.followersCount || 0) const pluralizedFollowers = plural(profile.followersCount || 0, { @@ -405,29 +410,41 @@ function Inner({ /> </Link> - {!isMe && ( - <Button - size="small" - color={profileShadow.viewer?.following ? 'secondary' : 'primary'} - variant="solid" - label={ - profileShadow.viewer?.following - ? _(msg`Following`) - : _(msg`Follow`) - } - style={[a.rounded_full]} - onPress={profileShadow.viewer?.following ? unfollow : follow}> - <ButtonIcon - position="left" - icon={profileShadow.viewer?.following ? Check : Plus} - /> - <ButtonText> - {profileShadow.viewer?.following - ? _(msg`Following`) - : _(msg`Follow`)} - </ButtonText> - </Button> - )} + {!isMe && + (isBlockedUser ? ( + <Link + to={profileURL} + label={_(msg`View blocked user's profile`)} + onPress={hide} + size="small" + color="secondary" + variant="solid" + style={[a.rounded_full]}> + <ButtonText>{_(msg`View profile`)}</ButtonText> + </Link> + ) : ( + <Button + size="small" + color={profileShadow.viewer?.following ? 'secondary' : 'primary'} + variant="solid" + label={ + profileShadow.viewer?.following + ? _(msg`Following`) + : _(msg`Follow`) + } + style={[a.rounded_full]} + onPress={profileShadow.viewer?.following ? unfollow : follow}> + <ButtonIcon + position="left" + icon={profileShadow.viewer?.following ? Check : Plus} + /> + <ButtonText> + {profileShadow.viewer?.following + ? _(msg`Following`) + : _(msg`Follow`)} + </ButtonText> + </Button> + ))} </View> <Link to={profileURL} label={_(msg`View profile`)} onPress={hide}> @@ -443,7 +460,19 @@ function Inner({ </View> </Link> - {!blockHide && ( + {isBlockedUser && ( + <View style={[a.flex_row, a.flex_wrap, a.gap_xs]}> + {moderation.ui('profileView').alerts.map(cause => ( + <ProfileLabel + key={getModerationCauseKey(cause)} + cause={cause} + disableDetailsDialog + /> + ))} + </View> + )} + + {!isBlockedUser && ( <> <View style={[a.flex_row, a.flex_wrap, a.gap_md, a.pt_xs]}> <InlineLinkText diff --git a/src/components/moderation/ProfileHeaderAlerts.tsx b/src/components/moderation/ProfileHeaderAlerts.tsx index 287a0bdde..4b48b142d 100644 --- a/src/components/moderation/ProfileHeaderAlerts.tsx +++ b/src/components/moderation/ProfileHeaderAlerts.tsx @@ -43,7 +43,13 @@ export function ProfileHeaderAlerts({ ) } -function ProfileLabel({cause}: {cause: ModerationCause}) { +export function ProfileLabel({ + cause, + disableDetailsDialog, +}: { + cause: ModerationCause + disableDetailsDialog?: boolean +}) { const t = useTheme() const control = useModerationDetailsDialogControl() const desc = useModerationCauseDescription(cause) @@ -51,6 +57,7 @@ function ProfileLabel({cause}: {cause: ModerationCause}) { return ( <> <Button + disabled={disableDetailsDialog} label={desc.name} onPress={() => { control.open() @@ -87,7 +94,9 @@ function ProfileLabel({cause}: {cause: ModerationCause}) { )} </Button> - <ModerationDetailsDialog control={control} modcause={cause} /> + {!disableDetailsDialog && ( + <ModerationDetailsDialog control={control} modcause={cause} /> + )} </> ) } |