2023-09-04 15:37:45 +02:00
|
|
|
import q from 'qjuul'
|
|
|
|
import PaginationButton from '../PaginationButton'
|
|
|
|
import { useEffect, useState } from 'react'
|
|
|
|
|
|
|
|
interface PaginationProps {
|
|
|
|
currentPage: number
|
|
|
|
totalPages: number
|
2023-09-04 15:49:18 +02:00
|
|
|
handlePageChange: (pageNumber: number) => void
|
2023-09-04 15:37:45 +02:00
|
|
|
}
|
|
|
|
|
2023-09-04 15:49:18 +02:00
|
|
|
const Pagination: React.FC<PaginationProps> = ({
|
|
|
|
currentPage,
|
|
|
|
totalPages,
|
|
|
|
handlePageChange,
|
|
|
|
}) => {
|
2023-09-04 15:37:45 +02:00
|
|
|
const [showLeftDots, setShowLeftDots] = useState(false)
|
|
|
|
const [showRightDots, setShowRightDots] = useState(false)
|
|
|
|
const [showingNumbers, setShowingNumbers] = useState([0])
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
if (totalPages > 5) {
|
|
|
|
setShowLeftDots(currentPage > 4 ? true : false)
|
2023-09-04 15:49:18 +02:00
|
|
|
setShowRightDots(currentPage < totalPages - 3 ? true : false)
|
2023-09-04 15:37:45 +02:00
|
|
|
}
|
2023-09-04 15:49:18 +02:00
|
|
|
console.log('hei')
|
2023-09-04 15:37:45 +02:00
|
|
|
if (!showLeftDots && !showRightDots) {
|
|
|
|
setShowingNumbers(Array.from(Array(totalPages).keys()))
|
|
|
|
}
|
|
|
|
if (!showLeftDots && showRightDots) {
|
|
|
|
setShowingNumbers([1, 2, 3, 4, 5])
|
|
|
|
}
|
|
|
|
|
|
|
|
if (showLeftDots && !showRightDots) {
|
|
|
|
setShowingNumbers([
|
|
|
|
totalPages - 4,
|
|
|
|
totalPages - 3,
|
|
|
|
totalPages - 2,
|
|
|
|
totalPages - 1,
|
|
|
|
totalPages,
|
|
|
|
])
|
|
|
|
}
|
|
|
|
|
|
|
|
if (showLeftDots && showRightDots) {
|
|
|
|
setShowingNumbers([currentPage - 1, currentPage, currentPage + 1])
|
|
|
|
}
|
2023-09-04 15:49:18 +02:00
|
|
|
}, [totalPages, currentPage, showLeftDots, showRightDots])
|
2023-09-04 15:37:45 +02:00
|
|
|
|
|
|
|
return (
|
|
|
|
<q.div>
|
|
|
|
{totalPages > 0 && (
|
|
|
|
<q.div className="flex gap-4">
|
|
|
|
{showLeftDots && (
|
|
|
|
<q.div className="flex">
|
2023-09-04 15:49:18 +02:00
|
|
|
<PaginationButton
|
|
|
|
pageNumber={1}
|
|
|
|
handlePageChange={handlePageChange}
|
|
|
|
/>
|
2023-09-04 15:37:45 +02:00
|
|
|
...
|
|
|
|
</q.div>
|
|
|
|
)}
|
|
|
|
|
|
|
|
{showingNumbers.map((page) => (
|
|
|
|
<q.div>
|
2023-09-04 15:49:18 +02:00
|
|
|
<PaginationButton
|
|
|
|
pageNumber={page}
|
|
|
|
handlePageChange={handlePageChange}
|
2023-09-05 13:16:24 +02:00
|
|
|
isCurrentPage={page === currentPage}
|
2023-09-04 15:49:18 +02:00
|
|
|
/>
|
2023-09-04 15:37:45 +02:00
|
|
|
</q.div>
|
|
|
|
))}
|
|
|
|
{showRightDots && (
|
|
|
|
<q.div className="flex">
|
|
|
|
...
|
2023-09-04 15:49:18 +02:00
|
|
|
<PaginationButton
|
|
|
|
pageNumber={totalPages}
|
|
|
|
handlePageChange={handlePageChange}
|
|
|
|
/>{' '}
|
2023-09-04 15:37:45 +02:00
|
|
|
</q.div>
|
|
|
|
)}
|
|
|
|
</q.div>
|
|
|
|
)}
|
|
|
|
</q.div>
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
export default Pagination
|