From 1ba557e58a540a8402ea4b661d275c2d61e2efe9 Mon Sep 17 00:00:00 2001 From: Lutz Bender Date: Tue, 6 Oct 2026 13:28:45 +0200 Subject: [PATCH 1/2] filter drop targets --- src/components/OpenwbNestedList.vue | 36 ++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/components/OpenwbNestedList.vue b/src/components/OpenwbNestedList.vue index 9b602e731..6fc65d9c5 100644 --- a/src/components/OpenwbNestedList.vue +++ b/src/components/OpenwbNestedList.vue @@ -68,7 +68,7 @@ { + return ( + this.nesting && + element.children && + this.currentNestingDepth < this.maxNestingDepth && + ["group", "counter", "inverter"].includes(element.type) + ); + }; + }, // nested lists inherit the name from their root, so items move within one list only resolvedGroupName() { return this.groupName ?? this.ownGroupName; @@ -170,10 +180,25 @@ export default { name: this.resolvedGroupName, pull: true, put: (to, from, dragEl) => { - if (to.options.group.name !== from.options.group.name) return false; + // Prevent dragging items between different top-level groups + if (to.options.group.name !== from.options.group.name) { + return false; + } const draggedItem = dragEl?.__draggable_context?.element; - if (!draggedItem) return true; - return draggedItem.type !== "group"; + if (!draggedItem) { + return true; + } + const targetItem = to.el.parentElement?.__draggable_context?.element; + if (["cp", "consumer", "bat", "vehicle"].includes(targetItem?.type)) { + return false; + } + if (targetItem?.type === "inverter") { + return draggedItem?.type === "bat"; + } + if (draggedItem.type === "group") { + return false; + } + return true; }, }; }, @@ -238,14 +263,12 @@ export default { this.editingGroupId = element.id; this.editingValue = element.label; - this.$nextTick(() => { const input = this.$el.querySelector(".group-rename-input"); input?.focus(); input?.select(); }); }, - finishEditing(groupId) { if (!this.editingValue.trim()) { this.editingGroupId = null; @@ -273,6 +296,7 @@ export default { .dragArea ul { background-color: var(--light); + /* background: url("img/openWB_logo_light.png") no-repeat center center; */ } .dragArea li { From 855caa7a33aee04ce08b730cc3eb7def768200a7 Mon Sep 17 00:00:00 2001 From: Lutz Bender Date: Tue, 6 Oct 2026 18:10:58 +0200 Subject: [PATCH 2/2] compatibility fix --- src/components/OpenwbNestedList.vue | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/components/OpenwbNestedList.vue b/src/components/OpenwbNestedList.vue index 6fc65d9c5..1896e5408 100644 --- a/src/components/OpenwbNestedList.vue +++ b/src/components/OpenwbNestedList.vue @@ -156,6 +156,10 @@ export default { }, showDropTarget() { return (element) => { + // always show the drop target if the element already has children for compatibility with previous nested lists + if (element.children?.length > 0) { + return true; + } return ( this.nesting && element.children && @@ -289,14 +293,13 @@ export default { min-height: 40px; color: #e9ecef; list-style-type: none; - border: 1px solid #ced4da; + border: 1px solid var(--dark); border-radius: 3px; padding: 0px; } .dragArea ul { background-color: var(--light); - /* background: url("img/openWB_logo_light.png") no-repeat center center; */ } .dragArea li { @@ -326,6 +329,8 @@ export default { justify-content: space-between; padding: 7px; background: var(--info); + border: 1px solid var(--dark); + border-radius: 3px; } .element-titel.counter {