diff options
6 files changed, 21 insertions, 4 deletions
diff --git a/app/controllers/concerns/kaminari_pagination.rb b/app/controllers/concerns/kaminari_pagination.rb new file mode 100644 index 00000000000..b69340cac0e --- /dev/null +++ b/app/controllers/concerns/kaminari_pagination.rb @@ -0,0 +1,8 @@ +module KaminariPagination + extend ActiveSupport::Concern + + def bounded_pagination(items, page_number) + items = items.page(page_number) + items.to_a.empty? ? items.page(items.total_pages) : items + end +end diff --git a/app/controllers/dashboard/todos_controller.rb b/app/controllers/dashboard/todos_controller.rb index d425d0f9014..b2333a02392 100644 --- a/app/controllers/dashboard/todos_controller.rb +++ b/app/controllers/dashboard/todos_controller.rb @@ -1,9 +1,11 @@ class Dashboard::TodosController < Dashboard::ApplicationController + include KaminariPagination + before_action :find_todos, only: [:index, :destroy_all] def index @sort = params[:sort] - @todos = @todos.page(params[:page]) + @todos = bounded_pagination(@todos, params[:page]) end def destroy diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index 4f66e01e0f7..ec09a5297fc 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -5,6 +5,7 @@ class Projects::IssuesController < Projects::ApplicationController include ToggleAwardEmoji include IssuableCollections include SpammableActions + include KaminariPagination before_action :redirect_to_external_issue_tracker, only: [:index, :new] before_action :module_enabled @@ -24,7 +25,7 @@ class Projects::IssuesController < Projects::ApplicationController def index @issues = issues_collection - @issues = @issues.page(params[:page]) + @issues = bounded_pagination(@issues, params[:page]) if params[:label_name].present? @labels = LabelsFinder.new(current_user, project_id: @project.id, title: params[:label_name]).execute diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 3abebdfd032..e25eea52723 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -6,6 +6,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController include NotesHelper include ToggleAwardEmoji include IssuableCollections + include KaminariPagination before_action :module_enabled before_action :merge_request, only: [ @@ -37,7 +38,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController def index @merge_requests = merge_requests_collection - @merge_requests = @merge_requests.page(params[:page]) + @merge_requests = bounded_pagination(@merge_requests, params[:page]) if params[:label_name].present? labels_params = { project_id: @project.id, title: params[:label_name] } diff --git a/app/controllers/projects/snippets_controller.rb b/app/controllers/projects/snippets_controller.rb index 0720be2e55d..7083b29b6a3 100644 --- a/app/controllers/projects/snippets_controller.rb +++ b/app/controllers/projects/snippets_controller.rb @@ -1,5 +1,6 @@ class Projects::SnippetsController < Projects::ApplicationController include ToggleAwardEmoji + include KaminariPagination before_action :module_enabled before_action :snippet, only: [:show, :edit, :destroy, :update, :raw, :toggle_award_emoji] @@ -25,7 +26,7 @@ class Projects::SnippetsController < Projects::ApplicationController project: @project, scope: params[:scope] ) - @snippets = @snippets.page(params[:page]) + @snippets = bounded_pagination(@snippets, params[:page]) end def new diff --git a/changelogs/unreleased/19988-prevent-empty-pagination-when-list-not-empty.yml b/changelogs/unreleased/19988-prevent-empty-pagination-when-list-not-empty.yml new file mode 100644 index 00000000000..5570ede4a9a --- /dev/null +++ b/changelogs/unreleased/19988-prevent-empty-pagination-when-list-not-empty.yml @@ -0,0 +1,4 @@ +--- +title: Prevent empty pagination when list is not empty +merge_request: 8172 +author: |