J
b56efd8f41
feat(sidebar): dot the workspace switcher when other workspaces have unread inbox (MUL-3695)
...
Adds a cross-workspace unread summary so the workspace switcher shows the
existing brand dot when a workspace OTHER than the active one has unread
inbox items. The active workspace's own unread stays on the Inbox nav
count to avoid a duplicate signal, and the dot is shared with the pending-
invitation indicator.
Backend: new GET /api/inbox/unread-summary returns per-workspace unread
counts for the user, scoped via a member join so a left workspace can't
light the dot. One account-level query instead of N per-workspace inbox
fetches.
Frontend: schema-guarded api.getInboxUnreadSummary, a single account-level
TanStack Query, and a derived "other workspace has unread" boolean in
AppSidebar (shared by web + desktop). Inbox WS events (new/read/archived/
batch) and reconnect invalidate the summary, so the dot appears and clears
in realtime even for events from a non-active workspace.
Closes multica-ai/multica#3773
Co-authored-by: multica-agent <github@multica.ai >
2026-06-25 19:06:38 +08:00
..
2026-06-17 15:18:44 +02:00
2026-05-28 16:05:19 +08:00
2026-05-28 16:05:19 +08:00
2026-06-15 15:12:45 +08:00
2026-06-03 19:12:14 +08:00
2026-05-28 19:06:57 +08:00
2026-06-13 15:33:28 +08:00
2026-06-03 16:39:06 +08:00
2026-05-28 19:06:57 +08:00
2026-06-17 08:23:20 +02:00
2026-05-28 15:53:16 +08:00
2026-06-24 16:25:17 +08:00
2026-06-03 16:39:06 +08:00
2026-06-15 14:12:24 +08:00
2026-06-02 15:47:57 +08:00
2026-06-18 13:33:14 +08:00
2026-05-27 15:47:36 +08:00
2026-05-27 15:47:36 +08:00
2026-06-03 16:39:06 +08:00
2026-06-18 13:33:14 +08:00
2026-06-18 09:40:38 +08:00
2026-06-24 12:46:20 +08:00
2026-06-24 14:16:22 +08:00
2026-05-28 16:05:19 +08:00
2026-05-28 16:05:19 +08:00
2026-05-27 14:52:03 +08:00
2026-05-27 14:52:03 +08:00
2026-06-24 09:52:18 +08:00
2026-06-01 08:28:15 +08:00
2026-06-10 14:20:39 +08:00
2026-06-16 08:20:15 +08:00
2026-06-24 09:52:18 +08:00
2026-06-16 08:38:53 +08:00
2026-06-15 13:54:36 +08:00
2026-06-03 16:39:06 +08:00
2026-06-04 13:12:32 +08:00
2026-06-24 16:19:30 +08:00
2026-06-24 16:25:17 +08:00
2026-06-17 16:00:22 +08:00
2026-06-24 16:25:17 +08:00
2026-06-18 11:10:06 +08:00
2026-06-03 16:39:06 +08:00
2026-06-25 16:01:09 +08:00
2026-06-25 16:01:09 +08:00
2026-06-22 23:44:46 +08:00
2026-06-22 23:44:46 +08:00
2026-06-16 16:28:38 +08:00
2026-06-21 23:41:05 +08:00
2026-06-25 16:01:09 +08:00
2026-06-25 19:06:38 +08:00
2026-06-03 16:39:06 +08:00
2026-06-23 00:14:42 +08:00
2026-06-23 00:14:42 +08:00
2026-06-22 13:56:48 +08:00
2026-06-23 00:14:42 +08:00
2026-06-24 16:06:14 +08:00
2026-05-28 14:20:20 +08:00
2026-06-02 17:17:41 +08:00
2026-06-23 13:17:13 +08:00
2026-06-23 13:17:13 +08:00
2026-06-16 12:26:44 +08:00
2026-06-25 16:54:11 +08:00
2026-06-25 00:19:13 +08:00
2026-06-25 00:19:13 +08:00
2026-06-24 12:46:20 +08:00
2026-06-24 12:46:20 +08:00
2026-06-15 15:12:45 +08:00
2026-06-03 16:39:06 +08:00
2026-06-03 16:39:06 +08:00
2026-05-27 22:22:26 +08:00
2026-05-27 22:22:26 +08:00
2026-06-24 16:25:17 +08:00
2026-06-24 16:25:17 +08:00
2026-06-21 23:54:58 +08:00
2026-06-21 23:54:58 +08:00
2026-06-12 16:45:38 +08:00
2026-05-25 10:05:17 +08:00
2026-06-08 13:08:38 +08:00
2026-06-23 16:52:46 +08:00
2026-06-11 13:00:56 +08:00
2026-06-22 13:14:22 +08:00
2026-06-11 13:00:56 +08:00
2026-06-11 13:00:56 +08:00
2026-06-18 15:24:41 +08:00
2026-06-23 14:20:18 +08:00
2026-06-23 14:20:18 +08:00
2026-06-18 11:10:06 +08:00
2026-06-23 16:52:46 +08:00
2026-06-11 13:00:56 +08:00
2026-06-11 13:00:56 +08:00
2026-06-01 15:19:42 +08:00
2026-06-22 13:34:06 +08:00
2026-06-22 13:34:06 +08:00
2026-06-22 13:14:22 +08:00
2026-06-22 13:14:22 +08:00
2026-06-15 15:12:45 +08:00
2026-06-02 13:03:15 +08:00
2026-06-02 15:47:57 +08:00
2026-06-23 13:17:13 +08:00
2026-05-28 15:53:16 +08:00
2026-06-10 16:27:07 +08:00
2026-06-02 14:29:29 +08:00
2026-06-25 01:29:20 +08:00
2026-06-24 12:46:20 +08:00
2026-06-24 12:46:20 +08:00
2026-06-13 01:22:45 +08:00