61 lines
1.4 KiB
Ruby
61 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Integrations
|
|
module SlackOptions
|
|
class LabelSearchHandler # rubocop:disable Search/NamespacedClass
|
|
include Gitlab::Utils::StrongMemoize
|
|
|
|
def initialize(current_user, search_value, view_id)
|
|
@current_user = current_user.user
|
|
@search_value = search_value
|
|
@view_id = view_id
|
|
end
|
|
|
|
def execute
|
|
return ServiceResponse.success(payload: []) unless current_user.can?(:read_label, project)
|
|
|
|
labels = LabelsFinder.new(
|
|
current_user,
|
|
{
|
|
project: project,
|
|
search: search_value
|
|
}
|
|
).execute
|
|
|
|
ServiceResponse.success(payload: build_label_list(labels))
|
|
end
|
|
|
|
private
|
|
|
|
def project
|
|
project_id = Integrations::SlackInteractions::IncidentManagement::IncidentModalOpenedService
|
|
.cache_read(view_id)
|
|
|
|
return unless project_id
|
|
|
|
Project.find(project_id)
|
|
end
|
|
strong_memoize_attr :project
|
|
|
|
def build_label_list(labels)
|
|
return [] unless labels
|
|
|
|
label_list = labels.map do |label|
|
|
{
|
|
text: {
|
|
type: "plain_text",
|
|
text: label.name
|
|
},
|
|
value: label.id.to_s
|
|
}
|
|
end
|
|
|
|
{
|
|
options: label_list
|
|
}
|
|
end
|
|
|
|
attr_accessor :current_user, :search_value, :view_id
|
|
end
|
|
end
|
|
end
|