Move pagination to helper function and implement filters+search in contacts

This commit is contained in:
William Bouzourène 2025-01-23 12:04:09 +01:00
parent f2afffd818
commit 5cb7d7ce32
Signed by: bouzoure
SSH key fingerprint: SHA256:19MbXpLua4rUtk8tunMesD8KUKb91LXLHg8E/qTooww
5 changed files with 470 additions and 61 deletions

68
helpers/pagination.go Normal file
View file

@ -0,0 +1,68 @@
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.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
}