add badge
This commit is contained in:
49
apps/admin.saladeaula.digital/app/middleware/workspace.ts
Normal file
49
apps/admin.saladeaula.digital/app/middleware/workspace.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
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<WorkspaceContextProps>()
|
||||
|
||||
export const workspaceMiddleware = async (
|
||||
{ params, request, context }: LoaderFunctionArgs,
|
||||
next: () => Promise<Response>
|
||||
): Promise<Response> => {
|
||||
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()
|
||||
}
|
||||
Reference in New Issue
Block a user