جدول داده
data-tableکامپوننتجدول داده با مرتبسازی، فیلتر متنی، ستونهای تومانی، اسکلت بارگذاری، حالت خالی و صفحهبندی، همه در سمت کلاینت.
| وضعیت | ||||
|---|---|---|---|---|
| #14052 | مریم احمدی | ۲۸ شهریور ۱۴۰۵ | ۵۹۰٬۰۰۰ تومان | پرداختشده |
| #14051 | علی رضایی | ۲۷ شهریور ۱۴۰۵ | ۱٬۵۲۷٬۰۰۰ تومان | در انتظار |
| #14050 | نگار کریمی | ۲۶ شهریور ۱۴۰۵ | ۲٬۴۶۴٬۰۰۰ تومان | ارسالشده |
| #14049 | رضا موسوی | ۲۵ شهریور ۱۴۰۵ | ۳٬۴۰۱٬۰۰۰ تومان | پرداختشده |
| #14048 | سارا محمدی | ۲۴ شهریور ۱۴۰۵ | ۴٬۳۳۸٬۰۰۰ تومان | در انتظار |
صفحهی ۱ از ۲
نصب
با CLI
اگر هنوز init نکردید، اول از راهنمای نصب پروژه را آماده کنید. بعد این دستور کامپوننت و وابستگیهاش را مینویسه.
$ npx vibefarsi add data-tableنصب دستی
محتوای تب «کد» را در
components/ui/data-table.tsxبگذارید. پیشنیاز: table، pagination، skeleton، empty-state، input.$ npm i lucide-reactکپی کل فایلregistry json
استفاده
usage.tsx
1import { DataTable, type Column } from "@/components/ui/data-table"23const columns: Column<Order>[] = [4 { key: "customer", header: "مشتری", sortable: true },5 { key: "amount", header: "مبلغ", sortable: true, numeric: true, cell: (o) => formatToman(o.amount) },6 { key: "status", header: "وضعیت", cell: (o) => <Badge>{o.status}</Badge> },7]8<DataTable rows={orders} columns={columns} rowKey={(o) => o.id} searchKeys={["customer"]} pageSize={8} />پراپها
| پراپ | نوع | پیشفرض | توضیح |
|---|---|---|---|
| columns | Column<T>[] | - | key، header، sortable، numeric، cell، className. |
| searchKeys | (keyof T)[] | - | فیلدهای جستوجو. اعداد فارسی و لاتین یکی حساب میشن. |
| loading | boolean | - | ردیفهای اسکلتی بهجای داده. |
| pageSize | number | 8 | تعداد در هر صفحه. |
| toolbar | ReactNode | - | فیلترهای اضافه کنار جستوجو. |
نکتههای راستچین
- رشتهها با localeCompare('fa') مرتب میشن تا ترتیب الفبای فارسی درست باشه و ستونهای numeric عددی مرتب میشن.
- جستوجو قبل از مقایسه اعداد فارسی را لاتین میکنه، پس «۱۴۰۵۲» و «14052» هر دو پیدا میشن.