pop-camarades/helpers/pagination.go

72 lines
1.4 KiB
Go

package helpers
type Pagination struct {
PageSize int
MaxPages int
CurrentPage int
Offset int
Count int
Pages []int
}
func Paginate(size int, count int, page int) Pagination {
if size < 1 {
size = 1
}
if page < 1 {
page = 1
}
pagination := Pagination{
PageSize: size,
CurrentPage: page,
Count: count,
MaxPages: 1,
}
if pagination.Count > pagination.PageSize {
pagination.MaxPages = pagination.Count / pagination.PageSize
if pagination.Count%pagination.PageSize > 0 {
pagination.MaxPages++
}
}
if pagination.CurrentPage > pagination.MaxPages {
pagination.CurrentPage = 1
}
pagination.Offset = (pagination.CurrentPage - 1) * pagination.PageSize
for i := 1; i <= pagination.MaxPages; i++ {
if i == pagination.CurrentPage {
pagination.Pages = append(pagination.Pages, i)
continue
}
if i >= (pagination.CurrentPage-2) && i < pagination.CurrentPage {
pagination.Pages = append(pagination.Pages, i)
continue
}
if i <= (pagination.CurrentPage+2) && i > pagination.CurrentPage {
pagination.Pages = append(pagination.Pages, i)
continue
}
if pagination.CurrentPage <= 2 && i <= 5 {
pagination.Pages = append(pagination.Pages, i)
continue
}
if pagination.CurrentPage >= (pagination.MaxPages-2) && i >= (pagination.MaxPages-5) {
pagination.Pages = append(pagination.Pages, i)
continue
}
}
return pagination
}