diff --git a/apps/admin.saladeaula.digital/app/middleware/workspace.ts b/apps/admin.saladeaula.digital/app/middleware/workspace.ts index ff76880..ea1033e 100644 --- a/apps/admin.saladeaula.digital/app/middleware/workspace.ts +++ b/apps/admin.saladeaula.digital/app/middleware/workspace.ts @@ -14,7 +14,6 @@ export type Workspace = { id: string name: string cnpj: string - email: string } export type WorkspaceContextProps = { @@ -25,6 +24,15 @@ export type WorkspaceContextProps = { test_mode: boolean } +type HttpResponse = { + items: { + sk: string + name: string + cnpj: string + }[] + preferred_org_id?: string +} + export const workspaceContext = createContext< WorkspaceContextProps & { blocked: boolean } >() @@ -33,7 +41,6 @@ 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({ @@ -46,17 +53,20 @@ export const workspaceMiddleware = async ( 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 { items, preferred_org_id } = (await r.json()) as HttpResponse + const workspaces: Workspace[] = items.map(({ sk, name, cnpj }) => { + const [, id] = sk.split('#') + return { id, name, cnpj } + }) - const activeWorkspace = workspaces.find(({ id }) => id === org_id) + const activeWorkspace = workspaces.find(({ id }) => id === params.orgid) if (!activeWorkspace) { - const { id } = workspaces[0] - throw redirect(`/${id}/main`) + const fallback = preferred_org_id + ? (workspaces.find(({ id }) => id === preferred_org_id) ?? workspaces[0]) + : workspaces[0] + + throw redirect(`/${fallback.id}/main`) } const org = (await req({ diff --git a/apps/admin.saladeaula.digital/app/routes/_index/route.tsx b/apps/admin.saladeaula.digital/app/routes/_index/route.tsx index f705cd7..44b6998 100644 --- a/apps/admin.saladeaula.digital/app/routes/_index/route.tsx +++ b/apps/admin.saladeaula.digital/app/routes/_index/route.tsx @@ -1,40 +1,13 @@ import type { Route } from './+types/route' -import { redirect } from 'react-router' - -import { userContext } from '@repo/auth/context' +import { workspaceMiddleware } from '@/middleware/workspace' import { authMiddleware } from '@repo/auth/middleware/auth' -import { request as req } from '@repo/util/request' -export const middleware: Route.MiddlewareFunction[] = [authMiddleware] +export const middleware: Route.MiddlewareFunction[] = [ + authMiddleware, + workspaceMiddleware +] -type Response = { - items: { sk: string }[] - preferred_org_id?: string -} - -export async function loader({ context, request }: Route.ActionArgs) { - const user = context.get(userContext)! - - const r = await req({ - url: `/users/${user.sub}/orgs`, - request, - context - }) - - if (!r.ok) { - throw new Response(await r.text(), { status: r.status }) - } - - const { items = [], preferred_org_id } = (await r.json()) as Response - const { sk } = preferred_org_id - ? (items.find((item) => item.sk === `ORG#${preferred_org_id}`) ?? items[0]) - : items[0] - - if (sk) { - const [_, id] = sk.split('#') - throw redirect(`/${id}/main`) - } - - throw new Response(null, { status: 401 }) +export async function loader({}: Route.ActionArgs) { + return {} }