import { createSignal, type Component } from "solid-js"; import { Show } from "solid-js/web"; const ContactForm: Component = () => { const [firstName, setFirstName] = createSignal(""); const [lastName, setLastName] = createSignal(""); const [email, setEmail] = createSignal(""); const [company, setCompany] = createSignal(""); const [service, setService] = createSignal(""); const [budget, setBudget] = createSignal(""); const [message, setMessage] = createSignal(""); const [status, setStatus] = createSignal< "idle" | "sending" | "success" | "error" >("idle"); const [errorMessage, setErrorMessage] = createSignal(""); const handleSubmit = async (e: Event) => { e.preventDefault(); setStatus("sending"); setErrorMessage(""); try { const response = await fetch("/api/contact", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ subject: `New Contact Form Message from ${firstName()} ${lastName()}`, message: `From: ${firstName()} ${lastName()} Email: ${email()} Company: ${company() || "Not specified"} Service Needed: ${service() || "Not specified"} Budget: ${budget() || "Not specified"} Project Details: ${message()}`, }), }); const data = await response.json(); if (!response.ok) { throw new Error(data.error || data.message || "Failed to send message"); } setStatus("success"); setFirstName(""); setLastName(""); setEmail(""); setCompany(""); setService(""); setBudget(""); setMessage(""); setTimeout(() => setStatus("idle"), 3000); } catch (error) { setStatus("error"); setErrorMessage( error instanceof Error ? error.message : "Failed to send message", ); console.error("Submission error:", error); } }; return (
setFirstName(e.currentTarget.value)} disabled={status() === "sending"} />
setLastName(e.currentTarget.value)} disabled={status() === "sending"} />
setEmail(e.currentTarget.value)} disabled={status() === "sending"} />
setCompany(e.currentTarget.value)} disabled={status() === "sending"} />