From ae85204879e61c6f342a95ee55d07ca441e84d8d Mon Sep 17 00:00:00 2001 From: Ladebeze66 Date: Fri, 31 Jan 2025 16:35:42 +0000 Subject: [PATCH] endcontact --- app/admin/messages/page.tsx | 24 ++++++++ app/components/ContactForm.tsx | 102 +++++++++++++++++++++++++++++++++ app/contact/page.js | 27 +++++++-- app/globals.css | 16 ++++++ app/utils/sendMessage.ts | 32 +++++++++++ 5 files changed, 195 insertions(+), 6 deletions(-) create mode 100644 app/admin/messages/page.tsx create mode 100644 app/components/ContactForm.tsx create mode 100644 app/utils/sendMessage.ts diff --git a/app/admin/messages/page.tsx b/app/admin/messages/page.tsx new file mode 100644 index 0000000..012c1a6 --- /dev/null +++ b/app/admin/messages/page.tsx @@ -0,0 +1,24 @@ +export default async function MessagesPage() { + const res = await fetch("http://localhost:1337/api/messages"); + const { data } = await res.json(); + + return ( +
+

📬 Messages reçus

+ {data.length === 0 ? ( +

Aucun message reçu.

+ ) : ( + + )} +
+ ); + } + \ No newline at end of file diff --git a/app/components/ContactForm.tsx b/app/components/ContactForm.tsx new file mode 100644 index 0000000..a768349 --- /dev/null +++ b/app/components/ContactForm.tsx @@ -0,0 +1,102 @@ +"use client"; + +import { useState } from "react"; +import { sendMessage } from "../utils/sendMessage"; + +export default function ContactForm() { + const [name, setName] = useState(""); + const [email, setEmail] = useState(""); + const [message, setMessage] = useState(""); + const [status, setStatus] = useState(""); + const [isSuccess, setIsSuccess] = useState(null); + const [isLoading, setIsLoading] = useState(false); // ✅ Nouvel état pour désactiver le bouton + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + + if (!name.trim() || !email.trim() || !message.trim()) { + setStatus("❌ Tous les champs sont obligatoires."); + setIsSuccess(false); + return; + } + + if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) { + setStatus("❌ Email invalide."); + setIsSuccess(false); + return; + } + + setStatus("⏳ Envoi en cours..."); + setIsSuccess(null); + setIsLoading(true); // ✅ Désactive le bouton pendant l'envoi + + try { + await sendMessage(name, email, message); + setStatus("✅ Message envoyé avec succès !"); + setIsSuccess(true); + setName(""); + setEmail(""); + setMessage(""); + } catch (error) { + setStatus("❌ Erreur lors de l'envoi du message."); + setIsSuccess(false); + } finally { + setIsLoading(false); // ✅ Réactive le bouton après l'envoi + } + }; + + return ( +
+

đź“© Contactez-moi

+ + setName(e.target.value)} + className="w-full p-3 border border-gray-300 rounded mb-3 focus:outline-none focus:ring-2 focus:ring-blue-400" + required + /> + + setEmail(e.target.value)} + className="w-full p-3 border border-gray-300 rounded mb-3 focus:outline-none focus:ring-2 focus:ring-blue-400" + required + /> + +