diff --git a/web/src/app/administration/components/classification-details/classification-details.component.html b/web/src/app/administration/components/classification-details/classification-details.component.html index f11d2afad..8177c76d5 100644 --- a/web/src/app/administration/components/classification-details/classification-details.component.html +++ b/web/src/app/administration/components/classification-details/classification-details.component.html @@ -1,21 +1,26 @@
- +
- - - -
@@ -34,19 +39,23 @@
- - + +
{{lengthError}}
+
- - +
{{lengthError}}
+
@@ -55,12 +64,14 @@ @@ -69,29 +80,40 @@
- - + +
-
-
- - + + +
{{lengthError}}
diff --git a/web/src/app/administration/components/classification-details/classification-details.component.scss b/web/src/app/administration/components/classification-details/classification-details.component.scss index b38d91e91..94afd2dc9 100644 --- a/web/src/app/administration/components/classification-details/classification-details.component.scss +++ b/web/src/app/administration/components/classification-details/classification-details.component.scss @@ -1,3 +1,5 @@ +@import "src/theme/_colors.scss"; + .custom-field-row { display: flex; flex-wrap: wrap; @@ -14,3 +16,11 @@ .dropdown-menu > li { cursor: pointer; } + +input:invalid.dirty { + border-color: $invalid; +} + +div.error { + color: $invalid; +} diff --git a/web/src/app/administration/components/classification-details/classification-details.component.ts b/web/src/app/administration/components/classification-details/classification-details.component.ts index 7c6d5e8ee..5f02fe98b 100644 --- a/web/src/app/administration/components/classification-details/classification-details.component.ts +++ b/web/src/app/administration/components/classification-details/classification-details.component.ts @@ -1,6 +1,6 @@ import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core'; import { Select, Store } from '@ngxs/store'; -import { Observable, Subject } from 'rxjs'; +import { combineLatest, Observable, Subject, Subscription, timer } from 'rxjs'; import { highlight } from 'theme/animations/validation.animation'; @@ -8,7 +8,7 @@ import { RequestInProgressService } from 'app/shared/services/request-in-progres import { DomainService } from 'app/shared/services/domain/domain.service'; import { Pair } from 'app/shared/models/pair'; -import { NgForm } from '@angular/forms'; +import { NgForm, NgModel } from '@angular/forms'; import { FormsValidatorService } from 'app/shared/services/forms-validator/forms-validator.service'; import { ImportExportService } from 'app/administration/services/import-export.service'; import { map, take, takeUntil } from 'rxjs/operators'; @@ -52,9 +52,13 @@ export class ClassificationDetailsComponent implements OnInit, OnDestroy { isCreatingNewClassification: boolean = false; @ViewChild('ClassificationForm', { static: false }) classificationForm: NgForm; - toogleValidationMap = new Map(); + toggleValidationMap = new Map(); destroy$ = new Subject(); + private timeout = new Map(); + readonly lengthError = 'You have reached the maximal length'; + tooLongMap = new Map(); + constructor( private location: Location, private requestInProgressService: RequestInProgressService, @@ -233,4 +237,14 @@ export class ClassificationDetailsComponent implements OnInit, OnDestroy { }); this.location.go(this.location.path().replace(/(classifications).*/g, 'classifications')); } + + onKeyPressed(event: KeyboardEvent, model: NgModel, max: Number): void { + if (this.timeout.has(model.name)) { + this.timeout.get(model.name).unsubscribe(); + } + if (model.value.length >= max && !event.altKey && !event.ctrlKey) { + this.tooLongMap.set(model.name, true); + this.timeout.set(model.name, timer(3000).subscribe(() => this.tooLongMap.set(model.name, false))); + } + } }