Add search to group labels page [ci skip]
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
parent
48541cacc0
commit
400cc09f72
3 changed files with 70 additions and 10 deletions
|
@ -11,7 +11,7 @@ class Groups::LabelsController < Groups::ApplicationController
|
|||
def index
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
@labels = @group.labels.page(params[:page])
|
||||
@labels = @available_labels.page(params[:page])
|
||||
end
|
||||
format.json do
|
||||
render json: LabelSerializer.new.represent_appearance(@available_labels)
|
||||
|
@ -113,7 +113,7 @@ class Groups::LabelsController < Groups::ApplicationController
|
|||
group_id: @group.id,
|
||||
only_group_labels: params[:only_group_labels],
|
||||
include_ancestor_groups: params[:include_ancestor_groups],
|
||||
include_descendant_groups: params[:include_descendant_groups]
|
||||
).execute
|
||||
include_descendant_groups: params[:include_descendant_groups],
|
||||
search: params[:search]).execute
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,26 +3,38 @@
|
|||
- can_admin_label = can?(current_user, :admin_label, @group)
|
||||
- hide = @available_labels.empty? || (params[:page].present? && params[:page] != '1')
|
||||
- issuables = ['issues', 'merge requests']
|
||||
- search = params[:search]
|
||||
|
||||
- if can_admin_label
|
||||
- content_for(:header_content) do
|
||||
.nav-controls
|
||||
= link_to _('New label'), new_group_label_path(@group), class: "btn btn-new"
|
||||
|
||||
- if @labels.exists?
|
||||
- if @labels.exists? || search.present?
|
||||
#promote-label-modal
|
||||
%div{ class: container_class }
|
||||
.top-area.adjust
|
||||
.nav-text
|
||||
= _('Labels can be applied to %{features}. Group labels are available for any project within the group.') % { features: issuables.to_sentence }
|
||||
.nav-controls
|
||||
= form_tag group_labels_path(@group), method: :get do
|
||||
.input-group
|
||||
= search_field_tag :search, params[:search], { placeholder: _('Filter'), id: 'label-search', class: 'form-control search-text-input input-short', spellcheck: false }
|
||||
%span.input-group-append
|
||||
%button.btn.btn-default{ type: "submit", "aria-label" => _('Submit search') }
|
||||
= icon("search")
|
||||
|
||||
.labels-container.prepend-top-5
|
||||
.other-labels
|
||||
- if can_admin_label
|
||||
%h5{ class: ('hide' if hide) } Labels
|
||||
%ul.content-list.manage-labels-list.js-other-labels
|
||||
= render partial: 'shared/label', subject: @group, collection: @labels, as: :label, locals: { use_label_priority: false }
|
||||
= paginate @labels, theme: 'gitlab'
|
||||
- if @labels.any?
|
||||
.other-labels
|
||||
- if can_admin_label
|
||||
%h5{ class: ('hide' if hide) } Labels
|
||||
%ul.content-list.manage-labels-list.js-other-labels
|
||||
= render partial: 'shared/label', subject: @group, collection: @labels, as: :label, locals: { use_label_priority: false }
|
||||
= paginate @labels, theme: 'gitlab'
|
||||
- elsif search.present?
|
||||
.nothing-here-block
|
||||
= _('No labels with such name or description')
|
||||
- else
|
||||
= render 'shared/empty_states/labels'
|
||||
|
||||
|
|
48
spec/features/groups/labels/search_labels_spec.rb
Normal file
48
spec/features/groups/labels/search_labels_spec.rb
Normal file
|
@ -0,0 +1,48 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'Search for labels', :js do
|
||||
let(:user) { create(:user) }
|
||||
let(:group) { create(:group) }
|
||||
let!(:label1) { create(:group_label, title: 'Foo', description: 'Lorem ipsum', group: group) }
|
||||
let!(:label2) { create(:group_label, title: 'Bar', description: 'Fusce consequat', group: group) }
|
||||
|
||||
before do
|
||||
group.add_maintainer(user)
|
||||
sign_in(user)
|
||||
|
||||
visit group_labels_path(group)
|
||||
end
|
||||
|
||||
it 'searches for label by title' do
|
||||
fill_in 'label-search', with: 'Bar'
|
||||
find('#label-search').native.send_keys(:enter)
|
||||
|
||||
expect(page).to have_content(label2.title)
|
||||
expect(page).to have_content(label2.description)
|
||||
expect(page).not_to have_content(label1.title)
|
||||
expect(page).not_to have_content(label1.description)
|
||||
end
|
||||
|
||||
it 'searches for label by description' do
|
||||
fill_in 'label-search', with: 'Lorem'
|
||||
find('#label-search').native.send_keys(:enter)
|
||||
|
||||
expect(page).to have_content(label1.title)
|
||||
expect(page).to have_content(label1.description)
|
||||
expect(page).not_to have_content(label2.title)
|
||||
expect(page).not_to have_content(label2.description)
|
||||
end
|
||||
|
||||
it 'shows nothing found message' do
|
||||
fill_in 'label-search', with: 'nonexistent'
|
||||
find('#label-search').native.send_keys(:enter)
|
||||
|
||||
expect(page).to have_content('No labels with such name or description')
|
||||
expect(page).not_to have_content(label1.title)
|
||||
expect(page).not_to have_content(label1.description)
|
||||
expect(page).not_to have_content(label2.title)
|
||||
expect(page).not_to have_content(label2.description)
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue