diff options
author | Dan Rowden <hello@danrowden.com> | 2016-07-22 23:11:07 +0300 |
---|---|---|
committer | Alfredo Sumaran <alfredo@gitlab.com> | 2016-09-07 15:27:14 -0500 |
commit | 909deaa38a040777ec236d9365bc726c9de15194 (patch) | |
tree | 1b4d43e2617c67a6187f594287f051e4d4557e20 /app | |
parent | 431506bfd0c4b514d3b0aacc28e7a70d69679d50 (diff) | |
download | gitlab-ce-909deaa38a040777ec236d9365bc726c9de15194.tar.gz |
Improved milestone counts with a single query
Diffstat (limited to 'app')
-rw-r--r-- | app/helpers/milestones_helper.rb | 21 | ||||
-rw-r--r-- | app/views/shared/_milestones_filter.html.haml | 8 |
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']} |