// ----------------------------------------------------------------------------- // Rent-Ka — Rental listings aggregator (Canada, outside Québec) // Author: Simon-Pierre Boucher — contact@spboucher.ai // components/Pager.tsx: editorial pagination (12 listings/page) // Previous / numbers with ellipses / Next + "X–Y of N" recap. // ----------------------------------------------------------------------------- import { IcoChevronLeft, IcoChevronRight } from "./Icons"; /** 1 … 4 [5] 6 … 12 — window around the current page, bounds always visible */ function pageItems(page: number, pages: number): (number | "…")[] { if (pages <= 7) return Array.from({ length: pages }, (_, i) => i + 1); const win = new Set([1, 2, page - 1, page, page + 1, pages - 1, pages]); const items: (number | "…")[] = []; let prev = 0; for (let n = 1; n <= pages; n++) { if (!win.has(n)) continue; if (prev && n - prev > 1) items.push("…"); items.push(n); prev = n; } return items; } export default function Pager({ page, pageSize, total, onPage }: { page: number; pageSize: number; total: number; onPage: (p: number) => void; }) { const pages = Math.max(1, Math.ceil(total / pageSize)); if (pages <= 1) return null; const from = (page - 1) * pageSize + 1; const to = Math.min(page * pageSize, total); return ( ); }