diff --git a/app/controllers/templates_preferences_controller.rb b/app/controllers/templates_preferences_controller.rb index 7e358537..a9221f7b 100644 --- a/app/controllers/templates_preferences_controller.rb +++ b/app/controllers/templates_preferences_controller.rb @@ -28,8 +28,10 @@ class TemplatesPreferencesController < ApplicationController submitters_order completed_notification_email_subject completed_notification_email_body completed_notification_email_enabled completed_notification_email_attach_audit] + - [completed_message: %i[title body]] + [completed_message: %i[title body], + submitters: [%i[uuid request_email_subject request_email_body]]] ).tap do |attrs| + attrs[:preferences].delete(:submitters) if params[:request_email_per_submitter] != '1' attrs[:preferences] = attrs[:preferences].transform_values do |value| if %w[true false].include?(value) value == 'true' diff --git a/app/javascript/elements/autoresize_textarea.js b/app/javascript/elements/autoresize_textarea.js index 8fd25801..a5a8b5ed 100644 --- a/app/javascript/elements/autoresize_textarea.js +++ b/app/javascript/elements/autoresize_textarea.js @@ -3,6 +3,8 @@ export default class extends HTMLElement { this.resize() this.textarea.addEventListener('input', () => this.resize()) + + this.observeVisibility() } resize () { @@ -11,6 +13,28 @@ export default class extends HTMLElement { } } + observeVisibility () { + this.observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + this.resize() + this.observer.unobserve(this.textarea) + } + }) + }, + { + threshold: 0.1 + } + ) + + this.observer.observe(this.textarea) + } + + disconnectedCallback () { + this.observer.unobserve(this.textarea) + } + get textarea () { return this.querySelector('textarea') } diff --git a/app/mailers/submitter_mailer.rb b/app/mailers/submitter_mailer.rb index 2441b165..acddfdbb 100644 --- a/app/mailers/submitter_mailer.rb +++ b/app/mailers/submitter_mailer.rb @@ -14,8 +14,20 @@ class SubmitterMailer < ApplicationMailer @email_message = submitter.account.email_messages.find_by(uuid: submitter.preferences['email_message_uuid']) end - @body = @email_message&.body.presence || @submitter.template.preferences['request_email_body'].presence - @subject = @email_message&.subject.presence || @submitter.template.preferences['request_email_subject'].presence + template_submitters_index = + if @email_message.blank? + build_submitter_preferences_index(@submitter) + else + {} + end + + @body = @email_message&.body.presence || + template_submitters_index.dig(@submitter.uuid, 'request_email_body').presence || + @submitter.template.preferences['request_email_body'].presence + + @subject = @email_message&.subject.presence || + template_submitters_index.dig(@submitter.uuid, 'request_email_subject').presence || + @submitter.template.preferences['request_email_subject'].presence @email_config = AccountConfigs.find_for_account(@current_account, AccountConfig::SUBMITTER_INVITATION_EMAIL_KEY) @@ -24,14 +36,7 @@ class SubmitterMailer < ApplicationMailer reply_to = build_submitter_reply_to(@submitter) I18n.with_locale(@current_account.locale) do - subject = - if @email_config || @subject - ReplaceEmailVariables.call(@subject || @email_config.value['subject'], submitter:) - elsif @submitter.with_signature_fields? - I18n.t(:you_are_invited_to_sign_a_document) - else - I18n.t(:you_are_invited_to_submit_a_form) - end + subject = build_invite_subject(@subject, @email_config, submitter) mail( to: @submitter.friendly_name, @@ -196,6 +201,20 @@ class SubmitterMailer < ApplicationMailer user.role == 'integration' ? user.friendly_name.sub(/\+\w+@/, '@') : user.friendly_name end + def build_invite_subject(subject, email_config, submitter) + if email_config || subject + ReplaceEmailVariables.call(subject || email_config.value['subject'], submitter:) + elsif submitter.with_signature_fields? + I18n.t(:you_are_invited_to_sign_a_document) + else + I18n.t(:you_are_invited_to_submit_a_form) + end + end + + def build_submitter_preferences_index(submitter) + submitter.template.preferences['submitters'].to_a.index_by { |e| e['uuid'] } + end + def add_attachments_with_size_limit(submitter, storage_attachments, current_size, filename_format = nil) total_size = current_size diff --git a/app/views/submissions/_send_email.html.erb b/app/views/submissions/_send_email.html.erb index 9031c8e4..ae6f9bc1 100644 --- a/app/views/submissions/_send_email.html.erb +++ b/app/views/submissions/_send_email.html.erb @@ -1,3 +1,4 @@ +<% submitter_preferences_index = template.preferences['submitters'].to_a.index_by { |e| e['uuid'] } %>