99 lines
2.8 KiB
TypeScript
99 lines
2.8 KiB
TypeScript
import { HttpClient } from '@angular/common/http';
|
|
import { Component, signal } from '@angular/core';
|
|
import { Router } from '@angular/router';
|
|
import { TranslateService } from '@ngx-translate/core';
|
|
import { ToastrService } from "ngx-toastr";
|
|
import { jwtDecode } from "jwt-decode";
|
|
import { ConfigService } from '@services/config.service';
|
|
|
|
@Component({
|
|
selector: 'app-login',
|
|
templateUrl: './login.component.html',
|
|
styleUrls: ['./login.component.css'],
|
|
})
|
|
export class LoginComponent {
|
|
loginObj: any = {
|
|
"username": "",
|
|
"password": ""
|
|
};
|
|
errorMessage: string = '';
|
|
isLoading: boolean = false;
|
|
decodedToken: any;
|
|
|
|
baseUrl: string;
|
|
|
|
constructor(
|
|
private http: HttpClient,
|
|
private router: Router,
|
|
private configService: ConfigService,
|
|
private toastService: ToastrService,
|
|
private translateService: TranslateService
|
|
) {
|
|
this.baseUrl = this.configService.apiUrl;
|
|
const savedLanguage = localStorage.getItem('language') || 'es';
|
|
this.translateService.use(savedLanguage);
|
|
}
|
|
|
|
onLogin() {
|
|
this.errorMessage = '';
|
|
this.isLoading = true;
|
|
|
|
if (!this.loginObj.username || !this.loginObj.password) {
|
|
if (!this.loginObj.username) {
|
|
document.getElementById('username')?.classList.add('invalid');
|
|
} else {
|
|
document.getElementById('username')?.classList.remove('invalid');
|
|
}
|
|
|
|
if (!this.loginObj.password) {
|
|
document.getElementById('password')?.classList.add('invalid');
|
|
} else {
|
|
document.getElementById('password')?.classList.remove('invalid');
|
|
}
|
|
|
|
this.isLoading = false;
|
|
return;
|
|
}
|
|
|
|
this.http.post(`${this.baseUrl}/auth/login`, this.loginObj).subscribe({
|
|
next: (res: any) => {
|
|
if (res.token) {
|
|
localStorage.setItem('loginToken', res.token);
|
|
localStorage.setItem('refreshToken', res.refreshToken);
|
|
localStorage.setItem('username', this.loginObj.username);
|
|
|
|
this.decodedToken = jwtDecode(res.token);
|
|
localStorage.setItem('groupsView', this.decodedToken.groupsView);
|
|
|
|
this.openSnackBar(false, 'Bienvenido ' + this.loginObj.username);
|
|
this.router.navigateByUrl('/groups');
|
|
}
|
|
this.isLoading = false;
|
|
},
|
|
error: (err) => {
|
|
this.isLoading = false;
|
|
this.openSnackBar(true, 'Error al iniciar sesión: ' + err.error.message);
|
|
}
|
|
});
|
|
}
|
|
|
|
hide = signal(true);
|
|
clickEvent(event: Event) {
|
|
event.stopPropagation();
|
|
this.hide.set(!this.hide());
|
|
}
|
|
|
|
openSnackBar(isError: boolean, message: string) {
|
|
if (isError) {
|
|
this.toastService.error(message, 'Error');
|
|
} else {
|
|
this.toastService.success(message, 'Éxito');
|
|
}
|
|
}
|
|
|
|
changeLanguage(language: string) {
|
|
localStorage.setItem('language', language);
|
|
this.translateService.use(language);
|
|
}
|
|
}
|