Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add pagination to Issues page #5057

Merged
merged 2 commits into from
Aug 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion app/controllers/issues_controller.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
class IssuesController < ApplicationController
include PaginationMethods

layout "site"

before_action :authorize_web
Expand All @@ -11,14 +13,16 @@ class IssuesController < ApplicationController
before_action :check_database_writable, :only => [:resolve, :ignore, :reopen]

def index
@params = params.permit(:before, :after, :limit, :status, :search_by_user, :issue_type, :last_updated_by)
@params[:limit] ||= 50
@title = t ".title"

@issue_types = []
@issue_types.push("Note", "User") if current_user.moderator?
@issue_types.push("DiaryEntry", "DiaryComment", "User") if current_user.administrator?

@users = User.joins(:roles).where(:user_roles => { :role => current_user.roles.map(&:role) }).distinct
@issues = Issue.visible_to(current_user).order(:updated_at => :desc)
@issues = Issue.visible_to(current_user)

# If search
if params[:search_by_user].present?
Expand All @@ -39,6 +43,9 @@ def index
last_updated_by = params[:last_updated_by].to_s == "nil" ? nil : params[:last_updated_by].to_i
@issues = @issues.where(:updated_by => last_updated_by)
end

@issues, @newer_issues_id, @older_issues_id = get_page_items(@issues, :limit => @params[:limit])
render :partial => "page" if turbo_frame_request_id == "pagination"
end

def show
Expand Down
36 changes: 36 additions & 0 deletions app/views/issues/_page.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<turbo-frame id="pagination" target="_top">
<table class="table table-sm">
<thead>
<tr>
<th><%= t ".status" %></th>
<th><%= t ".reports" %></th>
<th><%= t ".reported_item" %></th>
<th><%= t ".reported_user" %></th>
<th><%= t ".last_updated" %></th>
</tr>
</thead>
<tbody>
<% @issues.each do |issue| %>
<tr>
<td><%= t ".states.#{issue.status}" %></td>
<td class="text-nowrap"><%= link_to t(".reports_count", :count => issue.reports_count), issue %></td>
<td><%= link_to reportable_title(issue.reportable), reportable_url(issue.reportable) %></td>
<td><%= link_to issue.reported_user.display_name, issue.reported_user if issue.reported_user %></td>
<td>
<% if issue.user_updated %>
<%= t ".last_updated_time_ago_user_html", :user => link_to(issue.user_updated.display_name, issue.user_updated),
:time_ago => friendly_date_ago(issue.updated_at) %>
<% else %>
<%= friendly_date_ago(issue.updated_at) %>
<% end %>
</td>
</tr>
<% end %>
</tbody>
</table>
<%= render "shared/pagination",
:newer_key => "issues.page.newer_issues",
:older_key => "issues.page.older_issues",
:newer_id => @newer_issues_id,
:older_id => @older_issues_id %>
</turbo-frame>
30 changes: 1 addition & 29 deletions app/views/issues/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -43,33 +43,5 @@
<% if @issues.length == 0 %>
<p><%= t ".issues_not_found" %></p>
<% else %>
<table class="table table-sm">
<thead>
<tr>
<th><%= t ".status" %></th>
<th><%= t ".reports" %></th>
<th><%= t ".reported_item" %></th>
<th><%= t ".reported_user" %></th>
<th><%= t ".last_updated" %></th>
</tr>
</thead>
<tbody>
<% @issues.each do |issue| %>
<tr>
<td><%= t ".states.#{issue.status}" %></td>
<td class="text-nowrap"><%= link_to t(".reports_count", :count => issue.reports_count), issue %></td>
<td><%= link_to reportable_title(issue.reportable), reportable_url(issue.reportable) %></td>
<td><%= link_to issue.reported_user.display_name, issue.reported_user if issue.reported_user %></td>
<td>
<% if issue.user_updated %>
<%= t ".last_updated_time_ago_user_html", :user => link_to(issue.user_updated.display_name, issue.user_updated),
:time_ago => friendly_date_ago(issue.updated_at) %>
<% else %>
<%= friendly_date_ago(issue.updated_at) %>
<% end %>
</td>
</tr>
<% end %>
</tbody>
</table>
<%= render :partial => "page" %>
<% end %>
10 changes: 9 additions & 1 deletion config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1469,11 +1469,17 @@ en:
search_guidance: "Search Issues:"
user_not_found: User does not exist
issues_not_found: No such issues found
link_to_reports: View Reports
states:
ignored: Ignored
open: Open
resolved: Resolved
page:
reported_user: Reported User
status: Status
reports: Reports
last_updated: Last Updated
last_updated_time_ago_user_html: "%{time_ago} by %{user}"
link_to_reports: View Reports
reports_count:
one: "%{count} Report"
other: "%{count} Reports"
Expand All @@ -1482,6 +1488,8 @@ en:
ignored: Ignored
open: Open
resolved: Resolved
older_issues: Older Issues
newer_issues: Newer Issues
show:
title: "%{status} Issue #%{issue_id}"
reports:
Expand Down
32 changes: 30 additions & 2 deletions test/system/issues_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,35 @@ def test_issue_index_with_multiple_roles

visit issues_path

assert_link I18n.t("issues.index.reports_count", :count => issue1.reports_count), :href => issue_path(issue1)
assert_link I18n.t("issues.index.reports_count", :count => issue2.reports_count), :href => issue_path(issue2)
assert_link I18n.t("issues.page.reports_count", :count => issue1.reports_count), :href => issue_path(issue1)
assert_link I18n.t("issues.page.reports_count", :count => issue2.reports_count), :href => issue_path(issue2)
end

def test_issues_pagination
1.upto(80).each do
user = create(:user)
create(:issue, :reportable => user, :reported_user => user, :assigned_role => "administrator")
end

sign_in_as(create(:administrator_user))

visit issues_path

# First Page
assert_no_content I18n.t("issues.index.user_not_found")
assert_no_content I18n.t("issues.index.issues_not_found")
assert_css "tr", :count => 51

# Second Page
click_on I18n.t("issues.page.older_issues")
assert_no_content I18n.t("issues.index.user_not_found")
assert_no_content I18n.t("issues.index.issues_not_found")
assert_css "tr", :count => 31

# Back to First Page
click_on I18n.t("issues.page.newer_issues")
assert_no_content I18n.t("issues.index.user_not_found")
assert_no_content I18n.t("issues.index.issues_not_found")
assert_css "tr", :count => 51
end
end