diff --git a/alfa-client/libs/admin/user/src/lib/user-form/user.formservice.ts b/alfa-client/libs/admin/user/src/lib/user-form/user.formservice.ts index 9b7cea47cd6d0c753c02546a83f9969d6e543a08..d97dee1e2b586f2a1bf01ed02059bcc31f687afd 100644 --- a/alfa-client/libs/admin/user/src/lib/user-form/user.formservice.ts +++ b/alfa-client/libs/admin/user/src/lib/user-form/user.formservice.ts @@ -32,10 +32,19 @@ import { PatchConfig, } from '@admin/keycloak-shared'; import { NavigationService } from '@alfa-client/navigation-shared'; -import { EMPTY_STRING, isLoaded, mapToResource, StateResource } from '@alfa-client/tech-shared'; +import { + checkBoxGroupsEmptyValidator, + EMPTY_STRING, + fieldEmptyValidator, + fieldInvalidValidator, + fieldLengthValidator, + isLoaded, + mapToResource, + StateResource, +} from '@alfa-client/tech-shared'; import { SnackBarService } from '@alfa-client/ui'; import { Injectable, OnDestroy } from '@angular/core'; -import { AbstractControl, FormControl, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { AbstractControl, FormControl, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { UrlSegment } from '@angular/router'; import { filter, Observable, Subscription, tap } from 'rxjs'; @@ -93,21 +102,31 @@ export class UserFormService extends KeycloakFormService<User> implements OnDest _initForm(): UntypedFormGroup { return this.formBuilder.group( { - [UserFormService.FIRST_NAME]: new FormControl(EMPTY_STRING, Validators.required), - [UserFormService.LAST_NAME]: new FormControl(EMPTY_STRING), - [UserFormService.USERNAME]: new FormControl(EMPTY_STRING), - [UserFormService.EMAIL]: new FormControl(EMPTY_STRING), - [UserFormService.CLIENT_ROLES]: this.formBuilder.group({ - [UserFormService.ADMINISTRATION_GROUP]: this.formBuilder.group({ - [UserFormService.ADMIN]: new FormControl(false), - [UserFormService.DATENBEAUFTRAGUNG]: new FormControl(false), - }), - [UserFormService.ALFA_GROUP]: this.formBuilder.group({ - [UserFormService.LOESCHEN]: new FormControl(false), - [UserFormService.USER]: new FormControl(false), - [UserFormService.POSTSTELLE]: new FormControl(false), - }), - }), + [UserFormService.FIRST_NAME]: new FormControl(EMPTY_STRING, fieldEmptyValidator(UserFormService.FIRST_NAME)), + [UserFormService.LAST_NAME]: new FormControl(EMPTY_STRING, fieldEmptyValidator(UserFormService.LAST_NAME)), + [UserFormService.USERNAME]: new FormControl(EMPTY_STRING, [fieldLengthValidator(UserFormService.USERNAME, 3, 255)]), + [UserFormService.EMAIL]: new FormControl(EMPTY_STRING, [ + fieldInvalidValidator(UserFormService.EMAIL, /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/), + ]), + [UserFormService.CLIENT_ROLES]: this.formBuilder.group( + { + [UserFormService.ADMINISTRATION_GROUP]: this.formBuilder.group({ + [UserFormService.ADMIN]: new FormControl(false), + [UserFormService.DATENBEAUFTRAGUNG]: new FormControl(false), + }), + [UserFormService.ALFA_GROUP]: this.formBuilder.group({ + [UserFormService.LOESCHEN]: new FormControl(false), + [UserFormService.USER]: new FormControl(false), + [UserFormService.POSTSTELLE]: new FormControl(false), + }), + }, + { + validators: checkBoxGroupsEmptyValidator(UserFormService.CLIENT_ROLES, [ + UserFormService.ADMINISTRATION_GROUP, + UserFormService.ALFA_GROUP, + ]), + }, + ), [UserFormService.GROUPS]: this.formBuilder.group({}), }, { updateOn: 'submit' },