From ceb4315ee900df1fc49a2209473539fea39a5231 Mon Sep 17 00:00:00 2001
From: jojohoch <joachim.hoch@iqb.hu-berlin.de>
Date: Wed, 31 Aug 2022 10:09:41 +0200
Subject: [PATCH] [player] Show validation errors of spell simple drop lists

---
 .../drop-list-simple.component.ts             | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/projects/common/components/compound-elements/cloze/cloze-child-elements/drop-list-simple.component.ts b/projects/common/components/compound-elements/cloze/cloze-child-elements/drop-list-simple.component.ts
index 9572684a7..eff311957 100644
--- a/projects/common/components/compound-elements/cloze/cloze-child-elements/drop-list-simple.component.ts
+++ b/projects/common/components/compound-elements/cloze/cloze-child-elements/drop-list-simple.component.ts
@@ -14,6 +14,7 @@ import { DragNDropValueObject } from 'common/models/elements/element';
     <div class="list-container">
         <!-- Border width is a workaround to enable/disable the Material cdk-drop-list-receiving class style.-->
       <div class="list"
+           [class.errors]="elementFormControl.errors && elementFormControl.touched"
            [class.dropList-highlight]="elementModel.highlightReceivingDropList"
            [style.border-color]="elementModel.highlightReceivingDropListColor"
            [style.border-width.px]="elementModel.highlightReceivingDropList ? 2 : 0"
@@ -24,6 +25,8 @@ import { DragNDropValueObject } from 'common/models/elements/element';
            [style.font-style]="elementModel.styling.italic ? 'italic' : ''"
            [style.text-decoration]="elementModel.styling.underline ? 'underline' : ''"
            [style.backgroundColor]="elementModel.styling.backgroundColor"
+           [matTooltip]="elementFormControl.errors && elementFormControl.touched ?
+                         (elementFormControl.errors | errorTransform: elementModel) : ''"
            cdkDropList
            [id]="elementModel.id"
            [cdkDropListData]="this"
@@ -62,10 +65,6 @@ import { DragNDropValueObject } from 'common/models/elements/element';
           </div>
         </ng-template>
       </div>
-      <mat-error *ngIf="elementFormControl.errors && elementFormControl.touched"
-                 class="error-message">
-        {{elementFormControl.errors | errorTransform: elementModel}}
-      </mat-error>
     </div>
   `,
   styles: [
@@ -74,6 +73,7 @@ import { DragNDropValueObject } from 'common/models/elements/element';
     '.item {border-radius: 5px; padding: 0 5px; height: 100%; text-align: center;}',
     '.item:not(:last-child) {margin-bottom: 5px;}',
     '.item:active {cursor: grabbing}',
+    '.errors {border: 2px solid #f44336 !important;}',
     '.error-message {font-size: 75%; margin-top: 10px;}',
     '.cdk-drag-preview {padding: 8px 20px; border-radius: 10px}',
     '.drag-placeholder {background-color: lightgrey; border: dotted 3px #999;}',
@@ -81,7 +81,10 @@ import { DragNDropValueObject } from 'common/models/elements/element';
     '.cdk-drag-animating {transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);}',
 
     '.dropList-highlight.cdk-drop-list-receiving {border: solid;}',
-    '.dropList-highlight.cdk-drop-list-dragging {border: solid;}'
+    '.dropList-highlight.cdk-drop-list-dragging {border: solid;}',
+
+    '::ng-deep .mat-tooltip {border: 1px solid #f44336; margin-top: 8px !important;}',
+    '::ng-deep .mat-tooltip {background-color: white; color: #f44336 !important;}'
   ]
 })
 export class DropListSimpleComponent extends FormElementComponent {
@@ -103,10 +106,12 @@ export class DropListSimpleComponent extends FormElementComponent {
     if (!this.elementModel.readOnly) {
       if (event.previousContainer === event.container) {
         moveItemInArray(event.container.data.elementFormControl.value as unknown as DragNDropValueObject[],
-          event.previousIndex, event.currentIndex);
+          event.previousIndex,
+          event.currentIndex);
         this.elementFormControl.setValue(
           (event.container.data.elementFormControl.value as DragNDropValueObject[])
         );
+        event.container.data.elementFormControl.markAsTouched();
       } else {
         transferArrayItem(
           event.previousContainer.data.elementFormControl.value as unknown as DragNDropValueObject[],
@@ -121,6 +126,8 @@ export class DropListSimpleComponent extends FormElementComponent {
       this.elementFormControl.setValue(
         (event.container.data.elementFormControl.value as DragNDropValueObject[])
       );
+      event.container.data.elementFormControl.markAsTouched();
+      event.previousContainer.data.elementFormControl.markAsTouched();
     }
   }
 
-- 
GitLab