import React, { useState } from 'react'; import { Star, CheckCircle2, X, Loader2, MessageSquare } from 'lucide-react'; import { supabase } from '../../lib/supabaseClient'; /** * CSATModal — shown when a ticket is resolved and no rating has been given yet. * * Props: * - ticketId: string * - onSubmit: () => void — called after a rating is saved successfully * - onDismiss: () => void — called if the user closes without rating */ export default function CSATModal({ ticketId, onSubmit, onDismiss }) { const [hovered, setHovered] = useState(0); const [selected, setSelected] = useState(0); const [comment, setComment] = useState(''); const [submitted, setSubmitted] = useState(false); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const ratingLabels = { 1: 'Very Dissatisfied', 2: 'Dissatisfied', 3: 'Neutral', 4: 'Satisfied', 5: 'Very Satisfied', }; const handleSubmit = async () => { if (!selected) { setError('Please select a rating.'); return; } setLoading(true); setError(''); try { const { error: upError } = await supabase .from('tickets') .update({ csat_rating: selected, csat_comment: comment.trim() || null, }) .eq('id', ticketId); if (upError) throw upError; setSubmitted(true); setTimeout(() => { onSubmit?.(selected); }, 1800); } catch (err) { setError('Failed to submit. Please try again.'); console.error(err); } finally { setLoading(false); } }; if (submitted) { return (
Your feedback helps us improve.
Your ticket has been resolved. Please rate our support.
{ratingLabels[hovered || selected]}
)}{error}
)} {/* Actions */}