]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/shared/shared-main/misc/top-menu-dropdown.component.ts
Merge branch 'release/3.1.0' into develop
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / shared-main / misc / top-menu-dropdown.component.ts
index 5909db0b57b8cd4a01974c51fef9276e72c9589f..2cafb6c55c6d68f50d17106b7e675afdeb7650b8 100644 (file)
@@ -1,20 +1,23 @@
 import { Subscription } from 'rxjs'
-import { filter, take } from 'rxjs/operators'
+import { filter } from 'rxjs/operators'
 import { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core'
 import { NavigationEnd, Router } from '@angular/router'
 import { MenuService, ScreenService } from '@app/core'
+import { scrollToTop } from '@app/helpers'
 import { GlobalIconName } from '@app/shared/shared-icons'
 import { NgbDropdown, NgbModal } from '@ng-bootstrap/ng-bootstrap'
 
 export type TopMenuDropdownParam = {
   label: string
   routerLink?: string
+  isDisplayed?: () => boolean // Default: () => true
 
   children?: {
     label: string
     routerLink: string
-
     iconName?: GlobalIconName
+
+    isDisplayed?: () => boolean // Default: () => true
   }[]
 }
 
@@ -33,7 +36,6 @@ export class TopMenuDropdownComponent implements OnInit, OnDestroy {
   isModalOpened = false
   currentMenuEntryIndex: number
 
-  private openedOnHover = false
   private routeSub: Subscription
 
   constructor (
@@ -52,6 +54,10 @@ export class TopMenuDropdownComponent implements OnInit, OnDestroy {
     return this.screen.isInSmallView(marginLeft)
   }
 
+  get isBroadcastMessageDisplayed () {
+    return this.screen.isBroadcastMessageDisplayed
+  }
+
   ngOnInit () {
     this.updateChildLabels(window.location.pathname)
 
@@ -68,32 +74,10 @@ export class TopMenuDropdownComponent implements OnInit, OnDestroy {
     if (this.routeSub) this.routeSub.unsubscribe()
   }
 
-  openDropdownOnHover (dropdown: NgbDropdown) {
-    this.openedOnHover = true
-    dropdown.open()
-
-    // Menu was closed
-    dropdown.openChange
-            .pipe(take(1))
-            .subscribe(() => this.openedOnHover = false)
-  }
-
   dropdownAnchorClicked (dropdown: NgbDropdown) {
-    if (this.openedOnHover) {
-      this.openedOnHover = false
-      return
-    }
-
     return dropdown.toggle()
   }
 
-  closeDropdownIfHovered (dropdown: NgbDropdown) {
-    if (this.openedOnHover === false) return
-
-    dropdown.close()
-    this.openedOnHover = false
-  }
-
   openModal (index: number) {
     this.currentMenuEntryIndex = index
     this.isModalOpened = true
@@ -111,10 +95,22 @@ export class TopMenuDropdownComponent implements OnInit, OnDestroy {
     this.isModalOpened = false
   }
 
+  onActiveLinkScrollToTop (link: HTMLAnchorElement) {
+    if (!this.isBroadcastMessageDisplayed && this.router.url.includes(link.getAttribute('href'))) {
+      scrollToTop('smooth')
+    }
+  }
+
   dismissOtherModals () {
     this.modalService.dismissAll()
   }
 
+  isDisplayed (obj: { isDisplayed?: () => boolean }) {
+    if (typeof obj.isDisplayed !== 'function') return true
+
+    return obj.isDisplayed()
+  }
+
   private updateChildLabels (path: string) {
     this.suffixLabels = {}