"use client"; import React, { useState } from "react"; import { X, Send, AlertCircle } from "lucide-react"; import axios from "axios"; import { motion, AnimatePresence } from "framer-motion"; const getToken = () => typeof window !== 'undefined' ? localStorage.getItem('access_token') : null; export default function FeedbackModal({ isOpen, onClose }: { isOpen: boolean, onClose: () => void }) { const [issueType, setIssueType] = useState("Bug"); const [message, setMessage] = useState(""); const [status, setStatus] = useState<"idle" | "loading" | "success" | "error">("idle"); const [errorMsg, setErrorMsg] = useState(""); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (message.trim().length < 5) { setErrorMsg("Message must be at least 5 characters."); return; } setStatus("loading"); setErrorMsg(""); try { const baseUrl = process.env.NEXT_PUBLIC_BACKEND_URL || 'http://localhost:8000'; await axios.post(`${baseUrl}/issues/`, { issue_type: issueType, message }, { headers: { Authorization: `Bearer ${getToken()}` } }); setStatus("success"); setTimeout(() => { setStatus("idle"); setMessage(""); onClose(); }, 2000); } catch (err: any) { setStatus("error"); setErrorMsg(err.response?.data?.detail || "Failed to submit feedback."); } }; if (!isOpen) return null; return ( e.stopPropagation()} className="bg-[var(--theme-bg)] border border-theme-border shadow-2xl rounded-2xl w-full max-w-lg overflow-hidden flex flex-col" >

Report an Issue

{status === "success" ? (

Thanks for your feedback!

) : (
{errorMsg && (
{errorMsg}
)}