diff --git a/.rubocop.yml b/.rubocop.yml
index 019c504b..9be296e5 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -84,7 +84,7 @@ RSpec/AnyInstance:
Enabled: false
Metrics/BlockNesting:
- Max: 5
+ Max: 6
Rails/I18nLocaleTexts:
Enabled: false
diff --git a/app/javascript/elements/toggle_attribute.js b/app/javascript/elements/toggle_attribute.js
index e9ee3075..5ff6b7c3 100644
--- a/app/javascript/elements/toggle_attribute.js
+++ b/app/javascript/elements/toggle_attribute.js
@@ -1,12 +1,18 @@
export default class extends HTMLElement {
connectedCallback () {
this.input.addEventListener('change', (event) => {
+ if (!this.target) return
+
+ const value = event.target.type === 'checkbox' ? event.target.checked : event.target.value
+ const dataValue = this.dataset.value === 'false' ? false : this.dataset.value || true
+
if (this.dataset.attribute) {
- this.target[this.dataset.attribute] = event.target.checked
+ this.target[this.dataset.attribute] = value === dataValue
}
if (this.dataset.className) {
- this.target.classList.toggle(this.dataset.className, event.target.value !== this.dataset.value)
+ this.target.classList.toggle(this.dataset.className, value !== dataValue)
+
if (this.dataset.className === 'hidden' && this.target.tagName === 'INPUT') {
this.target.disabled = event.target.value !== this.dataset.value
}
diff --git a/app/javascript/elements/toggle_classes.js b/app/javascript/elements/toggle_classes.js
index ab96f293..332ac84f 100644
--- a/app/javascript/elements/toggle_classes.js
+++ b/app/javascript/elements/toggle_classes.js
@@ -1,10 +1,18 @@
export default class extends HTMLElement {
connectedCallback () {
- const button = this.querySelector('a, button')
+ const button = this.querySelector('a, button, label')
+
+ const target = this.dataset.targetId ? document.getElementById(this.dataset.targetId) : button
button.addEventListener('click', () => {
this.dataset.classes.split(' ').forEach((cls) => {
- button.classList.toggle(cls)
+ if (this.dataset.action === 'remove') {
+ target.classList.remove(cls)
+ } else if (this.dataset.action === 'add') {
+ target.classList.add(cls)
+ } else {
+ target.classList.toggle(cls)
+ }
})
})
}
diff --git a/app/views/templates_preferences/_recipients.html.erb b/app/views/templates_preferences/_recipients.html.erb
index 4d45e38f..4e5eb61b 100644
--- a/app/views/templates_preferences/_recipients.html.erb
+++ b/app/views/templates_preferences/_recipients.html.erb
@@ -26,7 +26,20 @@
<% end %>
<% if template.submitters.size == 2 %>
- <%= tag.input name: ff.field_name(:email), value: ff.object.email, type: :email, class: 'base-input', multiple: true, autocomplete: 'off', placeholder: t('default_email'), disabled: ff.object.is_requester || ff.object.invite_by_uuid.present? || ff.object.optional_invite_by_uuid.present?, id: field_uuid = SecureRandom.uuid %>
+ <%= tag.input name: ff.field_name(:email), value: ff.object.email, type: :email, multiple: true, autocomplete: 'off', placeholder: t('default_email'), id: email_field_uuid = SecureRandom.uuid, disabled: is_email_disabled = ff.object.is_requester || ff.object.invite_by_uuid.present? || ff.object.optional_invite_by_uuid.present? || ff.object.invite_via_field_uuid.present?, class: "base-input w-full #{'hidden' if ff.object.invite_by_uuid.present? || ff.object.optional_invite_by_uuid.present? || ff.object.invite_via_field_uuid.present?}" %>
+ <% if index == 1 %>
+ <% invite_fields = template.fields.select { |field| field['name'].present? && field['submitter_uuid'] != submitter['uuid'] } %>
+
+
+ <%= ff.select :option, [*(template.submitters - [submitter]).flat_map { |e| [[t('invite_by_name', name: e['name']), "invite_by_#{e['uuid']}"], [t('invite_by_name', name: e['name']) + " (#{t(:optional).capitalize})", "optional_invite_by_#{e['uuid']}"]] }, (invite_fields.present? ? [t('invite_via_form_field'), 'invite_via_field'] : nil)].compact, {}, class: 'base-select' %>
+
+ <% if invite_fields.present? %>
+
+ <%= select_tag ff.field_name(:invite_via_field_uuid), options_for_select(invite_fields.map { |field| [field['name'], field['uuid']] }, ff.object.invite_via_field_uuid), prompt: t(:select_field), class: 'base-select mt-3' %>
+
+ <% end %>
+
+ <% end %>
<% else %>
<% invite_fields = template.fields.select { |field| field['name'].present? && field['submitter_uuid'] != submitter['uuid'] } %>
@@ -35,32 +48,49 @@
<%= tag.input name: ff.field_name(:email), type: :email, value: ff.object.email, multiple: true, class: "base-input #{'hidden' if item.option != 'email'}", autocomplete: 'off', placeholder: t('default_email'), id: email_field_uuid %>
-
- <%= select_tag ff.field_name(:invite_via_field_uuid), options_for_select(invite_fields.map { |field| [field['name'], field['uuid']] }, item.invite_via_field_uuid), prompt: t(:select_field), class: 'base-select',required: true %>
-
+ <% if invite_fields.present? %>
+
+ <%= select_tag ff.field_name(:invite_via_field_uuid), options_for_select(invite_fields.map { |field| [field['name'], field['uuid']] }, item.invite_via_field_uuid), prompt: t(:select_field), class: 'base-select', required: true %>
+
+ <% end %>
<% end %>
<% if template.submitters.size == 2 %>
- <% if local_assigns[:with_submission_requester] != false %>
+ <% if index == 0 && local_assigns[:with_submission_requester] != false %>
- <% end %>
- <% if index == 1 %>
+ <% elsif index == 1 %>
+ <% if local_assigns[:with_submission_requester] != false %>
+
+
+
+
+
+ <% end %>
<% end %>