Commit e6ee8d0e authored by Dominik Sander's avatar Dominik Sander

Group milestones by title in the dashboard and all other issue views

This groups milestones by title for issue views like it has been done for
the milestone dashboard/project overview. Before milestones with the
same title would show up multiple times in the filter dropdown and one could
only filter per project and milestone. Now the milestone filter is based
on the title of the milestone, i.e. all issues marked with the same
milestone title are shown.
parent 8d17e79d
......@@ -20,6 +20,7 @@ v 7.11.0 (unreleased)
- Don't crash when an MR from a fork has a cross-reference comment from the target project on of its commits.
- Include commit comments in MR from a forked project.
- Fix adding new group members from admin area
- Group milestones by title in the dashboard and all other issue views.
- Add default project and snippet visibility settings to the admin web UI.
- Fix bug where commit data would not appear in some subdirectories (Stan Hu)
......@@ -113,8 +113,9 @@ class IssuableFinder
def by_milestone(items)
if params[:milestone_id].present?
items = items.where(milestone_id: (params[:milestone_id] == NONE ? nil : params[:milestone_id]))
if params[:milestone_title].present?
milestone_ids = (params[:milestone_title] == NONE ? nil : Milestone.where(title: params[:milestone_title]).pluck(:id))
items = items.where(milestone_id: milestone_ids)
......@@ -28,6 +28,7 @@ module MilestonesHelper
Milestone.where(project_id: @projects)
options_from_collection_for_select(milestones, 'id', 'title', params[:milestone_id])
grouped_milestones =
options_from_collection_for_select(grouped_milestones, 'title', 'title', params[:milestone_title])
......@@ -15,7 +15,7 @@
#{state_filters_text_for(:all, @project)}
= form_tag page_filter_path(without: [:assignee_id, :author_id, :milestone_id, :label_name]), method: :get, class: 'filter-form' do
= form_tag page_filter_path(without: [:assignee_id, :author_id, :milestone_title, :label_name]), method: :get, class: 'filter-form' do
- if controller.controller_name == 'issues'
= check_box_tag "check_all_issues", nil, false,
......@@ -31,7 +31,7 @@
placeholder: 'Author', class: 'trigger-submit', any_user: true, first_user: true)
= select_tag('milestone_id', projects_milestones_options, class: "select2 trigger-submit", prompt: 'Milestone')
= select_tag('milestone_title', projects_milestones_options, class: "select2 trigger-submit", prompt: 'Milestone')
- if @project
......@@ -95,7 +95,7 @@ describe 'Issues', feature: true do
let(:issue) { @issue }
it 'should allow filtering by issues with no specified milestone' do
visit namespace_project_issues_path(project.namespace, project, milestone_id: IssuableFinder::NONE)
visit namespace_project_issues_path(project.namespace, project, milestone_title: IssuableFinder::NONE)
expect(page).not_to have_content 'foobar'
expect(page).to have_content 'barbaz'
......@@ -103,7 +103,7 @@ describe 'Issues', feature: true do
it 'should allow filtering by a specified milestone' do
visit namespace_project_issues_path(project.namespace, project, milestone_id:
visit namespace_project_issues_path(project.namespace, project, milestone_title: issue.milestone.title)
expect(page).to have_content 'foobar'
expect(page).not_to have_content 'barbaz'
......@@ -43,7 +43,7 @@ describe IssuesFinder do
it 'should filter by milestone id' do
params = { scope: "all", milestone_id:, state: 'opened' }
params = { scope: "all", milestone_title: milestone.title, state: 'opened' }
issues =, params)
expect(issues).to eq([issue1])
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment