From 744283f167a8b0d6d98bceb72610b153fbcf2497 Mon Sep 17 00:00:00 2001 From: mstfyldz Date: Fri, 5 Jun 2026 17:45:15 +0300 Subject: [PATCH] feat: implement public contact and reservation forms connected to DB --- app/actions.ts | 30 ++++++++++++ components/Contact.tsx | 87 +++++++++++++++++++++++++++------ components/Reservation.tsx | 98 +++++++++++++++++++++++++++++++------- 3 files changed, 183 insertions(+), 32 deletions(-) create mode 100644 app/actions.ts diff --git a/app/actions.ts b/app/actions.ts new file mode 100644 index 0000000..030097e --- /dev/null +++ b/app/actions.ts @@ -0,0 +1,30 @@ +'use server'; + +import { prisma } from '@/lib/db'; + +export async function submitContactMessage(formData: FormData) { + const name = formData.get('name') as string; + const email = formData.get('email') as string; + const subject = formData.get('subject') as string | null; + const message = formData.get('message') as string; + + if (!name || !email || !message) { + return { error: 'Gerekli alanları doldurunuz.' }; + } + + try { + await prisma.contactMessage.create({ + data: { + name, + email, + subject, + message, + isRead: false, + } + }); + return { success: true }; + } catch (error) { + console.error('Mesaj gönderilirken hata:', error); + return { error: 'Mesajınız gönderilirken bir hata oluştu. Lütfen tekrar deneyin.' }; + } +} diff --git a/components/Contact.tsx b/components/Contact.tsx index 1f01114..5d99cd6 100644 --- a/components/Contact.tsx +++ b/components/Contact.tsx @@ -1,8 +1,30 @@ "use client"; -import { MapPin, Phone, Mail, Clock } from "lucide-react"; +import { MapPin, Phone, Mail, Clock, Send } from "lucide-react"; +import { useState } from "react"; +import { submitContactMessage } from "@/app/actions"; export default function Contact({ dict, dbSettings }: { dict: any, dbSettings?: any }) { + const [isSubmitting, setIsSubmitting] = useState(false); + const [status, setStatus] = useState<{ type: 'success' | 'error', message: string } | null>(null); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setIsSubmitting(true); + setStatus(null); + + const formData = new FormData(e.currentTarget); + const result = await submitContactMessage(formData); + + if (result.error) { + setStatus({ type: 'error', message: result.error }); + } else { + setStatus({ type: 'success', message: 'Mesajınız başarıyla gönderildi. En kısa sürede dönüş yapacağız.' }); + (e.target as HTMLFormElement).reset(); + } + setIsSubmitting(false); + }; + return (
@@ -11,7 +33,7 @@ export default function Contact({ dict, dbSettings }: { dict: any, dbSettings?:

{dict.contact.heading}

-
+
{/* İletişim Bilgileri */}
@@ -69,21 +91,58 @@ export default function Contact({ dict, dbSettings }: { dict: any, dbSettings?:
- {/* Google Maps Embed */} -
-