Newer
Older
import { DragNDropValueObject } from 'common/models/elements/label-interfaces';
import { DropListComponent } from 'common/components/input-elements/drop-list/drop-list.component';
import { DropLogic } from 'common/components/input-elements/drop-list/drop-logic';
export class DragOperation {
sourceElement: HTMLElement;
draggedItem: DragNDropValueObject;
sourceComponent: DropListComponent;
sourceIndex: number;
targetComponent: DropListComponent | undefined;
dragType: 'mouse' | 'touch';
sortingPlaceholderIndex: number | undefined;
isForeignPlaceholderActive: boolean = false;
placeholderElement: HTMLElement | undefined;
eligibleTargetListsIDs: string[]; // helper list for better performance
constructor(sourceElement: HTMLElement, sourceListComponent: DropListComponent, sourceIndex: number,
item: DragNDropValueObject, dragType: 'mouse' | 'touch',
allDropLists: { [id: string]: DropListComponent }) {
this.sourceElement = sourceElement;
this.draggedItem = item;
this.sourceComponent = sourceListComponent;
this.sourceIndex = sourceIndex;
this.dragType = dragType;
if (this.sourceComponent.elementModel.isSortList) this.sortingPlaceholderIndex = sourceIndex;
this.targetComponent = sourceListComponent;
this.eligibleTargetListsIDs = Object.values(allDropLists)
.filter(dropList => (DropLogic.isDropAllowed( // TODO performance!
sourceListComponent.elementModel.id,
allDropLists[dropList.elementModel.id].elementModel.id,
DropLogic.createDropListMocks(allDropLists))