رفتن به محتوای اصلی

کامپوننت‌ها

جدول داده

جدول با مرتب‌سازی، انتخاب ردیف‌ها، ستون‌های عددی و حالت خالی.

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} />}
    />
    نامنوعپیش‌فرضتوضیح
    stripedbooleanfalseردیف‌های راه‌راه
    stickyHeader / maxHeightboolean / string—سرستون ثابت هنگام اسکرول
    loadingboolean | numberfalseردیف‌های اسکلت؛ عدد = تعداد ردیف
    onRowClick(row) => void—کلیک روی ردیف (کلیک روی دکمه و لینک داخل ردیف را نمی‌گیرد)
    footerReactNode—محتوای پایین جدول
    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.

    ویژگی‌ها

    نامنوعپیش‌فرضتوضیح
    columnsColumn[]—ستون‌ها: key، header، render، sortable، sortValue، numeric، width
    rowsT[]—ردیف‌ها
    getRowId(row) => string—شناسهٔ یکتای هر ردیف
    captionReactNode—عنوان جدول — الزامی، برای صفحه‌خوان
    description / hideCaptionReactNode / boolean—توضیح زیر عنوان / پنهان کردن عنوان از دید
    selectablebooleanfalseستون انتخاب با «انتخاب همه»
    selected / onSelectedChangestring[]—ردیف‌های انتخاب‌شده
    sort / defaultSort / onSortChange{ key, direction } | null—مرتب‌سازی؛ کنترل‌شده برای مرتب‌سازی سمت سرور
    emptyReactNode—محتوای جدول خالی، مثلاً یک EmptyState
    compactbooleanfalseردیف‌های فشرده

    دسترس‌پذیری

    • جدول واقعی HTML با <caption> و سرستون‌های scope="col"؛ صفحه‌خوان‌ها می‌توانند بین خانه‌ها پیمایش کنند.
    • سرستون مرتب‌شده aria-sort دارد و مرتب‌سازی با یک دکمهٔ واقعی انجام می‌شود.
    • چک‌باکس هر ردیف نام اختصاصی می‌گیرد (labels.selectRow)، مثل «انتخاب تراکنش سارا احمدی».
    • ظرف جدول در صفحه‌های باریک اسکرول افقی دارد و با کیبورد (Tab) قابل‌اسکرول است.