diff --git a/app/controllers/concerns/metadata_template_actions.rb b/app/controllers/concerns/metadata_template_actions.rb index 3a29795142..76dc4f5ee8 100644 --- a/app/controllers/concerns/metadata_template_actions.rb +++ b/app/controllers/concerns/metadata_template_actions.rb @@ -7,6 +7,7 @@ module MetadataTemplateActions # rubocop:disable Metrics/ModuleLength included do before_action proc { namespace } before_action proc { metadata_template }, only: %i[destroy edit show update] + before_action proc { metadata_template_fields }, only: %i[edit update] end def index @@ -79,7 +80,7 @@ def destroy end end - def update + def update # rubocop:disable Metrics/MethodLength @updated = MetadataTemplates::UpdateService.new(current_user, @metadata_template, metadata_template_params).execute respond_to do |format| @@ -89,9 +90,14 @@ def update template_name: @metadata_template.name)) end else + msg = if @metadata_template.errors.any? + @metadata_template.errors.full_messages.to_sentence + else + I18n.t('concerns.metadata_template_actions.update.error', + template_name: @metadata_template.name) + end format.turbo_stream do - render_error(I18n.t('concerns.metadata_template_actions.update.error', - template_name: @metadata_template.name)) + render_error(msg) end end end @@ -113,6 +119,15 @@ def metadata_template @metadata_template = MetadataTemplate.find_by(id: params[:id], namespace: @namespace) end + def metadata_template_fields + @current_template_fields = if params.key?(:metadata_template) && metadata_template_params.key?(:fields) + metadata_template_params[:fields] + else + @metadata_template.fields + end + @available_metadata_fields = @namespace.metadata_fields.sort_by(&:downcase) - @current_template_fields + end + def render_success(message) render status: :ok, locals: { type: 'success', diff --git a/app/controllers/groups/metadata_templates_controller.rb b/app/controllers/groups/metadata_templates_controller.rb index cd5d4714f5..ce81edc25d 100644 --- a/app/controllers/groups/metadata_templates_controller.rb +++ b/app/controllers/groups/metadata_templates_controller.rb @@ -10,7 +10,8 @@ class MetadataTemplatesController < Groups::ApplicationController private def metadata_template_params - params.require(:metadata_template).permit(:name, :description, fields: []) + defaults = { fields: [] } + params.require(:metadata_template).permit(:name, :description, fields: []).reverse_merge(defaults) end protected diff --git a/app/controllers/projects/metadata_templates_controller.rb b/app/controllers/projects/metadata_templates_controller.rb index 9fd74ad7ab..f99fb85130 100644 --- a/app/controllers/projects/metadata_templates_controller.rb +++ b/app/controllers/projects/metadata_templates_controller.rb @@ -10,7 +10,8 @@ class MetadataTemplatesController < Projects::ApplicationController private def metadata_template_params - params.require(:metadata_template).permit(:name, fields: []) + defaults = { fields: [] } + params.require(:metadata_template).permit(:name, :description, fields: []).reverse_merge(defaults) end protected diff --git a/app/views/groups/metadata_templates/edit.turbo_stream.erb b/app/views/groups/metadata_templates/edit.turbo_stream.erb index e69de29bb2..9af7e6139a 100644 --- a/app/views/groups/metadata_templates/edit.turbo_stream.erb +++ b/app/views/groups/metadata_templates/edit.turbo_stream.erb @@ -0,0 +1,10 @@ +<%= turbo_stream.update "metadata_template_modal", + partial: "shared/metadata_templates/edit_template_dialog", + locals: { + open: true, + update_path: + group_metadata_template_path( + @namespace, + @metadata_template, + ), + } %> diff --git a/app/views/groups/metadata_templates/update.turbo_stream.erb b/app/views/groups/metadata_templates/update.turbo_stream.erb index e69de29bb2..4971786722 100644 --- a/app/views/groups/metadata_templates/update.turbo_stream.erb +++ b/app/views/groups/metadata_templates/update.turbo_stream.erb @@ -0,0 +1,20 @@ +<%= turbo_stream.update "metadata_template_modal", + partial: "shared/metadata_templates/edit_template_dialog", + locals: { + open: @metadata_template.errors.any? ? true : false, + update_path: + group_metadata_template_path( + @namespace, + @metadata_template, + ), + } %> + +<% if !@metadata_template.errors.any? %> + <%= turbo_stream.append "flashes" do %> + <%= viral_flash(type:, data: message) %> + <% end %> + +<% else %> + <%= turbo_stream.update "metadata_template_error_alert", + viral_alert(type:, message:, classes: "mb-4") %> +<% end %> diff --git a/app/views/projects/metadata_templates/edit.turbo_stream.erb b/app/views/projects/metadata_templates/edit.turbo_stream.erb index e69de29bb2..367d24aa59 100644 --- a/app/views/projects/metadata_templates/edit.turbo_stream.erb +++ b/app/views/projects/metadata_templates/edit.turbo_stream.erb @@ -0,0 +1,11 @@ +<%= turbo_stream.update "metadata_template_modal", + partial: "shared/metadata_templates/edit_template_dialog", + locals: { + open: true, + update_path: + namespace_project_metadata_template_path( + @namespace.parent, + @namespace.project, + @metadata_template, + ), + } %> diff --git a/app/views/projects/metadata_templates/update.turbo_stream.erb b/app/views/projects/metadata_templates/update.turbo_stream.erb index e69de29bb2..55ee91f51c 100644 --- a/app/views/projects/metadata_templates/update.turbo_stream.erb +++ b/app/views/projects/metadata_templates/update.turbo_stream.erb @@ -0,0 +1,21 @@ +<%= turbo_stream.update "metadata_template_modal", + partial: "shared/metadata_templates/edit_template_dialog", + locals: { + open: @metadata_template.errors.any? ? true : false, + update_path: + namespace_project_metadata_template_path( + @namespace.parent, + @namespace.project, + @metadata_template, + ), + } %> + +<% if !@metadata_template.errors.any? %> + <%= turbo_stream.append "flashes" do %> + <%= viral_flash(type:, data: message) %> + <% end %> + +<% else %> + <%= turbo_stream.update "metadata_template_error_alert", + viral_alert(type:, message:, classes: "mb-4") %> +<% end %> diff --git a/app/views/shared/metadata_templates/_edit_template_dialog.html.erb b/app/views/shared/metadata_templates/_edit_template_dialog.html.erb new file mode 100644 index 0000000000..057aa49bf0 --- /dev/null +++ b/app/views/shared/metadata_templates/_edit_template_dialog.html.erb @@ -0,0 +1,72 @@ +<%= viral_dialog(open: open, size: :large) do |dialog| %> + <%= dialog.with_header(title: "Edit Template #{@metadata_template.name}") %> + <%= dialog.with_section do %> + <%= turbo_frame_tag "metadata_template_error_alert" %> + <%= turbo_frame_tag "metadata_template_dialog_content" do %> +