BigW Consortium Gitlab

Commit e6ee8d0e by 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) ...@@ -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. - 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. - Include commit comments in MR from a forked project.
- Fix adding new group members from admin area - 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. - 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) - Fix bug where commit data would not appear in some subdirectories (Stan Hu)
......
...@@ -113,8 +113,9 @@ class IssuableFinder ...@@ -113,8 +113,9 @@ class IssuableFinder
end end
def by_milestone(items) def by_milestone(items)
if params[:milestone_id].present? if params[:milestone_title].present?
items = items.where(milestone_id: (params[:milestone_id] == NONE ? nil : params[:milestone_id])) milestone_ids = (params[:milestone_title] == NONE ? nil : Milestone.where(title: params[:milestone_title]).pluck(:id))
items = items.where(milestone_id: milestone_ids)
end end
items items
......
...@@ -28,6 +28,7 @@ module MilestonesHelper ...@@ -28,6 +28,7 @@ module MilestonesHelper
Milestone.where(project_id: @projects) Milestone.where(project_id: @projects)
end.active end.active
options_from_collection_for_select(milestones, 'id', 'title', params[:milestone_id]) grouped_milestones = Milestones::GroupService.new(milestones).execute
options_from_collection_for_select(grouped_milestones, 'title', 'title', params[:milestone_title])
end end
end end
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#{state_filters_text_for(:all, @project)} #{state_filters_text_for(:all, @project)}
.issues-details-filters .issues-details-filters
= 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' - if controller.controller_name == 'issues'
.check-all-holder .check-all-holder
= check_box_tag "check_all_issues", nil, false, = check_box_tag "check_all_issues", nil, false,
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
placeholder: 'Author', class: 'trigger-submit', any_user: true, first_user: true) placeholder: 'Author', class: 'trigger-submit', any_user: true, first_user: true)
.filter-item.inline.milestone-filter .filter-item.inline.milestone-filter
= 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 - if @project
.filter-item.inline.labels-filter .filter-item.inline.labels-filter
......
...@@ -95,7 +95,7 @@ describe 'Issues', feature: true do ...@@ -95,7 +95,7 @@ describe 'Issues', feature: true do
let(:issue) { @issue } let(:issue) { @issue }
it 'should allow filtering by issues with no specified milestone' do 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).not_to have_content 'foobar'
expect(page).to have_content 'barbaz' expect(page).to have_content 'barbaz'
...@@ -103,7 +103,7 @@ describe 'Issues', feature: true do ...@@ -103,7 +103,7 @@ describe 'Issues', feature: true do
end end
it 'should allow filtering by a specified milestone' do it 'should allow filtering by a specified milestone' do
visit namespace_project_issues_path(project.namespace, project, milestone_id: issue.milestone.id) visit namespace_project_issues_path(project.namespace, project, milestone_title: issue.milestone.title)
expect(page).to have_content 'foobar' expect(page).to have_content 'foobar'
expect(page).not_to have_content 'barbaz' expect(page).not_to have_content 'barbaz'
......
...@@ -43,7 +43,7 @@ describe IssuesFinder do ...@@ -43,7 +43,7 @@ describe IssuesFinder do
end end
it 'should filter by milestone id' do it 'should filter by milestone id' do
params = { scope: "all", milestone_id: milestone.id, state: 'opened' } params = { scope: "all", milestone_title: milestone.title, state: 'opened' }
issues = IssuesFinder.new.execute(user, params) issues = IssuesFinder.new.execute(user, params)
expect(issues).to eq([issue1]) expect(issues).to eq([issue1])
end end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment