diff --git a/app/javascript/template_builder/field.vue b/app/javascript/template_builder/field.vue index 28c0b9f6..6218bf36 100644 --- a/app/javascript/template_builder/field.vue +++ b/app/javascript/template_builder/field.vue @@ -4,6 +4,7 @@ >
-
- - -
-
+
@@ -162,6 +168,11 @@ 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, @@ -173,6 +184,24 @@ export default { onDragstart (fieldType) { this.$emit('set-drag', fieldType) }, + onFieldDragover (e) { + const targetFieldUuid = e.target.closest('[data-uuid]')?.dataset?.uuid + + if (this.dragField && targetFieldUuid && this.dragField.uuid !== targetFieldUuid) { + const field = this.fields.find((f) => f.uuid === targetFieldUuid) + + const currentIndex = this.fields.indexOf(this.dragField) + const targetIndex = this.fields.indexOf(field) + + if (currentIndex < targetIndex) { + this.fields.splice(targetIndex + 1, 0, this.dragField) + this.fields.splice(currentIndex, 1) + } else { + this.fields.splice(targetIndex, 0, this.dragField) + this.fields.splice(currentIndex + 1, 1) + } + } + }, removeSubmitter (submitter) { [...this.fields].forEach((field) => { if (field.submitter_uuid === submitter.uuid) { @@ -188,26 +217,6 @@ export default { this.save() }, - move (field, direction) { - const currentIndex = this.submitterFields.indexOf(field) - const fieldsIndex = this.fields.indexOf(field) - - this.fields.splice(fieldsIndex, 1) - - if (currentIndex + direction > this.submitterFields.length) { - const firstIndex = this.fields.indexOf(this.submitterFields[0]) - - this.fields.splice(firstIndex, 0, field) - } else if (currentIndex + direction < 0) { - const lastIndex = this.fields.indexOf(this.submitterFields[this.submitterFields.length - 1]) - - this.fields.splice(lastIndex + 1, 0, field) - } else { - this.fields.splice(fieldsIndex + direction, 0, field) - } - - this.save() - }, removeField (field) { this.fields.splice(this.fields.indexOf(field), 1)