import { HttpClient } from '@angular/common/http'; import { Component, Inject, signal } from '@angular/core'; import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'; import { RouterLink } from '@angular/router'; import { apiErrorMessage } from '../shared/api-error'; import { API_BASE_URL } from '../shared/api-base-url'; @Component({ selector: 'app-register', imports: [ReactiveFormsModule, RouterLink], template: `

Registrieren

@if (message()) {

{{ message() }}

}
Zum Login
`, }) export class RegisterComponent { readonly loading = signal(false); readonly failed = signal(false); readonly message = signal(''); readonly form; constructor( private readonly fb: FormBuilder, private readonly http: HttpClient, @Inject(API_BASE_URL) private readonly apiBaseUrl: string, ) { this.form = this.fb.nonNullable.group({ username: ['', [Validators.required, Validators.minLength(3), Validators.pattern(/^[a-zA-Z0-9._-]+$/)]], displayName: ['', Validators.required], email: ['', [Validators.required, Validators.email]], password: ['', [Validators.required, Validators.minLength(12)]], }); } submit(): void { if (this.form.invalid) { return; } this.loading.set(true); this.failed.set(false); this.message.set(''); this.http.post<{ message: string }>(`${this.apiBaseUrl}/registration`, this.form.getRawValue()).subscribe({ next: (response) => this.message.set(response.message), error: (error) => { this.failed.set(true); this.message.set(apiErrorMessage(error)); this.loading.set(false); }, complete: () => this.loading.set(false), }); } }