From 5994c5a057fcf99c0ddf673cb042ae5090ef170a Mon Sep 17 00:00:00 2001 From: Mikko Nieminen Date: Tue, 11 Feb 2025 17:24:14 +0100 Subject: [PATCH] add pagination django setting and pagination hiding (#1005) --- CHANGELOG.rst | 1 + config/settings/base.py | 4 ++++ config/settings/test.py | 1 + projectroles/static/projectroles/js/project_list.js | 11 +++++++++-- projectroles/templates/projectroles/home.html | 4 ++++ .../templates/projectroles/project_detail.html | 2 ++ projectroles/tests/test_ui.py | 1 + 7 files changed, 22 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a44f2ca1..de6385a6 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -37,6 +37,7 @@ Added - ``active`` arg in ``ProjectInviteMixin.make_invite()`` (#1403) - Ability for users to leave project (#918) - ``project_list_highlight`` app setting (#1005) + - ``PROJECTROLES_PROJECT_LIST_PAGINATION`` Django setting (#1005) Changed ------- diff --git a/config/settings/base.py b/config/settings/base.py index e5ef8977..a1b6df15 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -637,6 +637,10 @@ def set_logging(level=None): # PROJECTROLES_BREADCRUMB_STICKY = True # Custom message to be displayed if site read-only mode is enabled PROJECTROLES_READ_ONLY_MSG = env.str('PROJECTROLES_READ_ONLY_MSG', None) +# Default project list pagination page size +PROJECTROLES_PROJECT_LIST_PAGINATION = env.int( + 'PROJECTROLES_PROJECT_LIST_PAGINATION', 10 +) # Hide project apps from the UI (sidebar, dropdown menus and project details) PROJECTROLES_HIDE_PROJECT_APPS = env.list( diff --git a/config/settings/test.py b/config/settings/test.py index 99bd6a76..c1baee16 100644 --- a/config/settings/test.py +++ b/config/settings/test.py @@ -130,6 +130,7 @@ PROJECTROLES_CUSTOM_JS_INCLUDES = [] PROJECTROLES_CUSTOM_CSS_INCLUDES = [] PROJECTROLES_SIDEBAR_ICON_SIZE = 36 +PROJECTROLES_PROJECT_LIST_PAGINATION = 10 # Bgjobs app settings BGJOBS_PAGINATION = 15 diff --git a/projectroles/static/projectroles/js/project_list.js b/projectroles/static/projectroles/js/project_list.js index c2e0019c..02aa96cd 100644 --- a/projectroles/static/projectroles/js/project_list.js +++ b/projectroles/static/projectroles/js/project_list.js @@ -310,11 +310,11 @@ $(document).ready(function () { $.fn.dataTable.ext.classes.sPageButton = 'btn sodar-list-btn ml-1 sodar-paginate-button btn-outline-light ' + 'text-primary'; - $('#sodar-pr-project-list-table').DataTable({ + var dt = $('#sodar-pr-project-list-table').DataTable({ ordering: false, scrollX: false, paging: true, - pageLength: 10, + pageLength: window.projectListPagination, lengthChange: true, scrollCollapse: true, info: false, @@ -328,6 +328,12 @@ $(document).ready(function () { }, dom: 'tp' }); + // Hide pagination if only one page + if (dt.page.info().pages === 1) { + // TODO: Disable pagination control once implemented + $('.dataTables_paginate').hide(); + } + // Add star filter $.fn.dataTable.ext.search.push( function(settings, data, dataIndex, rowObj, counter) { var api = new $.fn.dataTable.Api('#sodar-pr-project-list-table'); @@ -337,6 +343,7 @@ $(document).ready(function () { return $(api.row(dataIndex).node()).data('starred'); } else return true; }); + if (projectUuids.length > 0) { // Update custom columns updateCustomColumns(projectUuids); diff --git a/projectroles/templates/projectroles/home.html b/projectroles/templates/projectroles/home.html index 0230461b..6c90f3c9 100644 --- a/projectroles/templates/projectroles/home.html +++ b/projectroles/templates/projectroles/home.html @@ -37,6 +37,10 @@

Home

{% block javascript %} {{ block.super }} + + diff --git a/projectroles/templates/projectroles/project_detail.html b/projectroles/templates/projectroles/project_detail.html index 08851d38..30d3a467 100644 --- a/projectroles/templates/projectroles/project_detail.html +++ b/projectroles/templates/projectroles/project_detail.html @@ -113,7 +113,9 @@

{% block javascript %} {{ block.super }} + {% if object.type == 'CATEGORY' %} diff --git a/projectroles/tests/test_ui.py b/projectroles/tests/test_ui.py index f7904931..83cbfc3a 100644 --- a/projectroles/tests/test_ui.py +++ b/projectroles/tests/test_ui.py @@ -857,6 +857,7 @@ def test_project_list_role_col_category_inherit(self): self.assertEqual(col.get_attribute('innerHTML'), 'N/A') # TODO: Test paginated list + # TODO: Test lack of pagination with less projects than setting # TODO: Test custom columns retrieval on paginated list # TODO: Test role column retrieval on paginated list # TODO: Test pagination controls and settings once implemented