Lompat ke isi
CirccaHIG

Komponen / Tampilan data

DataTable

Tabel ERP untuk daftar dokumen (PO, invoice) dan tabel item dokumen: angka rata kanan, urut, seleksi baris, sel editable, pohon, baris total, keadaan kosong & memuat, dan paginasi.
React · BetaFigma · siapFigmaSumber

Import

tsx
import { DataTable, type DataTableColumn, type DataTableSort } from '@divistant/circca-react';

Props · DataTable

Generik: DataTable<T>. Juga menerima atribut <div> untuk wadah luar (ref ke wadah). Pengurutan & paginasi data dilakukan pemanggil/server.
PropTipeDefaultKeterangan
columnsDataTableColumn<T>[]—Definisi kolom (lihat DataTableColumn).
rowsT[]—Baris yang ditampilkan (sudah diurutkan/dipaginasi).
getRowId(row: T) => string—Id unik per baris untuk key, seleksi, dan pohon.
getRowLabel(row: T) => string—Nama baris untuk pembaca layar, mis. "PO-2026-0148" → "Pilih PO-2026-0148".
captionReactNode—Judul tabel (<caption>), juga label wadah gulir. Wajib caption ATAU aria-label.
captionHiddenbooleanfalseCaption hanya untuk pembaca layar (judul sudah tampil di Card/PageHeader).
aria-labelstring—Nama tabel bila tanpa caption.
density'default' | 'compact''default'Tinggi baris 32 (Body/Default) atau 28 (Callout/Default) — properti Figma "Density".
sortDataTableSort | null—Urutan aktif { key, direction: "asc" | "desc" } (terkendali).
onSortChange(sort: DataTableSort | null) => void—Klik header sortable: naik → turun → tanpa urutan.
selectedstring[]—Id baris terpilih. Bersama onSelectedChange menampilkan kolom checkbox (lebar 40).
onSelectedChange(ids: string[]) => void—Perubahan seleksi. Checkbox header memilih/membatalkan semua baris yang tampil (indeterminate bila sebagian).
onRowClick(row: T, event) => void—Klik baris sebagai pintasan mouse; klik pada tautan/tombol/kontrol di sel diabaikan.
getSubRows(row: T) => T[] | undefined—Anak baris untuk tabel pohon.
expanded / defaultExpanded / onExpandedChangestring[] / string[] / (ids) => void—Id baris pohon yang terbuka (terkendali atau tidak).
treeColumnstring—Kunci kolom berisi tombol buka/tutup. Bawaan kolom pertama.
totalsPartial<Record<string, ReactNode>>—Nilai baris total per kunci kolom (DataTable/TotalRow).
totalsLabelReactNode'Total'Label baris total; membentang sampai kolom pertama yang punya nilai.
onAddRow() => void—Tampilkan baris "Tambah item" (DataTable/AddRow) di akhir tabel item.
addRowLabelReactNode'Tambah item'Label baris tambah.
stickyHeaderbooleanfalseHeader menempel saat digulir. Perlu maxHeight.
maxHeightnumber | string—Tinggi maksimum area gulir.
minWidthnumber | string—Lebar minimum tabel; di layar sempit tabel digulir horizontal, bukan dijepit.
loadingbooleanfalseTampilkan baris Skeleton dan aria-busy.
loadingRowsnumber5Jumlah baris Skeleton.
emptyStateReactNode—Isi saat tidak ada baris. Bawaan EmptyState Compact "Belum ada data".
framedbooleanfalseBingkai kartu (radius 12, garis 0.5) untuk tabel yang berdiri sendiri di halaman daftar.
footerReactNode—Isi di bawah tabel di dalam bingkai — biasanya <DataTable.Pagination>.
tableClassNamestring—Kelas tambahan untuk elemen <table>.
classNamestring—Kelas tambahan untuk wadah luar.

Props · DataTableColumn<T>

PropTipeDefaultKeterangan
keystring—Kunci unik; juga kunci urut & totals. Bawaan isi sel = row[key].
headerReactNode—Judul kolom. Kolom uang menyebut mata uang: "Nilai (Rp)".
cell(row: T, ctx: { index, depth }) => ReactNode—Isi kustom: tautan, StateLabel Small, Avatar + nama, Input/AmountInput, IconButton.
type'text' | 'number' | 'editable' | 'actions''text'number = rata kanan + tabular-nums (angka mentah diformat formatNumber); editable = padding 2 untuk kontrol Small; actions = kolom 40 untuk IconButton Ghost Small, judul hanya untuk pembaca layar.
align'start' | 'end'—Perataan. Bawaan end untuk number.
widthnumber | string—Lebar kolom, sekaligus lebar minimum.
sortablebooleanfalseHeader bisa diklik untuk mengurutkan (aria-sort otomatis).
rowHeaderbooleanfalseSel pengenal baris (<th scope="row">), mis. No. PO.
hideHeaderboolean—Judul kolom hanya untuk pembaca layar (otomatis untuk actions).

Props · DataTable.Pagination

Juga diekspor sebagai DataTablePagination. Menerima atribut <nav>.
PropTipeDefaultKeterangan
pagenumber—Halaman aktif (mulai 1).
pageSizenumber—Baris per halaman.
totalnumber—Total baris di semua halaman — menghasilkan "1–20 dari 142" dan "Halaman 1 dari 8".
onPageChange(page: number) => void—Halaman sebelumnya/berikutnya.
onPageSizeChange(size: number) => void—Bila diisi, "Baris per halaman" (Select Small) tampil. Kembalikan ke halaman 1.
pageSizeOptionsnumber[][10, 20, 50, 100]Pilihan baris per halaman.
rangeReactNode—Teks rentang kustom, mis. "1–10 dari 142 · nilai di halaman ini Rp 1.502.450.000".

Sumber

Kode komponen ada di packages/react/src/components/data-table. Gaya hanya memakai kelas token Circca HIG — tidak ada warna, spasi, atau radius mentah.

Esc
↑↓ pilih↵ buka12 hasil