Improved milestone counts with a single query
This commit is contained in:
parent
431506bfd0
commit
909deaa38a
2 changed files with 15 additions and 14 deletions
|
@ -35,17 +35,16 @@ module MilestonesHelper
|
||||||
milestone.issues.with_label(label.title).send(state).size
|
milestone.issues.with_label(label.title).send(state).size
|
||||||
end
|
end
|
||||||
|
|
||||||
def milestone_count_by_state(project, state)
|
# Returns count of milestones for different states
|
||||||
if project.nil?
|
# Uses explicit hash keys as the 'opened' state URL params differs from the db value
|
||||||
nil
|
# and we need to add the total
|
||||||
else
|
def milestone_counts(project:)
|
||||||
case state
|
counts = @project.milestones.reorder(nil).group(:state).count()
|
||||||
when 'all' then @project.milestones.size
|
{
|
||||||
when 'closed' then @project.milestones.closed.size
|
'opened' => counts['active'],
|
||||||
when 'opened' then @project.milestones.active.size
|
'closed' => counts['closed'],
|
||||||
else nil
|
'all' => counts['active'] + counts['closed']
|
||||||
end
|
}
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def milestone_progress_bar(milestone)
|
def milestone_progress_bar(milestone)
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
|
- counts = milestone_counts(project: @project)
|
||||||
|
|
||||||
%ul.nav-links
|
%ul.nav-links
|
||||||
%li{class: ("active" if params[:state].blank? || params[:state] == 'opened')}
|
%li{class: ("active" if params[:state].blank? || params[:state] == 'opened')}
|
||||||
= link_to milestones_filter_path(state: 'opened') do
|
= link_to milestones_filter_path(state: 'opened') do
|
||||||
Open
|
Open
|
||||||
%span.badge #{milestone_count_by_state(@project, 'opened')}
|
%span.badge #{counts['opened']}
|
||||||
%li{class: ("active" if params[:state] == 'closed')}
|
%li{class: ("active" if params[:state] == 'closed')}
|
||||||
= link_to milestones_filter_path(state: 'closed') do
|
= link_to milestones_filter_path(state: 'closed') do
|
||||||
Closed
|
Closed
|
||||||
%span.badge #{milestone_count_by_state(@project, 'closed')}
|
%span.badge #{counts['closed']}
|
||||||
%li{class: ("active" if params[:state] == 'all')}
|
%li{class: ("active" if params[:state] == 'all')}
|
||||||
= link_to milestones_filter_path(state: 'all') do
|
= link_to milestones_filter_path(state: 'all') do
|
||||||
All
|
All
|
||||||
%span.badge #{milestone_count_by_state(@project, 'all')}
|
%span.badge #{counts['all']}
|
||||||
|
|
Loading…
Reference in a new issue