import { type LoaderFunctionArgs, createContext } from 'react-router' import { userContext } from '@repo/auth/context' import { request as req } from '@repo/util/request' export type Workspace = { id: string name: string cnpj: string } export type WorkspaceContextProps = { activeWorkspace: Workspace workspaces: Workspace[] } export const workspaceContext = createContext() export const workspaceMiddleware = async ( { params, request, context }: LoaderFunctionArgs, next: () => Promise ): Promise => { const org_id = params.orgid const user = context.get(userContext)! 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 workspaces = items.map(({ sk, ...props }) => { const [, id] = sk?.split('#') return { ...props, id } }) as Workspace[] const activeWorkspace = workspaces.find( ({ id }) => id === org_id ) as Workspace context.set(workspaceContext, { activeWorkspace, workspaces }) return await next() }