diff --git a/frontend/src/app/pages/header/header/header.component.html b/frontend/src/app/pages/header/header/header.component.html
index edd63f4..6cc8e61 100644
--- a/frontend/src/app/pages/header/header/header.component.html
+++ b/frontend/src/app/pages/header/header/header.component.html
@@ -130,7 +130,19 @@
Blog
+
+ Special
+
+
+
+
+
diff --git a/frontend/src/app/pages/header/header/header.component.ts b/frontend/src/app/pages/header/header/header.component.ts
index 89f3986..21d1d29 100644
--- a/frontend/src/app/pages/header/header/header.component.ts
+++ b/frontend/src/app/pages/header/header/header.component.ts
@@ -1,7 +1,12 @@
-import {Component, HostListener, Input} from '@angular/core';
+import {Component, HostListener, Input, OnDestroy, OnInit} from '@angular/core';
import {CommonModule, NgOptimizedImage} from '@angular/common';
import {ThemeComponent} from '@shared-components/theme/theme.component';
import {RouterLink} from '@angular/router';
+import {AuthService} from '@services/auth.service';
+import {Subscription} from 'rxjs';
+import {LoginDialogComponent} from '@shared-components/login/login.component';
+import {MatButton} from '@angular/material/button';
+import {MatDialog} from '@angular/material/dialog';
@Component({
standalone: true,
@@ -9,13 +14,14 @@ import {RouterLink} from '@angular/router';
CommonModule,
ThemeComponent,
RouterLink,
- NgOptimizedImage
+ NgOptimizedImage,
+ MatButton
],
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.scss']
})
-export class HeaderComponent {
+export class HeaderComponent implements OnInit, OnDestroy {
@Input() current_page: string = '';
@Input() background_image: string = '';
@Input() height: string = '';
@@ -23,6 +29,24 @@ export class HeaderComponent {
public active: string = '';
public inverseYPos: number = 0;
+ private subscription: Subscription | undefined;
+ public isAuthenticated: boolean = false;
+
+ constructor(protected authService: AuthService,
+ private dialog: MatDialog) {
+
+ }
+
+ ngOnInit(): void {
+ this.subscription = this.authService.isAuthenticated$.subscribe(isAuthenticated => {
+ this.isAuthenticated = isAuthenticated;
+ }
+ );
+ }
+
+ ngOnDestroy(): void {
+ this.subscription?.unsubscribe();
+ }
@HostListener('window:scroll', [])
onWindowScroll(): void {
@@ -59,4 +83,17 @@ export class HeaderComponent {
return '';
}
}
+
+ public openLoginDialog() {
+ const dialogRef = this.dialog.open(LoginDialogComponent, {
+ width: '400px',
+ })
+ dialogRef.afterClosed().subscribe(result => {
+ console.log(result);
+ });
+ }
+
+ public hasAccess(claims: string[]): boolean {
+ return this.authService.hasAccess(claims)
+ }
}
diff --git a/frontend/src/app/services/auth.service.ts b/frontend/src/app/services/auth.service.ts
index 114dbed..d7af5d6 100644
--- a/frontend/src/app/services/auth.service.ts
+++ b/frontend/src/app/services/auth.service.ts
@@ -112,4 +112,8 @@ export class AuthService {
const claims = this.userClaimsSubject.getValue();
return claims?.authorizations || [];
}
+
+ public hasAccess(authorization: string[]): boolean {
+ return this.getUserAuthorizations().filter(entry => authorization.includes(entry)).length > 0;
+ }
}
diff --git a/frontend/src/app/shared-components/login/login.component.html b/frontend/src/app/shared-components/login/login.component.html
index 3c8865a..81ef567 100644
--- a/frontend/src/app/shared-components/login/login.component.html
+++ b/frontend/src/app/shared-components/login/login.component.html
@@ -3,10 +3,19 @@
diff --git a/frontend/src/app/shared-components/login/login.component.ts b/frontend/src/app/shared-components/login/login.component.ts
index f729541..76e63f1 100644
--- a/frontend/src/app/shared-components/login/login.component.ts
+++ b/frontend/src/app/shared-components/login/login.component.ts
@@ -65,7 +65,23 @@ export class LoginDialogComponent {
});
}
- public formHasError() {
- return this.loginForm.get('code')?.hasError('required');
+ onKeyDown(event: KeyboardEvent): void {
+ if (event.key.length === 1 && event.key >= 'a' && event.key <= 'z') {
+ event.preventDefault();
+ const input = event.target as HTMLInputElement;
+ const start = input.selectionStart || 0;
+ const end = input.selectionEnd || 0;
+
+ const value = this.loginForm.get('code')?.value || '';
+ const newValue =
+ value.substring(0, start) +
+ event.key.toUpperCase() +
+ value.substring(end);
+
+ this.loginForm.get('code')?.setValue(newValue);
+ setTimeout(() => {
+ input.setSelectionRange(start + 1, start + 1);
+ });
+ }
}
}