جدول البيانات (DataTable)

يعرض مكوّن جدول البيانات (DataTable) البيانات في جدول، مع الترتيب والتحديد والتنقّل بين الصفحات (pagination).

التثبيت

bash
npx @smicolon/fasla-ui@latest add data-table

قبل إضافة أي مكوّن، شغّل الأمر init مرة واحدة في مشروعك. التفاصيل في صفحة التثبيت.

معاينة

الاسمالبريد الإلكترونيالدور
ليلى حداد[email protected]مدير
عمر خليل[email protected]محرر
سارة ناصر[email protected]مشاهد

التنقّل بين الصفحات (pagination)

حالة التحميل

الاسمالبريد الإلكترونيالدور

حالة فارغة

الاسمالبريد الإلكترونيالدور

لا يوجد مستخدمون

الخصائص (props)

الخاصيةالنوعالافتراضيالوصف
dataT[]لا يوجدالصفوف المعروضة.
columnsColumn<T>[]لا يوجدتعريفات الأعمدة، وتأخذ align في كل عمود إحدى القيم start، center، end بحسب اتجاه القراءة.
getRowKey(row) => string | numberلا يوجدمفتاح فريد لكل صف.
loadingbooleanfalseيعرض حالة التحميل.
emptyStateReactNodeلا يوجديظهر حين لا توجد صفوف.
onRowClick(row) => voidلا يوجدتُستدعى عند النقر على صف.
selectedKeystring | numberلا يوجدمفتاح الصف المحدد.
stickyHeaderbooleanfalseيُبقي رأس الجدول ظاهرًا عند التمرير.
Pagination{ page, totalPages, onPageChange, labels }لا يوجدينقّل بين صفحات الجدول، وتترجم labels نصوصه.
classNamestringلا يوجدأصناف (class) إضافية للمكوّن.

الاستخدام

tsx
"use client"

import { useState } from "react"
import { DataTable, type Column } from "@/components/blocks/data-table"

interface User {
  id: number
  name: string
  email: string
  role: string
}

const users: User[] = [
  { id: 1, name: "ليلى حداد", email: "[email protected]", role: "مدير" },
  { id: 2, name: "عمر خليل", email: "[email protected]", role: "محرر" },
  { id: 3, name: "سارة ناصر", email: "[email protected]", role: "مشاهد" },
]

const columns: Column<User>[] = [
  { id: "name", header: "الاسم", cell: (row) => row.name },
  { id: "email", header: "البريد الإلكتروني", cell: (row) => row.email },
  { id: "role", header: "الدور", cell: (row) => row.role },
]

export function UsersTable() {
  const [selected, setSelected] = useState<number>()

  return (
    <DataTable
      data={users}
      columns={columns}
      getRowKey={(row) => row.id}
      selectedKey={selected}
      onRowClick={(row) => setSelected(row.id)}
    />
  )
}