From 6878c5af5a80d320a5f1413672583ec23d777776 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 21 May 2026 15:38:15 +0100 Subject: [PATCH] fix: reliably select workspace on login --- apps/web/src/providers/workspace.tsx | 99 ++++++++++++++++------------ 1 file changed, 58 insertions(+), 41 deletions(-) diff --git a/apps/web/src/providers/workspace.tsx b/apps/web/src/providers/workspace.tsx index 9467bdb8..5b4cb4eb 100644 --- a/apps/web/src/providers/workspace.tsx +++ b/apps/web/src/providers/workspace.tsx @@ -103,55 +103,72 @@ export const WorkspaceProvider: React.FC<{ children: ReactNode }> = ({ } if (storedWorkspaceId !== null) { - const newData = data; - const selectedWorkspace = newData.find( + const selectedWorkspace = data.find( ({ workspace }) => workspace.publicId === storedWorkspaceId, ); if (!selectedWorkspace?.workspace) { - pollAttemptsRef.current += 1; - if (pollAttemptsRef.current >= MAX_POLL_ATTEMPTS) { - setPendingWorkspaceId(null); + if (pendingWorkspaceId) { + pollAttemptsRef.current += 1; + if (pollAttemptsRef.current >= MAX_POLL_ATTEMPTS) { + setPendingWorkspaceId(null); + localStorage.removeItem("workspacePublicId"); + } else { + return; + } + } else { + // Clear stale workspacePublicId from localStorage + localStorage.removeItem("workspacePublicId"); } + } else { + pollAttemptsRef.current = 0; + setPendingWorkspaceId(null); + + setWorkspace({ + publicId: selectedWorkspace.workspace.publicId, + name: selectedWorkspace.workspace.name, + slug: selectedWorkspace.workspace.slug, + plan: selectedWorkspace.workspace.plan, + description: selectedWorkspace.workspace.description, + role: selectedWorkspace.role as "admin" | "member" | "guest", + weekStartDay: selectedWorkspace.workspace.weekStartDay as 0 | 1 | 6, + cardPrefix: selectedWorkspace.workspace.cardPrefix, + }); + + if (workspacePublicId) { + router.push(`/boards`); + localStorage.setItem("workspacePublicId", workspacePublicId); + } + + setHasLoaded(true); return; } - - pollAttemptsRef.current = 0; - setPendingWorkspaceId(null); - - setWorkspace({ - publicId: selectedWorkspace.workspace.publicId, - name: selectedWorkspace.workspace.name, - slug: selectedWorkspace.workspace.slug, - plan: selectedWorkspace.workspace.plan, - description: selectedWorkspace.workspace.description, - role: selectedWorkspace.role, - weekStartDay: selectedWorkspace.workspace.weekStartDay as 0 | 1 | 6, - cardPrefix: selectedWorkspace.workspace.cardPrefix, - }); - - if (workspacePublicId) { - router.push(`/boards`); - localStorage.setItem("workspacePublicId", workspacePublicId); - } - } else { - const primaryWorkspace = data[0]?.workspace; - const primaryWorkspaceRole = data[0]?.role; - - if (!primaryWorkspace || !primaryWorkspaceRole) return; - localStorage.setItem("workspacePublicId", primaryWorkspace.publicId); - setWorkspace({ - publicId: primaryWorkspace.publicId, - name: primaryWorkspace.name, - slug: primaryWorkspace.slug, - plan: primaryWorkspace.plan, - description: primaryWorkspace.description, - role: primaryWorkspaceRole, - weekStartDay: primaryWorkspace.weekStartDay as 0 | 1 | 6, - cardPrefix: primaryWorkspace.cardPrefix, - }); } - }, [data, isLoading, isFetching, workspacePublicId, router]); + + const primaryWorkspace = data[0]?.workspace; + const primaryWorkspaceRole = data[0]?.role; + + if (!primaryWorkspace || !primaryWorkspaceRole) return; + localStorage.setItem("workspacePublicId", primaryWorkspace.publicId); + setWorkspace({ + publicId: primaryWorkspace.publicId, + name: primaryWorkspace.name, + slug: primaryWorkspace.slug, + plan: primaryWorkspace.plan, + description: primaryWorkspace.description, + role: primaryWorkspaceRole as "admin" | "member" | "guest", + weekStartDay: primaryWorkspace.weekStartDay as 0 | 1 | 6, + cardPrefix: primaryWorkspace.cardPrefix, + }); + setHasLoaded(true); + }, [ + data, + isLoading, + isFetching, + workspacePublicId, + pendingWorkspaceId, + router, + ]); return (