'use client'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { createCustomer, type Customer } from '@/lib/api/customers'; import { customerSchema, type CustomerFormValues } from '@/lib/validators/customers'; import { ApiError } from '@/lib/api/client'; import { toast } from '@/lib/toast'; import { Button } from '@/components/ui/button'; import { FormField } from '@/components/ui/form-field'; import { Input } from '@/components/ui/input'; import { ResponsiveDialog } from '@/components/ui/responsive-dialog'; interface CustomerQuickCreateDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onCreated: (customer: Customer) => void; } /** * Cadastro rápido de cliente sem sair do fluxo de nova venda (Etapa 17, * critério de aceite "não perder o que já foi preenchido na venda") — só * os campos mínimos; o resto pode ser completado depois em * `/app/clientes/:id`. */ export function CustomerQuickCreateDialog({ open, onOpenChange, onCreated }: CustomerQuickCreateDialogProps) { const queryClient = useQueryClient(); const form = useForm({ resolver: zodResolver(customerSchema), defaultValues: { razao_social: '', documento: '', email: '', telefone_whatsapp: '' }, }); const mutation = useMutation({ mutationFn: (values: CustomerFormValues) => createCustomer({ razao_social: values.razao_social, documento: values.documento || undefined, email: values.email || undefined, telefone_whatsapp: values.telefone_whatsapp || undefined, }), onSuccess: (customer) => { queryClient.invalidateQueries({ queryKey: ['tenant', 'customers'] }); toast.success('Cliente cadastrado.'); form.reset({ razao_social: '', documento: '', email: '', telefone_whatsapp: '' }); onCreated(customer); onOpenChange(false); }, onError: (err) => { toast.error(err instanceof ApiError ? err.message : 'Não foi possível cadastrar o cliente.'); }, }); return ( } >
mutation.mutate(values))} >
); }