import type { Route } from './+types/route' import { zodResolver } from '@hookform/resolvers/zod' import { useForm } from 'react-hook-form' import { toast } from 'sonner' import { z } from 'zod' import { Button } from '@repo/ui/components/ui/button' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@repo/ui/components/ui/card' import { FieldSet } from '@repo/ui/components/ui/field' import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@repo/ui/components/ui/form' import { Input } from '@repo/ui/components/ui/input' import { NativeSelect, NativeSelectOption } from '@repo/ui/components/ui/native-select' import { Spinner } from '@repo/ui/components/ui/spinner' import { HttpMethod, request as req } from '@repo/util/request' import { useFetcher, useOutletContext } from 'react-router' import type { Org } from '../_app.orgs.$id/data' const formSchema = z.object({ due_days: z .number({ error: 'Deve estar entre 1 e 90' }) .min(1, { error: 'Deve ser igual 1 ou maior' }) .max(90, { error: 'Deve ser menor ou igual a 90' }), payment_method: z.enum(['BANK_SLIP', 'MANUAL'], { error: 'Selecione uma opção' }) }) type Schema = z.infer export async function action({ params, request, context }: Route.ActionArgs) { const r = await req({ url: `orgs/${params.id}/billing`, headers: new Headers({ 'Content-Type': 'application/json' }), method: HttpMethod.PUT, body: JSON.stringify(await request.json()), request, context }) return { ok: r.ok } } export default function Route({}: Route.ComponentProps) { const fetcher = useFetcher() const { org } = useOutletContext() as { org: Org } const form = useForm({ resolver: zodResolver(formSchema), defaultValues: org?.billing }) const { handleSubmit, control, formState } = form const onSubmit = async (data: Schema) => { toast.success('As condições de pagamento foram atualizadas') fetcher.submit(JSON.stringify(data), { method: 'PUT', encType: 'application/json' }) } return (
Condições de pagamento Estas condições serão usadas automaticamente sempre que um pagamento for gerado.
( Prazo para vencimento{' '} (em dias) onChange(Number(e.target.value))} {...field} /> )} /> ( Forma de pagamento Selecione Boleto bancário Depósito bancário Pix Cartão de crédito )} />
) }