From f0bddfe46155a1071a05996d0eccfa335270f325 Mon Sep 17 00:00:00 2001 From: Untone Date: Sun, 3 Mar 2024 19:39:25 +0300 Subject: [PATCH] rating-update-fix --- src/components/Article/RatingControl.tsx | 33 ++++++++++++++---------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/components/Article/RatingControl.tsx b/src/components/Article/RatingControl.tsx index 3512b623..85e0bc41 100644 --- a/src/components/Article/RatingControl.tsx +++ b/src/components/Article/RatingControl.tsx @@ -55,27 +55,34 @@ export const RatingControl = (props: RatingControlProps) => { { defer: true }, ), ) + createEffect( + on( + reactionEntities, + () => { + const ratings = Object.values(reactionEntities()).filter(r => !r.reply_to); + const likes = ratings.filter(rating => rating.kind === 'LIKE').length; + const dislikes = ratings.filter(rating => rating.kind === 'DISLIKE').length; + const total = likes - dislikes; + setTotal(total); + }, + { defer: true } + ) + ); + createEffect( on( [() => props.ratings, author], ([reactions, me]) => { - console.debug('[RatingControl] on reactions update') - const ratingVotes = Object.values(reactions).filter((r) => !r.reply_to) - setRatings((_) => ratingVotes.sort(byCreated)) - setMyRate((_) => ratingVotes.find((r) => r.created_by.id === me?.id)) - - // Extract likes and dislikes from shoutRatings using map - const likes = ratingVotes.filter((rating) => rating.kind === 'LIKE').length - const dislikes = ratingVotes.filter((rating) => rating.kind === 'DISLIKE').length - - // Calculate the total - const total = likes - dislikes - setTotal(total) + console.debug('[RatingControl] on reactions update'); + const ratingVotes = Object.values(reactions).filter((r) => !r.reply_to); + setRatings((_) => ratingVotes.sort(byCreated)); + setMyRate((_) => ratingVotes.find((r) => r.created_by.id === me?.id)); }, { defer: true }, ), - ) + ); + const handleRatingChange = (voteKind: ReactionKind) => { requireAuthentication(async () => {