import React, { useState, useEffect } from "react"; import { feedbackAPI } from "../services/api"; interface FeedbackModalProps { show: boolean; onClose: () => void; } const FeedbackModal: React.FC = ({ show, onClose }) => { const [feedbackText, setFeedbackText] = useState(""); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const [success, setSuccess] = useState(false); const MIN_LENGTH = 5; const MAX_LENGTH = 5000; const charCount = feedbackText.length; const isValid = charCount >= MIN_LENGTH && charCount <= MAX_LENGTH; useEffect(() => { if (!show) { // Reset form when modal closes setTimeout(() => { setFeedbackText(""); setError(""); setSuccess(false); }, 300); } }, [show]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!isValid) { setError( `Feedback must be between ${MIN_LENGTH} and ${MAX_LENGTH} characters` ); return; } setLoading(true); setError(""); try { // Capture the current URL const currentUrl = window.location.href; await feedbackAPI.submitFeedback({ feedbackText: feedbackText.trim(), url: currentUrl, }); setSuccess(true); setLoading(false); } catch (err: any) { setError( err.response?.data?.error || "Failed to submit feedback. Please try again." ); setLoading(false); } }; if (!show) return null; return ( <>
Share Feedback
{success ? (
Thank you!

Your feedback has been submitted successfully! We appreciate you making Village Share better!

) : ( <>

Share your thoughts, report bugs, or suggest improvements. Your feedback helps us make Village Share better for everyone!

{error && (
{error}
)}