From 59d9a59769b7d71ec58ebad52a1ac45c1db203b9 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Sun, 5 Nov 2023 01:41:54 +0200 Subject: [PATCH] add field default values --- app/controllers/api/templates_controller.rb | 12 ++-- app/javascript/submission_form/form.vue | 10 ++- app/javascript/template_builder/area.vue | 57 ++++++++++------- app/javascript/template_builder/field.vue | 68 ++++++++++++++++----- app/views/submit_form/show.html.erb | 2 +- lib/submitters/submit_values.rb | 49 +++++++++++++++ 6 files changed, 153 insertions(+), 45 deletions(-) diff --git a/app/controllers/api/templates_controller.rb b/app/controllers/api/templates_controller.rb index 3ba50a89..8bf8a1a2 100644 --- a/app/controllers/api/templates_controller.rb +++ b/app/controllers/api/templates_controller.rb @@ -52,11 +52,13 @@ module Api end def template_params - params.require(:template).permit(:name, - schema: [%i[attachment_uuid name]], - submitters: [%i[name uuid]], - fields: [[:uuid, :submitter_uuid, :name, :type, :required, - { options: [], areas: [%i[x y w h cell_w attachment_uuid page]] }]]) + params.require(:template).permit( + :name, + schema: [%i[attachment_uuid name]], + submitters: [%i[name uuid]], + fields: [[:uuid, :submitter_uuid, :name, :type, :required, :readonly, :default_value, + { options: [], areas: [%i[x y w h cell_w attachment_uuid page]] }]] + ) end end end diff --git a/app/javascript/submission_form/form.vue b/app/javascript/submission_form/form.vue index 026ceb1e..86eb7f09 100644 --- a/app/javascript/submission_form/form.vue +++ b/app/javascript/submission_form/form.vue @@ -513,9 +513,15 @@ export default { mounted () { this.submittedValues = JSON.parse(JSON.stringify(this.values)) + this.fields.forEach((field) => { + if (field.default_value && !field.readonly) { + this.values[field.uuid] = field.default_value + } + }) + if (this.goToLast) { - const requiredEmptyStepIndex = this.stepFields.indexOf(this.stepFields.find((fields) => fields.some((f) => f.required && !this.values[f.uuid]))) - const lastFilledStepIndex = this.stepFields.indexOf([...this.stepFields].reverse().find((fields) => fields.some((f) => !!this.values[f.uuid]))) + 1 + const requiredEmptyStepIndex = this.stepFields.indexOf(this.stepFields.find((fields) => fields.some((f) => f.required && !this.submittedValues[f.uuid]))) + const lastFilledStepIndex = this.stepFields.indexOf([...this.stepFields].reverse().find((fields) => fields.some((f) => !!this.submittedValues[f.uuid]))) + 1 const indexesList = [this.stepFields.length - 1] diff --git a/app/javascript/template_builder/area.vue b/app/javascript/template_builder/area.vue index 8a860a35..bcad7d00 100644 --- a/app/javascript/template_builder/area.vue +++ b/app/javascript/template_builder/area.vue @@ -95,18 +95,27 @@
+
+
+ {{ field.default_value }} +
+
@@ -192,30 +201,30 @@ export default { }, borderColors () { return [ - 'border-red-500', - 'border-sky-500', - 'border-emerald-500', - 'border-yellow-300', - 'border-purple-600', - 'border-pink-500', - 'border-cyan-500', - 'border-orange-500', - 'border-lime-500', - 'border-indigo-500' + 'border-red-500/50', + 'border-sky-500/50', + 'border-emerald-500/50', + 'border-yellow-300/50', + 'border-purple-600/50', + 'border-pink-500/50', + 'border-cyan-500/50', + 'border-orange-500/50', + 'border-lime-500/50', + 'border-indigo-500/50' ] }, bgColors () { return [ - 'bg-red-100', - 'bg-sky-100', - 'bg-emerald-100', - 'bg-yellow-100', - 'bg-purple-100', - 'bg-pink-100', - 'bg-cyan-100', - 'bg-orange-100', - 'bg-lime-100', - 'bg-indigo-100' + 'bg-red-100/50', + 'bg-sky-100/50', + 'bg-emerald-100/50', + 'bg-yellow-100/50', + 'bg-purple-100/50', + 'bg-pink-100/50', + 'bg-cyan-100/50', + 'bg-orange-100/50', + 'bg-lime-100/50', + 'bg-indigo-100/50' ] }, isSelected () { @@ -269,6 +278,8 @@ export default { } }, maybeUpdateOptions () { + delete this.field.default_value + if (!['radio', 'multiple', 'select'].includes(this.field.type)) { delete this.field.options } diff --git a/app/javascript/template_builder/field.vue b/app/javascript/template_builder/field.vue index 6218bf36..75295455 100644 --- a/app/javascript/template_builder/field.vue +++ b/app/javascript/template_builder/field.vue @@ -53,7 +53,6 @@ class="flex items-center space-x-1" > -