پرتوپرتو

جدول (Table)

کامپوننت نمایش داده در قالب جدول

معرفی

کامپوننت Table برای نمایش داده‌ها در قالب جدول استفاده می‌شود.

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

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

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

  • برای داده با sorting، filtering، یا pagination — از DataTable استفاده کنید
  • برای نمایش key-value pairs — از dl/dt/dd یا StatDisplay استفاده کنید

زمین بازی

با تغییر تنظیمات زیر، پیش‌نمایش زنده را مشاهده کنید.

زمین بازی
نامپلتفرمبازدید
پست 01اینستاگرام۱٬۲۳۴
پست 02توییتر۲٬۴۶۸
پست 03تلگرام۳٬۷۰۲
تنظیمات
داده
3
محتوا
ظاهر
کد این نمونه به‌صورت خودکار قابل تولید نیست — برای کد آماده‌ی copy/paste به بخش «استفاده» در بالای صفحه مراجعه کنید.

استفاده

لیست سفارشات اخیر
شماره سفارشمشتریمبلغوضعیت
#۰۰۱علی احمدی۱۲۰,۰۰۰ تومانتکمیل شده
#۰۰۲مریم محمدی۸۵,۰۰۰ توماندر انتظار
#۰۰۳رضا کریمی۹۵,۰۰۰ تومانتکمیل شده
import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from '@partodata/ui'

export default function MyComponent() {
  return (
    <Table>
      <TableCaption>لیست کاربران</TableCaption>
      <TableHeader>
        <TableRow>
          <TableHead>نام</TableHead>
          <TableHead>ایمیل</TableHead>
          <TableHead>نقش</TableHead>
        </TableRow>
      </TableHeader>
      <TableBody>
        <TableRow>
          <TableCell>محمد احمدی</TableCell>
          <TableCell>mohammad@example.com</TableCell>
          <TableCell>ادمین</TableCell>
        </TableRow>
      </TableBody>
    </Table>
  )
}

حالت‌ها و انواع

جدول ساده

لیست سفارشات اخیر
شماره سفارشمشتریمبلغوضعیت
#۰۰۱علی احمدی۱۲۰,۰۰۰ تومانتکمیل شده
#۰۰۲مریم محمدی۸۵,۰۰۰ توماندر انتظار
#۰۰۳رضا کریمی۹۵,۰۰۰ تومانتکمیل شده

با Caption

<Table>
  <TableCaption>لیست سفارشات اخیر</TableCaption>
  <TableHeader>...</TableHeader>
  <TableBody>...</TableBody>
</Table>

ردیف‌های تعاملی (interactive)

با interactive روی TableRow، ردیف قابل کلیک و فوکوس‌پذیر با کیبورد می‌شود (Enter/Space فقط وقتی خودِ ردیف فوکوس است، تا دکمه/لینک داخل ردیف رفتار خودش را حفظ کند). برای جدول‌های ساده که کلیک کل ردیف به یک صفحهٔ جزئیات می‌رود مناسب است.

<TableRow interactive onClick={() => router.push(`/campaigns/${row.id}`)}>
  <TableCell>{row.name}</TableCell>
  <TableCell>{row.platform}</TableCell>
</TableRow>

محو لبه (edgeFade) و ShadowScrollArea

با edgeFade روی Table، یک شدو نرم روی لبه‌ای که هنوز محتوای اسکرول‌نشده دارد ظاهر می‌شود (affordance به سبک Supabase). این ویژگی opt-in است (پیش‌فرض false) — تصمیمی تاریخی از نسخه‌ی 2.1.0 تا ارتقا بدون رگرسیون بصری بماند و با مدل اسکرول DataTable تداخل نکند.

<Table edgeFade>
  <TableHeader>...</TableHeader>
  <TableBody>...</TableBody>
</Table>

برای همین محو لبه در جایی خارج از جدول، کامپوننت مستقل ShadowScrollArea را جداگانه export کرده‌ایم.

کامپوننت‌ها

کامپوننتتوضیح
Tableالمان <table> اصلی با overflow-x scroll
TableHeaderالمان <thead>
TableBodyالمان <tbody>
TableRowالمان <tr>
TableHeadالمان <th> برای ستون‌های هدر
TableCellالمان <td> برای سلول‌های داده
TableCaptionالمان <caption> برای عنوان جدول
TableFooterالمان <tfoot> برای ردیف‌های پاورقی
TableSortHeaderدکمهٔ مرتب‌سازی ستون با prop sorted

Props

Table

Prop

Type

TableHeader / TableBody

همه className استاندارد را می‌پذیرند.

TableRow

Prop

Type

TableHead

Prop

Type

TableCell

Prop

Type

TableCaption

Prop

Type

TableSortHeader

Prop

Type

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

بکنید

  • از Table برای نمایش داده‌های ساختاریافته با ستون‌های مشخص استفاده کنید - برای ستون‌های قابل مرتب‌سازی از TableSortHeader با prop sorted استفاده کنید (و در صورت نیاز sortDirection را روی TableHead برای تنظیم aria-sort بگذارید) - اندازه پیش‌فرض sm (فشرده) است؛ برای جدول‌های خلوت‌تر از size="md" یا "lg" استفاده کنید

نکنید

  • از جدول برای نمایش محتوای غیرداده‌ای (متن، گالری) استفاده نکنید - ستون‌های غیرضروری اضافه نکنید — اطلاعات باید قابل اسکن باشند - برای جداول با مرتب‌سازی، وضعیت aria-sort را در TableHead فراموش نکنید

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

  • استفاده از المان‌های معنادار HTML (table, thead, tbody, th, td, caption)
  • TableHead از scope="col" پشتیبانی می‌کند
  • TableCaption برای صفحه‌خوان‌ها عنوان جدول را توصیف می‌کند

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

  • DataTable — اگر نیاز به مرتب‌سازی، صفحه‌بندی یا انتخاب ردیف دارید، از DataTable استفاده کنید
  • Pagination — برای افزودن صفحه‌بندی سفارشی به جداول ساده استفاده کنید
  • StatDisplay — اگر داده شما key-value است و ساختار جدولی ندارد، از StatDisplay استفاده کنید