Fix empty category filter in service catalogue pagination
This commit is contained in:
@@ -137,7 +137,7 @@
|
|||||||
<div class="flex flex-wrap items-center justify-end gap-2" aria-label="Service catalogue pagination">
|
<div class="flex flex-wrap items-center justify-end gap-2" aria-label="Service catalogue pagination">
|
||||||
<form method="get">
|
<form method="get">
|
||||||
<input type="hidden" name="q" value="{{ q }}">
|
<input type="hidden" name="q" value="{{ q }}">
|
||||||
<input type="hidden" name="category_id" value="{{ category_id or '' }}">
|
{% if category_id %}<input type="hidden" name="category_id" value="{{ category_id }}">{% endif %}
|
||||||
<input type="hidden" name="recurrence_type" value="{{ recurrence_type }}">
|
<input type="hidden" name="recurrence_type" value="{{ recurrence_type }}">
|
||||||
<input type="hidden" name="engagement_type" value="{{ engagement_type }}">
|
<input type="hidden" name="engagement_type" value="{{ engagement_type }}">
|
||||||
<input type="hidden" name="per_page" value="{{ per_page }}">
|
<input type="hidden" name="per_page" value="{{ per_page }}">
|
||||||
@@ -150,7 +150,7 @@
|
|||||||
|
|
||||||
{% if first_page > 1 %}
|
{% if first_page > 1 %}
|
||||||
<form method="get">
|
<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">
|
<input type="hidden" name="q" value="{{ q }}">{% if category_id %}<input type="hidden" name="category_id" value="{{ category_id }}">{% endif %}<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>
|
<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>
|
</form>
|
||||||
{% if first_page > 2 %}<span class="px-1 text-slate-400">…</span>{% endif %}
|
{% if first_page > 2 %}<span class="px-1 text-slate-400">…</span>{% endif %}
|
||||||
@@ -159,7 +159,7 @@
|
|||||||
{% for page_number in range(first_page, last_page + 1) %}
|
{% for page_number in range(first_page, last_page + 1) %}
|
||||||
<form method="get">
|
<form method="get">
|
||||||
<input type="hidden" name="q" value="{{ q }}">
|
<input type="hidden" name="q" value="{{ q }}">
|
||||||
<input type="hidden" name="category_id" value="{{ category_id or '' }}">
|
{% if category_id %}<input type="hidden" name="category_id" value="{{ category_id }}">{% endif %}
|
||||||
<input type="hidden" name="recurrence_type" value="{{ recurrence_type }}">
|
<input type="hidden" name="recurrence_type" value="{{ recurrence_type }}">
|
||||||
<input type="hidden" name="engagement_type" value="{{ engagement_type }}">
|
<input type="hidden" name="engagement_type" value="{{ engagement_type }}">
|
||||||
<input type="hidden" name="per_page" value="{{ per_page }}">
|
<input type="hidden" name="per_page" value="{{ per_page }}">
|
||||||
@@ -171,14 +171,14 @@
|
|||||||
{% if last_page < pages %}
|
{% if last_page < pages %}
|
||||||
{% if last_page < pages - 1 %}<span class="px-1 text-slate-400">…</span>{% endif %}
|
{% if last_page < pages - 1 %}<span class="px-1 text-slate-400">…</span>{% endif %}
|
||||||
<form method="get">
|
<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 }}">
|
<input type="hidden" name="q" value="{{ q }}">{% if category_id %}<input type="hidden" name="category_id" value="{{ category_id }}">{% endif %}<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>
|
<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>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<form method="get">
|
<form method="get">
|
||||||
<input type="hidden" name="q" value="{{ q }}">
|
<input type="hidden" name="q" value="{{ q }}">
|
||||||
<input type="hidden" name="category_id" value="{{ category_id or '' }}">
|
{% if category_id %}<input type="hidden" name="category_id" value="{{ category_id }}">{% endif %}
|
||||||
<input type="hidden" name="recurrence_type" value="{{ recurrence_type }}">
|
<input type="hidden" name="recurrence_type" value="{{ recurrence_type }}">
|
||||||
<input type="hidden" name="engagement_type" value="{{ engagement_type }}">
|
<input type="hidden" name="engagement_type" value="{{ engagement_type }}">
|
||||||
<input type="hidden" name="per_page" value="{{ per_page }}">
|
<input type="hidden" name="per_page" value="{{ per_page }}">
|
||||||
|
|||||||
@@ -288,7 +288,17 @@ def category_edit_submit(request: Request, category_id: int, name: str = Form(..
|
|||||||
|
|
||||||
|
|
||||||
@router.get('/catalogue')
|
@router.get('/catalogue')
|
||||||
def catalogue_list(request: Request, q: str = '', category_id: int | None = None, recurrence_type: str = '', engagement_type: str = '', page: int = 1, per_page: int = 20):
|
def catalogue_list(request: Request, q: str = '', category_id: str = '', recurrence_type: str = '', engagement_type: str = '', page: int = 1, per_page: int = 20):
|
||||||
|
category_id_value: int | None = None
|
||||||
|
category_id_text = (category_id or '').strip()
|
||||||
|
if category_id_text:
|
||||||
|
try:
|
||||||
|
parsed_category_id = int(category_id_text)
|
||||||
|
if parsed_category_id > 0:
|
||||||
|
category_id_value = parsed_category_id
|
||||||
|
except (TypeError, ValueError):
|
||||||
|
category_id_value = None
|
||||||
|
|
||||||
db = CommonSessionLocal()
|
db = CommonSessionLocal()
|
||||||
try:
|
try:
|
||||||
user = get_current_user(request, db=db)
|
user = get_current_user(request, db=db)
|
||||||
@@ -296,7 +306,7 @@ def catalogue_list(request: Request, q: str = '', category_id: int | None = None
|
|||||||
return RedirectResponse(url='/login', status_code=303)
|
return RedirectResponse(url='/login', status_code=303)
|
||||||
if not _can_view_services(db, user):
|
if not _can_view_services(db, user):
|
||||||
return _redirect_denied()
|
return _redirect_denied()
|
||||||
payload = list_catalogue_payload(db, q=q, category_id=category_id, recurrence_type=recurrence_type, engagement_type=engagement_type, page=page, per_page=per_page)
|
payload = list_catalogue_payload(db, q=q, category_id=category_id_value, recurrence_type=recurrence_type, engagement_type=engagement_type, page=page, per_page=per_page)
|
||||||
tenant_id = _active_tenant_id(request, user)
|
tenant_id = _active_tenant_id(request, user)
|
||||||
can_create_catalogue = _is_system_admin(db, user) and _has_perm(db, user, 'services.create')
|
can_create_catalogue = _is_system_admin(db, user) and _has_perm(db, user, 'services.create')
|
||||||
can_manage_firm_services = _can_manage_firm_services(db, user)
|
can_manage_firm_services = _can_manage_firm_services(db, user)
|
||||||
|
|||||||
Reference in New Issue
Block a user