diff --git a/app/controllers/api/templates_controller.rb b/app/controllers/api/templates_controller.rb index 88a606f4..7847e599 100644 --- a/app/controllers/api/templates_controller.rb +++ b/app/controllers/api/templates_controller.rb @@ -106,7 +106,7 @@ module Api :external_id, :shared_link, { - submitters: [%i[name uuid is_requester invite_by_uuid optional_invite_by_uuid linked_to_uuid email]], + submitters: [%i[name uuid is_requester invite_by_uuid optional_invite_by_uuid linked_to_uuid email order]], fields: [[:uuid, :submitter_uuid, :name, :type, :required, :readonly, :default_value, :title, :description, :prefillable, diff --git a/app/controllers/templates_controller.rb b/app/controllers/templates_controller.rb index 73e68e85..a3d78606 100644 --- a/app/controllers/templates_controller.rb +++ b/app/controllers/templates_controller.rb @@ -117,7 +117,7 @@ class TemplatesController < ApplicationController params.require(:template).permit( :name, { schema: [[:attachment_uuid, :name, { conditions: [%i[field_uuid value action operation]] }]], - submitters: [%i[name uuid is_requester linked_to_uuid invite_by_uuid optional_invite_by_uuid email]], + submitters: [%i[name uuid is_requester linked_to_uuid invite_by_uuid optional_invite_by_uuid email order]], fields: [[:uuid, :submitter_uuid, :name, :type, :required, :readonly, :default_value, :title, :description, :prefillable, diff --git a/app/controllers/templates_recipients_controller.rb b/app/controllers/templates_recipients_controller.rb index a1298094..17a4bbb8 100644 --- a/app/controllers/templates_recipients_controller.rb +++ b/app/controllers/templates_recipients_controller.rb @@ -9,6 +9,10 @@ class TemplatesRecipientsController < ApplicationController @template.submitters = submitters_params.map { |s| s.reject { |_, v| v.is_a?(String) && v.blank? } } + if @template.submitters.each_with_index.all? { |s, index| s['order'] == index } + @template.submitters.each { |s| s.delete('order') } + end + @template.save! render json: { submitters: @template.submitters } @@ -18,7 +22,7 @@ class TemplatesRecipientsController < ApplicationController def submitters_params permit_params = { submitters: [%i[name uuid is_requester optional_invite_by_uuid - invite_by_uuid linked_to_uuid email option]] } + invite_by_uuid linked_to_uuid email option order]] } params.require(:template).permit(permit_params).fetch(:submitters, {}).values.filter_map do |s| next if s[:uuid].blank? @@ -29,6 +33,7 @@ class TemplatesRecipientsController < ApplicationController s.delete(:is_requester) end + s[:order] = s[:order].to_i if s[:order].present? s.delete(:invite_by_uuid) if s[:invite_by_uuid].blank? s.delete(:optional_invite_by_uuid) if s[:optional_invite_by_uuid].blank? diff --git a/app/javascript/application.js b/app/javascript/application.js index dda88f7a..7b51186d 100644 --- a/app/javascript/application.js +++ b/app/javascript/application.js @@ -38,6 +38,7 @@ import DashboardDropzone from './elements/dashboard_dropzone' import RequiredCheckboxGroup from './elements/required_checkbox_group' import PageContainer from './elements/page_container' import EmailEditor from './elements/email_editor' +import MountOnClick from './elements/mount_on_click' import * as TurboInstantClick from './lib/turbo_instant_click' @@ -111,6 +112,7 @@ safeRegisterElement('check-on-click', CheckOnClick) safeRegisterElement('required-checkbox-group', RequiredCheckboxGroup) safeRegisterElement('page-container', PageContainer) safeRegisterElement('email-editor', EmailEditor) +safeRegisterElement('mount-on-click', MountOnClick) safeRegisterElement('template-builder', class extends HTMLElement { connectedCallback () { diff --git a/app/javascript/elements/mount_on_click.js b/app/javascript/elements/mount_on_click.js new file mode 100644 index 00000000..3a71f8ff --- /dev/null +++ b/app/javascript/elements/mount_on_click.js @@ -0,0 +1,11 @@ +export default class extends HTMLElement { + connectedCallback () { + this.addEventListener('click', () => { + document.body.append(this.template.content) + }) + } + + get template () { + return document.getElementById(this.dataset.templateId) + } +} diff --git a/app/views/submissions/_submitters_order.html.erb b/app/views/submissions/_submitters_order.html.erb index bb0827e9..c61820cc 100644 --- a/app/views/submissions/_submitters_order.html.erb +++ b/app/views/submissions/_submitters_order.html.erb @@ -1,4 +1,4 @@ -<% if template.preferences['submitters_order'] == 'preserved' %> +<% if template.preferences['submitters_order'] == 'preserved' || template.submitters.any? { |s| s['order'] } %> <%= f.hidden_field :preserve_order, value: '1' %> <% elsif template.submitters.size > 1 %>