125 lines
3.4 KiB
TypeScript
125 lines
3.4 KiB
TypeScript
import {Component, CUSTOM_ELEMENTS_SCHEMA, inject, OnInit} from '@angular/core';
|
|
import { TokenStorageService } from './services/token-storage.service';
|
|
import {MatDialog} from "@angular/material/dialog";
|
|
import {DialogComponent} from "./components/dialog/dialog.component";
|
|
import {AuthService} from "./services/auth.service";
|
|
import {Subscription} from "rxjs";
|
|
import {EventBusService} from "./_shared/event-bus.service";
|
|
import {RouterLink, RouterOutlet} from '@angular/router';
|
|
import {MatButton} from '@angular/material/button';
|
|
import {MatToolbar} from '@angular/material/toolbar';
|
|
import {MatIcon} from '@angular/material/icon';
|
|
|
|
@Component({
|
|
selector: 'app-root',
|
|
templateUrl: './app.component.html',
|
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
imports: [
|
|
RouterOutlet,
|
|
MatIcon,
|
|
MatButton,
|
|
RouterLink,
|
|
MatToolbar
|
|
],
|
|
styleUrls: ['./app.component.scss']
|
|
})
|
|
export class AppComponent implements OnInit {
|
|
readonly dialog = inject(MatDialog);
|
|
//private authService = new AuthService(provideHttpClient())
|
|
public dialogData : DialogData = {password: "", username: ""};
|
|
|
|
private roles: string[] = [];
|
|
isLoggedIn = false;
|
|
showAdminBoard = false;
|
|
showModeratorBoard = false;
|
|
username?: string;
|
|
|
|
eventBusSub?: Subscription;
|
|
private errorMessage: any;
|
|
private isLoginFailed: boolean = false;
|
|
|
|
constructor(
|
|
private storageService: TokenStorageService,
|
|
private authService: AuthService,
|
|
private eventBusService: EventBusService
|
|
) {}
|
|
|
|
ngOnInit(): void {
|
|
this.isLoggedIn = this.storageService.isLoggedIn();
|
|
|
|
if (this.isLoggedIn) {
|
|
const user = this.storageService.getUser();
|
|
this.roles = user.roles;
|
|
|
|
this.showAdminBoard = true;//this.roles.includes('ROLE_ADMIN');
|
|
this.showModeratorBoard = this.roles.includes('ROLE_MODERATOR');
|
|
|
|
this.username = user.username;
|
|
}
|
|
|
|
this.eventBusSub = this.eventBusService.on('logout', () => {
|
|
this.logout();
|
|
});
|
|
}
|
|
|
|
logout(): void {
|
|
this.authService.logout().subscribe({
|
|
next: res => {
|
|
console.log(res);
|
|
this.storageService.clean();
|
|
|
|
window.location.reload();
|
|
},
|
|
error: err => {
|
|
console.log(err);
|
|
}
|
|
});
|
|
}
|
|
|
|
openDialog(enterAnimationDuration: string, exitAnimationDuration: string) {
|
|
|
|
let dialogRef = this.dialog.open(DialogComponent, {
|
|
width: '350px',
|
|
enterAnimationDuration,
|
|
exitAnimationDuration,
|
|
data: {username: this.dialogData.username, password: this.dialogData.password}
|
|
});
|
|
|
|
dialogRef.afterClosed().subscribe(result => {
|
|
console.log('The dialog was closed');
|
|
if(result== null){
|
|
return;
|
|
}
|
|
this.dialogData = result;
|
|
|
|
this.authService.login(this.dialogData.username, this.dialogData.password).subscribe(
|
|
data => {
|
|
this.storageService.saveToken(data.accessToken);
|
|
this.storageService.saveUser(data);
|
|
|
|
this.isLoginFailed = false;
|
|
this.isLoggedIn = true;
|
|
let user = this.storageService.getUser();
|
|
this.roles = user.roles;
|
|
//this.username = user.username;
|
|
this.reloadPage();
|
|
},
|
|
err => {
|
|
this.errorMessage = err.error.message;
|
|
this.isLoginFailed = true;
|
|
}
|
|
);
|
|
});
|
|
|
|
}
|
|
reloadPage(): void {
|
|
window.location.reload();
|
|
}
|
|
|
|
}
|
|
export interface DialogData {
|
|
username: string;
|
|
password: string;
|
|
}
|
|
|