diff --git a/src/components/formDesigner/ComponentRenderer.vue b/src/components/formDesigner/ComponentRenderer.vue index e5c99c4..e8f75e6 100644 --- a/src/components/formDesigner/ComponentRenderer.vue +++ b/src/components/formDesigner/ComponentRenderer.vue @@ -1,6 +1,6 @@ @@ -43,5 +43,14 @@ export default defineComponent({ return componentMap[this.element.type] || null; }, }, + mounted() { + console.log("✅ ComponentRenderer geladen für:", this.element); + }, + methods: { + updateSchema(newItems) { + console.log("🔥 `update-schema` Event empfangen (Component-Renderer)! Neue Items:", newItems); + this.$emit("update-schema", newItems); // 🔥 Leitet die Änderung weiter + }, + }, }); diff --git a/src/components/formDesigner/FormDesignerToolsComponent.vue b/src/components/formDesigner/FormDesignerToolsComponent.vue index f801d55..d819190 100644 --- a/src/components/formDesigner/FormDesignerToolsComponent.vue +++ b/src/components/formDesigner/FormDesignerToolsComponent.vue @@ -17,7 +17,7 @@
-
+

-
+
@@ -41,7 +41,7 @@

-
+
@@ -59,7 +59,7 @@
-
+
@@ -68,7 +68,7 @@

-
+
-
- -
+ - + diff --git a/src/components/formDesigner/formRenderer/FlexLayoutRenderer.vue b/src/components/formDesigner/formRenderer/FlexLayoutRenderer.vue index 335dbfd..e66c5a6 100644 --- a/src/components/formDesigner/formRenderer/FlexLayoutRenderer.vue +++ b/src/components/formDesigner/formRenderer/FlexLayoutRenderer.vue @@ -1,7 +1,7 @@ @@ -28,6 +28,68 @@ export default defineComponent({ return this.direction === "horizontal" ? "horizontal" : "vertical"; }, }, + methods: { + /** + * 🔄 Aktualisiert verschachtelte FlexLayouts + */ + updateChildItems(index, newItems) { + console.log("✅ Event erhalten in updateChildItems! Index:", index, "Neue Items:", newItems); + + const updatedItems = [...this.items]; + updatedItems[index] = { ...updatedItems[index], items: newItems }; // ✅ Tiefere Rekursion möglich + this.$emit("update-items", updatedItems); // 🔥 Weitergabe an Parent + }, + + /** + * 🚀 Wenn ein Drag über das Layout geht + */ + onDragOver(event) { + event.preventDefault(); + event.stopPropagation(); + console.log("🚀 Drag over auf FlexLayout:", this.direction); + }, + + /** + * 📌 Wenn ein Element in das FlexLayout gedroppt wird + */ + onDrop(event) { + event.preventDefault(); + event.stopPropagation(); + + const droppedType = event.dataTransfer.getData("text/plain"); + console.log("📦 Element auf FlexLayout gedroppt:", droppedType); + + const newElement = this.createElementByType(droppedType); + if (newElement) { + const updatedItems = [...this.items, newElement]; // ✅ Neue Liste mit Element + console.log("📌 🔥 `update-items` gesendet:", updatedItems); + this.$emit("update-items", updatedItems); // 🔥 An Parent weiterleiten + } + }, + + /** + * 🔧 Erstellt das passende Element basierend auf dem Typ + */ + createElementByType(type) { + switch (type) { + case "InputText": + return { type: "InputText", label: "Neues Textfeld", placeholder: "Hier eingeben..." }; + case "InputNumber": + return { type: "InputNumber", label: "Neue Zahl", placeholder: "0" }; + case "InputDate": + return { type: "InputDate", label: "Neues Datum" }; + case "Button": + return { type: "Button", label: "Klicken" }; + case "Label": + return { type: "Label", value: "Neues Label" }; + case "FlexLayout": + return { type: "FlexLayout", direction: "vertical", items: [] }; + default: + console.warn("⚠ Unbekannter Typ:", type); + return null; + } + }, + }, }); @@ -35,17 +97,19 @@ export default defineComponent({ .flex-layout { display: flex; gap: 12px; - width: 100%; - /*border: 1px solid red; /* Debug: Zeigt Layout an */ + min-height: 50px; + border: 2px dashed transparent; } .horizontal { - flex-direction: row !important; - /*background: rgba(0, 0, 255, 0.1); /* Debug: Blauer Hintergrund für Test */ + flex-direction: row; } .vertical { - flex-direction: column !important; - /*background: rgba(255, 0, 0, 0.1); /* Debug: Roter Hintergrund für Test */ + flex-direction: column; +} + +.flex-layout.drag-over { + border: 2px dashed blue; } diff --git a/src/dummyData/formularData.json b/src/dummyData/formularData.json index 7ee6e29..df38775 100644 --- a/src/dummyData/formularData.json +++ b/src/dummyData/formularData.json @@ -29,7 +29,7 @@ }, { "type": "Label", - "value": "Ich bin ein Label", + "value": "und noch ein label", "key": "6" } ] diff --git a/src/layouts/FormDesignerLayout.vue b/src/layouts/FormDesignerLayout.vue index 5e886d7..2f9ed08 100644 --- a/src/layouts/FormDesignerLayout.vue +++ b/src/layouts/FormDesignerLayout.vue @@ -76,7 +76,7 @@
- +
@@ -101,6 +101,7 @@