import type { Route } from './+types/route' import * as cookie from 'cookie' import { Outlet, type ShouldRevalidateFunctionArgs } from 'react-router' import { WorkspaceProvider, type Workspace } from '@/components/workspace-switcher' import { userContext } from '@repo/auth/context' import { authMiddleware } from '@repo/auth/middleware/auth' import { ModeToggle, ThemedImage } from '@repo/ui/components/dark-mode' import { NavUser } from '@repo/ui/components/nav-user' import { SidebarInset, SidebarProvider, SidebarTrigger } from '@repo/ui/components/ui/sidebar' import { Toaster } from '@repo/ui/components/ui/sonner' import { request as req } from '@repo/util/request' import { AppSidebar } from '@/components/app-sidebar' export const middleware: Route.MiddlewareFunction[] = [authMiddleware] export async function loader({ params, context, request }: Route.ActionArgs) { const user = context.get(userContext) const rawCookie = request.headers.get('cookie') || '' const parsedCookies = cookie.parse(rawCookie) const { sidebar_state = 'true' } = parsedCookies const r = await req({ url: `/users/${user.sub}/orgs?limit=25`, request, context }) if (!r.ok) { throw new Response(await r.text(), { status: r.status }) } const { items = [] } = (await r.json()) as { items: { sk: string }[] } const orgs = items.map(({ sk, ...props }) => ({ ...props, id: sk?.split('#')[1] ?? null })) const exists = orgs.some(({ id }) => id === params.orgid) if (exists) { return { user, orgs, sidebar_state } } throw new Response(null, { status: 401 }) } export function shouldRevalidate({ currentParams, nextParams }: ShouldRevalidateFunctionArgs) { return currentParams.orgid !== nextParams.orgid } export default function Route({ loaderData }: Route.ComponentProps) { const { user, orgs, sidebar_state } = loaderData return (
) }