From 6965b7cd41c70c0609a9fca64ddad53e9eb388cb Mon Sep 17 00:00:00 2001
From: Richard Henck <richard.henck@iqb.hu-berlin.de>
Date: Wed, 6 Mar 2024 11:03:08 +0100
Subject: [PATCH] DropList: Ignore list connection when moving replaced items

#632
---
 docs/release-notes-common.md                  |  5 ++++
 .../drop-list/drag-operator.service.ts        | 23 ++++++++++++-------
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/docs/release-notes-common.md b/docs/release-notes-common.md
index 7d8d0cee4..d920506ac 100644
--- a/docs/release-notes-common.md
+++ b/docs/release-notes-common.md
@@ -1,5 +1,10 @@
 Allgemein
 =========
+## editor/2.4.4+player/2.4.4
+## Änderungen
+- Ablegeliste:
+  - Ersetzte (aka Verdrängen) Elemente ignorieren Listenverbindungen
+
 ## editor/2.4.3+player/2.4.3
 ### Fehlerbehebungen
 - Ablegeliste:
diff --git a/projects/common/components/input-elements/drop-list/drag-operator.service.ts b/projects/common/components/input-elements/drop-list/drag-operator.service.ts
index 03c85bbc8..5f2616a99 100644
--- a/projects/common/components/input-elements/drop-list/drag-operator.service.ts
+++ b/projects/common/components/input-elements/drop-list/drag-operator.service.ts
@@ -10,6 +10,7 @@ export class DragOperatorService {
   dropLists: { [id: string]: DropListComponent } = {};
   dragOperation: DragOperation | undefined;
 
+
   registerComponent(comp: DropListComponent): void {
     this.dropLists[comp.elementModel.id] = comp;
   }
@@ -200,16 +201,21 @@ export class DragOperatorService {
   static isDropAllowed(draggedItem: DragNDropValueObject | undefined,
                        sourceList: DropListComponent,
                        targetList: DropListComponent,
-                       allLists: { [id: string]: DropListComponent }): boolean {
-    return (sourceList.elementModel.id === targetList.elementModel.id && sourceList.elementModel.isSortList) ||
-      (DragOperatorService.checkConnected(sourceList, targetList) &&
+                       allLists: { [id: string]: DropListComponent },
+                       ignoreConnection: boolean = false): boolean {
+    return DragOperatorService.checkIsSourceList(sourceList, targetList) &&
+      DragOperatorService.checkConnected(sourceList, targetList, ignoreConnection) &&
       DragOperatorService.checkOnlyOneItem(targetList, allLists) &&
-      DragOperatorService.checkAddForeignItemToCopyList(draggedItem, targetList));
+      DragOperatorService.checkAddForeignItemToCopyList(draggedItem, targetList);
+  }
+
+  private static checkIsSourceList(sourceList: DropListComponent, targetList: DropListComponent): boolean {
+    return (sourceList.elementModel.id === targetList.elementModel.id && sourceList.elementModel.isSortList) ||
+      sourceList.elementModel.id !== targetList.elementModel.id;
   }
 
-  /* Drop is only allowed in connected Lists AND THE SAME LIST. */
-  private static checkConnected(sourceList: DropListComponent, targetList: DropListComponent): boolean {
-    return sourceList.elementModel.connectedTo.includes(targetList.elementModel.id);
+  private static checkConnected(sourceList: DropListComponent, targetList: DropListComponent, ignoreConnection: boolean = false): boolean {
+    return ignoreConnection || sourceList.elementModel.connectedTo.includes(targetList.elementModel.id);
   }
 
   /* Return false, when drop is not allowed */
@@ -239,7 +245,8 @@ export class DragOperatorService {
         targetList.elementFormControl.value[0],
         targetList,
         allLists[targetList.elementFormControl.value[0].originListID],
-        allLists
+        allLists,
+        true
       );
   }
 }
-- 
GitLab