pagination-front-end
Version:
pagination-front-end é uma biblioteca voltada para realização de paginação no front end( pagination-front-end is a front-end paging library)
51 lines (38 loc) • 1.18 kB
text/typescript
import { PageWindowResult } from '../types'
const calculationStartPageAndEndPage = (
allPages: number,
maxVisiblePages: number,
currentPage: number
): PageWindowResult => {
if (allPages <= 0) {
return { startPage: 1, endPage: 0 }
}
const visiblePages = Math.max(1, maxVisiblePages)
if (allPages <= visiblePages) {
return { startPage: 1, endPage: allPages }
}
const maxPagesBeforeCurrentPage = Math.floor(visiblePages / 2)
const maxPagesAfterCurrentPage = Math.ceil(visiblePages / 2) - 1
const isNearStart = currentPage <= maxPagesBeforeCurrentPage
const isNearEnd = currentPage + maxPagesAfterCurrentPage >= allPages
const startPage = (() => {
if (isNearStart) {
return 1
}
if (isNearEnd) {
return allPages - visiblePages + 1
}
return currentPage - maxPagesBeforeCurrentPage
})()
const endPage = (() => {
if (isNearStart) {
return visiblePages
}
if (isNearEnd) {
return allPages
}
return currentPage + maxPagesAfterCurrentPage
})()
return { startPage, endPage }
}
export default calculationStartPageAndEndPage