73 lines
2.1 KiB
TypeScript
73 lines
2.1 KiB
TypeScript
"use client"
|
||
|
||
import { useState } from "react"
|
||
import { Button } from "./ui/button"
|
||
import { Textarea } from "./ui/textarea"
|
||
import { Label } from "./ui/label"
|
||
import { Star } from 'lucide-react'
|
||
import { useAuth } from "@/contexts/auth-context"
|
||
import Link from "next/link"
|
||
|
||
interface ReviewFormProps {
|
||
productId: number
|
||
}
|
||
|
||
export function ReviewForm({ productId }: ReviewFormProps) {
|
||
const [rating, setRating] = useState(0)
|
||
const [comment, setComment] = useState("")
|
||
const { isLoggedIn } = useAuth()
|
||
|
||
const handleSubmit = (e: React.FormEvent) => {
|
||
e.preventDefault()
|
||
// Here you would typically send the review data to your backend
|
||
console.log("Submitting review:", { productId, rating, comment })
|
||
// Reset form after submission
|
||
setRating(0)
|
||
setComment("")
|
||
}
|
||
|
||
if (!isLoggedIn) {
|
||
return (
|
||
<p className="text-gray-600">Чтобы оставить отзыв, пожалуйста, <Link href="/login" className="text-blue-600 hover:underline">войдите в систему</Link>.</p>
|
||
)
|
||
}
|
||
|
||
return (
|
||
<form onSubmit={handleSubmit} className="space-y-4">
|
||
<div>
|
||
<Label htmlFor="rating">Рейтинг</Label>
|
||
<div className="flex items-center gap-1">
|
||
{[1, 2, 3, 4, 5].map((star) => (
|
||
<button
|
||
key={star}
|
||
type="button"
|
||
onClick={() => setRating(star)}
|
||
className="focus:outline-none"
|
||
>
|
||
<Star
|
||
className={`h-6 w-6 ${
|
||
star <= rating ? 'text-yellow-400 fill-yellow-400' : 'text-gray-300'
|
||
}`}
|
||
/>
|
||
</button>
|
||
))}
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<Label htmlFor="comment">Комментарий</Label>
|
||
<Textarea
|
||
id="comment"
|
||
value={comment}
|
||
onChange={(e) => setComment(e.target.value)}
|
||
rows={4}
|
||
placeholder="Напишите ваш отзыв здесь..."
|
||
/>
|
||
</div>
|
||
<Button type="submit" disabled={rating === 0 || comment.trim() === ""}>
|
||
Отправить отзыв
|
||
</Button>
|
||
</form>
|
||
)
|
||
}
|
||
|