-<div class="sub-menu">
- <ng-container *ngFor="let menuEntry of menuEntries">
+<div class="sub-menu" [ngClass]="{ 'no-scroll': isModalOpened }">
+ <ng-container *ngFor="let menuEntry of menuEntries; index as id">
<a *ngIf="menuEntry.routerLink" [routerLink]="menuEntry.routerLink" routerLinkActive="active" class="title-page title-page-settings">{{ menuEntry.label }}</a>
- <div *ngIf="!menuEntry.routerLink" ngbDropdown [container]="container" class="parent-entry" #dropdown="ngbDropdown" (mouseleave)="closeDropdownIfHovered(dropdown)">
+ <div *ngIf="!menuEntry.routerLink" ngbDropdown [container]="container" class="parent-entry"
+ #dropdown="ngbDropdown" (mouseleave)="closeDropdownIfHovered(dropdown)">
<span
+ *ngIf="isInSmallView"
+ [ngClass]="{ active: !!suffixLabels[menuEntry.label] }"
+ (click)="openModal(id)" role="button" class="title-page title-page-settings">
+ <ng-container i18n>{{ menuEntry.label }}</ng-container>
+ <ng-container *ngIf="!!suffixLabels[menuEntry.label]"> - {{ suffixLabels[menuEntry.label] }}</ng-container>
+ </span>
+
+ <span
+ *ngIf="!isInSmallView"
(mouseenter)="openDropdownOnHover(dropdown)" [ngClass]="{ active: !!suffixLabels[menuEntry.label] }" ngbDropdownAnchor
(click)="dropdownAnchorClicked(dropdown)" role="button" class="title-page title-page-settings"
>
</a>
</div>
</div>
-
</ng-container>
</div>
+
+<ng-template #modal let-close="close" let-dismiss="dismiss">
+ <div class="modal-body">
+ <ng-container *ngFor="let menuEntry of menuEntries; index as id">
+ <div [ngClass]="{ hidden: id !== currentMenuEntryIndex }">
+ <a *ngFor="let menuChild of menuEntry.children"
+ [ngClass]="{ icon: hasIcons }"
+ [routerLink]="menuChild.routerLink" routerLinkActive="active" (click)="dismissOtherModals()">
+ <my-global-icon *ngIf="menuChild.iconName" [iconName]="menuChild.iconName"></my-global-icon>
+
+ {{ menuChild.label }}
+ </a>
+ </div>
+ </ng-container>
+ </div>
+</ng-template>
-import { Component, Input, OnDestroy, OnInit } from '@angular/core'
+import {
+ Component,
+ Input,
+ OnDestroy,
+ OnInit,
+ ViewChild
+} from '@angular/core'
import { filter, take } from 'rxjs/operators'
import { NavigationEnd, Router } from '@angular/router'
import { Subscription } from 'rxjs'
-import { NgbDropdown } from '@ng-bootstrap/ng-bootstrap'
+import { NgbDropdown, NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { GlobalIconName } from '@app/shared/images/global-icon.component'
import { ScreenService } from '@app/shared/misc/screen.service'
export class TopMenuDropdownComponent implements OnInit, OnDestroy {
@Input() menuEntries: TopMenuDropdownParam[] = []
+ @ViewChild('modal', { static: true }) modal: NgbModal
+
suffixLabels: { [ parentLabel: string ]: string }
hasIcons = false
container: undefined | 'body' = undefined
+ isModalOpened = false
+ currentMenuEntryIndex: number
private openedOnHover = false
private routeSub: Subscription
constructor (
private router: Router,
+ private modalService: NgbModal,
private screen: ScreenService
- ) {}
+ ) { }
+
+ get isInSmallView () {
+ return this.screen.isInSmallView()
+ }
ngOnInit () {
this.updateChildLabels(window.location.pathname)
this.routeSub = this.router.events
- .pipe(filter(event => event instanceof NavigationEnd))
- .subscribe(() => this.updateChildLabels(window.location.pathname))
+ .pipe(filter(event => event instanceof NavigationEnd))
+ .subscribe(() => this.updateChildLabels(window.location.pathname))
this.hasIcons = this.menuEntries.some(
e => e.children && e.children.some(c => !!c.iconName)
)
- // We have to set body for the container to avoid scroll overflow on mobile view
- if (this.screen.isInMobileView()) {
+ // We have to set body for the container to avoid scroll overflow on mobile and small views
+ if (this.isInSmallView) {
this.container = 'body'
}
}
this.openedOnHover = false
}
+ openModal (index: number) {
+ this.currentMenuEntryIndex = index
+ this.isModalOpened = true
+
+ this.modalService.open(this.modal, {
+ centered: true,
+ beforeDismiss: async () => {
+ this.onModalDismiss()
+ return true
+ }
+ })
+ }
+
+ onModalDismiss () {
+ this.isModalOpened = false
+ }
+
+ dismissOtherModals () {
+ this.modalService.dismissAll()
+ }
+
private updateChildLabels (path: string) {
this.suffixLabels = {}