SPB Git forge

spb/resto-ka

Public

Resto·Ka — tous les restaurants du Québec, menus complets et prix réels (famille ·Ka)

52commits 1branches 0releases
11.6 MBsize
maindefault branch
19 days agolast push
Python 69.3% TypeScript 16.7% CSS 7.9% JavaScript 4.7% HTML 1.4%
1.7 KB · 51 lines tsx
Raw Blame History
1// ==============================================================================2// Author: Simon-Pierre Boucher <contact@spboucher.ai>3// File:   components/Pager.tsx4// Desc:   Pagination numérotée en bas des résultats (fenêtre 1 … n-1 n n+1 … N)5//         pour ne jamais surcharger une page — style éditorial sharp.6// ==============================================================================78export default function Pager({ page, pageCount, onPage }: {9  page: number;            // page courante, base 010  pageCount: number;11  onPage: (p: number) => void;12}) {13  if (pageCount <= 1) return null;1415  const nums: (number | "…")[] = [];16  const push = (n: number | "…") => {17    if (nums[nums.length - 1] !== n) nums.push(n);18  };19  for (let i = 0; i < pageCount; i++) {20    if (i === 0 || i === pageCount - 1 || Math.abs(i - page) <= 1) push(i);21    else push("…");22  }2324  const go = (p: number) => {25    onPage(p);26    window.scrollTo({ top: 0 });27  };2829  return (30    <nav className="pager" aria-label="Pagination">31      <button className="pg-btn" disabled={page === 0} onClick={() => go(page - 1)}32        aria-label="Page précédente">←</button>33      {nums.map((n, i) =>34        n === "…" ? (35          <span className="pg-ellipsis" key={`e${i}`}>…</span>36        ) : (37          <button38            key={n}39            className={`pg-btn pg-num ${n === page ? "on" : ""}`}40            aria-current={n === page ? "page" : undefined}41            onClick={() => go(n)}42          >43            {n + 1}44          </button>45        ))}46      <button className="pg-btn" disabled={page >= pageCount - 1} onClick={() => go(page + 1)}47        aria-label="Page suivante">→</button>48    </nav>49  );50}51