From 104bbbef410936b94ca1325d31be0a8d19f671f3 Mon Sep 17 00:00:00 2001 From: Naiyuan Qing <145280634+NevilleQingNY@users.noreply.github.com> Date: Wed, 8 Apr 2026 10:44:56 +0800 Subject: [PATCH] fix(web): prevent useWorkspaceId crash in AppSidebar (re-apply after merge revert) AppSidebar renders before workspace hydrates. useWorkspaceId() throws when workspace is null. Fix: read workspace?.id directly from store, use enabled guard on inbox query. This fix was in commit 030627c but got reverted by subsequent merge with main. Co-Authored-By: Claude Opus 4.6 (1M context) --- apps/web/app/(dashboard)/_components/app-sidebar.tsx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/web/app/(dashboard)/_components/app-sidebar.tsx b/apps/web/app/(dashboard)/_components/app-sidebar.tsx index bbcea35f..f3072c30 100644 --- a/apps/web/app/(dashboard)/_components/app-sidebar.tsx +++ b/apps/web/app/(dashboard)/_components/app-sidebar.tsx @@ -44,8 +44,8 @@ import { Tooltip, TooltipTrigger, TooltipContent } from "@/components/ui/tooltip import { useAuthStore } from "@/features/auth"; import { useWorkspaceStore } from "@/features/workspace"; import { useQuery } from "@tanstack/react-query"; -import { useWorkspaceId } from "@core/hooks"; -import { inboxListOptions, deduplicateInboxItems } from "@core/inbox/queries"; +import { inboxKeys, deduplicateInboxItems } from "@core/inbox/queries"; +import { api } from "@/shared/api"; import { useModalStore } from "@/features/modals"; const primaryNav = [ @@ -76,8 +76,12 @@ export function AppSidebar() { const workspaces = useWorkspaceStore((s) => s.workspaces); const switchWorkspace = useWorkspaceStore((s) => s.switchWorkspace); - const wsId = useWorkspaceId(); - const { data: inboxItems = [] } = useQuery(inboxListOptions(wsId)); + const wsId = workspace?.id; + const { data: inboxItems = [] } = useQuery({ + queryKey: wsId ? inboxKeys.list(wsId) : ["inbox", "disabled"], + queryFn: () => api.listInbox(), + enabled: !!wsId, + }); const unreadCount = React.useMemo( () => deduplicateInboxItems(inboxItems).filter((i) => !i.read).length, [inboxItems],