Add pagination to service catalogue
This commit is contained in:
@@ -41,7 +41,22 @@
|
||||
{% for value, label in engagement_type_choices %}<option value="{{ value }}" {% if engagement_type == value %}selected{% endif %}>{{ label }}</option>{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="mt-3 flex justify-end"><button class="rounded-xl border border-slate-300 px-4 py-2 text-sm font-medium hover:bg-slate-50">Search</button></div>
|
||||
<div class="mt-3 flex flex-wrap items-center justify-between gap-3">
|
||||
<label class="flex items-center gap-2 text-sm text-slate-600">
|
||||
Rows per page
|
||||
<select name="per_page" class="rounded-lg border border-slate-300 px-3 py-2 text-sm">
|
||||
{% for size in [20, 50, 100] %}
|
||||
<option value="{{ size }}" {% if per_page == size %}selected{% endif %}>{{ size }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</label>
|
||||
<div class="flex gap-2">
|
||||
{% if q or category_id or recurrence_type or engagement_type or per_page != 20 %}
|
||||
<a href="/services/catalogue" class="rounded-xl border border-slate-300 px-4 py-2 text-sm font-medium text-slate-700 hover:bg-slate-50">Clear</a>
|
||||
{% endif %}
|
||||
<button class="rounded-xl border border-slate-300 px-4 py-2 text-sm font-medium hover:bg-slate-50">Search</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="overflow-hidden rounded-2xl bg-white shadow-soft">
|
||||
@@ -107,6 +122,72 @@
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="flex flex-col gap-3 border-t border-slate-200 px-4 py-4 sm:flex-row sm:items-center sm:justify-between">
|
||||
<div class="text-sm text-slate-600">
|
||||
{% if total %}
|
||||
Showing <span class="font-semibold text-slate-900">{{ start_item }}</span>–<span class="font-semibold text-slate-900">{{ end_item }}</span>
|
||||
of <span class="font-semibold text-slate-900">{{ total }}</span> active services
|
||||
{% else %}
|
||||
No active services found
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% if pages > 1 %}
|
||||
<div class="flex flex-wrap items-center justify-end gap-2" aria-label="Service catalogue pagination">
|
||||
<form method="get">
|
||||
<input type="hidden" name="q" value="{{ q }}">
|
||||
<input type="hidden" name="category_id" value="{{ category_id or '' }}">
|
||||
<input type="hidden" name="recurrence_type" value="{{ recurrence_type }}">
|
||||
<input type="hidden" name="engagement_type" value="{{ engagement_type }}">
|
||||
<input type="hidden" name="per_page" value="{{ per_page }}">
|
||||
<input type="hidden" name="page" value="{{ page - 1 }}">
|
||||
<button {% if page <= 1 %}disabled{% endif %} class="rounded-lg border border-slate-300 px-3 py-2 text-sm font-medium text-slate-700 hover:bg-slate-50 disabled:cursor-not-allowed disabled:opacity-40">Previous</button>
|
||||
</form>
|
||||
|
||||
{% set first_page = 1 if page <= 3 else page - 2 %}
|
||||
{% set last_page = pages if page + 2 >= pages else page + 2 %}
|
||||
|
||||
{% if first_page > 1 %}
|
||||
<form method="get">
|
||||
<input type="hidden" name="q" value="{{ q }}"><input type="hidden" name="category_id" value="{{ category_id or '' }}"><input type="hidden" name="recurrence_type" value="{{ recurrence_type }}"><input type="hidden" name="engagement_type" value="{{ engagement_type }}"><input type="hidden" name="per_page" value="{{ per_page }}"><input type="hidden" name="page" value="1">
|
||||
<button class="rounded-lg border border-slate-300 px-3 py-2 text-sm font-medium text-slate-700 hover:bg-slate-50">1</button>
|
||||
</form>
|
||||
{% if first_page > 2 %}<span class="px-1 text-slate-400">…</span>{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% for page_number in range(first_page, last_page + 1) %}
|
||||
<form method="get">
|
||||
<input type="hidden" name="q" value="{{ q }}">
|
||||
<input type="hidden" name="category_id" value="{{ category_id or '' }}">
|
||||
<input type="hidden" name="recurrence_type" value="{{ recurrence_type }}">
|
||||
<input type="hidden" name="engagement_type" value="{{ engagement_type }}">
|
||||
<input type="hidden" name="per_page" value="{{ per_page }}">
|
||||
<input type="hidden" name="page" value="{{ page_number }}">
|
||||
<button class="rounded-lg border px-3 py-2 text-sm font-medium {% if page_number == page %}border-brand-600 bg-brand-600 text-white{% else %}border-slate-300 text-slate-700 hover:bg-slate-50{% endif %}" {% if page_number == page %}aria-current="page"{% endif %}>{{ page_number }}</button>
|
||||
</form>
|
||||
{% endfor %}
|
||||
|
||||
{% if last_page < pages %}
|
||||
{% if last_page < pages - 1 %}<span class="px-1 text-slate-400">…</span>{% endif %}
|
||||
<form method="get">
|
||||
<input type="hidden" name="q" value="{{ q }}"><input type="hidden" name="category_id" value="{{ category_id or '' }}"><input type="hidden" name="recurrence_type" value="{{ recurrence_type }}"><input type="hidden" name="engagement_type" value="{{ engagement_type }}"><input type="hidden" name="per_page" value="{{ per_page }}"><input type="hidden" name="page" value="{{ pages }}">
|
||||
<button class="rounded-lg border border-slate-300 px-3 py-2 text-sm font-medium text-slate-700 hover:bg-slate-50">{{ pages }}</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
<form method="get">
|
||||
<input type="hidden" name="q" value="{{ q }}">
|
||||
<input type="hidden" name="category_id" value="{{ category_id or '' }}">
|
||||
<input type="hidden" name="recurrence_type" value="{{ recurrence_type }}">
|
||||
<input type="hidden" name="engagement_type" value="{{ engagement_type }}">
|
||||
<input type="hidden" name="per_page" value="{{ per_page }}">
|
||||
<input type="hidden" name="page" value="{{ page + 1 }}">
|
||||
<button {% if page >= pages %}disabled{% endif %} class="rounded-lg border border-slate-300 px-3 py-2 text-sm font-medium text-slate-700 hover:bg-slate-50 disabled:cursor-not-allowed disabled:opacity-40">Next</button>
|
||||
</form>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user