Paginate partner review board panels

This commit is contained in:
A R R R Associates
2026-08-14 15:06:32 +05:30
parent 9b3ea9a1c7
commit 29ddb7be10
@@ -83,8 +83,15 @@
</tr> </tr>
{% endmacro %} {% endmacro %}
{% macro panel(title, subtitle, ids, payload, tone) %} {% macro panel(title, subtitle, ids, payload, tone, page_param, current_page, page_size, q_value) %}
<section class="overflow-hidden rounded-3xl border border-slate-200 bg-white shadow-soft"> <section class="overflow-hidden rounded-3xl border border-slate-200 bg-white shadow-soft">
{% set total_items = ids|length %}
{% set total_pages = ((total_items + page_size - 1) // page_size) if total_items else 1 %}
{% set page = current_page if current_page > 0 else 1 %}
{% if page > total_pages %}{% set page = total_pages %}{% endif %}
{% set start_index = (page - 1) * page_size %}
{% set page_ids = ids[start_index:start_index + page_size] %}
<div class="flex flex-col gap-2 border-b border-slate-200 px-5 py-4 sm:flex-row sm:items-center sm:justify-between"> <div class="flex flex-col gap-2 border-b border-slate-200 px-5 py-4 sm:flex-row sm:items-center sm:justify-between">
<div> <div>
<h3 class="text-base font-semibold text-slate-900">{{ title }}</h3> <h3 class="text-base font-semibold text-slate-900">{{ title }}</h3>
@@ -115,13 +122,13 @@
{% set rendered = namespace(seen=[]) %} {% set rendered = namespace(seen=[]) %}
{% for column in payload.columns %} {% for column in payload.columns %}
{% for task in column.tasks %} {% for task in column.tasks %}
{% if task.subscription_id and task.subscription_id in ids and task.subscription_id not in rendered.seen %} {% if task.subscription_id and task.subscription_id in page_ids and task.subscription_id not in rendered.seen %}
{% set _ = rendered.seen.append(task.subscription_id) %} {% set _ = rendered.seen.append(task.subscription_id) %}
{{ engagement_row(task, column, payload) }} {{ engagement_row(task, column, payload) }}
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% endfor %} {% endfor %}
{% if rendered.seen|length == 0 %} {% if total_items == 0 %}
<tr> <tr>
<td colspan="7" class="px-6 py-10 text-center text-sm text-slate-500">No engagements in this section.</td> <td colspan="7" class="px-6 py-10 text-center text-sm text-slate-500">No engagements in this section.</td>
</tr> </tr>
@@ -129,6 +136,29 @@
</tbody> </tbody>
</table> </table>
</div> </div>
{% if total_items > page_size %}
<div class="flex flex-col gap-3 border-t border-slate-200 px-5 py-4 text-xs text-slate-600 sm:flex-row sm:items-center sm:justify-between">
<div>
Showing {{ start_index + 1 }}-{{ [start_index + page_ids|length, total_items]|min }} of {{ total_items }} engagements
</div>
<div class="flex items-center gap-2">
{% if page > 1 %}
<a href="?q={{ q_value }}&{{ page_param }}={{ page - 1 }}"
class="rounded-lg border border-slate-300 bg-white px-3 py-1.5 font-semibold text-slate-700 hover:bg-slate-50">Previous</a>
{% else %}
<span class="rounded-lg border border-slate-200 bg-slate-50 px-3 py-1.5 font-semibold text-slate-400">Previous</span>
{% endif %}
<span class="font-semibold text-slate-700">Page {{ page }} of {{ total_pages }}</span>
{% if page < total_pages %}
<a href="?q={{ q_value }}&{{ page_param }}={{ page + 1 }}"
class="rounded-lg border border-slate-300 bg-white px-3 py-1.5 font-semibold text-slate-700 hover:bg-slate-50">Next</a>
{% else %}
<span class="rounded-lg border border-slate-200 bg-slate-50 px-3 py-1.5 font-semibold text-slate-400">Next</span>
{% endif %}
</div>
</div>
{% endif %}
</section> </section>
{% endmacro %} {% endmacro %}
@@ -223,12 +253,21 @@
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% set review_page = request.query_params.get('review_page', '1')|int %}
{% set progress_page = request.query_params.get('progress_page', '1')|int %}
{% set completed_page = request.query_params.get('completed_page', '1')|int %}
{% set panel_page_size = 25 %}
{{ panel( {{ panel(
'Review Required', 'Review Required',
'Pending review, clarification-required and rework engagements are shown first.', 'Pending review, clarification-required and rework engagements are shown first.',
groups.review, groups.review,
payload, payload,
'review' 'review',
'review_page',
review_page,
panel_page_size,
q or ''
) }} ) }}
{{ panel( {{ panel(
@@ -236,7 +275,11 @@
'Engagements currently moving with the team and not presently waiting in the review queue.', 'Engagements currently moving with the team and not presently waiting in the review queue.',
groups.progress, groups.progress,
payload, payload,
'progress' 'progress',
'progress_page',
progress_page,
panel_page_size,
q or ''
) }} ) }}
{{ panel( {{ panel(
@@ -244,7 +287,11 @@
'Completed engagement rows remain available separately for review history and reference.', 'Completed engagement rows remain available separately for review history and reference.',
groups.completed, groups.completed,
payload, payload,
'completed' 'completed',
'completed_page',
completed_page,
panel_page_size,
q or ''
) }} ) }}
<div class="rounded-2xl border border-slate-200 bg-slate-50 px-4 py-3 text-xs text-slate-500"> <div class="rounded-2xl border border-slate-200 bg-slate-50 px-4 py-3 text-xs text-slate-500">