پرتوپرتو

کارت نظر (Comment Card)

کامپوننت نمایش نظرات کاربران با برچسب‌های تحلیلی و شاخص احساسات

معرفی

کامپوننت CommentCard برای نمایش نظرات و بازخوردهای کاربران به همراه تحلیل احساسات و برچسب‌های دسته‌بندی استفاده می‌شود. این کامپوننت شامل متن نظر، برچسب‌های تحلیلی با درصد احتمال و شاخص رنگی احساسات است.

چه زمانی استفاده کنیم:

  • برای نمایش نظرات شبکه‌های اجتماعی با تحلیل احساسات
  • در داشبورد بازخورد و مانیتورینگ نظرات
  • وقتی هر نظر باید با برچسب‌های موضوعی و درصد احتمال نمایش داده شود

چه زمانی استفاده نکنیم:

  • برای نمایش پست کامل — از InstagramPost استفاده کنید
  • برای نمایش پیام‌های عمومی — CommentCard برای کامنت‌های social media است

استفاده پایه

اصلاً راضی نیستم. کالا معیوب بود و وقتی تماس گرفتم پشتیبانی جواب درستی نداد. پولم هدر رفت.
دریافت کالای معیوب (۹۱%)نارضایتی از پشتیبانی (۸۷%)
import { CommentCard } from '@parto-system-design/ui'

export default function MyComponent() {
  return (
    <CommentCard
      text="اصلاً راضی نیستم. کالا معیوب بود و وقتی تماس گرفتم پشتیبانی جواب درستی نداد. پولم هدر رفت."
      tags={[
        { title: 'دریافت کالای معیوب', probability: 91, color: '#dc2626' },
        { title: 'نارضایتی از پشتیبانی', probability: 87, color: '#ef4444' },
      ]}
      sentiment="negative"
    />
  )
}

حالت‌های مختلف

نظر مثبت

عالی بود! کیفیت محصول خیلی خوبه و ارسال هم سریع انجام شد. پیشنهاد می‌کنم حتماً خرید کنید.
رضایت از کیفیت (۹۵%)ارسال سریع (۸۹%)
<CommentCard
  text="عالی بود! کیفیت محصول خیلی خوبه و ارسال هم سریع انجام شد. پیشنهاد می‌کنم حتماً خرید کنید."
  tags={[
    { title: 'رضایت از کیفیت', probability: 95, color: '#16a34a' },
    { title: 'ارسال سریع', probability: 89, color: '#22c55e' },
  ]}
  sentiment="positive"
/>

نظر منفی

اصلاً راضی نیستم. کالا معیوب بود و وقتی تماس گرفتم پشتیبانی جواب درستی نداد. پولم هدر رفت.
دریافت کالای معیوب (۹۱%)نارضایتی از پشتیبانی (۸۷%)
<CommentCard
  text="اصلاً راضی نیستم. کالا معیوب بود و وقتی تماس گرفتم پشتیبانی جواب درستی نداد. پولم هدر رفت."
  tags={[
    { title: 'دریافت کالای معیوب', probability: 91, color: '#dc2626' },
    { title: 'نارضایتی از پشتیبانی', probability: 87, color: '#ef4444' },
  ]}
  sentiment="negative"
/>

نظر خنثی

محصول خوبی بود، قیمت نسبتاً مناسب. چیز خاصی نداشت اما مشکلی هم نداشت.
رضایت متوسط (۷۸%)قیمت مناسب (۷۲%)
<CommentCard
  text="محصول خوبی بود، قیمت نسبتاً مناسب. چیز خاصی نداشت اما مشکلی هم نداشت."
  tags={[
    { title: 'رضایت متوسط', probability: 78, color: '#6b7280' },
    { title: 'قیمت مناسب', probability: 72, color: '#9ca3af' },
  ]}
  sentiment="neutral"
/>

با چند برچسب

محصول عالی بود اما بسته‌بندی ضعیف. متأسفانه کارتن پاره شده بود و محتویات آسیب دیده. پشتیبانی خیلی کمک کرد و جایگزین ارسال کردن.
رضایت از محصول (۹۲%)بسته‌بندی ضعیف (۸۸%)پشتیبانی خوب (۸۵%)تحویل جایگزین (۸۰%)
<CommentCard
  text="محصول عالی بود اما بسته‌بندی ضعیف. متأسفانه کارتن پاره شده بود و محتویات آسیب دیده. پشتیبانی خیلی کمک کرد و جایگزین ارسال کردن."
  tags={[
    { title: 'رضایت از محصول', probability: 92, color: '#16a34a' },
    { title: 'بسته‌بندی ضعیف', probability: 88, color: '#dc2626' },
    { title: 'پشتیبانی خوب', probability: 85, color: '#22c55e' },
    { title: 'تحویل جایگزین', probability: 80, color: '#16a34a' },
  ]}
  sentiment="positive"
/>

در Grid

عالی بود! کیفیت محصول خیلی خوبه و ارسال هم سریع انجام شد.
رضایت از کیفیت (۹۵%)ارسال سریع (۸۹%)
اصلاً راضی نیستم. کالا معیوب بود و پشتیبانی جواب نداد.
دریافت کالای معیوب (۹۱%)نارضایتی از پشتیبانی (۸۷%)
محصول خوبی بود، قیمت نسبتاً مناسب. چیز خاصی نداشت.
رضایت متوسط (۷۸%)
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4" dir="rtl">
  <CommentCard
    text="عالی بود! کیفیت محصول خیلی خوبه و ارسال هم سریع انجام شد."
    tags={[
      { title: 'رضایت از کیفیت', probability: 95, color: '#16a34a' },
      { title: 'ارسال سریع', probability: 89, color: '#22c55e' },
    ]}
    sentiment="positive"
  />
  <CommentCard
    text="اصلاً راضی نیستم. کالا معیوب بود و پشتیبانی جواب نداد."
    tags={[
      { title: 'دریافت کالای معیوب', probability: 91, color: '#dc2626' },
      { title: 'نارضایتی از پشتیبانی', probability: 87, color: '#ef4444' },
    ]}
    sentiment="negative"
  />
  <CommentCard
    text="محصول خوبی بود، قیمت نسبتاً مناسب. چیز خاصی نداشت."
    tags={[{ title: 'رضایت متوسط', probability: 78, color: '#6b7280' }]}
    sentiment="neutral"
  />
</div>

ساختار داده

interface CommentTag {
  title: string // عنوان برچسب
  probability: number // درصد احتمال (0-100)
  color: string // کد رنگ HEX
}

interface CommentCardProps {
  text: string // متن نظر
  tags: CommentTag[] // برچسب‌های تحلیلی
  sentiment: 'positive' | 'negative' | 'neutral' // احساس کلی
  id?: number | string // شناسه اختیاری
  usePersianDigits?: boolean // استفاده از اعداد فارسی (پیش‌فرض: true)
}

ویژگی‌های کامپوننت

۱. متن نظر

  • نمایش متن کامل نظر
  • پشتیبانی کامل از RTL
  • فونت و فاصله‌گذاری مناسب برای خوانایی

۲. برچسب‌های تحلیلی (Tags)

  • عنوان برچسب با درصد احتمال
  • رنگ دینامیک برای هر برچسب
  • استایل شفاف با حاشیه رنگی:
    • پس‌زمینه: رنگ با شفافیت 15%
    • حاشیه: رنگ با شفافیت 30%
    • متن: رنگ کامل
  • نمایش اعداد به صورت فارسی یا انگلیسی

۳. شاخص احساسات (Sentiment)

  • دایره رنگی در گوشه پایین چپ (RTL)
  • رنگ‌ها:
    • 🟢 سبز (#22c55e): مثبت
    • 🔴 قرمز (#ef4444): منفی
    • ⚫ خاکستری (#6b7280): خنثی
  • Tooltip با عنوان احساس

Props

Prop

Type

رنگ‌بندی برچسب‌ها

برای رنگ‌بندی برچسب‌ها می‌توانید از پالت رنگی متناسب با نوع احساس استفاده کنید:

رنگ‌های پیشنهادی مثبت

  • #16a34a - سبز تیره
  • #22c55e - سبز روشن
  • #4ade80 - سبز خیلی روشن

رنگ‌های پیشنهادی منفی

  • #dc2626 - قرمز تیره
  • #ef4444 - قرمز
  • #f87171 - قرمز روشن

رنگ‌های پیشنهادی خنثی

  • #6b7280 - خاکستری تیره
  • #9ca3af - خاکستری
  • #d1d5db - خاکستری روشن

کاربردها

این کامپوننت در موارد زیر کاربرد دارد:

  • تحلیل نظرات: نمایش نظرات کاربران با تحلیل احساسات
  • داشبورد بازخورد: نمایش بازخوردها در پنل مدیریت
  • سیستم بررسی محصول: نمایش نظرات خریداران
  • تحلیل رضایت مشتری: نمایش نظرات با دسته‌بندی موضوعی
  • مانیتورینگ شبکه‌های اجتماعی: نمایش نظرات و تحلیل آن‌ها

راهنمای استفاده

بکنید

  • رنگ برچسب‌ها را متناسب با نوع احساس انتخاب کنید (سبز برای مثبت، قرمز برای منفی) - تعداد برچسب‌ها را به حداکثر ۴-۵ عدد محدود کنید - برای لیست‌های بزرگ از virtualization استفاده کنید

نکنید

  • رنگ‌های برچسب را hardcode نکنید — از پالت رنگی متناسب با sentiment استفاده کنید - بدون sentiment از کامپوننت استفاده نکنید — شاخص احساسات الزامی است - از CommentCard برای پیام‌های سیستمی یا اعلان‌ها استفاده نکنید — مخصوص نظرات کاربران است

دسترسی‌پذیری

  • استفاده از تگ‌های معنادار
  • Tooltip برای شاخص احساسات
  • کنتراست رنگی مناسب برای خوانایی
  • پشتیبانی کامل از صفحه‌خوان‌ها

ملاحظات RTL

  • متن به‌صورت خودکار راست‌چین می‌شود
  • برچسب‌ها از راست به چپ چیده می‌شوند (flex-row-reverse)
  • شاخص احساسات در گوشه پایین چپ قرار می‌گیرد (end-3)
  • اعداد فارسی به‌صورت پیش‌فرض فعال است

نکات بهینه‌سازی

  • برای لیست‌های بزرگ از virtualization استفاده کنید
  • id را برای key در لیست‌ها استفاده کنید
  • برای بهبود عملکرد، از React.memo استفاده کنید
  • تگ‌ها را محدود کنید (حداکثر 4-5 تگ)

کامپوننت‌های مرتبط

  • InstagramPost — اگر نیاز به نمایش پست کامل اینستاگرام با تصویر و آمار دارید، از InstagramPost استفاده کنید
  • SentimentBadge — اگر فقط نمایش نوع احساس بدون متن نظر نیاز دارید، از SentimentBadge استفاده کنید