feat(navbar): implement login/logout buttons based on state
All checks were successful
CI / prettier (pull_request) Successful in 18s
CI / test-build (pull_request) Successful in 38s

This commit is contained in:
Hop In, I Have Puppies AND WiFi 2025-02-12 12:51:55 +01:00
parent 68a3c74c23
commit bfbc90414a
Signed by: jleibl
GPG Key ID: E7B6F77BF5EDB6F7
5 changed files with 56 additions and 26 deletions

View File

@ -1 +0,0 @@
<button (click)="login()">Einloggen</button>

View File

@ -7,12 +7,4 @@ import { KeycloakService } from 'keycloak-angular';
imports: [], imports: [],
templateUrl: './landing-page.component.html', templateUrl: './landing-page.component.html',
}) })
export class LandingPageComponent { export class LandingPageComponent {}
private keycloakService: KeycloakService = inject(KeycloakService);
login() {
const baseUrl = window.location.origin;
this.keycloakService.login({ redirectUri: `${baseUrl}/home` });
}
}

View File

@ -1,5 +1,4 @@
import { Component } from '@angular/core'; import { ChangeDetectionStrategy, Component } from '@angular/core';
import { RouterLink } from '@angular/router';
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
import { faMoneyBillTransfer, faCreditCard, faWallet } from '@fortawesome/free-solid-svg-icons'; import { faMoneyBillTransfer, faCreditCard, faWallet } from '@fortawesome/free-solid-svg-icons';
import { faPaypal, faGooglePay, faApplePay } from '@fortawesome/free-brands-svg-icons'; import { faPaypal, faGooglePay, faApplePay } from '@fortawesome/free-brands-svg-icons';
@ -9,11 +8,11 @@ import { faPaypal, faGooglePay, faApplePay } from '@fortawesome/free-brands-svg-
standalone: true, standalone: true,
templateUrl: './footer.component.html', templateUrl: './footer.component.html',
imports: [FontAwesomeModule], imports: [FontAwesomeModule],
changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class FooterComponent { export class FooterComponent {
currentYear: number = new Date().getFullYear(); currentYear: number = new Date().getFullYear();
// Payment method icons
faPaypal = faPaypal; faPaypal = faPaypal;
faCreditCard = faCreditCard; faCreditCard = faCreditCard;
faMoneyBillTransfer = faMoneyBillTransfer; faMoneyBillTransfer = faMoneyBillTransfer;

View File

@ -15,11 +15,22 @@
</div> </div>
<div class="hidden md:flex items-center space-x-4"> <div class="hidden md:flex items-center space-x-4">
<button @if (!isLoggedIn) {
class="cursor-pointer px-4 py-1.5 rounded bg-emerald-500 hover:bg-emerald-600 text-white text-sm font-medium transition-colors duration-200" <button
> (click)="login()"
Login class="cursor-pointer px-4 py-1.5 rounded bg-emerald-500 hover:bg-emerald-600 text-white text-sm font-medium transition-colors duration-200"
</button> >
Login
</button>
}
@if (isLoggedIn) {
<button
(click)="logout()"
class="cursor-pointer px-4 py-1.5 rounded bg-emerald-500 hover:bg-emerald-600 text-white text-sm font-medium transition-colors duration-200"
>
Logout
</button>
}
</div> </div>
<div class="md:hidden"> <div class="md:hidden">
@ -67,11 +78,22 @@
>Games</a >Games</a
> >
<div class="pt-2 space-y-2"> <div class="pt-2 space-y-2">
<button @if (!isLoggedIn) {
class="cursor-pointer w-full px-4 py-1.5 rounded bg-emerald-500 hover:bg-emerald-600 text-white text-sm font-medium transition-colors duration-200" <button
> (click)="login()"
Login class="cursor-pointer w-full px-4 py-1.5 rounded bg-emerald-500 hover:bg-emerald-600 text-white text-sm font-medium transition-colors duration-200"
</button> >
Login
</button>
}
@if (isLoggedIn) {
<button
(click)="logout()"
class="cursor-pointer w-full px-4 py-1.5 rounded bg-emerald-500 hover:bg-emerald-600 text-white text-sm font-medium transition-colors duration-200"
>
Logout
</button>
}
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,15 +1,33 @@
import { Component } from '@angular/core'; import { AsyncPipe } from '@angular/common';
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
import { RouterModule } from '@angular/router'; import { RouterModule } from '@angular/router';
import { CommonModule } from '@angular/common'; import { KeycloakService } from 'keycloak-angular';
@Component({ @Component({
selector: 'app-navbar', selector: 'app-navbar',
templateUrl: './navbar.component.html', templateUrl: './navbar.component.html',
standalone: true, standalone: true,
imports: [CommonModule, RouterModule], imports: [RouterModule, AsyncPipe],
changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class NavbarComponent { export class NavbarComponent {
isMenuOpen = false; isMenuOpen = false;
private keycloakService: KeycloakService = inject(KeycloakService);
isLoggedIn = this.keycloakService.isLoggedIn();
login() {
try {
const baseUrl = window.location.origin;
this.keycloakService.login({ redirectUri: `${baseUrl}/home` });
} catch (error) {
console.error('Login failed:', error);
}
}
logout() {
this.keycloakService.logout();
}
toggleMenu() { toggleMenu() {
this.isMenuOpen = !this.isMenuOpen; this.isMenuOpen = !this.isMenuOpen;