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 %>