کامپوننتها
جدول داده
جدول با مرتبسازی، انتخاب ردیفها، ستونهای عددی و حالت خالی.
import { DataTable } from "@kashi-ui/react";
نمونه
روی سرستون «مشتری» یا «مبلغ» بزنید تا مرتب شود. نامها به ترتیب الفبای فارسی مرتب میشوند.
| تاریخ | وضعیت | |||
|---|---|---|---|---|
| مریم کریمی | ۱۴۰۵/۰۸/۰۳ | پرداختشده | ۳٬۹۰۰٬۰۰۰ | |
| سارا احمدی | ۱۴۰۵/۰۸/۰۴ | پرداختشده | ۱٬۲۵۰٬۰۰۰ | |
| نگار صادقی | ۱۴۰۵/۰۷/۲۹ | پرداختشده | ۶۲۰٬۰۰۰ | |
| علی رضایی | ۱۴۰۵/۰۸/۰۳ | در انتظار | ۴۸۰٬۰۰۰ | |
| رضا نوری | ۱۴۰۵/۰۸/۰۱ | ناموفق | ۷۵٬۰۰۰ |
هیچ ردیفی انتخاب نشده
<DataTable
caption="تراکنشهای اخیر"
description="آخرین پرداختهای مشتریان در این ماه"
rows={transactions}
getRowId={(r) => r.id}
selectable
selected={selected}
onSelectedChange={setSelected}
defaultSort={{ key: "amount", direction: "descending" }}
columns={[
{ key: "customer", header: "مشتری", sortable: true },
{ key: "date", header: "تاریخ" },
{ key: "status", header: "وضعیت", render: (r) => <Badge tone="success" dot>…</Badge> },
{ key: "amount", header: "مبلغ (تومان)", sortable: true, numeric: true,
render: (r) => formatNumber(r.amount) },
]}
/>بارگذاری، راهراه، سرستون ثابت و صفحهبندی
روی «بارگذاری دوباره» بزنید تا ردیفهای اسکلت را ببینید؛ روی هر ردیف بزنید تا رویداد کلیک را ببینید. جدول را اسکرول کنید: سرستون ثابت میماند.
| تاریخ | وضعیت | ||
|---|---|---|---|
| سارا احمدی | ۱۴۰۵/۰۸/۰۴ | پرداختشده | ۱٬۲۵۰٬۰۰۰ |
| علی رضایی | ۱۴۰۵/۰۸/۰۳ | در انتظار | ۴۸۰٬۰۰۰ |
| مریم کریمی | ۱۴۰۵/۰۸/۰۳ | پرداختشده | ۳٬۹۰۰٬۰۰۰ |
| رضا نوری | ۱۴۰۵/۰۸/۰۱ | ناموفق | ۷۵٬۰۰ ۰ |
| نگار صادقی | ۱۴۰۵/۰۷/۲۹ | پرداختشده | ۶۲۰٬۰۰۰ |
<DataTable
…
striped
stickyHeader
maxHeight="16rem"
loading={isLoading ? 4 : false}
onRowClick={(row) => open(row)}
columns={[
{ key: "date", header: "تاریخ", hideBelow: "sm" },
{ key: "status", header: "وضعیت", align: "center" },
…
]}
footer={<Pagination page={page} total={8} onChange={setPage} />}
/>| نام | نوع | پیشفرض | توضیح |
|---|---|---|---|
striped | boolean | false | ردیفهای راهراه |
stickyHeader / maxHeight | boolean / string | — | سرستون ثابت هنگام اسکرول |
loading | boolean | number | false | ردیفهای اسکلت؛ عدد = تعداد ردیف |
onRowClick | (row) => void | — | کلیک روی ردیف (کلیک روی دکمه و لینک داخل ردیف را نمیگیرد) |
footer | ReactNode | — | محتوای پایین جدول |
align / hideBelow / className (ستون) | | — | چینش، پنهان شدن در موبایل، کلاس خانهها |
classNames | { root, table, row, cell, header, footer } | — | کلاس دلخواه برای هر بخش |
متغیرهای CSS: --k-table-radius، --k-table-cell-px، --k-table-cell-py، --k-table-header-bg، --k-table-stripe، --k-table-row-hover.
ویژگیها
| نام | نوع | پیشفرض | توضیح |
|---|---|---|---|
columns | Column[] | — | ستونها: key، header، render، sortable، sortValue، numeric، width |
rows | T[] | — | ردیفها |
getRowId | (row) => string | — | شناسهٔ یکتای هر ردیف |
caption | ReactNode | — | عنوان جدول — الزامی، برای صفحهخوان |
description / hideCaption | ReactNode / boolean | — | توضیح زیر عنوان / پنهان کردن عنوان از دید |
selectable | boolean | false | ستون انتخاب با «انتخاب همه» |
selected / onSelectedChange | string[] | — | ردیفهای انتخابشده |
sort / defaultSort / onSortChange | { key, direction } | null | — | مرتبسازی؛ کنترلشده برای مرتبسازی سمت سرور |
empty | ReactNode | — | محتوای جدول خالی، مثلاً یک EmptyState |
compact | boolean | false | ردیفهای فشرده |
دسترسپذیری
- جدول واقعی HTML با
<caption>و سرستونهایscope="col"؛ صفحهخوانها میتوانند بین خانهها پیمایش کنند. - سرستون مرتبشده
aria-sortدارد و مرتبسازی با یک دکمهٔ واقعی انجام میشود. - چکباکس هر ردیف نام اختصاصی میگیرد (
labels.selectRow)، مثل «انتخاب تراکنش سارا احمدی». - ظرف جدول در صفحههای باریک اسکرول افقی دارد و با کیبورد (Tab) قابلاسکرول است.