"use client"; import Link from "next/link"; import { useEffect, useState } from "react"; import { usePathname } from "next/navigation"; type ContactData = { email?: string; linkedin?: string; github?: string; }; export default function ContactComponent() { const pathname = usePathname(); const onContactPage = pathname === "/contact"; const [data, setData] = useState(null); useEffect(() => { if (!onContactPage) return; // Appelle l'API interne Next.js qui proxy vers le BACKEND_URL côté serveur const url = "/api/contact"; fetch(url, { cache: "no-store" }) .then((res) => (res.ok ? res.json() : Promise.reject(new Error("fetch contact failed")))) .then((json) => setData(json)) .catch(() => setData(null)); }, [onContactPage]); // Si on n'est pas sur la page /contact => juste un lien if (!onContactPage) { return (
Me contacter
); } // Page /contact => liens + formulaire return (
{data?.linkedin ? ( LinkedIn ) : null} {data?.github ? ( GitHub ) : null} {data?.email ? ( Email direct ) : null}
{data?.email ? ( ) : (

)}
); } function ContactForm() { const [name, setName] = useState(""); const [email, setEmail] = useState(""); const [subject, setSubject] = useState(""); const [message, setMessage] = useState(""); const [status, setStatus] = useState<"idle" | "loading" | "success" | "error">("idle"); const [error, setError] = useState(null); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setError(null); if (!name || !email || !message) { setError("Veuillez remplir les champs requis."); return; } setStatus("loading"); try { const res = await fetch("/api/contact", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ name, email, subject, message }), }); if (!res.ok) { const txt = await res.text(); throw new Error(txt || "Erreur lors de l'envoi du message"); } setStatus("success"); setName(""); setEmail(""); setSubject(""); setMessage(""); } catch (err: any) { setStatus("error"); setError(err?.message || "Une erreur est survenue."); } } return (
setName(e.target.value)} />
setEmail(e.target.value)} />
setSubject(e.target.value)} />