2026-02-17 13:02:28 +01:00

86 lines
3.3 KiB
TypeScript

import {Component, inject, OnInit} from '@angular/core';
import {ActivatedRoute} from "@angular/router";
import {ToastrService} from "ngx-toastr";
import {AuthenticationService} from "../../services/authentication.service";
import {FormControl, FormGroup, Validators} from "@angular/forms";
import {PasswordValidators} from "../../helpers/passwordValidators";
import {RegisterUserModel} from "../../models/registerUser.model";
import {environment} from "../../../environments/environment";
@Component({
selector: 'app-register',
templateUrl: './register.component.html',
styleUrl: './register.component.css',
standalone: false
})
export class RegisterComponent implements OnInit {
private readonly _activatedRoute: ActivatedRoute = inject(ActivatedRoute);
private readonly _toastr: ToastrService = inject(ToastrService);
private readonly _authenticationService: AuthenticationService = inject(AuthenticationService);
public showError: boolean = false;
public showSuccess: boolean = false;
public registerForm: FormGroup | undefined;
isInputText: boolean = false;
playerName: string = "";
ngOnInit() {
const role = this._activatedRoute.snapshot.queryParams['role'];
const allianceId = this._activatedRoute.snapshot.queryParams['allianceId'];
const email = this._activatedRoute.snapshot.queryParams['email'];
if (!role || !email || !allianceId) {
this.showError = true;
return;
}
this.createRegisterForm(role, email, allianceId);
}
get f() {
return this.registerForm!.controls;
}
createRegisterForm(role: string, email: string, allianceId: string) {
this.registerForm = new FormGroup({
email: new FormControl<string>(email, [Validators.required, Validators.email]),
allianceId: new FormControl<string>(allianceId, [Validators.required]),
roleId: new FormControl(role, [Validators.required]),
playerName: new FormControl<string>('', [Validators.required]),
confirmPassword: new FormControl<string>('', [Validators.required]),
password: new FormControl<string>('', Validators.compose([
Validators.required,
PasswordValidators.patternValidator(new RegExp("(?=.*[0-9])"), {hasNumber: true}),
PasswordValidators.patternValidator(new RegExp("(?=.*[A-Z])"), {hasCapitalCase: true}),
PasswordValidators.patternValidator(new RegExp("(?=.*[a-z])"), {hasSmallCase: true}),
PasswordValidators.patternValidator(new RegExp("(?=.*[$@^!%*?&+])"), {hasSpecialCharacters: true}),
Validators.minLength(8)
]))
}, {
validators: PasswordValidators.passwordMatch('password', 'confirmPassword')
});
}
onSubmit() {
this.playerName = this.registerForm?.value.playerName;
const registerUserModel: RegisterUserModel = this.registerForm!.value;
registerUserModel.emailConfirmUri = environment.emailConfirmUri;
this._authenticationService.registerUser(registerUserModel).subscribe({
next: ((response) => {
if (response) {
this.playerName = registerUserModel.playerName;
this._toastr.success('Registration successful', 'Register');
this.showSuccess = true;
}
}),
error: ((error) => {
console.log(error);
this._toastr.error(error.error.name ?? 'Registration failed', 'Register');
})
});
}
}