ردیف عملکرد هشتگ (HashtagPerformanceRow)
نمایش عملکرد یک هشتگ در قالب یک ردیف فشرده — نام هشتگ، بسامد استفاده، نرخ تعامل، اسپارکلاین روند و دلتای تغییر نسبت به دوره قبل — آماده برای لیست «هشتگهای برتر» یا سلول DataTable.
معرفی
HashtagPerformanceRow یک ردیف واحد در جدول یا لیست عملکرد هشتگ است. در یک سطر ۴۰ پیکسلی (یا ۲۸ پیکسلی در حالت فشرده) پنج قطعه اطلاعات را کنار هم میچیند: رتبه (اختیاری)، نام هشتگ با علامت #، بسامد استفاده بهصورت خلاصهشده (مثلاً «۱۲.۸ هزار»)، نرخ تعامل، اسپارکلاین روند و دلتای درصدی تغییر. اگر delta صریح ندهید، خود کامپوننت آن را از مقایسه اولین و آخرین نقطه آرایه trend محاسبه میکند.
چه زمانی استفاده کنیم:
- لیست «هشتگهای برتر» در داشبورد پایش برند یا گزارش کمپین (مثلاً مقایسه کمپین تخفیف فصلی با رونمایی محصول جدید)
- بهعنوان cell renderer داخل
DataTableبرای ساخت جدول کامل عملکرد هشتگها - هر جایی که کاربر باید فهرستی از هشتگها را سریع اسکن کند و روند صعودی/نزولی را در یک نگاه ببیند
چه زمانی استفاده نکنیم:
- نمایش نمودار روند بزرگ و مستقل → از
SparklineیاLineChartاستفاده کنید - گرفتن هشتگ از کاربر بهعنوان ورودی فرم → از
HashtagInputاستفاده کنید - نمایش یک شاخص منفرد با عدد بزرگ و دلتا → از
MetricCardاستفاده کنید
استفاده
import { HashtagPerformanceRow, type HashtagPerformanceData } from '@partodata/ui'const data: HashtagPerformanceData = {
tag: 'کمپین_تخفیف_فصلی', // بدون # ابتدایی — کامپوننت خودش علامت را رندر میکند
frequency: 12800,
engagementRate: 4.8,
trend: [820, 940, 1010, 1180, 1290, 1420, 1560],
}
export default function Example() {
return <HashtagPerformanceRow data={data} rank={1} />
}حالتها و انواع
چگالی (density)
دو چگالی دارد: comfortable (پیشفرض، ارتفاع ۴۰ پیکسل) و compact (ارتفاع ۲۸ پیکسل). در حالت فشرده، اسپارکلاین برای صرفهجویی در فضا حذف میشود اما دلتا و آیکن روند باقی میمانند.
<HashtagPerformanceRow data={data} density="comfortable" />
<HashtagPerformanceRow data={data} density="compact" />رتبه (rank)
با prop عددی rank، یک چیپ رتبه در ابتدای ردیف نمایش داده میشود — مناسب لیستهای «۱۰ هشتگ برتر». عدد رتبه مطابق locale بومیسازی میشود.
{topHashtags.map((item, index) => (
<HashtagPerformanceRow key={item.tag} data={item} rank={index + 1} />
))}ردیف قابل کلیک (onRowClick)
با دادن onRowClick، کل ردیف تبدیل به یک عنصر تعاملی میشود: نشانگر ماوس pointer، افکت hover، حلقه فوکوس برند، و فعالسازی با Enter و Space. رویداد کلیک همان شیء HashtagPerformanceData را برمیگرداند تا drill-down تحلیلی سمت مصرفکننده باز شود.
<HashtagPerformanceRow
data={data}
rank={1}
onRowClick={(item) => openHashtagAnalytics(item.tag)}
/>دلتای صریح در برابر دلتای مشتقشده
- اگر
deltaبدهید، همان مقدار نمایش داده میشود — مناسب وقتی محاسبه دورهبهدوره را backend انجام داده است. - اگر
deltaندهید ولیtrendحداقل دو نقطه داشته باشد، دلتا از درصد تغییر اولین تا آخرین نقطه محاسبه میشود (گردشده تا یک رقم اعشار). - اگر هیچکدام موجود نباشد (یا اولین نقطه trend صفر باشد)، بخش دلتا اصلاً رندر نمیشود.
آیکن روند بر اساس مقدار دلتا انتخاب میشود: بالای ۱+ درصد فلش صعودی با رنگ مثبت، زیر ۱- درصد فلش نزولی با رنگ منفی، و بازه بین این دو خط تخت با رنگ خنثی — تا نوسانهای جزئی بهاشتباه «روند» جلوه نکنند.
// دلتای محاسبهشده توسط backend، بدون اسپارکلاین
<HashtagPerformanceRow data={{ tag: 'باشگاه_مشتریان', frequency: 1900, delta: -3.2 }} />
// دلتای مشتقشده از trend
<HashtagPerformanceRow
data={{ tag: 'بازخورد_بسته_بندی', frequency: 3100, trend: [300, 310, 295, 305, 302] }}
/>ترکیب با DataTable
این کامپوننت برای قرار گرفتن مستقیم داخل cell renderer طراحی شده است:
import { DataTable, HashtagPerformanceRow, type HashtagPerformanceData } from '@partodata/ui'
interface HashtagRow extends HashtagPerformanceData {
rank: number
}
<DataTable<HashtagRow>
columns={[
{
id: 'hashtag',
header: 'هشتگ',
cell: (row) => <HashtagPerformanceRow data={row} rank={row.rank} />,
},
]}
data={hashtags}
/>بومیسازی (locale)
پیشفرض locale مقدار fa است: بسامد با formatLargeNumber خلاصه و فارسیسازی میشود («۱۲.۸ هزار»)، و رتبه، نرخ تعامل و دلتا با ارقام فارسی نمایش داده میشوند. مقادیر ar و en نیز پشتیبانی میشوند.
<HashtagPerformanceRow data={data} locale="en" />راهنمای استفاده
بکنید
- مقدار
tagرا بدون علامت#بدهید — کامپوننت خودش آیکن هشتگ را رندر میکند و از دوبار نمایش جلوگیری میشود. - برای لیستهای رتبهبندیشده،rankرا از ۱ شروع کنید و ترتیب داده را قبل از رندر مرتب کنید. - وقتی داده روزانه دارید، آرایهtrendرا با بازه ثابت (مثلاً ۷ یا ۱۴ روز آخر) بدهید تا دلتای مشتقشده معنادار باشد. - اگر backend دلتای دقیق دورهبهدوره را محاسبه میکند، همان را درdeltaبدهید تا جای محاسبه تقریبی از trend بنشیند. - برای جدول کامل با مرتبسازی و صفحهبندی، این ردیف را داخل cell renderer کامپوننتDataTableقرار دهید.
نکنید
- در حالت
compactانتظار اسپارکلاین نداشته باشید — عمداً حذف میشود؛ اگر نمودار روند ضروری است ازcomfortableاستفاده کنید. -onRowClickرا فقط برای افکت بصری hover ندهید — این prop ردیف را برای صفحهخوانها به دکمه تبدیل میکند و باید عمل واقعی (مثلاً باز کردن صفحه تحلیل هشتگ) انجام دهد. - آرایهtrendتکعضوی نفرستید — با کمتر از دو نقطه نه اسپارکلاین رندر میشود و نه دلتا محاسبه میشود. - رنگ پسزمینه ردیف را بر اساس مثبت/منفی بودن دلتا تغییر ندهید — نشانهگذاری روند فقط با آیکن و رنگ متن دلتا انجام میشود.
Props
HashtagPerformanceRow
علاوه بر props زیر، تمام attributes استاندارد div (بهجز onClick که با onRowClick جایگزین شده) پذیرفته میشود و ref نیز forward میشود.
HashtagPerformanceData
دسترسیپذیری
- بدون
onRowClick، ردیف یک عنصر غیرتعاملی است: نهroleدارد، نهtabIndex، و در ترتیب فوکوس صفحه قرار نمیگیرد. - با
onRowClick، ردیفrole="button"وtabIndex=0میگیرد و با Enter یا Space فعال میشود (Space صفحه را اسکرول نمیکند). - حالت فوکوس کیبورد با حلقه
focus-visibleبه رنگ برند مشخص میشود. - اسپارکلاین
aria-labelتوصیفی با نام هشتگ دارد («روند» + نام هشتگ) تا برای صفحهخوان قابل فهم باشد. - مقدار دلتا علاوه بر نمایش بصری،
aria-labelعددی («دلتا» + درصد) دارد. - آیکنهای تزئینی (علامت هشتگ و فلش روند) با
aria-hiddenاز درخت دسترسیپذیری خارج شدهاند؛ اطلاعات روند از طریق متن دلتا منتقل میشود. - ارقام با
tabular-numsرندر میشوند تا ستونها در لیستهای عمودی تراز بمانند.
کامپوننتهای مرتبط
- Sparkline — اگر فقط نمودار روند کوچک میخواهید بدون ساختار ردیف هشتگ (همین کامپوننت داخلاً از آن استفاده میکند).
- DataTable — اگر مرتبسازی، صفحهبندی یا فیلتر ستونی لازم دارید، این ردیف را داخل cell renderer آن قرار دهید.
- HashtagInput — برای گرفتن هشتگ از کاربر بهعنوان ورودی فرم، نه نمایش عملکرد.
- MetricCard — اگر یک شاخص منفرد با عدد بزرگ و دلتا میخواهید، نه ردیف فهرستی.
- LineChart — برای تحلیل عمیق روند یک هشتگ در نمای بزرگ با محور و tooltip.