fix worksapce
This commit is contained in:
@@ -14,7 +14,6 @@ export type Workspace = {
|
|||||||
id: string
|
id: string
|
||||||
name: string
|
name: string
|
||||||
cnpj: string
|
cnpj: string
|
||||||
email: string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export type WorkspaceContextProps = {
|
export type WorkspaceContextProps = {
|
||||||
@@ -25,6 +24,15 @@ export type WorkspaceContextProps = {
|
|||||||
test_mode: boolean
|
test_mode: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type HttpResponse = {
|
||||||
|
items: {
|
||||||
|
sk: string
|
||||||
|
name: string
|
||||||
|
cnpj: string
|
||||||
|
}[]
|
||||||
|
preferred_org_id?: string
|
||||||
|
}
|
||||||
|
|
||||||
export const workspaceContext = createContext<
|
export const workspaceContext = createContext<
|
||||||
WorkspaceContextProps & { blocked: boolean }
|
WorkspaceContextProps & { blocked: boolean }
|
||||||
>()
|
>()
|
||||||
@@ -33,7 +41,6 @@ export const workspaceMiddleware = async (
|
|||||||
{ params, request, context }: LoaderFunctionArgs,
|
{ params, request, context }: LoaderFunctionArgs,
|
||||||
next: () => Promise<Response>
|
next: () => Promise<Response>
|
||||||
): Promise<Response> => {
|
): Promise<Response> => {
|
||||||
const org_id = params.orgid
|
|
||||||
const user = context.get(userContext)!
|
const user = context.get(userContext)!
|
||||||
|
|
||||||
const r = await req({
|
const r = await req({
|
||||||
@@ -46,17 +53,20 @@ export const workspaceMiddleware = async (
|
|||||||
throw new Response(await r.text(), { status: r.status })
|
throw new Response(await r.text(), { status: r.status })
|
||||||
}
|
}
|
||||||
|
|
||||||
const { items } = (await r.json()) as { items: { sk: string }[] }
|
const { items, preferred_org_id } = (await r.json()) as HttpResponse
|
||||||
const workspaces = items.map(({ sk, ...props }) => {
|
const workspaces: Workspace[] = items.map(({ sk, name, cnpj }) => {
|
||||||
const [, id] = sk?.split('#')
|
const [, id] = sk.split('#')
|
||||||
return { ...props, id }
|
return { id, name, cnpj }
|
||||||
}) as Workspace[]
|
})
|
||||||
|
|
||||||
const activeWorkspace = workspaces.find(({ id }) => id === org_id)
|
const activeWorkspace = workspaces.find(({ id }) => id === params.orgid)
|
||||||
|
|
||||||
if (!activeWorkspace) {
|
if (!activeWorkspace) {
|
||||||
const { id } = workspaces[0]
|
const fallback = preferred_org_id
|
||||||
throw redirect(`/${id}/main`)
|
? (workspaces.find(({ id }) => id === preferred_org_id) ?? workspaces[0])
|
||||||
|
: workspaces[0]
|
||||||
|
|
||||||
|
throw redirect(`/${fallback.id}/main`)
|
||||||
}
|
}
|
||||||
|
|
||||||
const org = (await req({
|
const org = (await req({
|
||||||
|
|||||||
@@ -1,40 +1,13 @@
|
|||||||
import type { Route } from './+types/route'
|
import type { Route } from './+types/route'
|
||||||
|
|
||||||
import { redirect } from 'react-router'
|
import { workspaceMiddleware } from '@/middleware/workspace'
|
||||||
|
|
||||||
import { userContext } from '@repo/auth/context'
|
|
||||||
import { authMiddleware } from '@repo/auth/middleware/auth'
|
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 = {
|
export async function loader({}: Route.ActionArgs) {
|
||||||
items: { sk: string }[]
|
return {}
|
||||||
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 })
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user