import {Component, inject} from '@angular/core'; import {FormBuilder, ReactiveFormsModule, Validators} from '@angular/forms'; import {MatFormFieldModule} from '@angular/material/form-field'; import {MatInputModule} from '@angular/material/input'; import {MatButtonModule} from '@angular/material/button'; import {MatIconModule} from '@angular/material/icon'; import {MatButtonToggleModule} from '@angular/material/button-toggle'; import {AuthenticationService, RegistrationRequest, UserProfileResponse} from '../../api'; import {RouterLink} from '@angular/router'; import ParticipantTypeEnum = UserProfileResponse.ParticipantTypeEnum; @Component({ selector: 'app-register', standalone: true, imports: [ ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule, MatButtonToggleModule, RouterLink ], templateUrl: './register.html', styleUrls: ['./register.scss'] }) export class Register { private fb = inject(FormBuilder); private authService = inject(AuthenticationService); // Für die Toggle-Buttons im Template readonly ParticipantType = RegistrationRequest.ParticipantTypeEnum; registeredSuccessfully = false; accountForm = this.fb.group({ participantType: this.fb.control( RegistrationRequest.ParticipantTypeEnum.Private, {nonNullable: true, validators: Validators.required} ), organizationName: [''], firstName: ['', Validators.required], lastName: ['', Validators.required], email: ['', [Validators.required, Validators.email]], password: ['', [Validators.required, Validators.minLength(8)]] }); constructor() { this.accountForm.get('participantType')!.valueChanges.subscribe(type => { const orgControl = this.accountForm.get('organizationName')!; if (type === RegistrationRequest.ParticipantTypeEnum.Company) { orgControl.setValidators([Validators.required]); } else { orgControl.clearValidators(); } orgControl.updateValueAndValidity(); }); } get isCompany(): boolean { return this.accountForm.value.participantType === RegistrationRequest.ParticipantTypeEnum.Company; } onSubmit() { if (this.accountForm.invalid) { this.accountForm.markAllAsTouched(); return; } const registrationData: RegistrationRequest = { participantType: this.accountForm.value.participantType!, firstName: this.accountForm.value.firstName!, lastName: this.accountForm.value.lastName!, organizationName: this.accountForm.value.organizationName || undefined, email: this.accountForm.value.email!, password: this.accountForm.value.password! }; this.authService.register(registrationData).subscribe({ next: () => { this.registeredSuccessfully = true; }, error: () => { } }); } }