Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 2

import {

Component,
ElementRef,
EventEmitter,
Input,
OnDestroy,
OnInit,
Output,
Renderer2,
ViewChild
} from "@angular/core";
import { Router } from "@angular/router";
import { MenuService } from "@core/services/auth/menu.service";
import { SidebarSubmenuItem } from "@shared/schemas/sidebar-submenu";
import { SidebarMenuService } from "@shared/services/sidebar-menu.service";
import { Subject, takeUntil } from "rxjs";

@Component({
selector: "app-sidebar-menu",
templateUrl: "./sidebar-menu.component.html",
styleUrls: ["./sidebar-menu.component.scss"]
})
export class SidebarMenuComponent implements OnInit, OnDestroy {
@Input() sidebarExpanded = true;

@Input() permissions: string[] = [];


@Input() menuId = "";
@Input() menuName = "";
@Input() menuClassIcon = "";
@Input() showNewBadge = false;

@Input() submenus: SidebarSubmenuItem[] = [];

@Output() closeMobileSidebar = new EventEmitter<string>();

@ViewChild("submenu")
submenu!: ElementRef<HTMLLIElement>;

@ViewChild("menu")
menu!: ElementRef<HTMLAnchorElement>;

private _onDestroy = new Subject<boolean>();

constructor(
public router: Router,
private sidebarMenuService: SidebarMenuService,
private renderer: Renderer2,
private menuService: MenuService
) {}

ngOnInit(): void {
this.showHideMenu();
}

private showHideMenu(): void {


this.sidebarMenuService.actualMenu$
.pipe(takeUntil(this._onDestroy))
.subscribe((actualMenuId) => {
if (
actualMenuId !== this.menuId &&
!!actualMenuId &&
!this.isRouterActive()
) {
if (

this.submenu?.nativeElement.classList.contains("show")
) {
this.renderer.removeClass(
this.submenu?.nativeElement,
"show"
);
this.renderer.setAttribute(
this.menu.nativeElement,
"aria-expanded",
"false"
);
}
}
});
}

ngOnDestroy(): void {
this._onDestroy.next(true);
}

closeMobileSidebarMenu(submenuId: string): void {


this.closeMobileSidebar.emit(submenuId);
}

emitActualMenu(): void {
this.sidebarMenuService.setActualmenu(this.menuId);
}

isRouterActive(): boolean {
return this.router.isActive(this.menuId, {
paths: "subset",
queryParams: "subset",
fragment: "ignored",
matrixParams: "ignored"
});
}
}

You might also like