From 0eb14b561072ccc18689a82f2cd3defae7e4e022 Mon Sep 17 00:00:00 2001 From: rhenck <richard.henck@iqb.hu-berlin.de> Date: Tue, 30 Nov 2021 16:47:02 +0100 Subject: [PATCH] Fix dropList elements to properly handle the new value format --- .../drop-list-simple.component.ts | 37 ++++++++++++++----- .../drop-list/drop-list.component.ts | 17 +++++---- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/projects/common/ui-elements/drop-list-simple/drop-list-simple.component.ts b/projects/common/ui-elements/drop-list-simple/drop-list-simple.component.ts index 73a96e88a..dd00d7b5c 100644 --- a/projects/common/ui-elements/drop-list-simple/drop-list-simple.component.ts +++ b/projects/common/ui-elements/drop-list-simple/drop-list-simple.component.ts @@ -5,6 +5,7 @@ import { } from '@angular/cdk/drag-drop'; import { DropListSimpleElement } from './drop-list-simple'; import { FormElementComponent } from '../../directives/form-element-component.directive'; +import { DragNDropValueObject } from '../../models/uI-element'; @Component({ selector: 'app-drop-list-simple', @@ -29,17 +30,18 @@ import { FormElementComponent } from '../../directives/form-element-component.di [cdkDropListConnectedTo]="elementModel.connectedTo" [cdkDropListEnterPredicate]="onlyOneItemPredicate" (cdkDropListDropped)="drop($event)"> - <div class="item" *ngFor="let value of $any(elementModel.value)" cdkDrag + <div class="item" *ngFor="let value of $any(elementModel.value)" [style.line-height.px]="elementModel.height - 4" - [style.background-color]="elementModel.itemBackgroundColor"> + [style.background-color]="elementModel.itemBackgroundColor" + cdkDrag (cdkDragStarted)=dragStart() (cdkDragEnded)="dragEnd()"> <div *cdkDragPreview [style.font-size.px]="elementModel.fontProps.fontSize" [style.background-color]="elementModel.itemBackgroundColor"> - {{value}} + {{value.stringValue}} </div> <div class="drag-placeholder" *cdkDragPlaceholder [style.min-height.px]="elementModel.fontProps.fontSize"> </div> - {{value}} + {{value.stringValue}} </div> </div> <mat-error *ngIf="elementFormControl.errors && elementFormControl.touched" @@ -66,24 +68,39 @@ import { FormElementComponent } from '../../directives/form-element-component.di export class DropListSimpleComponent extends FormElementComponent { @Input() elementModel!: DropListSimpleElement; + bodyElement: HTMLElement = document.body; + + dragStart(): void { + this.bodyElement.classList.add('inheritCursors'); + this.bodyElement.style.cursor = 'grabbing'; + } + + dragEnd(): void { + this.bodyElement.classList.remove('inheritCursors'); + this.bodyElement.style.cursor = 'unset'; + } + drop(event: CdkDragDrop<DropListSimpleComponent>): void { if (!this.elementModel.readOnly) { if (event.previousContainer === event.container) { - moveItemInArray(event.container.data.elementModel.value as string[], event.previousIndex, event.currentIndex); + moveItemInArray(event.container.data.elementModel.value as unknown as DragNDropValueObject[], + event.previousIndex, event.currentIndex); } else { transferArrayItem( - event.previousContainer.data.elementModel.value as string[], - event.container.data.elementModel.value as string[], + event.previousContainer.data.elementModel.value as unknown as DragNDropValueObject[], + event.container.data.elementModel.value as unknown as DragNDropValueObject[], event.previousIndex, event.currentIndex ); - event.previousContainer.data.elementFormControl.setValue(event.previousContainer.data.elementModel.value); + event.previousContainer.data.elementFormControl.setValue( + (event.previousContainer.data.elementModel.value as DragNDropValueObject).id + ); } - this.elementFormControl.setValue(event.container.data.elementModel.value); + this.elementFormControl.setValue((event.container.data.elementModel.value as DragNDropValueObject).id); } } onlyOneItemPredicate = (drag: CdkDrag, drop: CdkDropList): boolean => ( - !drop.data.elementModel.onlyOneItem || drop.data.elementModel.value.length < 1 + drop.data.elementModel.value.length < 1 // TODO test? ); } diff --git a/projects/common/ui-elements/drop-list/drop-list.component.ts b/projects/common/ui-elements/drop-list/drop-list.component.ts index dc37aa5dd..8cdd16abe 100644 --- a/projects/common/ui-elements/drop-list/drop-list.component.ts +++ b/projects/common/ui-elements/drop-list/drop-list.component.ts @@ -5,6 +5,7 @@ import { } from '@angular/cdk/drag-drop'; import { DropListElement } from './drop-list'; import { FormElementComponent } from '../../directives/form-element-component.directive'; +import { DragNDropValueObject } from '../../models/uI-element'; @Component({ selector: 'app-drop-list', @@ -47,7 +48,6 @@ import { FormElementComponent } from '../../directives/form-element-component.di </div> <img *ngIf="value.imgSrcValue" [src]="value.imgSrcValue | safeResourceUrl" alt="Image Placeholder" - cdkDrag (cdkDragStarted)=dragStart() (cdkDragEnded)="dragEnd()" [style.object-fit]="'scale-down'"> </ng-container> @@ -80,7 +80,7 @@ export class DropListComponent extends FormElementComponent { bodyElement: HTMLElement = document.body; - dragStart() { + dragStart(): void { this.bodyElement.classList.add('inheritCursors'); this.bodyElement.style.cursor = 'grabbing'; } @@ -93,17 +93,20 @@ export class DropListComponent extends FormElementComponent { drop(event: CdkDragDrop<DropListComponent>): void { if (!this.elementModel.readOnly) { if (event.previousContainer === event.container) { - moveItemInArray(event.container.data.elementModel.value as string[], event.previousIndex, event.currentIndex); + moveItemInArray(event.container.data.elementModel.value as unknown as DragNDropValueObject[], + event.previousIndex, event.currentIndex); } else { transferArrayItem( - event.previousContainer.data.elementModel.value as string[], - event.container.data.elementModel.value as string[], + event.previousContainer.data.elementModel.value as unknown as DragNDropValueObject[], + event.container.data.elementModel.value as unknown as DragNDropValueObject[], event.previousIndex, event.currentIndex ); - event.previousContainer.data.elementFormControl.setValue(event.previousContainer.data.elementModel.value); + event.previousContainer.data.elementFormControl.setValue( + (event.previousContainer.data.elementModel.value as DragNDropValueObject).id + ); } - this.elementFormControl.setValue(event.container.data.elementModel.value); + this.elementFormControl.setValue((event.container.data.elementModel.value as DragNDropValueObject).id); } } -- GitLab