import type { Route } from './+types/route' import { zodResolver } from '@hookform/resolvers/zod' import { useEffect } from 'react' import { useForm } from 'react-hook-form' import { PatternFormat } from 'react-number-format' import { Link, useFetcher } from 'react-router' import { toast } from 'sonner' import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from '@repo/ui/components/ui/breadcrumb' import { Button } from '@repo/ui/components/ui/button' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@repo/ui/components/ui/card' 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 { Spinner } from '@repo/ui/components/ui/spinner' import { HttpMethod, request as req } from '@repo/util/request' import { useWorksapce } from '@/components/workspace-switcher' import { FieldSet } from '@repo/ui/components/ui/field' import { formSchema, type Schema } from './data' export function meta({}: Route.MetaArgs) { return [{ title: 'Adicionar colaborador' }] } export async function action({ params, request, context }: Route.ActionArgs) { const { orgid } = params const body = await request.json() const r = await req({ url: `orgs/${orgid}/users`, headers: new Headers({ 'Content-Type': 'application/json' }), method: HttpMethod.POST, body: JSON.stringify(body), request, context }) if (!r.ok) { const error = await r.json().catch(() => ({})) return { ok: false, error } } return { ok: true } } export default function Route({}: Route.ComponentProps) { const fetcher = useFetcher() const { activeWorkspace } = useWorksapce() const form = useForm({ resolver: zodResolver(formSchema) }) const { handleSubmit, control, formState, reset, watch, setValue } = form const givenEmail = watch('given_email') as boolean const onSubmit = async (user: Schema) => { await fetcher.submit(JSON.stringify({ user, org: activeWorkspace }), { method: 'post', encType: 'application/json' }) } useEffect(() => { if (fetcher.data?.ok) { toast.success('O colaborador foi adicionado') return reset() } switch (fetcher.data?.error?.type) { case 'UserConflictError': toast.error('O colaborador já foi vinculado anteriormente') } }, [fetcher.data, reset]) useEffect(() => { if (givenEmail) { setValue('email', '', { shouldValidate: true }) } }, [givenEmail, setValue]) return (
Colaboradores Adicionar colaborador
Adicionar colaborador Siga os passos abaixo para cadastrar um novo colaborador.
( Nome )} />
( Email )} /> ( Usar email gerado pela plataforma )} />
( CPF { onChange(value) }} {...props} /> )} />
) }