adds per page

This commit is contained in:
2025-11-20 22:42:33 -08:00
parent d7afd31911
commit 5afb05d261
6 changed files with 35 additions and 7 deletions

View File

@@ -25,7 +25,7 @@ def register_admin_routes(app):
def admin_users(page=1): def admin_users(page=1):
"""Admin page to manage all users""" """Admin page to manage all users"""
# Pagination settings # Pagination settings
per_page = 25 per_page = int(request.args.get('per_page', 25))
offset = (page - 1) * per_page offset = (page - 1) * per_page
# Get all users from Firestore # Get all users from Firestore

2
app.py
View File

@@ -136,7 +136,7 @@ def dashboard(page=1):
return abort(400, "Invalid email format") return abort(400, "Invalid email format")
# Pagination settings # Pagination settings
per_page = 25 per_page = int(request.args.get('per_page', 25))
offset = (page - 1) * per_page offset = (page - 1) * per_page
query = None query = None

View File

@@ -40,7 +40,7 @@ def convert_to_pacific_time(date_str):
pacific_time = utc_time.astimezone(pytz.timezone('America/Los_Angeles')) pacific_time = utc_time.astimezone(pytz.timezone('America/Los_Angeles'))
# Format as YYYY-MM-DD # Format as YYYY-MM-DD
return pacific_time.strftime('%d/%m/%Y') return pacific_time.strftime('%m/%d/%Y')
except (ValueError, AttributeError) as e: except (ValueError, AttributeError) as e:
print(f"[WARN] Date conversion failed for '{date_str}': {e}") print(f"[WARN] Date conversion failed for '{date_str}': {e}")
return '' return ''

View File

@@ -1,7 +1,7 @@
{% if total_pages > 1 %} {% if total_pages > 1 %}
<div class="flex justify-center items-center mt-6 space-x-2"> <div class="flex justify-center items-center mt-6 space-x-2">
{% if current_page > 1 %} {% if current_page > 1 %}
<a href="{{ url_for(request.endpoint, page=current_page - 1) }}" class="px-3 py-2 text-sm text-slate-600 bg-white border border-slate-300 rounded-md hover:bg-slate-50"> <a href="{{ url_for(request.endpoint, page=current_page - 1, per_page=per_page) }}" class="px-3 py-2 text-sm text-slate-600 bg-white border border-slate-300 rounded-md hover:bg-slate-50">
Previous Previous
</a> </a>
{% else %} {% else %}
@@ -12,7 +12,7 @@
{% if page == current_page %} {% if page == current_page %}
<span class="px-3 py-2 text-sm font-medium text-white bg-blue-600 border border-blue-600 rounded-md">{{ page }}</span> <span class="px-3 py-2 text-sm font-medium text-white bg-blue-600 border border-blue-600 rounded-md">{{ page }}</span>
{% elif page == 1 or page == total_pages or (page >= current_page - 2 and page <= current_page + 2) %} {% elif page == 1 or page == total_pages or (page >= current_page - 2 and page <= current_page + 2) %}
<a href="{{ url_for(request.endpoint, page=page) }}" class="px-3 py-2 text-sm text-slate-600 bg-white border border-slate-300 rounded-md hover:bg-slate-50"> <a href="{{ url_for(request.endpoint, page=page, per_page=per_page) }}" class="px-3 py-2 text-sm text-slate-600 bg-white border border-slate-300 rounded-md hover:bg-slate-50">
{{ page }} {{ page }}
</a> </a>
{% elif page == current_page - 3 or page == current_page + 3 %} {% elif page == current_page - 3 or page == current_page + 3 %}
@@ -21,7 +21,7 @@
{% endfor %} {% endfor %}
{% if current_page < total_pages %} {% if current_page < total_pages %}
<a href="{{ url_for(request.endpoint, page=current_page + 1) }}" class="px-3 py-2 text-sm text-slate-600 bg-white border border-slate-300 rounded-md hover:bg-slate-50"> <a href="{{ url_for(request.endpoint, page=current_page + 1, per_page=per_page) }}" class="px-3 py-2 text-sm text-slate-600 bg-white border border-slate-300 rounded-md hover:bg-slate-50">
Next Next
</a> </a>
{% else %} {% else %}

View File

@@ -19,6 +19,17 @@
{% set _ = session.pop('reset_user_email', None) %} {% set _ = session.pop('reset_user_email', None) %}
{% endif %} {% endif %}
<h1 class="text-xl font-semibold mb-4">Admin: User Management</h1> <h1 class="text-xl font-semibold mb-4">Admin: User Management</h1>
<div class="mb-4 flex items-center">
<label for="perPage" class="mr-2 text-sm font-medium text-slate-700">Items per page:</label>
<select id="perPage" x-data="{ perPage: {{ per_page }} }" x-model="perPage" @change="window.location.href = `/admin/users/1?per_page=${$data.perPage}`"
class="px-3 py-2 border border-slate-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
<option value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
<option value="100">100</option>
</select>
</div>
<div class="mb-6"> <div class="mb-6">
<a href="/admin/users/new" class="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"> <a href="/admin/users/new" class="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">
Create New User Create New User

View File

@@ -14,6 +14,18 @@
</div> </div>
{% endif %} {% endif %}
<!-- Per Page Dropdown -->
<div class="mb-4 flex items-center">
<label for="perPage" class="mr-2 text-sm font-medium text-slate-700">Items per page:</label>
<select id="perPage" x-model="perPage" @change="window.location.href = `/dashboard/1?per_page=${$data.perPage}${$data.case_email_sim ? '&case_email=' + encodeURIComponent($data.case_email_sim) : ''}`"
class="px-3 py-2 border border-slate-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
<option value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
<option value="100">100</option>
</select>
</div>
<!-- Configure Visible Columns Link --> <!-- Configure Visible Columns Link -->
<div class="mb-4"> <div class="mb-4">
<button @click="showColumnModal = true" class="text-blue-600 hover:text-blue-800 text-sm font-medium underline"> <button @click="showColumnModal = true" class="text-blue-600 hover:text-blue-800 text-sm font-medium underline">
@@ -516,6 +528,7 @@
return { return {
showColumnModal: false, showColumnModal: false,
case_email_sim: '', case_email_sim: '',
perPage: 25,
columns: [ columns: [
'Matter Num', 'Matter Num',
'Matter Description', 'Matter Description',
@@ -573,12 +586,16 @@
init() { init() {
this.loadColumnSettings(); this.loadColumnSettings();
// Extract case_email from URL query parameter // Extract case_email and per_page from URL query parameter
const urlParams = new URLSearchParams(window.location.search); const urlParams = new URLSearchParams(window.location.search);
const caseEmail = urlParams.get('case_email'); const caseEmail = urlParams.get('case_email');
const perPage = urlParams.get('per_page');
if (caseEmail) { if (caseEmail) {
this.case_email_sim = caseEmail; this.case_email_sim = caseEmail;
} }
if (perPage) {
this.perPage = parseInt(perPage);
}
}, },
isColumnVisible(columnName) { isColumnVisible(columnName) {