Openstatus www.openstatus.dev

fix: multi workspace slug (#808)

authored by

Maximilian Kaske and committed by
GitHub
4bdb6383 49f8ba57

+19 -20
+2 -2
apps/web/src/app/app/[workspaceSlug]/(dashboard)/page.tsx
··· 3 3 export default function DashboardRedirect({ 4 4 params, 5 5 }: { 6 - params: { workspaceId: string }; 6 + params: { workspaceSlug: string }; 7 7 }) { 8 - return redirect(`/app/${params.workspaceId}/monitors`); 8 + return redirect(`/app/${params.workspaceSlug}/monitors`); 9 9 }
+10 -13
apps/web/src/components/workspace/select-workspace.tsx
··· 60 60 <DropdownMenuLabel>Workspaces</DropdownMenuLabel> 61 61 <DropdownMenuSeparator /> 62 62 {workspaces.map((workspace) => ( 63 - <DropdownMenuItem 64 - key={workspace.id} 65 - onClick={() => { 66 - if (workspace.slug !== active && typeof window !== "undefined") { 67 - window.location.href = `/app/${workspace.slug}/monitors`; 68 - } 69 - }} 70 - className="justify-between" 71 - > 72 - <span className="truncate">{workspace.slug}</span> 73 - {active === workspace.slug ? ( 74 - <Check className="ml-2 h-4 w-4" /> 75 - ) : null} 63 + <DropdownMenuItem key={workspace.id} asChild> 64 + <a 65 + href={`/app/${workspace.slug}/monitors`} 66 + className="justify-between" 67 + > 68 + <span className="truncate">{workspace.slug}</span> 69 + {active === workspace.slug ? ( 70 + <Check className="ml-2 h-4 w-4" /> 71 + ) : null} 72 + </a> 76 73 </DropdownMenuItem> 77 74 ))} 78 75 <DropdownMenuSeparator />
+7 -3
apps/web/src/middleware.ts
··· 89 89 ({ workspace }) => workspace.slug === workspaceSlug, 90 90 ); 91 91 if (hasAccessToWorkspace) { 92 - const response = NextResponse.next(); 93 - response.cookies.set("workspace-slug", workspaceSlug); 94 - return response; 92 + const workspaceCookie = req.cookies.get("workspace-slug")?.value; 93 + const hasChanged = workspaceCookie !== workspaceSlug; 94 + if (hasChanged) { 95 + const response = NextResponse.redirect(url); 96 + response.cookies.set("workspace-slug", workspaceSlug); 97 + return response; 98 + } 95 99 } else { 96 100 return NextResponse.redirect(new URL("/app", req.url)); 97 101 }
-2
packages/api/src/router/workspace.ts
··· 76 76 }), 77 77 78 78 getUserWorkspaces: protectedProcedure.query(async (opts) => { 79 - console.log(opts.ctx.user); 80 - 81 79 const result = await opts.ctx.db.query.usersToWorkspaces.findMany({ 82 80 where: eq(usersToWorkspaces.userId, opts.ctx.user.id), 83 81 with: {