DataTable

Table üzerinde sıralama, arama ve kolon filtreleri, sayfalama, checkbox ile satır seçimi ve kolon görünürlüğü. State'i useDataTable tutar; DataTable render'lar. Bağımlılık yok.

Ekip üyeleri
E-posta
Ada Lovelaceada@northwind.devSahipAktif12
Grace Hoppergrace@northwind.devYöneticiAktif9
Alan Turingalan@northwind.devÜyeAktif7
Katherine Johnsonkatherine@northwind.devÜyeDavet edildi0
Margaret Hamiltonmargaret@northwind.devYöneticiAktif15

Import

import { DataTable, useDataTable, type DataTableColumn } from "@meridui/react";

Anatomi

const table = useDataTable({ data, columns });

<DataTable table={table} caption="…" />
  • Kolonlar her alanı tanımlar: accessor (bir anahtar ya da fonksiyon) sıralamayı, aramayı ve varsayılan hücreyi besler; cell başka her şeyi render'lar.
  • useDataTable headless'tır: geçerli sayfanın satırlarını ve her setter'ı döndürür. Her state parçası controlled ya da uncontrolled çalışır.
  • DataTable bir araç satırı (arama, Kolonlar menüsü, senin toolbar'ın), sıralanabilir başlıkları ve isteğe bağlı checkbox'larıyla Table'ı, ve durum satırı, sayfa başına satır seçimi ile Pagination'dan oluşan bir alt bilgi render'lar.

Örnekler

Kolon filtreleri, varsayılan sıralama ve gizli kolonlar

Kendi filtre kontrollerini toolbar'a koy ve onları setColumnFilter ile yönet. Bir kolonun filterFn'i varsayılan "içerir" eşleşmesinin yerini alır.

Role göre ekip üyeleri
Margaret HamiltonYöneticiAktif15
Ada LovelaceSahipAktif12
Grace HopperYöneticiAktif9
Alan TuringÜyeAktif7
Barbara LiskovÜyeAktif5
Frances AllenÜyeAktif4
Linus TorvaldsİzleyiciAktif2
Katherine JohnsonÜyeDavet edildi0
Edsger DijkstraİzleyiciDavet edildi0

Metinleri çevirmek

Görünen ve ekran okuyucuya giden her metin labels ile değişir; varsayılanlar İngilizcedir. Bu sayfadaki örnekler şu nesneyi kullanıyor:

const labelsTr: Partial<DataTableLabels> = {
  search: "Ara",
  searchPlaceholder: "Ara…",
  columns: "Kolonlar",
  selectPage: "Bu sayfadaki tüm satırları seç",
  selectRow: (label) => `${label} satırını seç`,
  selected: (count, total) => `${total} satırdan ${count} tanesi seçili`,
  results: (count) => `${count} sonuç`,
  empty: "Sonuç yok.",
  rowsPerPage: "Sayfa başına satır",
  pagination: "Sayfalama",
  previousPage: "Önceki sayfa",
  nextPage: "Sonraki sayfa",
  page: (page) => `Sayfa ${page}`,
};

Headless

DataTable'ın düzeni uymadığında (örneğin mobilde kart listesi) aynı state'ten kendi markup'ını render'la.

const table = useDataTable({ data, columns });

// DataTable'ın render'ladığı her şey kendi markup'ın için de hazır:
table.rows;              // geçerli sayfa, filtrelenmiş ve sıralanmış
table.toggleSort("name");
table.setGlobalFilter("ada");
table.setPage(2);
table.toggleRow(table.getRowId(row));
table.selectedRows;      // tüm sayfalarda
table.toggleColumn("email", false);

Hook, verdiğin satırlar üzerinde çalışır. Sunucu tarafında sıralama ya da sayfalama için kendi state'inle veri çek ve doğrudan Table render'la.

API referansı

DataTableColumn

PropTipVarsayılanAçıklama
idstring–Benzersiz kolon id'si.
headerReactNode–Başlık içeriği.
labelstring–Kolonlar menüsü için düz metin ad. header string ise varsayılanı odur.
accessorkeyof Row | (row) => unknown–Sıralama, arama ve varsayılan hücre için değer.
cell(row) => ReactNode–Hücre içeriği. Varsayılanı accessor değerinin metni.
sortablebooleanfalseBu kolona göre sıralamaya izin verir.
sortFn(a, b) => number–Özel artan sıralama karşılaştırması. Varsayılanı sayı, tarih ve doğal metin sırası; boş değerler en sonda.
searchablebooleanaccessor varsa trueKolonu genel aramaya dahil eder.
filterFn(row, filter: string) => boolean–Kolona özel filtre.
hideablebooleantrueKolonu Kolonlar menüsünde listeler.
align"start" | "center" | "end""start"Metin hizası; sayılar için end.

useDataTable

Her state'in bir controlled prop'u, bir default… prop'u ve bir on…Change callback'i vardır.

PropTipVarsayılanAçıklama
dataRow[]–Tüm satırlar. Memoize et.
columnsDataTableColumn<Row>[]–Kolon tanımları.
getRowId(row, index) => stringrow.id ?? indexSeçim için kararlı id.
sort / defaultSort / onSortChange{ columnId, direction } | null–Aynı anda tek sıralı kolon.
globalFilter / defaultGlobalFilter / onGlobalFilterChangestring–Arama metni; her kelime aranabilir bir kolonda geçmeli.
columnFilters / defaultColumnFilters / onColumnFiltersChangeRecord<string, string>–Kolon filtreleri.
page / defaultPage / onPageChangenumber1Geçerli sayfa, 1'den başlar.
pageSize / defaultPageSize / onPageSizeChangenumber10Sayfa başına satır.
selection / defaultSelection / onSelectionChangestring[]–Seçili satır id'leri.
hiddenColumns / defaultHiddenColumns / onHiddenColumnsChangestring[]–Gizli kolon id'leri.

rows, filteredRows, visibleColumns, page, pageCount, pageSelection ("all" | "some" | "none"), selectedRows ile toggleSort, setGlobalFilter, setColumnFilter, setPage, setPageSize, toggleRow, togglePage, clearSelection ve toggleColumn setter'larını döndürür. Bir filtreyi ya da sayfa boyutunu değiştirmek 1. sayfaya döner.

DataTable

Tüm Table prop'larını kabul eder.

PropTipVarsayılanAçıklama
tableDataTableInstance<Row>–useDataTable'dan gelen state.
captionReactNode–Tabloyu adlandırır; showCaption verilmedikçe görsel olarak gizlidir.
showCaptionbooleanfalseCaption'ı tablonun üstünde gösterir.
selectablebooleanfalseBir checkbox kolonu ekler.
getRowLabel(row) => string–Satırı checkbox etiketinde adlandırır. Varsayılanı ilk görünür kolon.
searchablebooleantrueArama kutusunu gösterir.
columnTogglebooleangizlenebilir kolon varsa trueKolonlar menüsünü gösterir.
paginatedbooleanbirden çok sayfa varsa trueSayfalamayı gösterir.
pageSizeOptionsnumber[]–Sayfa başına satır seçimi sunar.
toolbarReactNode–Araç satırındaki ek kontroller.
emptyStateReactNodelabels.emptyHiçbir satır eşleşmediğinde gösterilir.
labelsPartial<DataTableLabels>–Görünen ve ekran okuyucuya giden her metin; varsayılanlar İngilizce.
rootClassNamestring–Dış sarmalayıcının sınıfı.

DataTableLabels: search, searchPlaceholder, columns, selectPage, selectRow(rowLabel), selected(count, total), results(count), empty, rowsPerPage, pagination, previousPage, nextPage, page(n).

Stil verme

SınıfEleman
.mrd-data-tableSarmalayıcı
.mrd-data-table__toolbar, .mrd-data-table__search, .mrd-data-table__columnsAraç satırı parçaları
.mrd-data-table__selectCheckbox hücreleri
.mrd-data-table__emptyBoş satır hücresi
.mrd-data-table__footer, .mrd-data-table__status, .mrd-data-table__page-sizeAlt bilgi parçaları

Satırlar, başlıklar ve hücreler Table'ın kendi sınıflarıdır (.mrd-table__*); seçili satırlar data-selected alır.

Erişilebilirlik

Tablo, bir <caption> ile native tablo semantiğini korur. Sıralanabilir başlıklar <th aria-sort> içindeki butonlardır; her checkbox'ın bir adı vardır ("Ada Lovelace satırını seç", "Bu sayfadaki tüm satırları seç") ve başlık checkbox'ı karışık state'i gösterir. Durum satırı, aramadan sonra sonuç sayısını ve seçim sayısını okuyan polite bir live region'dır; arama kutusu onunla açıklanır.

TuşNe yapar
TabArama, Kolonlar, sıralama butonları, checkbox'lar ve sayfalama arasında ilerler.
EnterSpaceSıralama butonunda: artan, azalan, sırasız arasında döner.
SpaceCheckbox'ta: satırı (ya da sayfayı) seçer veya seçimi kaldırır.

Kullanım ilkeleri

Yap

Sayıları sağa hizala (`align: "end"`) ve ad kolonunu hep görünür tut (`hideable: false`).

Kaçın

Hook'a binlerce satır yüklemek. Sayfalamayı ve sıralamayı sunucuda yap, onun yerine Table render'la.

İlgili sayfalar