- added organizations - added industries - added logo in 2 colors for light and dark theme - improved authorization to allow multi tenancy
221 lines
10 KiB
TypeScript
221 lines
10 KiB
TypeScript
import { Component, inject } from '@angular/core';
|
|
import { CommonModule } from '@angular/common';
|
|
import { RouterModule } from '@angular/router';
|
|
import { MenuItem } from 'primeng/api';
|
|
import { AppMenuitem } from './app.menuitem';
|
|
import Keycloak from 'keycloak-js';
|
|
import { IsRoleAllowedPipe } from '@/pipes/is-role-allowed-pipe';
|
|
|
|
|
|
@Component({
|
|
selector: 'app-menu',
|
|
standalone: true,
|
|
imports: [CommonModule, AppMenuitem, RouterModule, IsRoleAllowedPipe, IsRoleAllowedPipe],
|
|
template: `
|
|
<ul class="layout-menu">
|
|
@for (rootMenuItem of model; track $index) {
|
|
<ng-container>
|
|
@if (!rootMenuItem.separator) {
|
|
@if (rootMenuItem['roles']) {
|
|
@if (rootMenuItem['roles'] | isRoleAllowed: 'any') {
|
|
<li app-menuitem [item]="rootMenuItem" [index]="$index" [root]="true"></li>
|
|
}
|
|
}
|
|
@if (!rootMenuItem['roles']) {
|
|
<li app-menuitem [item]="rootMenuItem" [index]="$index" [root]="true"></li>
|
|
}
|
|
}
|
|
|
|
@if (rootMenuItem.separator) {
|
|
<li class="menu-separator"></li>
|
|
}
|
|
</ng-container>
|
|
}
|
|
</ul>
|
|
`
|
|
})
|
|
export class AppMenu {
|
|
model: MenuItem[] = [];
|
|
protected keycloak = inject(Keycloak);
|
|
|
|
ngOnInit() {
|
|
this.model = [
|
|
{
|
|
roles: ['dev', 'user'],
|
|
label: 'Home',
|
|
items: [
|
|
{ label: 'Dashboard', icon: 'pi pi-fw pi-home', routerLink: ['/'] },
|
|
{ label: 'Projekte', icon: 'pi pi-fw pi-list', routerLink: ['/projects'], roles: ['dev', 'admin', 'can-view-projects'] },
|
|
{ label: 'Organisationen', icon: 'pi pi-fw pi-list', routerLink: ['/organizations'], roles: ['dev', 'admin', 'can-view-organizations'] },
|
|
{ label: 'Kontakte', icon: 'pi pi-fw pi-id-card', routerLink: ['/contacts'], roles: ['dev', 'admin', 'can-view-contacts'] }
|
|
]
|
|
},
|
|
{
|
|
roles: ['dev', 'real_estate_agent'],
|
|
label: 'Immo Manager',
|
|
items: [
|
|
{ label: 'Kontaktverwaltung', icon: 'pi pi-fw pi-list', routerLink: ['/immo-manager/contacts'], roles: ['dev', 'admin', 'can-view-projects'] },
|
|
{ label: 'Objektverwaltung', icon: 'pi pi-fw pi-id-card', routerLink: ['/immo-manager/objects'], roles: ['dev', 'admin', 'can-view-contacts'] },
|
|
{ label: 'Abrechnungen & Auswertung', icon: 'pi pi-fw pi-id-card', routerLink: ['/immo-manager/billing'], roles: ['dev', 'admin', 'can-view-contacts'] },
|
|
{ label: 'Ticketsystem', icon: 'pi pi-fw pi-id-card', routerLink: ['/immo-manager/ticket-system'], roles: ['dev', 'admin', 'can-view-contacts'] },
|
|
{ label: 'Buchhaltung & Rechnungswesen', icon: 'pi pi-fw pi-id-card', routerLink: ['/immo-manager/accounting'], roles: ['dev', 'admin', 'can-view-contacts'] },
|
|
{ label: 'Effizienz-Features', icon: 'pi pi-fw pi-id-card', routerLink: ['/immo-manager/efficiency-features'], roles: ['dev', 'admin', 'can-view-contacts'] },
|
|
{ label: 'Dokumenten-Management-System', icon: 'pi pi-fw pi-id-card', routerLink: ['/immo-manager/dms'], roles: ['dev', 'admin', 'can-view-contacts'] },
|
|
{ label: 'Service-Portal', icon: 'pi pi-fw pi-id-card', routerLink: ['/immo-manager/service-portal'], roles: ['dev', 'admin', 'can-view-contacts'] }
|
|
]
|
|
},
|
|
{
|
|
roles: ['dev', 'admin'],
|
|
label: 'Admin',
|
|
items: [
|
|
{
|
|
roles: ['dev', 'admin', 'can-manage-properties'],
|
|
label: 'Gebäude Verwalten',
|
|
icon: 'pi pi-fw pi-home',
|
|
routerLink: ['/admin/properties']
|
|
},
|
|
{
|
|
roles: ['dev', 'admin', 'can-manage-industries'],
|
|
label: 'Branchen Verwalten',
|
|
icon: 'pi pi-fw pi-home',
|
|
routerLink: ['/admin/industries']
|
|
}
|
|
]
|
|
},
|
|
{
|
|
roles: ['dev'],
|
|
label: 'UI Components',
|
|
items: [
|
|
{ label: 'Form Layout', icon: 'pi pi-fw pi-id-card', routerLink: ['/uikit/formlayout'] },
|
|
{ label: 'Input', icon: 'pi pi-fw pi-check-square', routerLink: ['/uikit/input'] },
|
|
{ label: 'Button', icon: 'pi pi-fw pi-mobile', class: 'rotated-icon', routerLink: ['/uikit/button'] },
|
|
{ label: 'Table', icon: 'pi pi-fw pi-table', routerLink: ['/uikit/table'] },
|
|
{ label: 'Properties', icon: 'pi pi-fw pi-home', routerLink: ['/properties'] },
|
|
{ label: 'List', icon: 'pi pi-fw pi-list', routerLink: ['/uikit/list'] },
|
|
{ label: 'Tree', icon: 'pi pi-fw pi-share-alt', routerLink: ['/uikit/tree'] },
|
|
{ label: 'Panel', icon: 'pi pi-fw pi-tablet', routerLink: ['/uikit/panel'] },
|
|
{ label: 'Overlay', icon: 'pi pi-fw pi-clone', routerLink: ['/uikit/overlay'] },
|
|
{ label: 'Media', icon: 'pi pi-fw pi-image', routerLink: ['/uikit/media'] },
|
|
{ label: 'Menu', icon: 'pi pi-fw pi-bars', routerLink: ['/uikit/menu'] },
|
|
{ label: 'Message', icon: 'pi pi-fw pi-comment', routerLink: ['/uikit/message'] },
|
|
{ label: 'File', icon: 'pi pi-fw pi-file', routerLink: ['/uikit/file'] },
|
|
{ label: 'Chart', icon: 'pi pi-fw pi-chart-bar', routerLink: ['/uikit/charts'] },
|
|
{ label: 'Timeline', icon: 'pi pi-fw pi-calendar', routerLink: ['/uikit/timeline'] },
|
|
{ label: 'Misc', icon: 'pi pi-fw pi-circle', routerLink: ['/uikit/misc'] }
|
|
]
|
|
},
|
|
{
|
|
roles: ['dev'],
|
|
label: 'Pages',
|
|
icon: 'pi pi-fw pi-briefcase',
|
|
routerLink: ['/pages'],
|
|
items: [
|
|
{
|
|
label: 'Landing',
|
|
icon: 'pi pi-fw pi-globe',
|
|
routerLink: ['/landing']
|
|
},
|
|
{
|
|
label: 'Auth',
|
|
icon: 'pi pi-fw pi-user',
|
|
items: [
|
|
{
|
|
label: 'Login',
|
|
icon: 'pi pi-fw pi-sign-in',
|
|
routerLink: ['/auth/login']
|
|
},
|
|
{
|
|
label: 'Error',
|
|
icon: 'pi pi-fw pi-times-circle',
|
|
routerLink: ['/auth/error']
|
|
},
|
|
{
|
|
label: 'Access Denied',
|
|
icon: 'pi pi-fw pi-lock',
|
|
routerLink: ['/auth/access']
|
|
}
|
|
]
|
|
},
|
|
{
|
|
label: 'Crud',
|
|
icon: 'pi pi-fw pi-pencil',
|
|
routerLink: ['/pages/crud']
|
|
},
|
|
{
|
|
label: 'Not Found',
|
|
icon: 'pi pi-fw pi-exclamation-circle',
|
|
routerLink: ['/pages/notfound']
|
|
},
|
|
{
|
|
label: 'Empty',
|
|
icon: 'pi pi-fw pi-circle-off',
|
|
routerLink: ['/pages/empty']
|
|
}
|
|
]
|
|
},
|
|
{
|
|
roles: ['dev'],
|
|
label: 'Hierarchy',
|
|
items: [
|
|
{
|
|
label: 'Submenu 1',
|
|
icon: 'pi pi-fw pi-bookmark',
|
|
items: [
|
|
{
|
|
label: 'Submenu 1.1',
|
|
icon: 'pi pi-fw pi-bookmark',
|
|
items: [
|
|
{ label: 'Submenu 1.1.1', icon: 'pi pi-fw pi-bookmark' },
|
|
{ label: 'Submenu 1.1.2', icon: 'pi pi-fw pi-bookmark' },
|
|
{ label: 'Submenu 1.1.3', icon: 'pi pi-fw pi-bookmark' }
|
|
]
|
|
},
|
|
{
|
|
label: 'Submenu 1.2',
|
|
icon: 'pi pi-fw pi-bookmark',
|
|
items: [{ label: 'Submenu 1.2.1', icon: 'pi pi-fw pi-bookmark' }]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
label: 'Submenu 2',
|
|
icon: 'pi pi-fw pi-bookmark',
|
|
items: [
|
|
{
|
|
label: 'Submenu 2.1',
|
|
icon: 'pi pi-fw pi-bookmark',
|
|
items: [
|
|
{ label: 'Submenu 2.1.1', icon: 'pi pi-fw pi-bookmark' },
|
|
{ label: 'Submenu 2.1.2', icon: 'pi pi-fw pi-bookmark' }
|
|
]
|
|
},
|
|
{
|
|
label: 'Submenu 2.2',
|
|
icon: 'pi pi-fw pi-bookmark',
|
|
items: [{ label: 'Submenu 2.2.1', icon: 'pi pi-fw pi-bookmark' }]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
roles: ['dev'],
|
|
label: 'Get Started',
|
|
items: [
|
|
{
|
|
label: 'Documentation',
|
|
icon: 'pi pi-fw pi-book',
|
|
routerLink: ['/documentation']
|
|
},
|
|
{
|
|
label: 'View Source',
|
|
icon: 'pi pi-fw pi-github',
|
|
url: 'https://github.com/primefaces/sakai-ng',
|
|
target: '_blank'
|
|
}
|
|
]
|
|
}
|
|
];
|
|
}
|
|
}
|