Files
Picsur/frontend/src/app/components/header/header.component.ts

87 lines
2.5 KiB
TypeScript
Raw Normal View History

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';
import { Permission } from 'picsur-shared/dist/dto/permissions.dto';
2022-03-03 15:44:22 +01:00
import { EUser } from 'picsur-shared/dist/entities/user.entity';
import { HasFailed } from 'picsur-shared/dist/types';
2022-04-20 22:22:50 +02:00
import { SnackBarType } from 'src/app/models/dto/snack-bar-type.dto';
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-04-18 14:46:52 +02:00
import { UtilService } from 'src/app/util/util-module/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-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-04-20 22:22:50 +02:00
public canLogIn: boolean = false;
public canAccessSettings: boolean = false;
public canUpload: boolean = false;
public canRegister: boolean = false;
2022-03-03 15:44:22 +01:00
public get user() {
return this.currentUser;
}
public get isLoggedIn() {
return this.currentUser !== null;
}
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) => {
2022-04-20 22:22:50 +02:00
this.canLogIn = permissions.includes(Permission.UserLogin);
this.canAccessSettings = permissions.includes(Permission.Settings);
this.canUpload = permissions.includes(Permission.ImageUpload);
this.canRegister = permissions.includes(Permission.UserRegister);
2022-03-12 22:37:45 +01:00
});
}
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
2022-03-23 17:17:39 +01:00
async doLogout() {
const user = await this.userService.logout();
2022-03-03 15:44:22 +01:00
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-04-20 22:22:50 +02:00
doUpload() {
this.router.navigate(['/upload']);
}
2022-03-03 13:38:39 +01:00
}