summaryrefslogtreecommitdiff
path: root/lib/gitlab/diff/file_collection/paginated_merge_request_diff.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/diff/file_collection/paginated_merge_request_diff.rb')
-rw-r--r--lib/gitlab/diff/file_collection/paginated_merge_request_diff.rb35
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/gitlab/diff/file_collection/paginated_merge_request_diff.rb b/lib/gitlab/diff/file_collection/paginated_merge_request_diff.rb
new file mode 100644
index 00000000000..37abad81305
--- /dev/null
+++ b/lib/gitlab/diff/file_collection/paginated_merge_request_diff.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Diff
+ module FileCollection
+ # Builds a traditional paginated diff file collection using Kaminari
+ # `per` and `per_page` which is different from how `MergeRequestDiffBatch`
+ # works (e.g. supports gradual loading).
+ class PaginatedMergeRequestDiff < MergeRequestDiffBase
+ include PaginatedDiffs
+
+ DEFAULT_PAGE = 1
+ DEFAULT_PER_PAGE = 30
+
+ delegate :limit_value, :current_page, :next_page, :prev_page, :total_count,
+ :total_pages, to: :paginated_collection
+
+ def initialize(merge_request_diff, page, per_page)
+ super(merge_request_diff, diff_options: nil)
+
+ @paginated_collection = load_paginated_collection(page, per_page)
+ end
+
+ private
+
+ def load_paginated_collection(page, per_page)
+ page ||= DEFAULT_PAGE
+ per_page ||= DEFAULT_PER_PAGE
+
+ relation.page(page).per([per_page.to_i, DEFAULT_PER_PAGE].min)
+ end
+ end
+ end
+ end
+end