allow to drag existing field on the page

pull/220/head^2
Pete Matsyburka 2 years ago
parent f83674b934
commit 970977e469

@ -324,7 +324,8 @@ export default {
withPayment: this.withPayment,
withFormula: this.withFormula,
defaultDrawFieldType: this.defaultDrawFieldType,
selectedAreaRef: computed(() => this.selectedAreaRef)
selectedAreaRef: computed(() => this.selectedAreaRef),
fieldsDragFieldRef: computed(() => this.fieldsDragFieldRef)
}
},
props: {
@ -480,6 +481,7 @@ export default {
},
computed: {
selectedAreaRef: () => ref(),
fieldsDragFieldRef: () => ref(),
fieldAreasIndex () {
const areas = {}
@ -811,7 +813,7 @@ export default {
}
},
onDropfield (area) {
const field = {
const field = this.fieldsDragFieldRef.value || {
name: '',
uuid: v4(),
submitter_uuid: this.selectedSubmitter.uuid,
@ -819,17 +821,19 @@ export default {
...this.dragField
}
if (['select', 'multiple', 'radio'].includes(field.type)) {
field.options = [{ value: '', uuid: v4() }]
}
if (!this.fieldsDragFieldRef.value) {
if (['select', 'multiple', 'radio'].includes(field.type)) {
field.options = [{ value: '', uuid: v4() }]
}
if (field.type === 'stamp') {
field.readonly = true
}
if (field.type === 'stamp') {
field.readonly = true
}
if (field.type === 'date') {
field.preferences = {
format: Intl.DateTimeFormat().resolvedOptions().locale.endsWith('-US') ? 'MM/DD/YYYY' : 'DD/MM/YYYY'
if (field.type === 'date') {
field.preferences = {
format: Intl.DateTimeFormat().resolvedOptions().locale.endsWith('-US') ? 'MM/DD/YYYY' : 'DD/MM/YYYY'
}
}
}
@ -885,11 +889,23 @@ export default {
fieldArea.cell_w = baseArea.cell_w || (baseArea.w / 5)
}
field.areas = [fieldArea]
field.areas ||= []
const lastArea = field.areas[field.areas.length - 1]
if (lastArea) {
fieldArea.x -= lastArea.w / 2
fieldArea.w = lastArea.w
fieldArea.h = lastArea.h
}
field.areas.push(fieldArea)
this.selectedAreaRef.value = fieldArea
this.template.fields.push(field)
if (this.template.fields.indexOf(field) === -1) {
this.template.fields.push(field)
}
this.save()
},

@ -24,11 +24,11 @@
:data-uuid="field.uuid"
:field="field"
:type-index="fields.filter((f) => f.type === field.type).indexOf(field)"
:editable="editable && (!dragField || dragField !== field)"
:editable="editable && (!fieldsDragFieldRef.value || fieldsDragFieldRef.value !== field)"
:default-field="defaultFields.find((f) => f.name === field.name)"
:draggable="editable"
@dragstart="dragField = field"
@dragend="dragField = null"
@dragstart="fieldsDragFieldRef.value = field"
@dragend="fieldsDragFieldRef.value = null"
@remove="removeField"
@scroll-to="$emit('scroll-to-area', $event)"
@set-draw="$emit('set-draw', $event)"
@ -154,7 +154,7 @@ export default {
IconDrag,
IconLock
},
inject: ['save', 'backgroundColor', 'withPhone', 'withPayment', 't'],
inject: ['save', 'backgroundColor', 'withPhone', 'withPayment', 't', 'fieldsDragFieldRef'],
props: {
fields: {
type: Array,
@ -205,11 +205,6 @@ export default {
}
},
emits: ['set-draw', 'set-drag', 'drag-end', 'scroll-to-area', 'change-submitter'],
data () {
return {
dragField: null
}
},
computed: {
fieldNames: FieldType.computed.fieldNames,
fieldIcons: FieldType.computed.fieldIcons,
@ -239,7 +234,7 @@ export default {
},
onFieldDragover (e) {
const targetField = e.target.closest('[data-uuid]')
const dragField = this.$refs.fields.querySelector(`[data-uuid="${this.dragField.uuid}"]`)
const dragField = this.$refs.fields.querySelector(`[data-uuid="${this.fieldsDragFieldRef.value.uuid}"]`)
if (dragField && targetField && targetField !== dragField) {
const fields = Array.from(this.$refs.fields.children)

@ -39,7 +39,7 @@
/>
</div>
<div
v-show="resizeDirection || isMove || isDrag || showMask || (drawField && isMobile)"
v-show="resizeDirection || isMove || isDrag || showMask || (drawField && isMobile) || fieldsDragFieldRef.value"
id="mask"
ref="mask"
class="top-0 bottom-0 left-0 right-0 absolute"
@ -61,7 +61,7 @@ export default {
components: {
FieldArea
},
inject: ['fieldTypes', 'defaultDrawFieldType'],
inject: ['fieldTypes', 'defaultDrawFieldType', 'fieldsDragFieldRef'],
props: {
image: {
type: Object,

Loading…
Cancel
Save