| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -15,216 +15,218 @@ import { DataService } from "../data/data.service";
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import { FeatureFlag } from "../../models/config/feature-flags.model";
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				@Injectable({
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    providedIn: "root"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  providedIn: "root"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				})
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				export class SidebarService {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    isSidebarOpen: boolean = true;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    menuItems$ = new BehaviorSubject<MenuItem[]>(new Array<MenuItem>());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    server!: Server | undefined;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  isSidebarOpen: boolean = true;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  menuItems$ = new BehaviorSubject<MenuItem[]>(new Array<MenuItem>());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  server!: Server | undefined;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    dashboard: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    serverDashboard: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    serverProfile: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    serverMembers: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    serverAutoRoles: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    serverLevels: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    serverAchievements: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    serverShortRoleNames: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    serverConfig: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    serverMenu: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    adminConfig: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    adminUsers: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    adminMenu: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  dashboard: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  serverDashboard: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  serverProfile: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  serverMembers: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  serverAutoRoles: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  serverLevels: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  serverAchievements: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  serverShortRoleNames: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  serverConfig: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  serverMenu: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  adminConfig: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  adminUsers: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  adminMenu: MenuItem = {};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    featureFlags: FeatureFlag[] = [];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  featureFlags: FeatureFlag[] = [];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    constructor(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        private themeService: ThemeService,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        private authService: AuthService,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        private translateService: TranslateService,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        private router: Router,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        private serverService: ServerService,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        private data: DataService
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    ) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.themeService.isSidebarOpen$.subscribe(value => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            this.isSidebarOpen = value;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            this.setMenu(true);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  constructor(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    private themeService: ThemeService,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    private authService: AuthService,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    private translateService: TranslateService,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    private router: Router,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    private serverService: ServerService,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    private data: DataService
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  ) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.themeService.isSidebarOpen$.subscribe(value => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      this.isSidebarOpen = value;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      this.setMenu(true);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.translateService.onLangChange.subscribe(_ => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      this.setMenu(true);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.serverService.server$.subscribe(server => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      this.server = server;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      if (server) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.setMenu(true);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      } else {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.setMenu(false);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  async buildMenu(user: UserDTO | null, hasPermission: boolean, isTechnician: boolean = false) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.dashboard = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      label: this.isSidebarOpen ? this.translateService.instant("sidebar.dashboard") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      icon: "pi pi-th-large",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      routerLink: "dashboard"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.serverDashboard = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.dashboard") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      icon: "pi pi-th-large",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      routerLink: `server/${this.server?.id}`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.serverProfile = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.profile") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      icon: "pi pi-id-card",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      routerLink: `server/${this.server?.id}/members/${user?.id}`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.serverMembers = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.members") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      icon: "pi pi-users",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      visible: true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      routerLink: `server/${this.server?.id}/members`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.serverAutoRoles = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.auto_roles") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      icon: "pi pi-sitemap",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      visible: true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      routerLink: `server/${this.server?.id}/auto-roles`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.serverLevels = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.levels") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      icon: "pi pi-book",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      visible: true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      routerLink: `server/${this.server?.id}/levels`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.serverAchievements = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.achievements") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      icon: "pi pi-angle-double-up",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      visible: true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      routerLink: `server/${this.server?.id}/achievements`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.serverShortRoleNames = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.short_role_names") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      icon: "pi pi-list",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      visible: true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      routerLink: `server/${this.server?.id}/short-role-names`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.serverConfig = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.configuration") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      icon: "pi pi-cog",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      visible: true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      routerLink: `server/${this.server?.id}/config`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.serverMenu = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      label: this.isSidebarOpen ? this.server?.name : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      icon: "pi pi-server",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      visible: false,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      expanded: true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      items: [this.serverDashboard, this.serverProfile, this.serverMembers, this.serverAutoRoles, this.serverLevels, this.serverAchievements, this.serverShortRoleNames, this.serverConfig]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.adminConfig = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      label: this.isSidebarOpen ? this.translateService.instant("sidebar.config") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      visible: hasPermission || isTechnician,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      icon: "pi pi-cog",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      routerLink: "/admin/settings"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.adminUsers = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      label: this.isSidebarOpen ? this.translateService.instant("sidebar.auth_user_list") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      visible: hasPermission,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      icon: "pi pi-user-edit",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      routerLink: "/admin/users"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.adminMenu = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      label: this.isSidebarOpen ? this.translateService.instant("sidebar.administration") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      icon: "pi pi-cog",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      visible: hasPermission || isTechnician,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      expanded: true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      items: [this.adminConfig, this.adminUsers]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  setMenu(build: boolean = false) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    const server = this.server;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if (server) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      this.featureFlags = [];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      this.data.query<PossibleFeatureFlagsQuery>("{possibleFeatureFlags}"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      ).subscribe(data => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        let observables: Observable<HasServerFeatureFlagQuery>[] = [];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        data.possibleFeatureFlags.forEach(flag => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				          observables.push(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            this.data.query<HasServerFeatureFlagQuery>(Queries.hasServerFeatureFlag, {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                filter: { id: server.id },
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                flag: flag
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				              },
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				              function(data: Query) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                return data.servers[0];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				              }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				          );
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.translateService.onLangChange.subscribe(_ => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            this.setMenu(true);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverService.server$.subscribe(server => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            this.server = server;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if (server) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                this.setMenu(true);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            } else {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                this.setMenu(false);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        forkJoin(observables).subscribe(data => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				          data.forEach(flag => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if (!flag.hasFeatureFlag.value) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				              return;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            this.featureFlags.push(flag.hasFeatureFlag);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				          });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				          this._setMenu(build);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    } else {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      this._setMenu(build);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    async buildMenu(user: UserDTO | null, hasPermission: boolean, isTechnician: boolean = false) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.dashboard = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            label: this.isSidebarOpen ? this.translateService.instant("sidebar.dashboard") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            icon: "pi pi-th-large",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            routerLink: "dashboard"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverDashboard = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.dashboard") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            icon: "pi pi-th-large",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            routerLink: `server/${this.server?.id}`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverProfile = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.profile") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            icon: "pi pi-id-card",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            routerLink: `server/${this.server?.id}/members/${user?.id}`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverMembers = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.members") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            icon: "pi pi-users",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            visible: true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            routerLink: `server/${this.server?.id}/members`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  private _setMenu(build: boolean = false) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    this.authService.hasUserPermission(AuthRoles.Admin).then(async hasPermission => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      let authUser = await this.authService.getLoggedInUser();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      let user: UserDTO | null = authUser?.users?.find(u => u.server == this.server?.id) ?? null;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      let isTechnician = (authUser?.users?.map(u => u.isTechnician).filter(u => u) ?? []).length > 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverAutoRoles = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.auto_roles") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            icon: "pi pi-sitemap",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            visible: true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            routerLink: `server/${this.server?.id}/auto-roles`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      if (build || this.menuItems$.value.length == 0) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        await this.buildMenu(user, hasPermission, isTechnician);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverLevels = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.levels") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            icon: "pi pi-book",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            visible: true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            routerLink: `server/${this.server?.id}/levels`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      if (this.server) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverMenu.visible = true;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverMembers.visible = isTechnician || !!user?.isModerator;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        console.log(isTechnician, this.hasFeature("AutoRoleModule") && !!user?.isModerator)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverAutoRoles.visible = isTechnician || this.hasFeature("AutoRoleModule") && !!user?.isModerator;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverLevels.visible = isTechnician || this.hasFeature("LevelModule") && !!user?.isModerator;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverAchievements.visible = isTechnician || this.hasFeature("AchievementsModule") && !!user?.isModerator;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverShortRoleNames.visible = isTechnician || this.hasFeature("ShortRoleName") && !!user?.isAdmin;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverAchievements = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.achievements") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            icon: "pi pi-angle-double-up",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            visible: true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            routerLink: `server/${this.server?.id}/achievements`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        console.log(isTechnician, this.serverAutoRoles.visible)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverConfig.visible = isTechnician || !!user?.isAdmin;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      } else {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverMenu.visible = false;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverShortRoleNames = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.short_role_names") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            icon: "pi pi-list",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            visible: true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            routerLink: `server/${this.server?.id}/short-role-names`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      let menuItems: MenuItem[] = [
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.dashboard,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverMenu,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.adminMenu
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      ];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      this.menuItems$.next(menuItems);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverConfig = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            label: this.isSidebarOpen ? this.translateService.instant("sidebar.server.configuration") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            icon: "pi pi-cog",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            visible: true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            routerLink: `server/${this.server?.id}/config`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.serverMenu = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            label: this.isSidebarOpen ? this.server?.name : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            icon: "pi pi-server",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            visible: false,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            expanded: true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            items: [this.serverDashboard, this.serverProfile, this.serverMembers, this.serverAutoRoles, this.serverLevels, this.serverAchievements, this.serverShortRoleNames, this.serverConfig]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.adminConfig = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            label: this.isSidebarOpen ? this.translateService.instant("sidebar.config") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            visible: hasPermission || isTechnician,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            icon: "pi pi-cog",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            routerLink: "/admin/settings"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.adminUsers = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            label: this.isSidebarOpen ? this.translateService.instant("sidebar.auth_user_list") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            visible: hasPermission,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            icon: "pi pi-user-edit",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            routerLink: "/admin/users"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.adminMenu = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            label: this.isSidebarOpen ? this.translateService.instant("sidebar.administration") : "",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            icon: "pi pi-cog",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            visible: hasPermission || isTechnician,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            expanded: true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            items: [this.adminConfig, this.adminUsers]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        };
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    setMenu(build: boolean = false) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        const server = this.server;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if (server) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            this.featureFlags = [];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            this.data.query<PossibleFeatureFlagsQuery>("{possibleFeatureFlags}"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            ).subscribe(data => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                let observables: Observable<HasServerFeatureFlagQuery>[] = [];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                data.possibleFeatureFlags.forEach(flag => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    observables.push(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                        this.data.query<HasServerFeatureFlagQuery>(Queries.hasServerFeatureFlag, {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                                filter: { id: server.id },
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                                flag: flag
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                            },
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                            function(data: Query) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                                return data.servers[0];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                            }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                        )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    );
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                forkJoin(observables).subscribe(data => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    data.forEach(flag => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                        if (!flag.hasFeatureFlag.value) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                            return;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                        }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                        this.featureFlags.push(flag.hasFeatureFlag);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    this._setMenu(build);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        } else {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            this._setMenu(build);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    private _setMenu(build: boolean = false) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        this.authService.hasUserPermission(AuthRoles.Admin).then(async hasPermission => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            let authUser = await this.authService.getLoggedInUser();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            let user: UserDTO | null = authUser?.users?.find(u => u.server == this.server?.id) ?? null;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            let isTechnician = authUser?.users?.map(u => u.isTechnician).filter(u => u) ?? [];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if (build || this.menuItems$.value.length == 0) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                await this.buildMenu(user, hasPermission, isTechnician.length > 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if (this.server) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                this.serverMenu.visible = true;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                this.serverMembers.visible = !!user?.isModerator;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                this.serverAutoRoles.visible = this.hasFeature("AutoRoleModule") ? !!user?.isModerator : false;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                this.serverLevels.visible = this.hasFeature("LevelModule") ? !!user?.isModerator : false;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                this.serverAchievements.visible = this.hasFeature("AchievementsModule") ? !!user?.isModerator : false;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                this.serverShortRoleNames.visible = this.hasFeature("ShortRoleName") ? !!user?.isAdmin : false;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                this.serverConfig.visible = !!user?.isAdmin || isTechnician.length > 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            } else {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                this.serverMenu.visible = false;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            let menuItems: MenuItem[] = [
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                this.dashboard,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                this.serverMenu,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                this.adminMenu
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            ];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            this.menuItems$.next(menuItems);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    private hasFeature(key: string): boolean {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        const flag = this.featureFlags.filter(flag => flag.key == key);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if (flag.length == 0) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            return false;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        return flag[0].value;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  private hasFeature(key: string): boolean {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    const flag = this.featureFlags.filter(flag => flag.key == key);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if (flag.length == 0) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      return false;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    return flag[0].value;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
	
		
			
				
					
					| 
						 
							
							
							
						 
					 | 
				
			
			 | 
			 | 
			
				 
 |