contact integration updated
This commit is contained in:
parent
cca0a5b4fc
commit
2cf4fe57f7
20
src/app/api/send-email/route.ts
Normal file
20
src/app/api/send-email/route.ts
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
import { NextResponse } from 'next/server';
|
||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
|
export async function POST(request: Request) {
|
||||||
|
try {
|
||||||
|
const body = await request.json();
|
||||||
|
const res = await axios.post(
|
||||||
|
"https://mailserver.metatronnest.com/send",
|
||||||
|
body,
|
||||||
|
{ headers: { "Content-Type": "application/json" } }
|
||||||
|
);
|
||||||
|
return NextResponse.json({ success: true, data: res.data });
|
||||||
|
} catch (error: any) {
|
||||||
|
console.error("Email send error:", error.message);
|
||||||
|
return NextResponse.json(
|
||||||
|
{ success: false, error: error.message },
|
||||||
|
{ status: 500 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
|
import axios from "axios";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import { Phone, Mail, MapPin, Clock, UtensilsCrossed, ShoppingBag, Truck, ChefHat } from "lucide-react";
|
import { Phone, Mail, MapPin, Clock, UtensilsCrossed, ShoppingBag, Truck, ChefHat } from "lucide-react";
|
||||||
import SubpageLayout from "@/components/SubpageLayout";
|
import SubpageLayout from "@/components/SubpageLayout";
|
||||||
@ -28,14 +29,33 @@ export default function ContactPage() {
|
|||||||
const [formData, setFormData] = useState({ name: "", email: "", phone: "", subject: "", msg: "" });
|
const [formData, setFormData] = useState({ name: "", email: "", phone: "", subject: "", msg: "" });
|
||||||
const [submitted, setSubmitted] = useState(false);
|
const [submitted, setSubmitted] = useState(false);
|
||||||
|
|
||||||
const handleSubmit = (e: React.FormEvent) => {
|
const handleSubmit = async (e: React.FormEvent) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
if (formData.name && formData.email && formData.msg) {
|
if (formData.name && formData.email && formData.msg) {
|
||||||
setSubmitted(true);
|
const emailData = {
|
||||||
setTimeout(() => {
|
name: formData.name,
|
||||||
setSubmitted(false);
|
phone: formData.phone,
|
||||||
setFormData({ name: "", email: "", phone: "", subject: "", msg: "" });
|
email: formData.email,
|
||||||
}, 5000);
|
subject: formData.subject || "New Contact Message",
|
||||||
|
message: `Name: ${formData.name}<br />Email: ${formData.email}<br />Phone: ${formData.phone}<br />Subject: ${formData.subject}<br /><br />Message: ${formData.msg}`,
|
||||||
|
to: "mydosaplacewaterloo@gmail.com",
|
||||||
|
senderName: "My Dosa Place Contact Form"
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
await axios.post(
|
||||||
|
"/api/send-email",
|
||||||
|
emailData,
|
||||||
|
{ headers: { "Content-Type": "application/json" } }
|
||||||
|
);
|
||||||
|
setSubmitted(true);
|
||||||
|
setTimeout(() => {
|
||||||
|
setSubmitted(false);
|
||||||
|
setFormData({ name: "", email: "", phone: "", subject: "", msg: "" });
|
||||||
|
}, 5000);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Failed to send message", error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
|
import axios from "axios";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import { User, Mail, Phone, Calendar, Clock, Users, MapPin } from "lucide-react";
|
import { User, Mail, Phone, Calendar, Clock, Users, MapPin } from "lucide-react";
|
||||||
import SubpageLayout from "@/components/SubpageLayout";
|
import SubpageLayout from "@/components/SubpageLayout";
|
||||||
@ -19,13 +20,33 @@ export default function ReservationPage() {
|
|||||||
});
|
});
|
||||||
const [reserved, setReserved] = useState(false);
|
const [reserved, setReserved] = useState(false);
|
||||||
|
|
||||||
const handleReserve = (e: React.FormEvent) => {
|
const handleReserve = async (e: React.FormEvent) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
setReserved(true);
|
|
||||||
setTimeout(() => {
|
const emailData = {
|
||||||
setReserved(false);
|
name: formData.name,
|
||||||
setFormData({ ...formData, name: "", email: "", phone: "", date: "" });
|
phone: formData.phone,
|
||||||
}, 6000);
|
email: formData.email,
|
||||||
|
subject: "New Table Reservation",
|
||||||
|
message: `Name: ${formData.name}<br />Email: ${formData.email}<br />Phone: ${formData.phone}<br />Guests: ${formData.guests}<br />Date: ${formData.date}<br />Time: ${formData.time}<br />Area: ${formData.area}`,
|
||||||
|
to: "mydosaplacewaterloo@gmail.com",
|
||||||
|
senderName: "My Dosa Place Reservation Form"
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
await axios.post(
|
||||||
|
"/api/send-email",
|
||||||
|
emailData,
|
||||||
|
{ headers: { "Content-Type": "application/json" } }
|
||||||
|
);
|
||||||
|
setReserved(true);
|
||||||
|
setTimeout(() => {
|
||||||
|
setReserved(false);
|
||||||
|
setFormData({ ...formData, name: "", email: "", phone: "", date: "" });
|
||||||
|
}, 6000);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Failed to send reservation", error);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -123,11 +144,11 @@ export default function ReservationPage() {
|
|||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<div className="flex items-center gap-4 mb-8 w-full justify-center">
|
<div className="flex items-center gap-4 mb-8 w-full justify-center">
|
||||||
<div className="w-16 h-[1px] bg-[#bc9e65]" />
|
<div className="w-16 h-[1px] bg-[#bc9e65]" />
|
||||||
<svg className="w-4 h-4 text-[#bc9e65]" viewBox="0 0 24 24" fill="currentColor">
|
<svg className="w-4 h-4 text-[#bc9e65]" viewBox="0 0 24 24" fill="currentColor">
|
||||||
<path d="M12 2L15 8L22 9L17 14L18.5 21L12 17.5L5.5 21L7 14L2 9L9 8L12 2Z" />
|
<path d="M12 2L15 8L22 9L17 14L18.5 21L12 17.5L5.5 21L7 14L2 9L9 8L12 2Z" />
|
||||||
</svg>
|
</svg>
|
||||||
<div className="w-16 h-[1px] bg-[#bc9e65]" />
|
<div className="w-16 h-[1px] bg-[#bc9e65]" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{reserved ? (
|
{reserved ? (
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user