From 00e3ee15ef7d1e3d8d2b6b2077fe468b0a39acd9 Mon Sep 17 00:00:00 2001 From: Alex Turchyn Date: Thu, 8 Jun 2023 00:20:42 +0300 Subject: [PATCH] template builder adjustments --- app/javascript/template_builder/area.vue | 32 ++++++++++++------ app/javascript/template_builder/builder.vue | 33 ++++++++++++++----- app/javascript/template_builder/document.vue | 6 ++++ app/javascript/template_builder/field.vue | 25 ++++++++++---- .../template_builder/field_submitter.vue | 14 ++++++-- app/javascript/template_builder/fields.vue | 17 ++++++---- app/javascript/template_builder/page.vue | 7 +++- app/models/template.rb | 2 +- 8 files changed, 102 insertions(+), 34 deletions(-) diff --git a/app/javascript/template_builder/area.vue b/app/javascript/template_builder/area.vue index b6adb4c8..e1e01d50 100644 --- a/app/javascript/template_builder/area.vue +++ b/app/javascript/template_builder/area.vue @@ -6,7 +6,7 @@ @mousedown.stop="startDrag" >
@@ -31,7 +31,7 @@ :button-width="27" :button-classes="'px-1'" :menu-classes="'bg-white rounded-t-none'" - @update:model-value="maybeDeleteOptions" + @update:model-value="maybeUpdateOptions" @click="selectedAreaRef.value = area" /> {{ field.name || defaultName }}
- +
@@ -76,12 +82,14 @@ import FieldSubmitter from './field_submitter' import FieldType from './field_type' import Field from './field' +import { IconX } from '@tabler/icons-vue' export default { name: 'FieldArea', components: { FieldType, - FieldSubmitter + FieldSubmitter, + IconX }, inject: ['template', 'selectedAreaRef'], props: { @@ -160,10 +168,14 @@ export default { }, 1) } }, - maybeDeleteOptions () { - if (!['radio', 'select', 'checkbox'].includes(this.field.type)) { + maybeUpdateOptions () { + if (!['radio', 'checkbox', 'select'].includes(this.field.type)) { delete this.field.options } + + if (this.field.type === 'select') { + this.field.options ||= [''] + } }, onNameBlur (e) { this.isNameFocus = false diff --git a/app/javascript/template_builder/builder.vue b/app/javascript/template_builder/builder.vue index a5e3f58b..a41fd672 100644 --- a/app/javascript/template_builder/builder.vue +++ b/app/javascript/template_builder/builder.vue @@ -77,6 +77,7 @@ :selected-submitter="selectedSubmitter" :document="document" :is-drag="!!dragFieldType" + :is-draw="!!drawField" @draw="onDraw" @drop-field="onDropfield" @remove-area="removeArea" @@ -91,10 +92,19 @@ v-if="drawField" class="sticky inset-0 bg-base-100 h-full" > - Draw {{ drawField.name }} field on the page - +
+

+ Draw {{ drawField.name }} field on the document +

+

+ +

+
f.type === type) + const previousArea = previousField?.areas?.[previousField.areas.length - 1] + + const areaW = previousArea?.w || (30 / pageMask.clientWidth) + const areaH = previousArea?.h || (30 / pageMask.clientHeight) + if ((pageMask.clientWidth * area.w) < 5) { - area.x = area.x - (30 / pageMask.clientWidth) / 2 - area.y = area.y - (30 / pageMask.clientHeight) / 2 + area.x = area.x - (areaW / 2) + area.y = area.y - (areaH / 2) } - area.w = 30 / pageMask.clientWidth - area.h = 30 / pageMask.clientHeight + + area.w = areaW + area.h = areaH } const field = { diff --git a/app/javascript/template_builder/document.vue b/app/javascript/template_builder/document.vue index d471f46f..c46ca7a9 100644 --- a/app/javascript/template_builder/document.vue +++ b/app/javascript/template_builder/document.vue @@ -7,6 +7,7 @@ :number="index" :areas="areasIndex[index]" :is-drag="isDrag" + :is-draw="isDraw" :selected-submitter="selectedSubmitter" :image="image" @drop-field="$emit('drop-field', {...$event, attachment_uuid: document.uuid })" @@ -37,6 +38,11 @@ export default { type: Object, required: true }, + isDraw: { + type: Boolean, + required: false, + default: false + }, isDrag: { type: Boolean, required: false, diff --git a/app/javascript/template_builder/field.vue b/app/javascript/template_builder/field.vue index 71af27bb..749307c2 100644 --- a/app/javascript/template_builder/field.vue +++ b/app/javascript/template_builder/field.vue @@ -1,17 +1,21 @@