diff options
Diffstat (limited to 'src/view/com/profile/ProfileHeader.tsx')
-rw-r--r-- | src/view/com/profile/ProfileHeader.tsx | 100 |
1 files changed, 44 insertions, 56 deletions
diff --git a/src/view/com/profile/ProfileHeader.tsx b/src/view/com/profile/ProfileHeader.tsx index a6c978fd4..60311a0b2 100644 --- a/src/view/com/profile/ProfileHeader.tsx +++ b/src/view/com/profile/ProfileHeader.tsx @@ -32,12 +32,9 @@ import {ProfileHeaderSuggestedFollows} from './ProfileHeaderSuggestedFollows' import {useModalControls} from '#/state/modals' import {useLightboxControls, ProfileImageLightbox} from '#/state/lightbox' import { - useProfileFollowMutation, - useProfileUnfollowMutation, - useProfileMuteMutation, - useProfileUnmuteMutation, - useProfileBlockMutation, - useProfileUnblockMutation, + useProfileMuteMutationQueue, + useProfileBlockMutationQueue, + useProfileFollowMutationQueue, } from '#/state/queries/profile' import {usePalette} from 'lib/hooks/usePalette' import {useAnalytics} from 'lib/analytics/analytics' @@ -130,12 +127,9 @@ function ProfileHeaderLoaded({ : undefined, [profile], ) - const followMutation = useProfileFollowMutation() - const unfollowMutation = useProfileUnfollowMutation() - const muteMutation = useProfileMuteMutation() - const unmuteMutation = useProfileUnmuteMutation() - const blockMutation = useProfileBlockMutation() - const unblockMutation = useProfileUnblockMutation() + const [queueFollow, queueUnfollow] = useProfileFollowMutationQueue(profile) + const [queueMute, queueUnmute] = useProfileMuteMutationQueue(profile) + const [queueBlock, queueUnblock] = useProfileBlockMutationQueue(profile) const onPressBack = React.useCallback(() => { if (navigation.canGoBack()) { @@ -154,44 +148,39 @@ function ProfileHeaderLoaded({ } }, [openLightbox, profile, moderation]) - const onPressFollow = React.useCallback(async () => { - if (profile.viewer?.following) { - return - } + const onPressFollow = async () => { try { track('ProfileHeader:FollowButtonClicked') - await followMutation.mutateAsync({did: profile.did}) + await queueFollow() Toast.show( `Following ${sanitizeDisplayName( profile.displayName || profile.handle, )}`, ) } catch (e: any) { - logger.error('Failed to follow', {error: String(e)}) - Toast.show(`There was an issue! ${e.toString()}`) + if (e?.name !== 'AbortError') { + logger.error('Failed to follow', {error: String(e)}) + Toast.show(`There was an issue! ${e.toString()}`) + } } - }, [followMutation, profile, track]) + } - const onPressUnfollow = React.useCallback(async () => { - if (!profile.viewer?.following) { - return - } + const onPressUnfollow = async () => { try { track('ProfileHeader:UnfollowButtonClicked') - await unfollowMutation.mutateAsync({ - did: profile.did, - followUri: profile.viewer?.following, - }) + await queueUnfollow() Toast.show( `No longer following ${sanitizeDisplayName( profile.displayName || profile.handle, )}`, ) } catch (e: any) { - logger.error('Failed to unfollow', {error: String(e)}) - Toast.show(`There was an issue! ${e.toString()}`) + if (e?.name !== 'AbortError') { + logger.error('Failed to unfollow', {error: String(e)}) + Toast.show(`There was an issue! ${e.toString()}`) + } } - }, [unfollowMutation, profile, track]) + } const onPressEditProfile = React.useCallback(() => { track('ProfileHeader:EditProfileButtonClicked') @@ -218,24 +207,28 @@ function ProfileHeaderLoaded({ const onPressMuteAccount = React.useCallback(async () => { track('ProfileHeader:MuteAccountButtonClicked') try { - await muteMutation.mutateAsync({did: profile.did}) + await queueMute() Toast.show('Account muted') } catch (e: any) { - logger.error('Failed to mute account', {error: e}) - Toast.show(`There was an issue! ${e.toString()}`) + if (e?.name !== 'AbortError') { + logger.error('Failed to mute account', {error: e}) + Toast.show(`There was an issue! ${e.toString()}`) + } } - }, [track, muteMutation, profile]) + }, [track, queueMute]) const onPressUnmuteAccount = React.useCallback(async () => { track('ProfileHeader:UnmuteAccountButtonClicked') try { - await unmuteMutation.mutateAsync({did: profile.did}) + await queueUnmute() Toast.show('Account unmuted') } catch (e: any) { - logger.error('Failed to unmute account', {error: e}) - Toast.show(`There was an issue! ${e.toString()}`) + if (e?.name !== 'AbortError') { + logger.error('Failed to unmute account', {error: e}) + Toast.show(`There was an issue! ${e.toString()}`) + } } - }, [track, unmuteMutation, profile]) + }, [track, queueUnmute]) const onPressBlockAccount = React.useCallback(async () => { track('ProfileHeader:BlockAccountButtonClicked') @@ -245,19 +238,18 @@ function ProfileHeaderLoaded({ message: 'Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.', onPressConfirm: async () => { - if (profile.viewer?.blocking) { - return - } try { - await blockMutation.mutateAsync({did: profile.did}) + await queueBlock() Toast.show('Account blocked') } catch (e: any) { - logger.error('Failed to block account', {error: e}) - Toast.show(`There was an issue! ${e.toString()}`) + if (e?.name !== 'AbortError') { + logger.error('Failed to block account', {error: e}) + Toast.show(`There was an issue! ${e.toString()}`) + } } }, }) - }, [track, blockMutation, profile, openModal]) + }, [track, queueBlock, openModal]) const onPressUnblockAccount = React.useCallback(async () => { track('ProfileHeader:UnblockAccountButtonClicked') @@ -267,22 +259,18 @@ function ProfileHeaderLoaded({ message: 'The account will be able to interact with you after unblocking.', onPressConfirm: async () => { - if (!profile.viewer?.blocking) { - return - } try { - await unblockMutation.mutateAsync({ - did: profile.did, - blockUri: profile.viewer.blocking, - }) + await queueUnblock() Toast.show('Account unblocked') } catch (e: any) { - logger.error('Failed to unblock account', {error: e}) - Toast.show(`There was an issue! ${e.toString()}`) + if (e?.name !== 'AbortError') { + logger.error('Failed to unblock account', {error: e}) + Toast.show(`There was an issue! ${e.toString()}`) + } } }, }) - }, [track, unblockMutation, profile, openModal]) + }, [track, queueUnblock, openModal]) const onPressReportAccount = React.useCallback(() => { track('ProfileHeader:ReportAccountButtonClicked') |