"use client"; import { Star } from "lucide-react"; import { useState } from "react"; import { Rating } from "@/components/shadcnblocks/rating"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Button } from "@/components/ui/button"; import { Progress } from "@/components/ui/progress"; import { cn } from "@/lib/utils"; interface Review { id: string; rating: number; content: string; author: { name: string; avatar?: string; }; date: string; } const DEFAULT_REVIEWS: Review[] = [ { id: "1", rating: 5, content: "واقعاً این محصول را دوست دارم! کیفیتش از انتظارم بهتر بود و زود به دستم رسید. حتماً دوباره می‌خرم.", author: { name: "سارا احمدی", avatar: "/block-media/shadcnblocks/block/avatar-1.webp", }, date: "۲۰ آذر ۱۴۰۳", }, { id: "2", rating: 5, content: "عالی! دقیقاً همان چیزی بود که دنبالش بودم. با این قیمت، ارزش خریدش بالاست.", author: { name: "مازیار رضایی", avatar: "/block-media/shadcnblocks/block/avatar-2.webp", }, date: "۱۸ آذر ۱۴۰۳", }, { id: "3", rating: 4, content: "به‌طور کلی کیفیت خوبی دارد. یک ستاره کم کردم چون ارسال کمی بیشتر از موعد طول کشید، ولی خود محصول عالی است.", author: { name: "نیلوفر حسینی", avatar: "/block-media/shadcnblocks/block/avatar-3.webp", }, date: "۱۵ آذر ۱۴۰۳", }, { id: "4", rating: 5, content: "برای سومین بار سفارش دادم. کیفیت همیشه ثابت است و وقتی سوال داشتم، پشتیبانی سریع جواب داد.", author: { name: "امیر محمدی", }, date: "۱۲ آذر ۱۴۰۳", }, { id: "5", rating: 4, content: "محصول خوبی است و همان‌طور که توضیح داده شده کار می‌کند. به دوستان و خانواده پیشنهاد می‌کنم.", author: { name: "رؤیا کاظمی", avatar: "/block-media/shadcnblocks/block/avatar-7.webp", }, date: "۸ آذر ۱۴۰۳", }, { id: "6", rating: 5, content: "وای! به جزئیات با دقت زیادی توجه شده. معلوم است با وسواس ساخته شده.", author: { name: "کاوه مرادی", avatar: "/block-media/shadcnblocks/block/avatar-4.webp", }, date: "۵ آذر ۱۴۰۳", }, ]; interface Reviews4Props { reviews?: Review[]; className?: string; } const Reviews4 = ({ reviews = DEFAULT_REVIEWS, className }: Reviews4Props) => { const [selectedRating, setSelectedRating] = useState(null); const totalReviews = reviews.length; const averageRating = reviews.reduce((sum, review) => sum + review.rating, 0) / totalReviews; const formattedAverage = averageRating.toLocaleString("fa-IR", { minimumFractionDigits: 1, maximumFractionDigits: 1, }); const ratingCounts = [5, 4, 3, 2, 1].map((star) => ({ star, count: reviews.filter((r) => r.rating === star).length, percentage: (reviews.filter((r) => r.rating === star).length / totalReviews) * 100, })); const filteredReviews = selectedRating ? reviews.filter((r) => r.rating === selectedRating) : reviews; const selectedStarLabel = selectedRating?.toLocaleString("fa-IR") ?? ""; return (
{formattedAverage}

{totalReviews.toLocaleString("fa-IR")} نظر

{ratingCounts.map(({ star, count, percentage }) => ( ))}
{selectedRating && (
نمایش نظرات {selectedStarLabel} ستاره
)}
{filteredReviews.map((review) => (
{review.author.name .split(/\s+/) .slice(0, 2) .map((part) => part[0]) .join("")}

{review.author.name}

{review.date}

{review.content}

))}
{filteredReviews.length === 0 && selectedRating && (

هنوز نظری با {selectedStarLabel} ستاره ثبت نشده است.

)}
); }; export { Reviews4 };