From b045b175c7c289e157a3f7b8051849906da508e9 Mon Sep 17 00:00:00 2001 From: Anton Date: Tue, 4 Mar 2025 13:48:24 +0100 Subject: [PATCH] Add field duplicate option [SCI-11345] --- app/controllers/form_fields_controller.rb | 19 +++++++++++++++++-- app/javascript/vue/forms/edit_field.vue | 6 ++++++ app/javascript/vue/forms/show.vue | 18 ++++++++++++++++++ app/models/form_field.rb | 20 ++++++++++++++++++++ app/serializers/form_field_serializer.rb | 3 ++- config/initializers/extends.rb | 3 ++- config/locales/en.yml | 1 + config/locales/global_activities/en.yml | 2 ++ config/routes.rb | 3 +++ 9 files changed, 71 insertions(+), 4 deletions(-) diff --git a/app/controllers/form_fields_controller.rb b/app/controllers/form_fields_controller.rb index 12e62d793..7ebcd559a 100644 --- a/app/controllers/form_fields_controller.rb +++ b/app/controllers/form_fields_controller.rb @@ -3,8 +3,8 @@ class FormFieldsController < ApplicationController before_action :check_forms_enabled before_action :load_form - before_action :load_form_field, only: %i(update destroy) - before_action :check_manage_permissions, only: %i(create update destroy reorder) + before_action :load_form_field, only: %i(update destroy duplicate) + before_action :check_manage_permissions, only: %i(create update destroy reorder duplicate) def create ActiveRecord::Base.transaction do @@ -39,6 +39,21 @@ class FormFieldsController < ApplicationController end end + def duplicate + ActiveRecord::Base.transaction do + new_form_field = @form_field.duplicate!(current_user) + log_activity(:form_block_duplicated, block_name: @form_field.name) + render json: new_form_field, serializer: FormFieldSerializer, user: current_user + rescue ActiveRecord::RecordInvalid => e + render json: { error: e.errors.full_messages }, status: :unprocessable_entity + raise ActiveRecord::Rollback + rescue StandardError => e + render json: { message: I18n.t('errors.general') }, status: :unprocessable_entity + Rails.logger.error e.message + raise ActiveRecord::Rollback + end + end + def destroy ActiveRecord::Base.transaction do if @form_field.destroy diff --git a/app/javascript/vue/forms/edit_field.vue b/app/javascript/vue/forms/edit_field.vue index cbe06bdb4..830809e99 100644 --- a/app/javascript/vue/forms/edit_field.vue +++ b/app/javascript/vue/forms/edit_field.vue @@ -28,6 +28,9 @@