Pagination

Önceki ve sonraki kontrolleri ve kompakt bir sayfa aralığıyla sonuç sayfaları arasında gezinir.

KararlıKaynak kod

Import

tsx
import { Pagination, getPageRange } from "@merid/react";

Anatomi

Pagination tek bir component'tir. Şunları render'lar:

  • içinde bir liste olan bir <nav> landmark'ı,
  • bir önceki ve bir sonraki kontrolü (etiketli ikon butonlar),
  • sayfa butonları: ilk sayfa, son sayfa ve geçerli sayfanın her iki yanında siblingCount kadar sayfa,
  • iki ya da daha fazla sayfanın atlandığı her yerde bir üç nokta.

Örnekler

Controlled

Sayfa senin state'inde ya da URL'de tutuluyorsa page ve onPageChange ver.

1–20 arası sonuçlar gösteriliyor

Daha fazla komşu sayfa

siblingCount, geçerli sayfanın her iki yanında kaç sayfa gösterileceğini belirler.

getHref verildiğinde diğer her sayfa bir <a> olarak render'lanır; böylece sonuçlar taranabilir ve yeni bir tab'da açılabilir. Geçerli sayfa (kendine link vermek yerine) aria-current="page" ile düz metin olarak render'lanır. Devre dışı önceki/sonraki kontrolleri buton olarak kalır.

Client-side routing için renderLink ekle. Link'in tüm prop'larını (href, className, aria-label, aria-current, onClick, children, …) ve hedef page değerini alır:

tsx
import NextLink from "next/link";

<Pagination
  pageCount={12}
  page={page}
  getHref={(p) => `/invoices?page=${p}`}
  renderLink={({ page, ...props }) => <NextLink {...props} />}
/>

getPageRange ile özel layout'lar

getPageRange(page, pageCount, siblings = 1), component'in kullandığı aralığın aynısını sayfa numaraları ile "ellipsis-start" / "ellipsis-end" işaretlerinden oluşan bir dizi olarak döndürür.

tsx
getPageRange(5, 12); // [1, "ellipsis-start", 4, 5, 6, "ellipsis-end", 12]

API referansı

Pagination

<nav> render'lar ve onChange dışındaki HTML attribute'larını kabul eder.

PropTipVarsayılanAçıklama
pageCountZorunlunumber–Toplam sayfa sayısı (≥ 1).
pagenumber–Controlled geçerli sayfa, 1'den başlar.
defaultPagenumber1Uncontrolled kullanımda başlangıç sayfası.
onPageChange(page: number) => void–İstenen sayfayla çağrılır.
siblingCountnumber1Geçerli sayfanın her iki yanında gösterilen sayfa sayısı.
getHref(page: number) => string–Verildiğinde sayfalar bu href ile link olarak render'lanır; geçerli sayfa metin olarak render'lanır.
renderLink(props: PaginationLinkProps) => ReactNode–getHref ile birlikte her linki kendin render'larsın (örneğin bir router linki). `page` dışındaki tüm prop'ları `<a>` render'layan bir elemana yay.
aria-labelstring"Pagination"Landmark'ın erişilebilir adı. Türkçe arayüzde Türkçe bir değer ver, örneğin "Sayfalama".
previousLabelstring"Previous page"Önceki butonunun etiketi. Türkçe arayüzde Türkçe bir değer ver, örneğin "Önceki sayfa".
nextLabelstring"Next page"Sonraki butonunun etiketi. Türkçe arayüzde Türkçe bir değer ver, örneğin "Sonraki sayfa".
pageLabel(page: number) => string(p) => `Page ${p}`Bir sayfa butonunun erişilebilir etiketini üretir. Türkçe arayüzde örneğin (p) => `Sayfa ${p}` ver.
refRef<HTMLElement>–nav elemanına iletilen ref.

getPageRange

PropTipVarsayılanAçıklama
pageZorunlunumber–Geçerli sayfa, 1…pageCount aralığına sıkıştırılır.
pageCountZorunlunumber–Toplam sayfa.
siblingsnumber1Geçerli sayfanın her iki yanındaki sayfa sayısı.

PageRangeItem[] döndürür; burada PageRangeItem = number | "ellipsis-start" | "ellipsis-end".

Stil verme

  • .mrd-pagination / .mrd-pagination__list: nav kökü ve flex liste.
  • .mrd-pagination__page: bir sayfa butonu, linki ya da (link modunda geçerli sayfa için) metni: --mrd-icon-button-md boyutunda kare, --mrd-radius-md.
  • .mrd-pagination__page[aria-current="page"] (ayrıca data-state="active"): geçerli sayfa; --mrd-accent-soft dolgu, --mrd-accent-strong metin.
  • data-direction="previous" ya da "next" ile .mrd-pagination__control: chevron kontrolleri; :disabled durumunda --mrd-placeholder kullanılır.
  • .mrd-pagination__ellipsis: … boşluğu, yardımcı teknolojilerden gizlenir.

Kaba işaretçilerde (coarse pointer) kontroller --mrd-icon-button-lg boyutuna büyür. Azaltılmış hareket basma ölçeğini kaldırır.

Erişilebilirlik

Sayfalama için ayrı bir APG deseni yok; adlandırılmış bir navigation bölgesi için landmark bölgeleri rehberini izler.

  • Liste, "Pagination" adlı bir nav içinde durur. Sayfada birden fazla varsa daha belirgin bir ad ver (örneğin "Arama sonucu sayfaları").
  • Her sayfa kontrolünün pageLabel'dan gelen erişilebilir bir etiketi vardır; geçerli sayfada aria-current="page" bulunur.
  • Önceki ve sonraki, uçlarda gizlenmez, devre dışı bırakılır; böylece layout kaymaz.
  • Üç noktalar aria-hidden'dır.
TuşNe yapar
TabFocus'u sonraki kontrole taşır.
EnterFocus'taki sayfayı ya da kontrolü etkinleştirir.
SpaceFocus'taki butonu etkinleştirir (buton modu).

Kullanım ilkeleri

Yap

Sayfalamanın yanında sonuç sayısını göster ve sayfa değiştiğinde listeyi en üste kaydır.

Kaçın

Birkaç öğe için ya da bir akıştaki adımlar için sayfalama kullanmak. Sıralı görevler için Stepper kullan.

Yap

Sayfalar gerçek URL'lerse getHref kullan; böylece paylaşılabilir ve yer imlerine eklenebilirler.

Kaçın

Sayfalar arasında sayfa boyutunu sessizce değiştirmek.

İlgili sayfalar