2026-07-11 21:21:29 +03:30
"use client" ;
import {
BadgeCheck ,
ChevronRight ,
Clock ,
MessageSquareCode ,
} from "lucide-react" ;
import { useEffect , useMemo , useState } from "react" ;
import { Avatar , AvatarImage } from "@/components/ui/avatar" ;
import { Badge } from "@/components/ui/badge" ;
import { Button } from "@/components/ui/button" ;
import { Card } from "@/components/ui/card" ;
import { cn } from "@/lib/utils" ;
interface DataItem {
id : string ;
name : string ;
username : string ;
date : string ;
avatar : string ;
content : string ;
}
const DATA : DataItem [] = [
{
id : "1" ,
name : "امیر محمدی" ,
username : "amir_mohammadi" ,
date : "۵ مهر ۱۴۲" ,
avatar :
"/block-media/shadcnblocks/block/avatar-4.webp" ,
content :
2026-07-21 19:25:31 +03:30
"این سامانه مدیریت ارتباط با مشتری کاملاً نحوه مدیریت قیف فروش را تغییر داد. لیدها، فرصتها و پیگیریها در یک جریان شفافاند و نرخ تبدیل ما بالا رفته." ,
2026-07-11 21:21:29 +03:30
},
{
id : "2" ,
name : "نیلوفر حسینی" ,
username : "niloofar_h" ,
date : "۳۰ شهریور ۱۴۲" ,
avatar :
"/block-media/shadcnblocks/block/avatar-1.webp" ,
content :
2026-07-15 20:22:14 +02:00
"هماهنگی فروش و بازاریابی واقعاً برجسته است؛ هر لید با زمینه کامل به نماینده میرسد. دیگر ایمیلهای پراکنده و دادههای تکراری نداریم." ,
2026-07-11 21:21:29 +03:30
},
{
id : "3" ,
name : "سارا احمدی" ,
username : "sara_ahmadi" ,
date : "۲۵ شهریور ۱۴۲" ,
avatar :
"/block-media/shadcnblocks/block/avatar-3.webp" ,
2026-07-15 20:22:14 +02:00
content : "داشبورد قیف فروش تحولآفرین است!" ,
2026-07-11 21:21:29 +03:30
},
{
id : "4" ,
name : "پارسا موسوی" ,
username : "parsa_mousavi" ,
date : "۲۰ شهریور ۱۴۲" ,
avatar :
"/block-media/shadcnblocks/block/avatar-4.webp" ,
content :
2026-07-15 20:22:14 +02:00
"ادغام با ایمیل، تقویم و ابزارهای پشتیبانی آسان بود. هر هفته ساعتها از ورود دستی داده و پیگیریهای فراموششده کم شده." ,
2026-07-11 21:21:29 +03:30
},
{
id : "5" ,
name : "رؤیا کاظمی" ,
username : "roya_kazemi" ,
date : "۱۵ شهریور ۱۴۲" ,
avatar :
"/block-media/shadcnblocks/block/avatar-3.webp" ,
content :
2026-07-15 20:22:14 +02:00
"قالبهای پیگیری و توالی ایمیل فوقالعادهاند. کمک کردند بدون افت کیفیت، پاسخ به لیدها را سریعتر کنیم. شدیداً توصیه میکنم!" ,
2026-07-11 21:21:29 +03:30
},
{
id : "6" ,
name : "مهسا نوری" ,
username : "mahsa_nouri" ,
date : "۱۰ شهریور ۱۴۲" ,
avatar :
"/block-media/shadcnblocks/block/avatar-7.webp" ,
content :
2026-07-15 20:22:14 +02:00
"مدیریت حسابهای کلیدی بسیار آسانتر شده. همه فعالیتها، فرصتها و تمدیدها روی یک صفحه هستند." ,
2026-07-11 21:21:29 +03:30
},
{
id : "7" ,
name : "فاطمه رستمی" ,
username : "fateme_rastemi" ,
date : "۵ شهریور ۱۴۲" ,
avatar :
"/block-media/shadcnblocks/block/avatar-7.webp" ,
content :
2026-07-15 20:22:14 +02:00
"اتوماسیون کمپینها یکنواختی پیام را در همه کانالها حفظ کرد؛ نرخ واجد شرایط بودن لیدها بالا رفت." ,
2026-07-11 21:21:29 +03:30
},
{
id : "8" ,
name : "مهتاب شریفی" ,
username : "mahtab_sharifi" ,
date : "۳۰ مرداد ۱۴۲" ,
avatar :
"/block-media/shadcnblocks/block/avatar-1.webp" ,
content :
2026-07-15 20:22:14 +02:00
"نمرهدهی لید و مسیریابی هوشمند، اولویتبندی فرصتها را برای تیم فروش شفاف کرده." ,
2026-07-11 21:21:29 +03:30
},
{
id : "9" ,
name : "کاوه مرادی" ,
username : "kaveh_moradi" ,
date : "۲۵ مرداد ۱۴۲" ,
avatar :
"/block-media/shadcnblocks/block/avatar-4.webp" ,
content :
2026-07-15 20:22:14 +02:00
"پیشبینی درآمد از روی مراحل قیف قابل اتکاتر شده. جلسات فروش ما کوتاهتر و دادهمحورترند." ,
2026-07-11 21:21:29 +03:30
},
];
const TestimonialCard = ({ testimonial } : { testimonial : DataItem }) => (
< Card className = "relative mb-5 break-inside-avoid rounded-xl p-5 shadow-sm" >
< div className = "flex items-center gap-4" >
< Avatar className = "h-10 w-10 rounded-full ring-1 ring-muted" >
< AvatarImage src = { testimonial . avatar } alt = { testimonial . name } />
</ Avatar >
< div >
< div className = "flex items-center gap-2" >
< p className = "text-sm font-medium" >{ testimonial . name }</ p >
< BadgeCheck className = "h-4 w-4 fill-cyan-400 stroke-white" />
</ div >
< p className = "mt-2 text-xs text-muted-foreground" >
@ { testimonial . username }
</ p >
</ div >
< div className = "ms-auto hover:cursor-pointer" >
< img
src = "/block-media/shadcnblocks/block/logos/x.svg"
alt = "لوگوی X"
className = "h-4 w-4"
/>
</ div >
</ div >
< div className = "my-4 border-t border-dashed border-border" />
< div className = "text-sm text-foreground" >
< q >{ testimonial . content }</ q >
</ div >
< div className = "mt-4 flex items-center gap-2 text-xs text-muted-foreground" >
< Clock className = "h-4 w-4" />
< span >{ testimonial . date }</ span >
</ div >
</ Card >
);
interface Testimonial23Props {
className? : string ;
}
const Testimonial23 = ({ className } : Testimonial23Props ) => {
const [ columnCount , setColumnCount ] = useState ( 3 );
useEffect (() => {
const getColumnCount = () => {
if ( typeof window === "undefined" ) return 3 ;
const width = window . innerWidth ;
if ( width < 768 ) return 1 ;
if ( width < 1024 ) return 2 ;
return 3 ;
};
const updateColumnCount = () => {
setColumnCount ( getColumnCount ());
};
updateColumnCount ();
window . addEventListener ( "resize" , updateColumnCount );
return () => window . removeEventListener ( "resize" , updateColumnCount );
}, []);
const reorderForColumns = ( items : DataItem [], columns : number ) => {
const itemsPerColumn = Math . ceil ( items . length / columns );
const reordered : DataItem [] = [];
for ( let col = 0 ; col < columns ; col ++ ) {
for ( let row = 0 ; row < itemsPerColumn ; row ++ ) {
const originalIndex = row * columns + col ;
if ( originalIndex < items . length ) {
reordered . push ( items [ originalIndex ]);
}
}
}
return reordered ;
};
const reorderedData = useMemo (() => {
return reorderForColumns ( DATA , columnCount );
}, [ columnCount ]);
return (
< section dir = "rtl" lang = "fa" className = { cn ( "py-32" , className )}>
< div className = "container" >
< div className = "my-4 flex justify-center" >
< Badge variant = "outline" className = "rounded-sm py-2 shadow-md" >
< MessageSquareCode className = "me-2 size-4 text-muted-foreground" />
< span > بازخورد مشتریان </ span >
</ Badge >
</ div >
< div className = "flex flex-col items-center gap-6 px-4 sm:px-8" >
< h2 className = "mb-2 text-center text-3xl font-semibold lg:text-2xll" >
2026-07-15 20:22:14 +02:00
بشنویید تیمهای فروش < br /> چه نتایجی گزارش میکنند
2026-07-11 21:21:29 +03:30
</ h2 >
< div className = "mt-4 flex flex-col items-center gap-4 sm:flex-row" >
< span >
2026-07-21 19:25:31 +03:30
ببینید < b > ری یو آی </ b > چگونه سامانه مدیریت ارتباط با مشتری، فروش و اتوماسیون بازاریابی را
2026-07-15 20:22:14 +02:00
یکپارچه میکند .
2026-07-11 21:21:29 +03:30
</ span >
</ div >
</ div >
< div className = "relative mt-14 w-full px-4 after:absolute after:inset-x-0 after:-bottom-2 after:h-96 after:bg-linear-to-t after:from-background sm:px-8 md:px-16 lg:px-32" >
< div className = "columns-1 gap-5 md:columns-2 lg:columns-3" >
{ reorderedData . map (( testimonial ) => (
< TestimonialCard key = { testimonial . id } testimonial = { testimonial } />
))}
</ div >
</ div >
< div className = "flex justify-center" >
< Button className = "mt-4 gap-2 rounded-lg px-5 py-3 text-sm shadow-sm transition-colors hover:bg-primary/90 focus:outline-none disabled:pointer-events-none disabled:opacity-50" >
< span className = "flex items-center gap-1" >
< span > بیشتر ببینید </ span >
< span className = "text-muted/80" > - </ span >
< span className = "text-muted/80" > نظرات </ span >
</ span >
< ChevronRight className = "h-4 w-4 text-muted-foreground/80" />
</ Button >
</ div >
</ div >
</ section >
);
};
export { Testimonial23 };