Fix optimistic like

This commit is contained in:
Eric Bailey
2024-03-10 12:31:21 -05:00
parent 7a02e9dcb5
commit db5749124f
@@ -84,9 +84,7 @@ let ProfileHeaderLabeler = ({
const [likeUri, setLikeUri] = React.useState<string>( const [likeUri, setLikeUri] = React.useState<string>(
labeler.viewer?.like || '', labeler.viewer?.like || '',
) )
const isLiked = !!likeUri const [likeCount, setLikeCount] = React.useState(labeler.likeCount || 0)
const likeCount =
isLiked && likeUri ? (labeler.likeCount || 0) + 1 : labeler.likeCount || 0
const onToggleLiked = React.useCallback(async () => { const onToggleLiked = React.useCallback(async () => {
if (!labeler) { if (!labeler) {
@@ -95,13 +93,15 @@ let ProfileHeaderLabeler = ({
try { try {
Haptics.default() Haptics.default()
if (isLiked && likeUri) { if (likeUri) {
await unlikeMod({uri: likeUri}) await unlikeMod({uri: likeUri})
track('CustomFeed:Unlike') track('CustomFeed:Unlike')
setLikeCount(c => c - 1)
setLikeUri('') setLikeUri('')
} else { } else {
const res = await likeMod({uri: labeler.uri, cid: labeler.cid}) const res = await likeMod({uri: labeler.uri, cid: labeler.cid})
track('CustomFeed:Like') track('CustomFeed:Like')
setLikeCount(c => c + 1)
setLikeUri(res.uri) setLikeUri(res.uri)
} }
} catch (e: any) { } catch (e: any) {
@@ -112,7 +112,7 @@ let ProfileHeaderLabeler = ({
) )
logger.error(`Failed to toggle labeler like`, {message: e.message}) logger.error(`Failed to toggle labeler like`, {message: e.message})
} }
}, [labeler, likeUri, isLiked, likeMod, unlikeMod, track, _]) }, [labeler, likeUri, likeMod, unlikeMod, track, _])
const onPressEditProfile = React.useCallback(() => { const onPressEditProfile = React.useCallback(() => {
track('ProfileHeader:EditProfileButtonClicked') track('ProfileHeader:EditProfileButtonClicked')
@@ -227,14 +227,14 @@ let ProfileHeaderLabeler = ({
label={_(msg`Like this feed`)} label={_(msg`Like this feed`)}
disabled={!hasSession || isLikePending || isUnlikePending} disabled={!hasSession || isLikePending || isUnlikePending}
onPress={onToggleLiked}> onPress={onToggleLiked}>
{isLiked ? ( {likeUri ? (
<HeartFilled fill={t.palette.negative_400} /> <HeartFilled fill={t.palette.negative_400} />
) : ( ) : (
<Heart fill={t.atoms.text_contrast_medium.color} /> <Heart fill={t.atoms.text_contrast_medium.color} />
)} )}
</Button> </Button>
{typeof labeler.likeCount === 'number' && ( {typeof likeCount === 'number' && (
<Link <Link
to={{ to={{
screen: 'ProfileLabelerLikedBy', screen: 'ProfileLabelerLikedBy',