From db3b0691777e65152e729d5025ad9e9398d9c0a6 Mon Sep 17 00:00:00 2001
From: jojohoch <joachim.hoch@iqb.hu-berlin.de>
Date: Fri, 1 Oct 2021 09:36:43 +0200
Subject: [PATCH] Use default validator in `FormElementComponent`

Overridden by some child elements (TextField, CheckBox)
---
 .../compound-components/correction.component.ts       |  9 ---------
 .../common/element-components/dropdown.component.ts   |  9 ---------
 .../radio-button-group.component.ts                   |  9 ---------
 .../common/element-components/text-area.component.ts  |  9 ---------
 projects/common/form-element-component.directive.ts   | 11 +++++++++--
 5 files changed, 9 insertions(+), 38 deletions(-)

diff --git a/projects/common/element-components/compound-components/correction.component.ts b/projects/common/element-components/compound-components/correction.component.ts
index 459f5b025..743d76323 100644
--- a/projects/common/element-components/compound-components/correction.component.ts
+++ b/projects/common/element-components/compound-components/correction.component.ts
@@ -1,5 +1,4 @@
 import { Component } from '@angular/core';
-import { ValidatorFn, Validators } from '@angular/forms';
 import { CompoundElementCorrection } from '../../unit';
 import { FormElementComponent } from '../../form-element-component.directive';
 
@@ -33,12 +32,4 @@ import { FormElementComponent } from '../../form-element-component.directive';
 })
 export class CorrectionComponent extends FormElementComponent {
   elementModel!: CompoundElementCorrection;
-
-  get validators(): ValidatorFn[] {
-    const validators: ValidatorFn[] = [];
-    if (this.elementModel.required) {
-      validators.push(Validators.required);
-    }
-    return validators;
-  }
 }
diff --git a/projects/common/element-components/dropdown.component.ts b/projects/common/element-components/dropdown.component.ts
index 50a0cfecb..626e98205 100644
--- a/projects/common/element-components/dropdown.component.ts
+++ b/projects/common/element-components/dropdown.component.ts
@@ -1,5 +1,4 @@
 import { Component } from '@angular/core';
-import { ValidatorFn, Validators } from '@angular/forms';
 import { DropdownElement } from '../unit';
 import { FormElementComponent } from '../form-element-component.directive';
 
@@ -32,12 +31,4 @@ import { FormElementComponent } from '../form-element-component.directive';
 })
 export class DropdownComponent extends FormElementComponent {
   elementModel!: DropdownElement;
-
-  get validators(): ValidatorFn[] {
-    const validators: ValidatorFn[] = [];
-    if (this.elementModel.required) {
-      validators.push(Validators.required);
-    }
-    return validators;
-  }
 }
diff --git a/projects/common/element-components/radio-button-group.component.ts b/projects/common/element-components/radio-button-group.component.ts
index 01341c0d6..ca91b333c 100644
--- a/projects/common/element-components/radio-button-group.component.ts
+++ b/projects/common/element-components/radio-button-group.component.ts
@@ -1,5 +1,4 @@
 import { Component } from '@angular/core';
-import { ValidatorFn, Validators } from '@angular/forms';
 import { RadioButtonGroupElement } from '../unit';
 import { FormElementComponent } from '../form-element-component.directive';
 
@@ -34,12 +33,4 @@ import { FormElementComponent } from '../form-element-component.directive';
 })
 export class RadioButtonGroupComponent extends FormElementComponent {
   elementModel!: RadioButtonGroupElement;
-
-  get validators(): ValidatorFn[] {
-    const validators: ValidatorFn[] = [];
-    if (this.elementModel.required) {
-      validators.push(Validators.required);
-    }
-    return validators;
-  }
 }
diff --git a/projects/common/element-components/text-area.component.ts b/projects/common/element-components/text-area.component.ts
index f2360c6b3..7dd9ad5fc 100644
--- a/projects/common/element-components/text-area.component.ts
+++ b/projects/common/element-components/text-area.component.ts
@@ -1,5 +1,4 @@
 import { Component, Output, EventEmitter } from '@angular/core';
-import { ValidatorFn, Validators } from '@angular/forms';
 import { TextAreaElement } from '../unit';
 import { FormElementComponent } from '../form-element-component.directive';
 
@@ -33,12 +32,4 @@ export class TextAreaComponent extends FormElementComponent {
   @Output() onFocus = new EventEmitter<HTMLElement>();
   @Output() onBlur = new EventEmitter<HTMLElement>();
   elementModel!: TextAreaElement;
-
-  get validators(): ValidatorFn[] {
-    const validators: ValidatorFn[] = [];
-    if (this.elementModel.required) {
-      validators.push(Validators.required);
-    }
-    return validators;
-  }
 }
diff --git a/projects/common/form-element-component.directive.ts b/projects/common/form-element-component.directive.ts
index f3933d831..d6581bd7b 100644
--- a/projects/common/form-element-component.directive.ts
+++ b/projects/common/form-element-component.directive.ts
@@ -2,7 +2,7 @@ import {
   Directive, EventEmitter, OnDestroy, OnInit, Output
 } from '@angular/core';
 import {
-  FormControl, FormGroup, ValidatorFn
+  FormControl, FormGroup, ValidatorFn, Validators
 } from '@angular/forms';
 import { Subject } from 'rxjs';
 import { pairwise, startWith, takeUntil } from 'rxjs/operators';
@@ -17,7 +17,6 @@ export abstract class FormElementComponent extends ElementComponent implements O
   parentForm!: FormGroup;
   defaultValue!: string | number | boolean | undefined;
   elementFormControl!: FormControl;
-  abstract validators: ValidatorFn[];
 
   private ngUnsubscribe = new Subject<void>();
 
@@ -51,6 +50,14 @@ export abstract class FormElementComponent extends ElementComponent implements O
       });
   }
 
+  get validators(): ValidatorFn[] {
+    const validators: ValidatorFn[] = [];
+    if (this.elementModel.required) {
+      validators.push(Validators.required);
+    }
+    return validators;
+  }
+
   private get formControl(): FormControl {
     // workaround for editor
     return (this.parentForm) ?
-- 
GitLab