From 1de7f5572a98d5c7379d0d264a37abe1f7367bb2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mehmet=20=C3=87etin?=
<92744169+mehmetcetin01140@users.noreply.github.com>
Date: Mon, 6 Jan 2025 18:23:13 +0300
Subject: [PATCH] fix mobile menu issue
---
src/layout/applayout.ts | 65 ++++++++++++++++++++---------------------
1 file changed, 32 insertions(+), 33 deletions(-)
diff --git a/src/layout/applayout.ts b/src/layout/applayout.ts
index fad7319..f42c3ea 100644
--- a/src/layout/applayout.ts
+++ b/src/layout/applayout.ts
@@ -11,16 +11,8 @@ import { LayoutService } from '@/src/service/layout.service';
@Component({
selector: 'app-layout',
- standalone:true,
- imports: [
- CommonModule,
- ToastModule,
- AppTopBar,
- AppSidebar,
- RouterModule,
- AppFooter,
- AppConfigurator
- ],
+ standalone: true,
+ imports: [CommonModule, ToastModule, AppTopBar, AppSidebar, RouterModule, AppFooter, AppConfigurator],
template: `
- `,
+ `
})
export class AppLayout {
overlayMenuOpenSubscription: Subscription;
@@ -48,23 +39,28 @@ export class AppLayout {
@ViewChild(AppTopBar) appTopBar!: AppTopBar;
- constructor(public layoutService: LayoutService, public renderer: Renderer2, public router: Router) {
+ constructor(
+ public layoutService: LayoutService,
+ public renderer: Renderer2,
+ public router: Router
+ ) {
this.overlayMenuOpenSubscription = this.layoutService.overlayOpen$.subscribe(() => {
if (!this.menuOutsideClickListener) {
- this.menuOutsideClickListener = this.renderer.listen('document', 'click', event => {
- const isOutsideClicked = !(this.appSidebar.el.nativeElement.isSameNode(event.target) || this.appSidebar.el.nativeElement.contains(event.target)
- || this.appTopBar.menuButton.nativeElement.isSameNode(event.target) || this.appTopBar.menuButton.nativeElement.contains(event.target));
-
- if (isOutsideClicked) {
+ this.menuOutsideClickListener = this.renderer.listen('document', 'click', (event) => {
+ if (this.isOutsideClicked(event)) {
this.hideMenu();
}
});
}
if (!this.profileMenuOutsideClickListener) {
- this.profileMenuOutsideClickListener = this.renderer.listen('document', 'click', event => {
- const isOutsideClicked = !(this.appTopBar.menu.nativeElement.isSameNode(event.target) || this.appTopBar.menu.nativeElement.contains(event.target)
- || this.appTopBar.topbarMenuButton.nativeElement.isSameNode(event.target) || this.appTopBar.topbarMenuButton.nativeElement.contains(event.target));
+ this.profileMenuOutsideClickListener = this.renderer.listen('document', 'click', (event) => {
+ const isOutsideClicked = !(
+ this.appTopBar.menu.nativeElement.isSameNode(event.target) ||
+ this.appTopBar.menu.nativeElement.contains(event.target) ||
+ this.appTopBar.topbarMenuButton.nativeElement.isSameNode(event.target) ||
+ this.appTopBar.topbarMenuButton.nativeElement.contains(event.target)
+ );
if (isOutsideClicked) {
}
@@ -76,14 +72,20 @@ export class AppLayout {
}
});
- this.router.events.pipe(filter(event => event instanceof NavigationEnd))
- .subscribe(() => {
- this.hideMenu();
- });
+ this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(() => {
+ this.hideMenu();
+ });
+ }
+
+ isOutsideClicked(event) {
+ const sidebarEl = document.querySelector('.layout-sidebar');
+ const topbarEl = document.querySelector('.layout-menu-button');
+
+ return !(sidebarEl.isSameNode(event.target) || sidebarEl.contains(event.target) || topbarEl.isSameNode(event.target) || topbarEl.contains(event.target));
}
hideMenu() {
- this.layoutService.layoutState.update((prev) => ({...prev, overlayMenuActive:false, staticMenuMobileActive: false, menuHoverActive: false}))
+ this.layoutService.layoutState.update((prev) => ({ ...prev, overlayMenuActive: false, staticMenuMobileActive: false, menuHoverActive: false }));
if (this.menuOutsideClickListener) {
this.menuOutsideClickListener();
this.menuOutsideClickListener = null;
@@ -94,8 +96,7 @@ export class AppLayout {
blockBodyScroll(): void {
if (document.body.classList) {
document.body.classList.add('blocked-scroll');
- }
- else {
+ } else {
document.body.className += ' blocked-scroll';
}
}
@@ -103,10 +104,8 @@ export class AppLayout {
unblockBodyScroll(): void {
if (document.body.classList) {
document.body.classList.remove('blocked-scroll');
- }
- else {
- document.body.className = document.body.className.replace(new RegExp('(^|\\b)' +
- 'blocked-scroll'.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
+ } else {
+ document.body.className = document.body.className.replace(new RegExp('(^|\\b)' + 'blocked-scroll'.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
}
}
@@ -117,7 +116,7 @@ export class AppLayout {
'layout-static-inactive': this.layoutService.layoutState().staticMenuDesktopInactive && this.layoutService.layoutConfig().menuMode === 'static',
'layout-overlay-active': this.layoutService.layoutState().overlayMenuActive,
'layout-mobile-active': this.layoutService.layoutState().staticMenuMobileActive
- }
+ };
}
ngOnDestroy() {