feat(navbar): implement login/logout buttons based on state
This commit is contained in:
		
					parent
					
						
							
								325bc118ee
							
						
					
				
			
			
				commit
				
					
						e5bd173be9
					
				
			
		
					 5 changed files with 57 additions and 16 deletions
				
			
		| 
						 | 
				
			
			@ -1,5 +1,4 @@
 | 
			
		|||
import { Component } from '@angular/core';
 | 
			
		||||
import { RouterLink } from '@angular/router';
 | 
			
		||||
import { ChangeDetectionStrategy, Component } from '@angular/core';
 | 
			
		||||
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
 | 
			
		||||
import { faMoneyBillTransfer, faCreditCard, faWallet } from '@fortawesome/free-solid-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,
 | 
			
		||||
  templateUrl: './footer.component.html',
 | 
			
		||||
  imports: [FontAwesomeModule],
 | 
			
		||||
  changeDetection: ChangeDetectionStrategy.OnPush,
 | 
			
		||||
})
 | 
			
		||||
export class FooterComponent {
 | 
			
		||||
  currentYear: number = new Date().getFullYear();
 | 
			
		||||
 | 
			
		||||
  // Payment method icons
 | 
			
		||||
  faPaypal = faPaypal;
 | 
			
		||||
  faCreditCard = faCreditCard;
 | 
			
		||||
  faMoneyBillTransfer = faMoneyBillTransfer;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,11 +15,22 @@
 | 
			
		|||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div class="hidden md:flex items-center space-x-4">
 | 
			
		||||
        <button
 | 
			
		||||
          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"
 | 
			
		||||
        >
 | 
			
		||||
          Login
 | 
			
		||||
        </button>
 | 
			
		||||
        @if (!isLoggedIn) {
 | 
			
		||||
          <button
 | 
			
		||||
            (click)="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"
 | 
			
		||||
          >
 | 
			
		||||
            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 class="md:hidden">
 | 
			
		||||
| 
						 | 
				
			
			@ -67,11 +78,22 @@
 | 
			
		|||
          >Games</a
 | 
			
		||||
        >
 | 
			
		||||
        <div class="pt-2 space-y-2">
 | 
			
		||||
          <button
 | 
			
		||||
            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"
 | 
			
		||||
          >
 | 
			
		||||
            Login
 | 
			
		||||
          </button>
 | 
			
		||||
          @if (!isLoggedIn) {
 | 
			
		||||
            <button
 | 
			
		||||
              (click)="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"
 | 
			
		||||
            >
 | 
			
		||||
              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>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 { CommonModule } from '@angular/common';
 | 
			
		||||
import { KeycloakService } from 'keycloak-angular';
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-navbar',
 | 
			
		||||
  templateUrl: './navbar.component.html',
 | 
			
		||||
  standalone: true,
 | 
			
		||||
  imports: [CommonModule, RouterModule],
 | 
			
		||||
  imports: [RouterModule, AsyncPipe],
 | 
			
		||||
  changeDetection: ChangeDetectionStrategy.OnPush,
 | 
			
		||||
})
 | 
			
		||||
export class NavbarComponent {
 | 
			
		||||
  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() {
 | 
			
		||||
    this.isMenuOpen = !this.isMenuOpen;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue