From 030627c8c51ee6cb2d99cc14da88559fbe0877fb Mon Sep 17 00:00:00 2001 From: Naiyuan Qing <145280634+NevilleQingNY@users.noreply.github.com> Date: Tue, 7 Apr 2026 18:39:32 +0800 Subject: [PATCH] fix(web): prevent useWorkspaceId crash in AppSidebar before workspace hydration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AppSidebar renders outside the workspace guard in dashboard layout. On first login, workspace hasn't hydrated yet → useWorkspaceId() throws. Fix: read workspace?.id directly from store, use enabled guard on inbox query. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../web/app/(dashboard)/_components/app-sidebar.tsx | 13 +++++++++---- 1 file changed, 9 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..5229b44f 100644 --- a/apps/web/app/(dashboard)/_components/app-sidebar.tsx +++ b/apps/web/app/(dashboard)/_components/app-sidebar.tsx @@ -44,8 +44,9 @@ 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 } from "@core/inbox/queries"; +import { deduplicateInboxItems } from "@core/inbox/queries"; +import { api } from "@/shared/api"; import { useModalStore } from "@/features/modals"; const primaryNav = [ @@ -76,8 +77,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],