"use client" import { useState, useEffect } from "react" import { useSession } from "next-auth/react" import { formatDistanceToNow } from "date-fns" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Loader2, Search, Filter } from "lucide-react" import Link from "next/link" interface Inquiry { id: string name: string email: string projectType: string budget: string | null status: string createdAt: string } const statusColors: Record = { NEW: "bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-300", IN_PROGRESS: "bg-amber-100 text-amber-800 dark:bg-amber-900 dark:text-amber-300", QUOTED: "bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-300", WON: "bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-300", LOST: "bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-300", } export default function InquiriesPage() { const { data: session } = useSession() const [inquiries, setInquiries] = useState([]) const [loading, setLoading] = useState(true) const [searchTerm, setSearchTerm] = useState("") useEffect(() => { if (session) { fetchInquiries() } }, [session]) const fetchInquiries = async () => { try { const res = await fetch("http://localhost:5000/api/admin/inquiries", { headers: { Authorization: `Bearer ${session?.user?.id}`, // using user id as mock token for now }, }) if (res.ok) { const data = await res.json() setInquiries(data) } } catch (error) { console.error("Failed to fetch inquiries:", error) } finally { setLoading(false) } } const filteredInquiries = inquiries.filter( (inq) => inq.name.toLowerCase().includes(searchTerm.toLowerCase()) || inq.email.toLowerCase().includes(searchTerm.toLowerCase()) || (inq.projectType && inq.projectType.toLowerCase().includes(searchTerm.toLowerCase())) ) if (loading) { return (
) } return (

Inquiry Management

Manage and track client quote requests.

setSearchTerm(e.target.value)} className="max-w-sm" />
Client
Project
Budget
Date
Status
Actions
{filteredInquiries.length === 0 ? (
No inquiries found.
) : (
{filteredInquiries.map((inquiry) => (
{inquiry.name}
{inquiry.email}
{inquiry.projectType || '—'}
{inquiry.budget || '—'}
{formatDistanceToNow(new Date(inquiry.createdAt), { addSuffix: true })}
{inquiry.status.replace('_', ' ')}
))}
)}
) }