diff --git a/CHANGELOG.rst b/CHANGELOG.rst index de6385a6..8d410fd9 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -36,8 +36,7 @@ Added - ``UserRetrieveAPIView`` REST API view (#1555) - ``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) + - ``project_list_highlight`` and ``project_list_pagination`` app settings (#1005) Changed ------- diff --git a/config/settings/base.py b/config/settings/base.py index a1b6df15..e5ef8977 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -637,10 +637,6 @@ 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 c1baee16..99bd6a76 100644 --- a/config/settings/test.py +++ b/config/settings/test.py @@ -130,7 +130,6 @@ 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/app_settings.py b/projectroles/app_settings.py index 06c95dcf..e9b39b3e 100644 --- a/projectroles/app_settings.py +++ b/projectroles/app_settings.py @@ -47,6 +47,8 @@ APP_SETTING_SCOPE_PROJECT_USER: {'project': True, 'user': True}, APP_SETTING_SCOPE_SITE: {'project': False, 'user': False}, } +# TODO: Add label for -1 once validation is fixed (see #1564, #1565) +PROJECT_LIST_PAGE_OPTIONS = [10, 25, 50, 100, -1] DELETE_SCOPE_ERR_MSG = 'Argument "{arg}" must be set for {scope} scope setting' GLOBAL_PROJECT_ERR_MSG = ( 'Overriding global settings for remote projects not allowed' @@ -154,6 +156,17 @@ user_modifiable=True, global_edit=True, ), + PluginAppSettingDef( + name='project_list_pagination', + scope=APP_SETTING_SCOPE_USER, + type=APP_SETTING_TYPE_INTEGER, + default=10, + label='Project list page size', + description='Amount of projects per page in the project list.', + options=PROJECT_LIST_PAGE_OPTIONS, + user_modifiable=True, + global_edit=True, + ), ] diff --git a/projectroles/static/projectroles/js/project_list.js b/projectroles/static/projectroles/js/project_list.js index 373ef05d..1abc6c2c 100644 --- a/projectroles/static/projectroles/js/project_list.js +++ b/projectroles/static/projectroles/js/project_list.js @@ -351,7 +351,18 @@ $(document).ready(function () { '#sodar-pr-project-list').find('table').DataTable(); var value = parseInt($(this).val()); dt.page.len(value).draw(); - // TODO: Update user setting here + // Update user setting + $.ajax({ + url: 'project/api/settings/set/user', + method: 'POST', + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify({ + 'plugin_name': 'projectroles', + 'setting_name': 'project_list_pagination', + 'value': value + }) + }) }); if (projectUuids.length > 0) { diff --git a/projectroles/templates/projectroles/_project_list.html b/projectroles/templates/projectroles/_project_list.html index 5e35b4c9..81098a3f 100644 --- a/projectroles/templates/projectroles/_project_list.html +++ b/projectroles/templates/projectroles/_project_list.html @@ -31,10 +31,8 @@

{% endif %} - {# TODO: Get user setting instead #} - {% get_django_setting 'PROJECTROLES_PROJECT_LIST_PAGINATION' 10 as list_pagination %}