summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Rowden <hello@danrowden.com>2016-07-22 23:11:07 +0300
committerAlfredo Sumaran <alfredo@gitlab.com>2016-09-07 15:27:14 -0500
commit909deaa38a040777ec236d9365bc726c9de15194 (patch)
tree1b4d43e2617c67a6187f594287f051e4d4557e20
parent431506bfd0c4b514d3b0aacc28e7a70d69679d50 (diff)
downloadgitlab-ce-909deaa38a040777ec236d9365bc726c9de15194.tar.gz
Improved milestone counts with a single query
-rw-r--r--app/helpers/milestones_helper.rb21
-rw-r--r--app/views/shared/_milestones_filter.html.haml8
2 files changed, 15 insertions, 14 deletions
diff --git a/app/helpers/milestones_helper.rb b/app/helpers/milestones_helper.rb
index 9a71761a55c..797cbc341e3 100644
--- a/app/helpers/milestones_helper.rb
+++ b/app/helpers/milestones_helper.rb
@@ -35,17 +35,16 @@ module MilestonesHelper
milestone.issues.with_label(label.title).send(state).size
end
- def milestone_count_by_state(project, state)
- if project.nil?
- nil
- else
- case state
- when 'all' then @project.milestones.size
- when 'closed' then @project.milestones.closed.size
- when 'opened' then @project.milestones.active.size
- else nil
- end
- end
+ # Returns count of milestones for different states
+ # Uses explicit hash keys as the 'opened' state URL params differs from the db value
+ # and we need to add the total
+ def milestone_counts(project:)
+ counts = @project.milestones.reorder(nil).group(:state).count()
+ {
+ 'opened' => counts['active'],
+ 'closed' => counts['closed'],
+ 'all' => counts['active'] + counts['closed']
+ }
end
def milestone_progress_bar(milestone)
diff --git a/app/views/shared/_milestones_filter.html.haml b/app/views/shared/_milestones_filter.html.haml
index ba9e2881017..20f4a22c26b 100644
--- a/app/views/shared/_milestones_filter.html.haml
+++ b/app/views/shared/_milestones_filter.html.haml
@@ -1,13 +1,15 @@
+- counts = milestone_counts(project: @project)
+
%ul.nav-links
%li{class: ("active" if params[:state].blank? || params[:state] == 'opened')}
= link_to milestones_filter_path(state: 'opened') do
Open
- %span.badge #{milestone_count_by_state(@project, 'opened')}
+ %span.badge #{counts['opened']}
%li{class: ("active" if params[:state] == 'closed')}
= link_to milestones_filter_path(state: 'closed') do
Closed
- %span.badge #{milestone_count_by_state(@project, 'closed')}
+ %span.badge #{counts['closed']}
%li{class: ("active" if params[:state] == 'all')}
= link_to milestones_filter_path(state: 'all') do
All
- %span.badge #{milestone_count_by_state(@project, 'all')}
+ %span.badge #{counts['all']}