diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-04-03 19:50:46 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-03 19:50:46 -0500 |
commit | 25cc5b997f07daaeb64ef434992cb95892546ff5 (patch) | |
tree | 09531de05bbce7edddc9b5d48cb4cd56bdabcf90 /src/view/com/profile/FollowButton.tsx | |
parent | 50f7f9877ff000fac3a22d4432253f91657b7e61 (diff) | |
download | voidsky-25cc5b997f07daaeb64ef434992cb95892546ff5.tar.zst |
Rework the me.follows cache to reduce network load (#384)
Diffstat (limited to 'src/view/com/profile/FollowButton.tsx')
-rw-r--r-- | src/view/com/profile/FollowButton.tsx | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/view/com/profile/FollowButton.tsx b/src/view/com/profile/FollowButton.tsx index f22eb9b4a..f799e26f2 100644 --- a/src/view/com/profile/FollowButton.tsx +++ b/src/view/com/profile/FollowButton.tsx @@ -1,8 +1,10 @@ import React from 'react' +import {View} from 'react-native' import {observer} from 'mobx-react-lite' import {Button, ButtonType} from '../util/forms/Button' import {useStores} from 'state/index' import * as Toast from '../util/Toast' +import {FollowState} from 'state/models/cache/my-follows' const FollowButton = observer( ({ @@ -15,10 +17,15 @@ const FollowButton = observer( onToggleFollow?: (v: boolean) => void }) => { const store = useStores() - const isFollowing = store.me.follows.isFollowing(did) + const followState = store.me.follows.getFollowState(did) + + if (followState === FollowState.Unknown) { + return <View /> + } const onToggleFollowInner = async () => { - if (store.me.follows.isFollowing(did)) { + const updatedFollowState = await store.me.follows.fetchFollowState(did) + if (updatedFollowState === FollowState.Following) { try { await store.agent.deleteFollow(store.me.follows.getFollowUri(did)) store.me.follows.removeFollow(did) @@ -27,7 +34,7 @@ const FollowButton = observer( store.log.error('Failed fo delete follow', e) Toast.show('An issue occurred, please try again.') } - } else { + } else if (updatedFollowState === FollowState.NotFollowing) { try { const res = await store.agent.follow(did) store.me.follows.addFollow(did, res.uri) @@ -41,9 +48,9 @@ const FollowButton = observer( return ( <Button - type={isFollowing ? 'default' : type} + type={followState === FollowState.Following ? 'default' : type} onPress={onToggleFollowInner} - label={isFollowing ? 'Unfollow' : 'Follow'} + label={followState === FollowState.Following ? 'Unfollow' : 'Follow'} /> ) }, |