import type { Route } from './+types/index' import { PatternFormat } from 'react-number-format' import { zodResolver } from '@hookform/resolvers/zod' import { useEffect, useState } from 'react' import { CheckCircle2Icon } from 'lucide-react' import { useForm } from 'react-hook-form' import { redirect, useFetcher } from 'react-router' import { Button } from '@repo/ui/components/ui/button' import { Checkbox } from '@repo/ui/components/ui/checkbox' import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@repo/ui/components/ui/form' import { Input } from '@repo/ui/components/ui/input' import { Label } from '@repo/ui/components/ui/label' import { Alert, AlertDescription, AlertTitle } from '@repo/ui/components/ui/alert' import { Spinner } from '@repo/ui/components/ui/spinner' import { Cpf } from './cpf' import { formSchema, type Schema, RegisterContext, type User } from './data' export function meta({}: Route.MetaArgs) { return [{ title: 'Criar conta · EDUSEG®' }] } export async function action({ request, context }: Route.ActionArgs) { const url = new URL('/register', context.cloudflare.env.ISSUER_URL) const body = await request.json() const r = await fetch(url.toString(), { method: 'POST', headers: new Headers({ 'Content-Type': 'application/json' }), body: JSON.stringify(body), signal: request.signal }) if (r.ok) { throw redirect('/authorize', { headers: r.headers }) } return { ok: false, error: await r.json() } } export default function Signup({}: Route.ComponentProps) { const fetcher = useFetcher() const [show, setShow] = useState(false) const [user, setUser] = useState(null) const form = useForm({ resolver: zodResolver(formSchema) }) const { control, handleSubmit, formState, setError } = form const onSubmit = async (data: Schema) => { await fetcher.submit(JSON.stringify({ ...user, ...data }), { method: 'POST', encType: 'application/json' }) } useEffect(() => { switch (fetcher.data?.error?.type) { case 'EmailConflictError': return setError('email', { message: 'O endereço de email já está em uso', type: 'manual' }) } }, [fetcher.data, setError]) return ( {user ? (
{user?.never_logged && ( Confirme seus dados Revise suas informações e edite o que precisar antes de continuar. )} ( Nome )} /> ( Email )} /> ( CPF { onChange(value) }} {...props} /> )} /> ( Senha )} /> ( Confirmar senha
setShow((x) => !x)} tabIndex={-1} />
)} /> ) : ( )}
) }