'use client' import { useRouter } from 'next/navigation' import { startTransition, useActionState, useRef, type FormEvent } from 'react' import { createActivityUpdateFormAction } from '@/app/(campaign)/campanha/(app)/atividades/[slug]/updateFormActions' import { CampaignFormActionMessage } from '@/components/campaign/shared/CampaignFormActionMessage' import { useCampaignFormSuccessToast } from '@/components/campaign/shared/useCampaignFormSuccessToast' import { Button } from '@/components/ui/button' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Field, FieldError, FieldLabel } from '@/components/ui/field' import { Spinner } from '@/components/ui/Spinner' import { Textarea } from '@/components/ui/textarea' import { fieldError } from '@/utilities/campaignFormFields' export const ActivityUpdateForm = ({ activityId }: { activityId: number }) => { const router = useRouter() const formRef = useRef(null) const [state, formAction, pending] = useActionState(createActivityUpdateFormAction, {}) useCampaignFormSuccessToast(state, () => { formRef.current?.reset() router.refresh() }) const bodyError = fieldError(state.fieldErrors, 'body') // C139 — manual dispatch (no `action={formAction}`): React 19 resets // uncontrolled fields after any settled form action, wiping the typed // update on a validation error. `startTransition` keeps `pending` correct. const handleSubmit = (event: FormEvent) => { event.preventDefault() startTransition(() => formAction(new FormData(event.currentTarget))) } return ( Nova atualização
{state.status !== 'success' ? ( ) : null} Texto da atualização *