diff --git a/frontend/src/components/thread/content/ThreadContent.tsx b/frontend/src/components/thread/content/ThreadContent.tsx index 67df806f..25a956e2 100644 --- a/frontend/src/components/thread/content/ThreadContent.tsx +++ b/frontend/src/components/thread/content/ThreadContent.tsx @@ -903,7 +903,7 @@ export const ThreadContent: React.FC = ({ return ( -
+
); diff --git a/frontend/src/components/thread/feedback-modal.tsx b/frontend/src/components/thread/feedback-modal.tsx index 2049f2ca..20dd0af7 100644 --- a/frontend/src/components/thread/feedback-modal.tsx +++ b/frontend/src/components/thread/feedback-modal.tsx @@ -6,77 +6,83 @@ import { Textarea } from "../ui/textarea"; import { toast } from "sonner"; import { backendApi } from '@/lib/api-client'; -type SubmitStatus = 'idle' | 'submitting' | 'success' | 'error'; - interface FeedbackProps { messageId: string; initialFeedback?: boolean | null; } export default function Feedback({ messageId, initialFeedback = null }: FeedbackProps) { - const [open, setOpen] = useState(false); - const [responseIsGood, setResponseIsGood] = useState(initialFeedback); - const [feedback, setFeedback] = useState(''); - const [submitStatus, setSubmitStatus] = useState(initialFeedback !== null ? 'success' : 'idle'); + const [open, setOpen] = useState(false); + const [submittedFeedback, setSubmittedFeedback] = useState(initialFeedback); + const [feedback, setFeedback] = useState(''); + const [isSubmitting, setIsSubmitting] = useState(false); + const [currentSelection, setCurrentSelection] = useState(null); const handleClick = (isGood: boolean) => { - setResponseIsGood(isGood); + setCurrentSelection(isGood); setOpen(true); }; const handleSubmit = async () => { - if (responseIsGood === null) return; - setSubmitStatus('submitting'); + if (currentSelection === null) return; + + setIsSubmitting(true); try { const { success } = await backendApi.post('/feedback/', { message_id: messageId, - is_good: responseIsGood, + is_good: currentSelection, feedback: feedback.trim() || null, }); - setSubmitStatus('success'); + if (success) { + setSubmittedFeedback(currentSelection); toast.success('Feedback submitted - thank you!'); setOpen(false); setFeedback(''); - setSubmitStatus('success'); + setCurrentSelection(null); } } catch (error) { console.error('Failed to submit feedback:', error); - setSubmitStatus('error'); toast.error('Failed to submit feedback'); + } finally { + setIsSubmitting(false); + } + }; + + const handleOpenChange = (newOpen: boolean) => { + setOpen(newOpen); + if (!newOpen) { + // Reset form state when closing without submitting + setFeedback(''); + setCurrentSelection(null); } }; return ( -
- - - - + + + Feedback - - {`What was ${responseIsGood === false ? 'un' : ''}satisfying about this response?`} + + {`What was ${currentSelection === false ? 'un' : ''}satisfying about this response?`}