import { useState } from 'react'; import { supabase } from '@/integrations/supabase/client'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Textarea } from '@/components/ui/textarea'; import { toast } from '@/hooks/use-toast'; import { Star, X } from 'lucide-react'; interface ReviewModalProps { open: boolean; onOpenChange: (open: boolean) => void; userId: string; productId?: string | null; orderId?: string | null; type: 'consulting' | 'bootcamp' | 'webinar' | 'general'; contextLabel?: string; onSuccess?: () => void; } export function ReviewModal({ open, onOpenChange, userId, productId, orderId, type, contextLabel, onSuccess, }: ReviewModalProps) { const [rating, setRating] = useState(0); const [hoverRating, setHoverRating] = useState(0); const [title, setTitle] = useState(''); const [body, setBody] = useState(''); const [submitting, setSubmitting] = useState(false); const handleSubmit = async () => { if (rating === 0) { toast({ title: 'Error', description: 'Pilih rating terlebih dahulu', variant: 'destructive' }); return; } if (!title.trim()) { toast({ title: 'Error', description: 'Judul tidak boleh kosong', variant: 'destructive' }); return; } setSubmitting(true); const { error } = await supabase.from('reviews').insert({ user_id: userId, product_id: productId || null, order_id: orderId || null, type, rating, title: title.trim(), body: body.trim() || null, is_approved: false, }); if (error) { console.error('Review submit error:', error); toast({ title: 'Error', description: 'Gagal mengirim ulasan', variant: 'destructive' }); } else { toast({ title: 'Berhasil', description: 'Terima kasih! Ulasan Anda akan ditinjau oleh admin.' }); // Reset form setRating(0); setTitle(''); setBody(''); onOpenChange(false); onSuccess?.(); } setSubmitting(false); }; const handleClose = () => { if (!submitting) { onOpenChange(false); } }; return ( Beri Ulasan {contextLabel && ( {contextLabel} )}
{[1, 2, 3, 4, 5].map((i) => ( ))}
setTitle(e.target.value)} placeholder="Ringkasan pengalaman Anda" className="border-2" maxLength={100} />