'use client'; import React, { FormEvent, useEffect, useMemo, useState } from 'react'; import Link from 'next/link'; import { CheckCircle2, Lightbulb, MessageSquare, Star, TriangleAlert } from 'lucide-react'; import { AnnouncementBar } from '@/layout/AnnouncementBar'; import { Header } from '@/layout/Header'; import { Navbar } from '@/layout/Navbar'; import { Footer } from '@/layout/Footer'; import { StickyHeaderSpacer } from '@/components/StickyHeaderSpacer'; import { FloatingButtons } from '@/components/FloatingButtons'; import { storefrontService, type FooterInfo, type StorefrontSettings, MOCK_FOOTER_INFO, } from '@/services/api/storefrontService'; import { buildFeedbackPage } from '@/lib/feedbackContent'; const HIGHLIGHT_ICONS = { idea: Lightbulb, issue: TriangleAlert, praise: MessageSquare, } as const; const fieldClass = 'w-full px-3 py-2.5 bg-white border border-[#e5e5e5] rounded-lg text-[13px] text-[#222] outline-none focus:border-primary transition-colors'; const labelClass = 'block text-[12px] font-bold text-[#1E293B] mb-1.5'; export default function FeedbackPage() { const [footer, setFooter] = useState(MOCK_FOOTER_INFO); const [settings, setSettings] = useState({ store_name: 'iFixKart' }); const [name, setName] = useState(''); const [email, setEmail] = useState(''); const [topic, setTopic] = useState('suggestion'); const [orderNo, setOrderNo] = useState(''); const [rating, setRating] = useState(0); const [message, setMessage] = useState(''); const [submitted, setSubmitted] = useState(false); useEffect(() => { let cancelled = false; Promise.all([ storefrontService.getFooterInfo(), storefrontService.getSettings(), ]).then(([info, store]) => { if (cancelled) return; if (info) setFooter(info); if (store) setSettings(store); }); return () => { cancelled = true; }; }, []); const storeName = settings.store_name || 'iFixKart'; const supportEmail = footer.email || 'support@ifixkart.com'; const doc = useMemo(() => buildFeedbackPage(storeName), [storeName]); const handleSubmit = (e: FormEvent) => { e.preventDefault(); const topicLabel = doc.topics.find((t) => t.id === topic)?.label || topic; const body = [ `Name: ${name}`, `Email: ${email}`, `Topic: ${topicLabel}`, orderNo ? `Order / job: ${orderNo}` : '', rating ? `Rating: ${rating} / 5` : '', '', message, ] .filter((line) => line !== '') .join('\n'); const href = `mailto:${supportEmail}?subject=${encodeURIComponent( `${storeName} feedback — ${topicLabel}` )}&body=${encodeURIComponent(body)}`; window.location.href = href; setSubmitted(true); }; return (

{doc.heading}

{doc.intro}

{doc.highlights.map((item) => { const Icon = HIGHLIGHT_ICONS[item.id as keyof typeof HIGHLIGHT_ICONS] || MessageSquare; return (

{item.title}

{item.detail}

); })}
{submitted ? (

Thanks for the feedback

Your mail app should open with the message ready to send to {supportEmail}. If it did not, copy your note and email us directly.

) : (

Send a message

Fields marked with * are required.

setName(e.target.value)} className={fieldClass} autoComplete="name" />
setEmail(e.target.value)} className={fieldClass} autoComplete="email" />
setOrderNo(e.target.value)} className={fieldClass} placeholder="Optional" />

How was your experience?

{[1, 2, 3, 4, 5].map((stars) => ( ))}