This commit is contained in:
2025-11-11 17:06:25 -03:00
parent c00a42ea39
commit 39aedac972
30 changed files with 802 additions and 220 deletions

View File

@@ -1,4 +0,0 @@
import type { User } from '@/middleware/auth'
import { createContext } from 'react-router'
export const userContext = createContext<User | null>(null)

View File

@@ -1,7 +1,7 @@
import type { LoaderFunctionArgs } from 'react-router'
import type { User } from '@repo/auth/auth'
import { userContext } from '@repo/auth/context'
import { requestIdContext, userContext } from '@repo/auth/context'
import type { LoaderFunctionArgs } from 'react-router'
export enum HttpMethod {
GET = 'GET',
@@ -23,23 +23,21 @@ type RequestArgs = {
export function request({
url,
method = HttpMethod.GET,
headers: _headers = {},
body = null,
headers: _headers = {},
request: { signal },
context
}: RequestArgs): Promise<Response> {
const requestId = context.get(requestIdContext) as string
const user = context.get(userContext) as User
// @ts-ignore
const url_ = new URL(url, context.cloudflare.env.API_URL)
const headers = new Headers(
Object.assign(_headers, { Authorization: `Bearer ${user.accessToken}` })
Object.assign({ Authorization: `Bearer ${user.accessToken}` }, _headers)
)
// @ts-ignore
const endpoint = new URL(url, context.cloudflare.env.API_URL)
return fetch(endpoint.toString(), {
method,
headers,
body,
signal
})
console.log(
`[${new Date().toISOString()}] [${requestId}] ${method} ${url_.toString()}`
)
return fetch(url_.toString(), { method, headers, body, signal })
}

View File

@@ -1,12 +1,7 @@
import type { Route } from './+types/edit'
import { zodResolver } from '@hookform/resolvers/zod'
import {
CircleCheckIcon,
FileBadgeIcon,
FileCode2Icon,
MoreHorizontalIcon
} from 'lucide-react'
import { FileBadgeIcon, FileCode2Icon, MoreHorizontalIcon } from 'lucide-react'
import { Suspense, useState, type ReactNode } from 'react'
import { useForm } from 'react-hook-form'
import { Await, useAsyncValue, useFetcher } from 'react-router'
@@ -15,15 +10,7 @@ import { z } from 'zod'
import { HttpMethod, request as req } from '@/lib/request'
import type { User } from '@repo/auth/auth'
import { userContext } from '@repo/auth/context'
import { Skeleton } from '@repo/ui/components/skeleton'
import {
Alert,
AlertDescription,
AlertTitle
} from '@repo/ui/components/ui/alert'
import {
Breadcrumb,
BreadcrumbItem,
@@ -66,7 +53,7 @@ import {
import { Spinner } from '@repo/ui/components/ui/spinner'
import { Switch } from '@repo/ui/components/ui/switch'
const schema = z
const formSchema = z
.object({
given_cert: z.coerce.boolean(),
never_expires: z.coerce.boolean(),
@@ -94,7 +81,7 @@ const schema = z
}
)
type Schema = z.infer<typeof schema>
type Schema = z.infer<typeof formSchema>
type Cert = {
exp_interval: number
@@ -132,16 +119,12 @@ export const loader = async ({
}
export async function action({ params, request, context }: Route.ActionArgs) {
const user = context.get(userContext) as User
const formData = await request.formData()
const r = await req({
url: `courses/${params.id}`,
method: HttpMethod.PUT,
body: formData,
headers: new Headers({
Authorization: `Bearer ${user.accessToken}`
}),
request,
context
})
@@ -180,7 +163,7 @@ function Editing() {
const fetcher = useFetcher()
const form = useForm({
resolver: zodResolver(schema),
resolver: zodResolver(formSchema),
defaultValues: {
draft: false,
given_cert: !!course?.cert,
@@ -415,7 +398,7 @@ function Editing() {
disabled={formState.isSubmitting}
>
{formState.isSubmitting && <Spinner />}
Editar curso
Editar
</Button>
</div>
</form>