fix(channel): mark message notification viewed when it arrives after mount#2707
Conversation
…mount MarkMessageNotifications used onMount which ran exactly once. If the matching notification was not yet in the cache at mount time (query still loading on cold start), we set up a websocket-only subscription as a fallback -- but that subscription never fires for notifications that arrive via the subsequent query fetch, so viewed_at stayed null until a full reload. Switch to createEffect with a "marked" guard so the mark-as-read fires as soon as the notification shows up in the reactive notifications() memo, regardless of whether it came from the query or the socket.
|
Warning Rate limit exceeded
Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 48 minutes and 45 seconds. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (1)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary
MarkMessageNotificationsusedonMount, which ran exactly once: it looked for a matching notification in the cache and, if missing, fell back to a websocket-only subscription. That fallback never fires for notifications that land in the cache via the subsequent paginated query fetch (cold start / full refresh), soviewed_atstayed null until the user reloaded the app.Switch to
createEffectwith amarkedguard so the mark-as-read happens as soon as the notification appears in the reactivenotifications()memo — whether it came from the query or a websocket push.Repro before
viewed_at: null; the unread badge on the channel in the sidebar persists until reload.