Iniciativa Cidadã Independente · Transparência Parlamentar
TSX46 linhas1.429 bytes

apps/web/src/components/senador/Pagination.tsx

SHA-256

9ab4abf56c94c9b5118772555fcebdaf15d42d0fa958932f424b1443d4dfb0dd

Somente leiturafonte-acf635076da2
'use client'

export default function Pagination({
  pagina,
  porPagina,
  total,
  onChange,
}: {
  pagina: number
  porPagina: number
  total: number
  onChange: (p: number) => void
}) {
  const totalPaginas = Math.ceil(total / porPagina)
  if (totalPaginas <= 1) return null
  const inicio = (pagina - 1) * porPagina + 1
  const fim = Math.min(pagina * porPagina, total)
  return (
    <div className="flex items-center justify-between text-sm">
      <p className="text-muted">
        Exibindo <strong className="text-ink">{inicio}</strong>–
        <strong className="text-ink">{fim}</strong> de <strong className="text-ink">{total}</strong>
      </p>
      <div className="flex gap-1">
        <button
          onClick={() => onChange(Math.max(1, pagina - 1))}
          disabled={pagina === 1}
          className="rounded-sm border border-border bg-surface px-3 py-1.5 text-muted hover:text-primary disabled:opacity-30"
        >
          Anterior
        </button>
        <span className="px-3 py-1.5 font-mono text-muted">
          {pagina} / {totalPaginas}
        </span>
        <button
          onClick={() => onChange(Math.min(totalPaginas, pagina + 1))}
          disabled={pagina === totalPaginas}
          className="rounded-sm border border-border bg-surface px-3 py-1.5 text-muted hover:text-primary disabled:opacity-30"
        >
          Próxima
        </button>
      </div>
    </div>
  )
}