diff --git a/projects/common/components/input-elements/drop-list.component.ts b/projects/common/components/input-elements/drop-list.component.ts index 3077e6b2ee55ee8b31653f4cdf2a3eb9f64ff3d1..a5b3d4563480262b8e8fa588871620d394c37da1 100644 --- a/projects/common/components/input-elements/drop-list.component.ts +++ b/projects/common/components/input-elements/drop-list.component.ts @@ -167,13 +167,18 @@ export class DropListComponent extends FormElementComponent implements OnInit { } if (DropListComponent.isReplace(event)) { - const isAlreadyInOrigin: boolean = + const isToReplaceItemAlreadyInOrigin: boolean = event.container.data.elementFormControl.value[0].originListID === event.container.data.elementModel.id; - if (!isAlreadyInOrigin) { - DropListComponent.moveBackToOrigin(event); - } else { + if (isToReplaceItemAlreadyInOrigin) { return; } + const replacedItem: DragNDropValueObject = event.container.data.elementFormControl.value.splice(0, 1)[0]; + DropListComponent.transferItem(event.previousContainer, event.container, event.previousIndex, event.currentIndex); + event.previousContainer.data.updateFormvalue(); + event.container.data.updateFormvalue(); + const originComponent = DropListComponent.dragAndDropComponents[replacedItem.originListID]; + DropListComponent.addElementToList(originComponent, replacedItem); + return; } if (DropListComponent.isCopyDrop(event)) { @@ -199,35 +204,9 @@ export class DropListComponent extends FormElementComponent implements OnInit { ); } - static moveBackToOrigin(event: CdkDragDrop<any>): void { - const originComponent = - DropListComponent.dragAndDropComponents[event.container.data.elementFormControl.value[0].originListID]; - const isIDAlreadyPresentInOrigin = - DropListComponent.isItemIDAlreadyPresent( - event.container.data.elementFormControl.value[0].id, - originComponent.elementFormControl.value); - if (!originComponent.elementModel.copyOnDrop || !isIDAlreadyPresentInOrigin) { - DropListComponent.addElementToList(originComponent, event.container.data.elementFormControl.value[0]); - } - DropListComponent.removeElementFromList(event.container.data, 0); - } - static addElementToList(listComponent: DropListComponent, element: DragNDropValueObject): void { - const targetIndex = element.originListIndex; - if (targetIndex) { - listComponent.elementFormControl.value.splice( - Math.min(listComponent.elementFormControl.value.length, element.originListIndex || 0), - 0, - element - ); - } else { - listComponent.elementFormControl.value.push(element); - } - listComponent.elementFormControl.setValue(listComponent.elementFormControl.value); - } - - static removeElementFromList(listComponent: DropListComponent, index: number): void { - listComponent.elementFormControl.value.splice(index, 1); + const targetIndex = Math.min(listComponent.elementFormControl.value.length, element.originListIndex || 0); + listComponent.elementFormControl.value.splice(targetIndex, 0, element); listComponent.elementFormControl.setValue(listComponent.elementFormControl.value); }