'use client'; import { useState, useEffect } from 'react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Textarea } from '@/components/ui/textarea'; import { Label } from '@/components/ui/label'; interface Settings { contact_phone: string; contact_email: string; contact_address: string; contact_address_line_2: string; google_maps_url: string; social_facebook: string; social_instagram: string; social_twitter: string; } interface CaptchaQuestion { question: string; answer: number; } export default function ContactSection() { const [settings, setSettings] = useState(null); const [formData, setFormData] = useState({ name: '', email: '', phone: '', subject: '', message: '', captcha: '' }); const [captcha, setCaptcha] = useState({ question: '', answer: 0 }); const [isSubmitting, setIsSubmitting] = useState(false); const [submitStatus, setSubmitStatus] = useState<'idle' | 'success' | 'error'>('idle'); const [errors, setErrors] = useState<{[key: string]: string}>({}); useEffect(() => { fetchSettings(); generateCaptcha(); }, []); const generateCaptcha = () => { const num1 = Math.floor(Math.random() * 20) + 1; const num2 = Math.floor(Math.random() * 20) + 1; const operations = ['+', '-', '*']; const operation = operations[Math.floor(Math.random() * operations.length)]; let answer: number; let question: string; switch (operation) { case '+': answer = num1 + num2; question = `${num1} + ${num2}`; break; case '-': // Ensure positive result const larger = Math.max(num1, num2); const smaller = Math.min(num1, num2); answer = larger - smaller; question = `${larger} - ${smaller}`; break; case '*': // Use smaller numbers for multiplication const smallNum1 = Math.floor(Math.random() * 10) + 1; const smallNum2 = Math.floor(Math.random() * 10) + 1; answer = smallNum1 * smallNum2; question = `${smallNum1} × ${smallNum2}`; break; default: answer = num1 + num2; question = `${num1} + ${num2}`; } setCaptcha({ question, answer }); }; const fetchSettings = async () => { try { const response = await fetch('/api/settings'); const data = await response.json(); if (data.success) { setSettings(data.data); } } catch (error) { console.error('Error fetching settings:', error); } }; const handleInputChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); // Clear error when user starts typing if (errors[name]) { setErrors(prev => ({ ...prev, [name]: '' })); } }; const validateForm = () => { const newErrors: {[key: string]: string} = {}; if (!formData.name.trim()) { newErrors.name = 'Nama lengkap wajib diisi'; } if (!formData.email.trim()) { newErrors.email = 'Email wajib diisi'; } else if (!/\S+@\S+\.\S+/.test(formData.email)) { newErrors.email = 'Format email tidak valid'; } if (!formData.message.trim()) { newErrors.message = 'Pesan wajib diisi'; } if (!formData.captcha.trim()) { newErrors.captcha = 'Captcha wajib diisi'; } else if (parseInt(formData.captcha) !== captcha.answer) { newErrors.captcha = 'Jawaban captcha salah'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!validateForm()) { return; } setIsSubmitting(true); setSubmitStatus('idle'); try { const response = await fetch('/api/contact', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ name: formData.name, email: formData.email, phone: formData.phone, subject: formData.subject, message: formData.message }), }); const data = await response.json(); if (data.success) { setSubmitStatus('success'); setFormData({ name: '', email: '', phone: '', subject: '', message: '', captcha: '' }); generateCaptcha(); // Generate new captcha } else { setSubmitStatus('error'); } } catch (error) { console.error('Error submitting form:', error); setSubmitStatus('error'); } finally { setIsSubmitting(false); } }; return (

Hubungi Kami

Siap membantu mewujudkan kebutuhan konveksi Anda. Hubungi kami untuk konsultasi gratis!

{/* Contact Information */}

Informasi Kontak

{/* Phone */}

Telepon

{settings?.contact_phone || '+62 812-3456-7890'}

{/* Email */}

Email

{settings?.contact_email || 'info@murbaykonveksi.com'}

{/* Address */}

Alamat

{settings?.contact_address || 'Jl. Industri No. 123'} {settings?.contact_address_line_2 && ( <>
{settings.contact_address_line_2} )}

{/* Social Media */}

Ikuti Kami

{settings?.social_facebook && ( )} {settings?.social_instagram && ( )} {settings?.social_twitter && ( )}
{/* Google Maps */} {settings?.google_maps_url && (

Lokasi Kami

)}
{/* Contact Form */}

Kirim Pesan

{errors.name &&

{errors.name}

}
{errors.email &&

{errors.email}

}