diff --git a/app/javascript/submission_form/area.vue b/app/javascript/submission_form/area.vue
index e7596862..1a67d904 100644
--- a/app/javascript/submission_form/area.vue
+++ b/app/javascript/submission_form/area.vue
@@ -226,7 +226,8 @@ export default {
},
submitter: {
type: Object,
- required: true
+ required: false,
+ default: () => ({})
},
withSignatureId: {
type: Boolean,
diff --git a/app/javascript/submission_form/areas.vue b/app/javascript/submission_form/areas.vue
index d9807ad5..65524fce 100644
--- a/app/javascript/submission_form/areas.vue
+++ b/app/javascript/submission_form/areas.vue
@@ -21,7 +21,7 @@
:values="values"
:field="field"
:area="area"
- :submittable="true"
+ :submittable="submittable"
:field-index="fieldIndex"
:scroll-padding="scrollPadding"
:submitter="submitter"
@@ -58,6 +58,11 @@ export default {
required: false,
default: false
},
+ submittable: {
+ type: Boolean,
+ required: false,
+ default: true
+ },
submitter: {
type: Object,
required: true
diff --git a/app/javascript/submission_form/form.vue b/app/javascript/submission_form/form.vue
index c84c7eb1..f8ca5c4e 100644
--- a/app/javascript/submission_form/form.vue
+++ b/app/javascript/submission_form/form.vue
@@ -13,6 +13,12 @@
:scroll-padding="scrollPadding"
@focus-step="[saveStep(), currentField.type !== 'checkbox' ? isFormVisible = true : '', goToStep($event, false, true)]"
/>
+
f.readonly && f.conditions?.length && this.checkFieldConditions(f))
+ },
stepFields () {
return this.fields.filter((f) => !f.readonly).reduce((acc, f) => {
const prevStep = acc[acc.length - 1]
@@ -933,12 +942,12 @@ export default {
return acc && isEmpty(this.values[c.field_uuid])
} else if (['not_empty', 'checked'].includes(c.action)) {
return acc && !isEmpty(this.values[c.field_uuid])
- } else if (['equal', 'contains'].includes(c.action)) {
+ } else if (['equal', 'contains'].includes(c.action) && field) {
const option = field.options.find((o) => o.uuid === c.value)
const values = [this.values[c.field_uuid]].flat()
return acc && values.includes(this.optionValue(option, field.options.indexOf(option)))
- } else if (['not_equal', 'does_not_contain'].includes(c.action)) {
+ } else if (['not_equal', 'does_not_contain'].includes(c.action) && field) {
const option = field.options.find((o) => o.uuid === c.value)
const values = [this.values[c.field_uuid]].flat()
diff --git a/app/views/submit_form/show.html.erb b/app/views/submit_form/show.html.erb
index 325d93c5..d7a966ef 100644
--- a/app/views/submit_form/show.html.erb
+++ b/app/views/submit_form/show.html.erb
@@ -51,6 +51,8 @@
<% next if !field['readonly'] && field['submitter_uuid'] == @submitter.uuid %>
<% next if field['redacted'] && field['submitter_uuid'] != @submitter.uuid %>
<% next if value == '{{date}}' && field['submitter_uuid'] != @submitter.uuid %>
+ <% next if field['conditions'].present? && values[field['uuid']].blank? && field['submitter_uuid'] != @submitter.uuid %>
+ <% next if field['conditions'].present? && field['submitter_uuid'] == @submitter.uuid %>
<% next if field.dig('preferences', 'formula').present? && field['submitter_uuid'] == @submitter.uuid %>
<%= render 'submissions/value', area:, field:, attachments_index: @attachments_index, value:, locale: @submitter.account.locale, timezone: @submitter.account.timezone, submitter: submitters_index[field['submitter_uuid']], with_signature_id: @form_configs[:with_signature_id] %>
<% end %>