"use client"; import { Button, Heading, Text, Textarea } from "@/components/atoms"; import { useAuth } from "@/lib/auth-context"; import { useState } from "react"; import type { ReviewModalProps } from "./Modal.types"; interface CreateReviewInput { reviewerId: string; eateryId: string; rating: number; comment?: string; } export default function ReviewModal({ isOpen, onClose, eateryId, }: ReviewModalProps) { const { user } = useAuth(); const [rating, setRating] = useState(0); const [hovered, setHovered] = useState(0); const [review, setReview] = useState(""); const [submitted, setSubmitted] = useState(false); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); if (!isOpen) return null; const handleSubmit = async () => { if (!eateryId) return; const input: CreateReviewInput = { reviewerId: user?.id || "", eateryId, rating, ...(review.trim() ? { comment: review.trim() } : {}), }; setLoading(true); setError(null); try { const res = await fetch("/api/eatery/review", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(input), }); if (!res.ok) throw new Error(`Request failed: ${res.status}`); setSubmitted(true); } catch (err) { setError(err instanceof Error ? err.message : "Failed to submit review."); } finally { setLoading(false); } }; const handleClose = () => { setRating(0); setHovered(0); setReview(""); setSubmitted(false); setError(null); onClose(); }; return (
{/* Backdrop */}