import type { Route } from './+types/route' import { zodResolver } from '@hookform/resolvers/zod' import { useForm } from 'react-hook-form' import { useFetcher, useOutletContext } from 'react-router' 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 { Checkbox } from '@repo/ui/components/ui/checkbox' import { FieldGroup, FieldLegend, 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 { Label } from '@repo/ui/components/ui/label' import { NativeSelect, NativeSelectOption } from '@repo/ui/components/ui/native-select' import { RadioGroup, RadioGroupItem } from '@repo/ui/components/ui/radio-group' import { Spinner } from '@repo/ui/components/ui/spinner' import { HttpMethod, request as req } from '@repo/util/request' import type { Org, Subscription } from '../_app.orgs.$id/data' const formSchema = z.object({ plan: z.enum(['NOTHING', 'FLEXIVEL']), billing_day: z.number({ error: 'Deve estar entre 1 e 31' }).min(1).max(31), payment_method: z.enum(['BANK_SLIP', 'MANUAL'], { error: 'Selecione uma opção' }), subscription_frozen: z.boolean().optional() }) type Schema = Subscription & z.infer export async function action({ params, request, context }: Route.ActionArgs) { const method = request.method if (method === 'DELETE') { await req({ url: `orgs/${params.id}/subscription`, method: HttpMethod.DELETE, request, context }) return { ok: true } } const r = await req({ url: `orgs/${params.id}/subscription`, headers: new Headers({ 'Content-Type': 'application/json' }), method: method as HttpMethod, body: JSON.stringify(await request.json()), request, context }) console.log(r) return { ok: true } } export default function Route({}: Route.ComponentProps) { const fetcher = useFetcher() const { org } = useOutletContext() as { org: Org } const subscribed = !!org?.subscription const form = useForm({ defaultValues: { plan: subscribed ? 'FLEXIVEL' : 'NOTHING', ...org?.subscription }, resolver: zodResolver(formSchema) }) const { handleSubmit, formState, watch } = form const plan = watch('plan') const onSubmit = async ({ plan, ...data }: Schema) => { if (plan === 'NOTHING') { fetcher.submit(null, { method: 'DELETE' }) return } fetcher.submit(JSON.stringify({ name: org.name, ...data }), { method: subscribed ? 'PUT' : 'POST', encType: 'application/json' }) } console.log(org) return (
Escolha um plano Escolha o plano que será utilizado para configurar o funcionamento e os recursos da empresa. ( )} />
Configurações do plano ( Dia para faturar onChange(Number(e.target.value))} {...field} /> )} /> ( Forma de pagamento Selecione Boleto bancário Depósito bancário )} /> ( Suspender temporariamente o funcionamento do plano )} />
) }