import { useState } from 'react'; import StarRating from './StarRating'; interface ReviewFormProps { productId: string; onSubmit: (review: { rating: number; title: string; comment: string; images: File[] }) => void; isSubmitting?: boolean; } export default function ReviewForm({ productId, onSubmit, isSubmitting = false }: ReviewFormProps) { const [rating, setRating] = useState(0); const [hoverRating, setHoverRating] = useState(0); const [title, setTitle] = useState(''); const [comment, setComment] = useState(''); const [images, setImages] = useState([]); const [imagePreviews, setImagePreviews] = useState([]); const [errors, setErrors] = useState>({}); const handleImageChange = (e: React.ChangeEvent) => { const files = Array.from(e.target.files || []); if (files.length + images.length > 5) { setErrors(prev => ({ ...prev, images: 'สูงสุด 5 รูปเท่านั้น' })); return; } setImages(prev => [...prev, ...files]); const newPreviews = files.map(file => URL.createObjectURL(file)); setImagePreviews(prev => [...prev, ...newPreviews]); setErrors(prev => { const { images: _, ...rest } = prev; return rest; }); }; const removeImage = (index: number) => { setImages(prev => prev.filter((_, i) => i !== index)); setImagePreviews(prev => { URL.revokeObjectURL(prev[index]); return prev.filter((_, i) => i !== index); }); }; const validate = () => { const newErrors: Record = {}; if (rating === 0) newErrors.rating = 'กรุณาให้คะแนน'; if (!comment.trim()) newErrors.comment = 'กรุณาเขียนรีวิว'; if (comment.length < 10) newErrors.comment = 'รีวิวต้องมีอย่างน้อย 10 ตัวอักษร'; setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!validate()) return; await onSubmit({ rating, title, comment, images }); // Reset form setRating(0); setHoverRating(0); setTitle(''); setComment(''); setImages([]); setImagePreviews([]); }; return (

เขียนรีวิว

{/* Rating */}
{[1, 2, 3, 4, 5].map((star) => ( ))} {rating > 0 && ( {rating === 1 ? 'ไม่พอใจมาก' : rating === 2 ? 'ไม่พอใจ' : rating === 3 ? 'พอใช้' : rating === 4 ? 'พอใจ' : 'พอใจมาก'} )}
{errors.rating &&

{errors.rating}

}
{/* Title */}
setTitle(e.target.value)} placeholder="สรุปประสบการณ์ของคุณ" className="w-full border rounded-lg px-3 py-2" maxLength={100} />
{/* Comment */}