import {Component} from '@angular/core'; import {MenuItem} from 'primeng/api'; import {MenubarModule} from 'primeng/menubar'; import {ToastModule} from 'primeng/toast'; import {Author} from '../../models/author'; import {AuthService} from '../../auth.service'; import {Role} from '../../models/role' @Component({ selector: 'app-header', standalone: true, imports: [ MenubarModule, ToastModule ], templateUrl: './header.component.html', styleUrls: ['./header.component.css'] }) export class HeaderComponent { actualAuthor: Author | undefined; items: MenuItem[] = []; constructor(private authService: AuthService) { this.initializeMenu(); } private initializeMenu(): void { const authenticatedAuthor = this.authService.getAuthenticatedAuthor(); if (!(this.authService.isSessionExpired()) && this.authService.isAuthenticated() && authenticatedAuthor) { this.actualAuthor = authenticatedAuthor; } if (this.actualAuthor) { this.items = this.getMenuForAuthor(this.actualAuthor); } else { this.items = this.getDefaultMenu(); } } private getMenuForAuthor(author: Author): MenuItem[] { const commonItems: MenuItem[] = [ { label: 'Accueil', icon: 'pi pi-home', routerLink: '/' } ]; if (author.role === Role.WRITER) { return [ ...commonItems, this.getWriterMenu(), this.getUserMenu(author) ]; } else if (author.role === Role.ADMIN) { return [ ...commonItems, this.getAdminMenu(), this.getUserMenu(author) ]; } else if (author.role === Role.READER) { return [ ...commonItems, this.getUserMenu(author) ]; } return commonItems; } private getWriterMenu(): MenuItem { return { label: 'Mes posts', icon: 'pi pi-file-edit', items: [ { label: 'Ajouter un post', icon: 'pi pi-plus', routerLink: '/new-post' }, { label: 'Voir mes posts', icon: 'pi pi-eye', routerLink: '/my-posts' } ] }; } private getAdminMenu(): MenuItem { return { label: 'Administration', icon: 'pi pi-cog', items: [ { label: 'Gérer les posts', icon: 'pi pi-file', routerLink: '/admin/posts' }, { label: 'Gérer les auteurs', icon: 'pi pi-users', routerLink: '/admin/authors' } ] }; } private getUserMenu(author: Author): MenuItem { return { label: 'MOI', icon: 'pi pi-user', items: [ { label: 'Voir mon profil', icon: 'pi pi-user', routerLink: [`/profile`, `${author.id}`] }, { label: 'Se déconnecter', icon: 'pi pi-sign-out', routerLink: '/logout' } ] }; } private getDefaultMenu(): MenuItem[] { return [ { label: 'Accueil', icon: 'pi pi-home', routerLink: '/' }, { label: "S'authentifier", icon: 'pi pi-sign-in', items: [ { label: 'Se connecter', icon: 'pi pi-sign-in', routerLink: '/login' }, { label: "S'inscrire", icon: 'pi pi-user-plus', routerLink: '/register' } ] } ]; } }