'use client' import { submitPetitionSignature } from '@/app/(frontend)/actions/submitPetitionSignature' import { Field, FieldDescription, FieldGroup, FieldLabel, FieldLegend, FieldSet, } from '@/components/ui/field' import { trackMetaLead } from '@/lib/facebookPixel' import { petitionFormSchema, type PetitionFormInput } from '@/lib/schemas/petition-form' import { Petition } from '@/payload-types' import { zodResolver } from '@hookform/resolvers/zod' import { useState, useTransition } from 'react' import { FormProvider, useForm, type SubmitHandler } from 'react-hook-form' import { CitySelect } from './CitySelect' import { EmailInput } from './EmailInput' import { NameInput } from './NameInput' import { PetitionSuccessDialog } from './PetitionSuccessDialog' import { PhoneInput } from './PhoneInput' import { PostalCodeInput } from './PostalCodeInput' import { SIGNATURE_CREATED_EVENT, type SignatureCreatedDetail } from './SignatureCounter' import { StateSelect } from './StateSelect' import { Button } from './ui/button' import { Textarea } from './ui/textarea' interface PetitionFormProps { id: string petition: Petition consentHTML: string facebookPixelId?: string } export const PetitionForm = ({ id, petition, consentHTML, facebookPixelId }: PetitionFormProps) => { const methods = useForm({ resolver: zodResolver(petitionFormSchema), defaultValues: { name: '', email: '', phone: '', state: undefined, city: '', postalCode: '', comment: '', }, }) const [isSubmitting, startTransition] = useTransition() const [isSuccessOpen, setIsSuccessOpen] = useState(false) const [signatureNumber, setSignatureNumber] = useState(null) const onSubmit: SubmitHandler = (input) => { startTransition(async () => { try { const result = await submitPetitionSignature({ ...input, petitionId: petition.id, }) if (facebookPixelId) { trackMetaLead(facebookPixelId, petition.title, crypto.randomUUID()) } methods.reset() setSignatureNumber(result.signatureNumber) const detail: SignatureCreatedDetail = { petitionId: petition.id, count: result.signatureNumber, } window.dispatchEvent(new CustomEvent(SIGNATURE_CREATED_EVENT, { detail })) setIsSuccessOpen(true) } catch { methods.setError('root', { message: 'Falha ao enviar assinatura. Tente novamente.', }) } }) } return (
{petition.form.title ? {petition.form.title} : null} {petition.form.subtitle ? ( {petition.form.subtitle} ) : null} Nome Completo E-mail Celular Estado Cidade CEP Comentário