Merge branch 'filter-label' into 'master'
Allow dashboard and group issues/MRs to be filtered by label See merge request !1591
This commit is contained in:
commit
c856a7a593
|
|
@ -59,6 +59,7 @@ v 8.1.0 (unreleased)
|
|||
- Fix position of hamburger in header for smaller screens (Han Loong Liauw)
|
||||
- Fix bug where Emojis in Markdown would truncate remaining text (Sakata Sinji)
|
||||
- Persist filters when sorting on admin user page (Jerry Lukins)
|
||||
- Allow dashboard and group issues/MRs to be filtered by label
|
||||
- Add spellcheck=false to certain input fields
|
||||
- Invalidate stored service password if the endpoint URL is changed
|
||||
- Project names are not fully shown if group name is too big, even on group page view
|
||||
|
|
|
|||
|
|
@ -92,11 +92,19 @@ module LabelsHelper
|
|||
end
|
||||
end
|
||||
|
||||
def project_labels_options(project)
|
||||
labels = project.labels.to_a
|
||||
labels.unshift(Label::None)
|
||||
labels.unshift(Label::Any)
|
||||
options_from_collection_for_select(labels, 'name', 'title', params[:label_name])
|
||||
def projects_labels_options
|
||||
labels =
|
||||
if @project
|
||||
@project.labels
|
||||
else
|
||||
Label.where(project_id: @projects)
|
||||
end
|
||||
|
||||
grouped_labels = Labels::GroupService.new(labels).execute
|
||||
grouped_labels.unshift(Label::None)
|
||||
grouped_labels.unshift(Label::Any)
|
||||
|
||||
options_from_collection_for_select(grouped_labels, 'name', 'title', params[:label_name])
|
||||
end
|
||||
|
||||
# Required for Gitlab::Markdown::LabelReferenceFilter
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
class GroupLabel
|
||||
attr_accessor :title, :labels
|
||||
alias_attribute :name, :title
|
||||
|
||||
def initialize(title, labels)
|
||||
@title = title
|
||||
@labels = labels
|
||||
end
|
||||
end
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
class GroupMilestone
|
||||
|
||||
attr_accessor :title, :milestones
|
||||
alias_attribute :name, :title
|
||||
|
||||
def initialize(title, milestones)
|
||||
|
|
@ -7,18 +7,10 @@ class GroupMilestone
|
|||
@milestones = milestones
|
||||
end
|
||||
|
||||
def title
|
||||
@title
|
||||
end
|
||||
|
||||
def safe_title
|
||||
@title.parameterize
|
||||
end
|
||||
|
||||
def milestones
|
||||
@milestones
|
||||
end
|
||||
|
||||
|
||||
def projects
|
||||
milestones.map { |milestone| milestone.project }
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
module Labels
|
||||
class GroupService < ::BaseService
|
||||
def initialize(project_labels)
|
||||
@project_labels = project_labels.group_by(&:title)
|
||||
end
|
||||
|
||||
def execute
|
||||
build(@project_labels)
|
||||
end
|
||||
|
||||
def label(title)
|
||||
if title
|
||||
group_label = @project_labels[title].group_by(&:title)
|
||||
build(group_label).first
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def build(label)
|
||||
label.map { |title, labels| GroupLabel.new(title, labels) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -42,11 +42,10 @@
|
|||
class: 'select2 trigger-submit', include_blank: true,
|
||||
data: {placeholder: 'Milestone'})
|
||||
|
||||
- if @project
|
||||
.filter-item.inline.labels-filter
|
||||
= select_tag('label_name', project_labels_options(@project),
|
||||
class: 'select2 trigger-submit', include_blank: true,
|
||||
data: {placeholder: 'Label'})
|
||||
.filter-item.inline.labels-filter
|
||||
= select_tag('label_name', projects_labels_options,
|
||||
class: 'select2 trigger-submit', include_blank: true,
|
||||
data: {placeholder: 'Label'})
|
||||
|
||||
.pull-right
|
||||
= render 'shared/sort_dropdown'
|
||||
|
|
|
|||
|
|
@ -14,11 +14,6 @@ describe LabelsHelper do
|
|||
expect(label).not_to receive(:project)
|
||||
link_to_label(label)
|
||||
end
|
||||
|
||||
it 'includes option for "No Label"' do
|
||||
result = project_labels_options(project)
|
||||
expect(result).to include('No Label')
|
||||
end
|
||||
end
|
||||
|
||||
context 'without @project set' do
|
||||
|
|
|
|||
Loading…
Reference in New Issue