2022-03-16 16:52:12 +01:00
|
|
|
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
2022-03-03 13:38:39 +01:00
|
|
|
import { Router } from '@angular/router';
|
2022-03-03 15:44:22 +01:00
|
|
|
import { AutoUnsubscribe } from 'ngx-auto-unsubscribe-decorator';
|
2022-03-12 23:09:46 +01:00
|
|
|
import { Permission, Permissions } from 'picsur-shared/dist/dto/permissions';
|
2022-03-03 15:44:22 +01:00
|
|
|
import { EUser } from 'picsur-shared/dist/entities/user.entity';
|
|
|
|
|
import { HasFailed } from 'picsur-shared/dist/types';
|
|
|
|
|
import { SnackBarType } from 'src/app/models/snack-bar-type';
|
2022-03-16 15:59:06 +01:00
|
|
|
import { PermissionService } from 'src/app/services/api/permission.service';
|
|
|
|
|
import { UserService } from 'src/app/services/api/user.service';
|
2022-03-03 15:44:22 +01:00
|
|
|
import { UtilService } from 'src/app/util/util.service';
|
2022-02-28 21:09:27 +01:00
|
|
|
|
|
|
|
|
@Component({
|
|
|
|
|
selector: 'app-header',
|
|
|
|
|
templateUrl: './header.component.html',
|
|
|
|
|
styleUrls: ['./header.component.scss'],
|
|
|
|
|
})
|
2022-03-03 15:44:22 +01:00
|
|
|
export class HeaderComponent implements OnInit {
|
2022-03-12 20:15:48 +01:00
|
|
|
private readonly logger = console;
|
|
|
|
|
|
2022-03-16 16:52:12 +01:00
|
|
|
@Input('enableHamburger') enableHamburger: boolean = false;
|
|
|
|
|
@Output('onHamburgerClick') onHamburgerClick = new EventEmitter<void>();
|
|
|
|
|
|
2022-03-03 15:44:22 +01:00
|
|
|
private currentUser: EUser | null = null;
|
2022-03-12 22:37:45 +01:00
|
|
|
private permissions: Permissions = [];
|
2022-03-03 15:44:22 +01:00
|
|
|
|
|
|
|
|
public get user() {
|
|
|
|
|
return this.currentUser;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public get isLoggedIn() {
|
|
|
|
|
return this.currentUser !== null;
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-12 22:37:45 +01:00
|
|
|
public get canLogIn() {
|
2022-03-12 23:09:46 +01:00
|
|
|
return this.permissions.includes(Permission.UserLogin);
|
2022-03-12 22:37:45 +01:00
|
|
|
}
|
|
|
|
|
|
2022-03-16 17:45:12 +01:00
|
|
|
public get canAccessSettings() {
|
|
|
|
|
return this.permissions.includes(Permission.Settings);
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 15:44:22 +01:00
|
|
|
constructor(
|
|
|
|
|
private router: Router,
|
|
|
|
|
private userService: UserService,
|
2022-03-12 22:37:45 +01:00
|
|
|
private permissionService: PermissionService,
|
2022-03-03 15:44:22 +01:00
|
|
|
private utilService: UtilService
|
|
|
|
|
) {}
|
|
|
|
|
|
|
|
|
|
ngOnInit(): void {
|
|
|
|
|
this.subscribeUser();
|
2022-03-12 22:37:45 +01:00
|
|
|
this.subscribePermissions();
|
2022-03-03 15:44:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@AutoUnsubscribe()
|
|
|
|
|
subscribeUser() {
|
2022-03-12 22:37:45 +01:00
|
|
|
return this.userService.live.subscribe((user) => {
|
2022-03-03 15:44:22 +01:00
|
|
|
this.currentUser = user;
|
|
|
|
|
});
|
|
|
|
|
}
|
2022-03-03 13:38:39 +01:00
|
|
|
|
2022-03-12 22:37:45 +01:00
|
|
|
@AutoUnsubscribe()
|
|
|
|
|
subscribePermissions() {
|
|
|
|
|
return this.permissionService.live.subscribe((permissions) => {
|
|
|
|
|
this.permissions = permissions;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-03 13:38:39 +01:00
|
|
|
doLogin() {
|
2022-03-16 22:27:03 +01:00
|
|
|
this.router.navigate(['/user/login']);
|
2022-03-03 13:38:39 +01:00
|
|
|
}
|
2022-03-03 15:44:22 +01:00
|
|
|
|
|
|
|
|
doLogout() {
|
|
|
|
|
const user = this.userService.logout();
|
|
|
|
|
if (HasFailed(user)) {
|
|
|
|
|
this.utilService.showSnackBar(user.getReason(), SnackBarType.Error);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.utilService.showSnackBar('Logout successful', SnackBarType.Success);
|
|
|
|
|
}
|
2022-03-16 17:45:12 +01:00
|
|
|
|
|
|
|
|
doSettings() {
|
|
|
|
|
this.router.navigate(['/settings']);
|
|
|
|
|
}
|
2022-03-03 13:38:39 +01:00
|
|
|
}
|