import InputError from '@/components/input-error'; import LoadingButton from '@/components/loading-button'; import { Button } from '@/components/ui/button'; import { Dialog, DialogClose, DialogContent, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; import { Label } from '@/components/ui/label'; import { Textarea } from '@/components/ui/textarea'; import { cn } from '@/lib/utils'; import { useForm } from '@inertiajs/react'; import { Star } from 'lucide-react'; import { useEffect, useState } from 'react'; interface Props { examId: number; review?: ExamReview; handler: React.ReactNode; onSuccess?: () => void; } const ReviewForm = ({ examId, review, handler, onSuccess }: Props) => { const [open, setOpen] = useState(false); const [hoveredRating, setHoveredRating] = useState(0); const { data, setData, post, put, reset, processing, errors } = useForm({ exam_id: examId, rating: review?.rating || 5, review: review?.review || '', }); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (review) { put(route('student.exam-reviews.update', review.id), { preserveScroll: true, onSuccess: () => { setOpen(false); onSuccess?.(); }, }); } else { post(route('student.exam-reviews.store'), { preserveScroll: true, onSuccess: () => { reset(); setOpen(false); onSuccess?.(); }, }); } }; useEffect(() => { if (!open) { reset(); } }, [open]); return ( {handler} {review ? 'Edit Review' : 'Write a Review'}
{[1, 2, 3, 4, 5].map((rating) => ( ))}