debian-mirror-gitlab/app/services/integrations/slack_options/label_search_handler.rb
2023-07-09 08:55:56 +05:30

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