Add pagination to Issues page
This commit is contained in:
parent
fba6f95b39
commit
c32f6dd4ff
5 changed files with 81 additions and 33 deletions
|
@ -1,4 +1,6 @@
|
||||||
class IssuesController < ApplicationController
|
class IssuesController < ApplicationController
|
||||||
|
include PaginationMethods
|
||||||
|
|
||||||
layout "site"
|
layout "site"
|
||||||
|
|
||||||
before_action :authorize_web
|
before_action :authorize_web
|
||||||
|
@ -11,6 +13,8 @@ class IssuesController < ApplicationController
|
||||||
before_action :check_database_writable, :only => [:resolve, :ignore, :reopen]
|
before_action :check_database_writable, :only => [:resolve, :ignore, :reopen]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
@params = params.permit(:before, :after, :limit, :status, :search_by_user, :issue_type, :last_updated_by)
|
||||||
|
@params[:limit] ||= 50
|
||||||
@title = t ".title"
|
@title = t ".title"
|
||||||
|
|
||||||
@issue_types = []
|
@issue_types = []
|
||||||
|
@ -18,7 +22,7 @@ class IssuesController < ApplicationController
|
||||||
@issue_types.push("DiaryEntry", "DiaryComment", "User") if current_user.administrator?
|
@issue_types.push("DiaryEntry", "DiaryComment", "User") if current_user.administrator?
|
||||||
|
|
||||||
@users = User.joins(:roles).where(:user_roles => { :role => current_user.roles.map(&:role) }).distinct
|
@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 search
|
||||||
if params[:search_by_user].present?
|
if params[:search_by_user].present?
|
||||||
|
@ -39,6 +43,8 @@ class IssuesController < ApplicationController
|
||||||
last_updated_by = params[:last_updated_by].to_s == "nil" ? nil : params[:last_updated_by].to_i
|
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)
|
@issues = @issues.where(:updated_by => last_updated_by)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@issues, @newer_issues_id, @older_issues_id = get_page_items(@issues, :limit => @params[:limit])
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
|
34
app/views/issues/_page.html.erb
Normal file
34
app/views/issues/_page.html.erb
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
<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 %>
|
|
@ -43,33 +43,5 @@
|
||||||
<% if @issues.length == 0 %>
|
<% if @issues.length == 0 %>
|
||||||
<p><%= t ".issues_not_found" %></p>
|
<p><%= t ".issues_not_found" %></p>
|
||||||
<% else %>
|
<% else %>
|
||||||
<table class="table table-sm">
|
<%= render :partial => "page" %>
|
||||||
<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>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
|
@ -1469,11 +1469,17 @@ en:
|
||||||
search_guidance: "Search Issues:"
|
search_guidance: "Search Issues:"
|
||||||
user_not_found: User does not exist
|
user_not_found: User does not exist
|
||||||
issues_not_found: No such issues found
|
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
|
status: Status
|
||||||
reports: Reports
|
reports: Reports
|
||||||
last_updated: Last Updated
|
last_updated: Last Updated
|
||||||
last_updated_time_ago_user_html: "%{time_ago} by %{user}"
|
last_updated_time_ago_user_html: "%{time_ago} by %{user}"
|
||||||
link_to_reports: View Reports
|
|
||||||
reports_count:
|
reports_count:
|
||||||
one: "%{count} Report"
|
one: "%{count} Report"
|
||||||
other: "%{count} Reports"
|
other: "%{count} Reports"
|
||||||
|
@ -1482,6 +1488,8 @@ en:
|
||||||
ignored: Ignored
|
ignored: Ignored
|
||||||
open: Open
|
open: Open
|
||||||
resolved: Resolved
|
resolved: Resolved
|
||||||
|
older_issues: Older Issues
|
||||||
|
newer_issues: Newer Issues
|
||||||
show:
|
show:
|
||||||
title: "%{status} Issue #%{issue_id}"
|
title: "%{status} Issue #%{issue_id}"
|
||||||
reports:
|
reports:
|
||||||
|
|
|
@ -158,7 +158,35 @@ class IssuesTest < ApplicationSystemTestCase
|
||||||
|
|
||||||
visit issues_path
|
visit issues_path
|
||||||
|
|
||||||
assert_link I18n.t("issues.index.reports_count", :count => issue1.reports_count), :href => issue_path(issue1)
|
assert_link I18n.t("issues.page.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 => 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, :wait => 1
|
||||||
|
|
||||||
|
# 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, :wait => 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue