diff options
Diffstat (limited to 'app/services/work_items')
4 files changed, 60 insertions, 10 deletions
diff --git a/app/services/work_items/create_service.rb b/app/services/work_items/create_service.rb index f9eadc3fb60..e1e6063c8ac 100644 --- a/app/services/work_items/create_service.rb +++ b/app/services/work_items/create_service.rb @@ -53,6 +53,21 @@ module WorkItems end end + def prepare_create_params(work_item) + execute_widgets( + work_item: work_item, + callback: :prepare_create_params, + widget_params: @widget_params, + service_params: params + ) + + super + end + + def parent + container + end + private override :handle_quick_actions diff --git a/app/services/work_items/widgets/labels_service/base_service.rb b/app/services/work_items/widgets/labels_service/base_service.rb new file mode 100644 index 00000000000..2d679c1f18c --- /dev/null +++ b/app/services/work_items/widgets/labels_service/base_service.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +module WorkItems + module Widgets + module LabelsService + class BaseService < WorkItems::Widgets::BaseService + private + + def prepare_params(params: {}, permitted_params: []) + clear_label_params(params) if new_type_excludes_widget? + + return if params.blank? + return unless has_permission?(:set_work_item_metadata) + + service_params.merge!(params.slice(*permitted_params)) + end + + def clear_label_params(params) + params[:remove_label_ids] = @work_item.labels.map(&:id) + params[:add_label_ids] = [] + end + end + end + end +end diff --git a/app/services/work_items/widgets/labels_service/create_service.rb b/app/services/work_items/widgets/labels_service/create_service.rb new file mode 100644 index 00000000000..bed6be173cc --- /dev/null +++ b/app/services/work_items/widgets/labels_service/create_service.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module WorkItems + module Widgets + module LabelsService + class CreateService < BaseService + def prepare_create_params(params: {}) + prepare_params(params: params, permitted_params: %i[add_label_ids remove_label_ids label_ids]) + end + + def clear_label_params(params) + params[:add_label_ids] = [] + params[:label_ids] = [] + end + end + end + end +end diff --git a/app/services/work_items/widgets/labels_service/update_service.rb b/app/services/work_items/widgets/labels_service/update_service.rb index b0791571924..780451e3eae 100644 --- a/app/services/work_items/widgets/labels_service/update_service.rb +++ b/app/services/work_items/widgets/labels_service/update_service.rb @@ -3,17 +3,9 @@ module WorkItems module Widgets module LabelsService - class UpdateService < WorkItems::Widgets::BaseService + class UpdateService < BaseService def prepare_update_params(params: {}) - if new_type_excludes_widget? - params[:remove_label_ids] = @work_item.labels.map(&:id) - params[:add_label_ids] = [] - end - - return if params.blank? - return unless has_permission?(:set_work_item_metadata) - - service_params.merge!(params.slice(:add_label_ids, :remove_label_ids)) + prepare_params(params: params, permitted_params: %i[add_label_ids remove_label_ids]) end end end |