Pure additive change — wasLikingRef + a small useEffect right after the
existing useState declarations. handleLike, the heart animation, localLike,
the memo comparator, and the render path are not touched.
Mechanism:
- useCommunityRealtime already patches the React-Query cache on UPDATE
events for rebreak.community_posts (the table IS in supabase_realtime
— verified via pg_publication_tables on staging today).
- The cache patch propagates to PostCard as a new post.likesCount prop.
- The useState seed (post.likesCount on mount) was never re-read after
the first render — the source of the bug.
- The new useEffect mirrors post.likesCount into localCount with one
guard: when isLiking transitions from true → false, skip the first
run. The cache patch from our own action arrives ~100–300ms after
the API response settles, so on the immediate run the prop is still
stale; skipping prevents an overwrite of the value handleLike just
set. The next prop change (cache patch arrival) re-fires the effect
and syncs correctly.
- Pure foreign likes (no own action in flight) sync immediately.
Earlier attempts (4c4792c, d28d1f1) tried to refactor wider — both broke
own-likes / comments / animations. This commit deliberately changes only
the new code paths.