import React from 'react' /** * Pagination control that mirrors Laravel's paginator shape. * Expects: { current_page, last_page, per_page, total, path } or links array. */ export default function Pagination({ meta, onPageChange }) { const current = meta?.current_page ?? 1 const lastPage = meta?.last_page ?? 1 if (lastPage <= 1) return null const pages = buildPages(current, lastPage) const go = (page) => { if (page < 1 || page > lastPage || page === current) return if (onPageChange) { onPageChange(page) } else { // Fallback: navigate via URL const url = new URL(window.location.href) url.searchParams.set('page', page) window.location.href = url.toString() } } return ( ) } /** Build a compact page-number array with ellipsis. */ function buildPages(current, last) { if (last <= 7) { return Array.from({ length: last }, (_, i) => i + 1) } const pages = new Set([1, 2, current - 1, current, current + 1, last - 1, last]) const sorted = [...pages].filter(p => p >= 1 && p <= last).sort((a, b) => a - b) const result = [] for (let i = 0; i < sorted.length; i++) { if (i > 0 && sorted[i] - sorted[i - 1] > 1) { result.push('...') } result.push(sorted[i]) } return result }