Files
trouvetonprofile/src/app/shared/features/login/login.component.ts
2025-11-17 13:06:50 +01:00

99 lines
3.0 KiB
TypeScript

import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';
import { Router, RouterLink } from '@angular/router';
import { FormBuilder, FormControl, ReactiveFormsModule, Validators } from '@angular/forms';
import { AuthService } from '@app/core/services/authentication/auth.service';
import { LoginDto } from '@app/shared/models/login-dto';
import { UntilDestroy } from '@ngneat/until-destroy';
import { User } from '@app/domain/users/user.model';
import { ToastrService } from 'ngx-toastr';
import { ProgressBarModule } from 'primeng/progressbar';
@Component({
selector: 'app-login',
standalone: true,
imports: [RouterLink, ProgressBarModule, ReactiveFormsModule],
changeDetection: ChangeDetectionStrategy.OnPush,
templateUrl: './login.component.html',
styleUrl: './login.component.scss',
})
@UntilDestroy()
export class LoginComponent {
private authService = inject(AuthService);
private readonly toastrService = inject(ToastrService);
private formBuilder = inject(FormBuilder);
private router = inject(Router);
loginForm = this.formBuilder.group({
email: new FormControl('', [Validators.required, Validators.email]),
password: new FormControl('', Validators.required),
});
formSubmitted = output<any>();
protected isLoading = signal<boolean>(false);
onSubmit() {
if (this.loginForm.invalid) {
return;
}
this.isLoading.set(true);
this.loginForm.disable();
const data = this.loginForm.getRawValue() as LoginDto;
this.formSubmitted.emit(data);
this.login(data);
}
login(loginDto: LoginDto) {
this.authService
.login(loginDto)
.then((res) => {
this.loginForm.patchValue({ password: '' });
this.loginForm.enable();
this.isLoading.set(false);
if (!res.isValid) {
this.toastrService.info(
'Vous devez vérifier votre adresse e-mail avant de vous connecter.',
'Information de connexion',
{
closeButton: true,
progressAnimation: 'decreasing',
progressBar: true,
}
);
return;
}
if (res.isValid) {
this.toastrService.success(
`Bienvenue ${res.record.name ? res.record.name : res.record.email}!`,
`Connexion`,
{
closeButton: true,
progressAnimation: 'decreasing',
progressBar: true,
}
);
this.router.navigate(['/my-profile'], { state: { user: res.record as User } });
}
})
.catch((error) => {
this.loginForm.patchValue({ password: '' });
this.loginForm.enable();
this.isLoading.set(false);
this.toastrService.error(
'Identifiants incorrects. Veuillez réessayer.',
'Erreur de connexion',
{
closeButton: true,
progressAnimation: 'decreasing',
progressBar: true,
}
);
});
}
}