Pagination in members

This commit is contained in:
William Bouzourène 2025-01-21 17:48:00 +01:00
parent 486147ea53
commit 3d02804c3f
2 changed files with 108 additions and 11 deletions

View file

@ -58,8 +58,43 @@ func Members(c *fiber.Ctx) error {
return err
}
var count int64
db.Model(&models.Person{}).Where(
"is_member = ? AND section_id IN ?",
true, allowedSections,
).Count(&count)
pageQuery := c.Query("p")
page, _ := strconv.Atoi(pageQuery)
if page <= 0 {
page = 1
}
pageSize := 50
offset := (page - 1) * pageSize
maxPages := 1
if count > int64(pageSize) {
maxPages = int(count) / pageSize
}
var pages []int
for i := 1; i <= maxPages; i++ {
if i == page {
pages = append(pages, i)
} else if i >= (page-2) && i < page {
pages = append(pages, i)
} else if i <= (page+2) && i > page {
pages = append(pages, i)
} else if page <= 2 && i <= 5 {
pages = append(pages, i)
} else if page >= (maxPages-2) && i >= (maxPages-5) {
pages = append(pages, i)
}
}
var people []models.Person
result := db.Order(
result := db.Offset(offset).Limit(pageSize).Order(
"last_name collate nocase asc, first_name collate nocase asc",
).Preload("Section").Find(
&people, "is_member = ? AND section_id IN ?", true, allowedSections,
@ -73,6 +108,9 @@ func Members(c *fiber.Ctx) error {
"PageTitle": "Membres",
"MembersPage": true,
"People": people,
"Page": page,
"Pages": pages,
"MaxPages": maxPages,
"PermShow": permShow,
"PermShowArchived": permShowArchived,
})

View file

@ -18,7 +18,6 @@
<hr>
</div>
{% if People %}
<div class="table-responsive">
<table class="table">
<thead>
@ -55,15 +54,75 @@
</tbody>
</table>
</div>
{% else %}
<div class="my-4">
{% if MembersPage %}
Pas de membre pour le moment
{% else %}
Pas de contact pour le moment
{% endif %}
</div>
{% endif %}
<nav aria-label="Page navigation example">
<ul class="pagination justify-content-center">
{% if Page <= 1 %}
<li class="page-item disabled">
<a class="page-link" href="javascript:;">
<i class="bi-rewind"></i>
</a>
</li>
<li class="page-item disabled">
<a class="page-link" href="javascript:;">
<i class="bi-caret-left"></i>
</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link" href="?p=1">
<i class="bi-rewind"></i>
</a>
</li>
<li class="page-item">
<a class="page-link" href="?p={{ Page - 1 }}">
<i class="bi-caret-left"></i>
</a>
</li>
{% endif %}
{% for i in Pages %}
<li class="page-item">
<a
{% if i == Page %}
class="page-link active"
{% else %}
class="page-link"
{% endif %}
href="?p={{ i }}"
>
{{ i }}
</a>
</li>
{% endfor %}
{% if Page >= MaxPages %}
<li class="page-item disabled">
<a class="page-link" href="javascript:;">
<i class="bi-caret-right"></i>
</a>
</li>
<li class="page-item disabled">
<a class="page-link" href="javascript:;">
<i class="bi-fast-forward"></i>
</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link" href="?p={{ Page + 1 }}">
<i class="bi-caret-right"></i>
</a>
</li>
<li class="page-item">
<a class="page-link" href="?p={{ MaxPages }}">
<i class="bi-fast-forward"></i>
</a>
</li>
{% endif %}
</ul>
</nav>
<div class="mt-3">
{% if MembersPage %}