"use client"; import { useActionState } from "react"; import { useFormStatus } from "react-dom"; import { useEffect } from "react"; import { useToast } from "@/hooks/use-toast"; import { submitContactForm } from "@/app/actions"; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; import { Label } from "@/components/ui/label"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Button } from "@/components/ui/button"; import { Mail } from "lucide-react"; function SubmitButton() { const { pending } = useFormStatus(); return ( {pending ? "Sending..." : "Send Message"} ); } export function Contact() { const { toast } = useToast(); const initialState = { message: null, errors: {} }; const [state, dispatch] = useActionState(submitContactForm, initialState); useEffect(() => { if (state.message) { if (state.errors) { toast({ title: "Error", description: state.message, variant: "destructive", }); } else { toast({ title: "Success!", description: state.message, }); } } }, [state, toast]); return ( Get in Touch Have a question or want to work together? Send me a message. Name {state.errors?.name && ( {state.errors.name[0]} )} Email {state.errors?.email && ( {state.errors.email[0]} )} Message {state.errors?.message && ( {state.errors.message[0]} )} ); }
{state.errors.name[0]}
{state.errors.email[0]}
{state.errors.message[0]}