{ "version": 3, "sources": ["src/app/layout/components/toolbar/toolbar.service.ts"], "sourcesContent": ["import { ToolbarMode } from '@fuse/types/fuse-config';\r\nimport { Injectable, ViewContainerRef, signal, computed } from '@angular/core';\r\nimport { ScrollBarService } from '@shared/scroll/scrollbar.service';\r\nimport { Observable, filter, ReplaySubject, merge, of, Subject, Subscription } from 'rxjs';\r\nimport { distinctUntilChanged, map, mergeMap, tap } from 'rxjs/operators';\r\nimport { Router, Scroll, ActivationEnd, RoutesRecognized, NavigationEnd, NavigationStart } from '@angular/router';\r\nimport { FuseMatchMediaService } from '@fuse/services/match-media.service';\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport { TransferState, makeStateKey } from '@angular/core';\r\n\r\nexport const TOLLBAR_MODE = makeStateKey('expo.toolbar-mode');\r\nexport interface ToolbarState {\r\n toolbarMode: ToolbarMode;\r\n collapsed: boolean;\r\n transparent: boolean;\r\n hidden?: boolean;\r\n}\r\nexport interface ToolbarAnimationEvent {\r\n collapse: boolean;\r\n state: 'start' | 'end';\r\n matchingMedia?: string[];\r\n}\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ToolbarService {\r\n toolbarMode = signal(ToolbarMode.solid);\r\n isScrolled = signal(false);\r\n matchingAliases = this.fuseMediaMatchService.matchingAliases;\r\n toolbarExpandCollapseStartSubject = new Subject;\r\n scrollSubscription: Subscription;\r\n\r\n #leftSidebarToggleOpen = signal(false);\r\n leftSidebarToggleOpen = this.#leftSidebarToggleOpen.asReadonly();\r\n #rightSidebarToggleOpen = signal(false);\r\n rightSidebarToggleOpen = this.#rightSidebarToggleOpen.asReadonly();\r\n\r\n skipAnimation = false;\r\n hideToolbar = signal(false);\r\n\r\n private toolbarStateChangeSubject = new ReplaySubject();\r\n private toolbarAnimationSubject = new Subject();\r\n constructor(\r\n private scrollBarService: ScrollBarService,\r\n private fuseMediaMatchService: FuseMatchMediaService,\r\n public platform: Platform,\r\n private router: Router,\r\n private readonly transferState: TransferState\r\n ) {\r\n if (this.platform.isBrowser) {\r\n if (this.transferState.hasKey(TOLLBAR_MODE)) {\r\n this.toolbarMode.set(this.transferState.get(TOLLBAR_MODE, ToolbarMode.solid));\r\n }\r\n }\r\n\r\n this.router.events\r\n .subscribe((e) => {\r\n if (e instanceof RoutesRecognized) {\r\n if (this.scrollSubscription) {\r\n this.scrollSubscription.unsubscribe();\r\n }\r\n const data = e.state.root.firstChild?.data;\r\n this.hideToolbar.set(data.hideToolbar);\r\n this.toolbarMode.set(data.toolbarMode?? ToolbarMode.solid);\r\n this.toolbarStateChangeSubject.next({\r\n toolbarMode: this.toolbarMode(),\r\n collapsed: this.isCollapsed(),\r\n transparent: this.isTransparent(),\r\n hidden: this.hideToolbar()\r\n });\r\n }\r\n\r\n if (e instanceof ActivationEnd && e.snapshot.outlet === 'primary') {\r\n\r\n if (e.snapshot.children.length > 0) {\r\n const child = e.snapshot.children[0];\r\n if (child.data.toolbarMode) {\r\n // giĆ  processato\r\n return;\r\n }\r\n }\r\n const data = e.snapshot.data;\r\n this.hideToolbar.set(data.hideToolbar);\r\n this.toolbarMode.set(data.toolbarMode ?? ToolbarMode.solid);\r\n if (! this.platform.isBrowser) {\r\n this.transferState.set(TOLLBAR_MODE, this.toolbarMode());\r\n }\r\n }\r\n if (e instanceof NavigationEnd) {\r\n if (this.platform.isBrowser) {\r\n setTimeout(() => {\r\n this.toolbarExpandCollapseStartSubject.next(this.isCollapsed());\r\n setTimeout(() => {\r\n this.scrollSubscription = this.$Scroll\r\n .pipe(\r\n map(() => {\r\n return this.isCollapsed();\r\n })\r\n )\r\n .subscribe((state) => { \r\n this.toolbarExpandCollapseStartSubject.next(state);\r\n });\r\n }, 150); // wait scroll restore;\r\n \r\n }, 20); // wait router Scroll Event\r\n }\r\n }\r\n if (e instanceof Scroll) {\r\n const position = e.position ? e.position[1]: 0;\r\n this.isScrolled.set(position > 0);\r\n this.skipAnimation = (position === 0);\r\n setTimeout(()=> this.skipAnimation = false, 500);\r\n this.toolbarStateChangeSubject.next({\r\n toolbarMode: this.toolbarMode(),\r\n collapsed: this.isCollapsed(),\r\n transparent: this.isTransparent(),\r\n hidden: this.hideToolbar()\r\n });\r\n }\r\n });\r\n\r\n\r\n }\r\n\r\n isCollapsed = computed(() => {\r\n if (!this.platform.isBrowser) {\r\n return false;\r\n }\r\n if (this.matchingAliases().includes('lg')) {\r\n // return this.scrollTop > 0;\r\n return this.isScrolled();\r\n\r\n } else {\r\n return false;\r\n }\r\n });\r\n\r\n isSolid = computed(() => {\r\n if (this.hideToolbar()) {\r\n return false;\r\n }\r\n if(this.platform.isBrowser) {\r\n if ((!this.matchingAliases().includes('lg')) || this.toolbarMode() === ToolbarMode.solid) {\r\n return true;\r\n } else {\r\n return this.toolbarMode() === ToolbarMode.solid;\r\n }\r\n } else {\r\n return this.toolbarMode() === ToolbarMode.solid;\r\n }\r\n\r\n });\r\n\r\n isTransparent = computed(() => {\r\n if (!this.platform.isBrowser) {\r\n return this.toolbarMode() !== ToolbarMode.solid;\r\n }\r\n\r\n if (this.toolbarMode() !== ToolbarMode.solid && this.fuseMediaMatchService.matchingAliases().includes('lg')) {\r\n return this.toolbarMode() === ToolbarMode.both ? !this.isCollapsed() : true;\r\n } else {\r\n return this.toolbarMode() === ToolbarMode.both;\r\n }\r\n });\r\n\r\n get $Scroll(): Observable {\r\n if (!this.platform.isBrowser) {\r\n return of(0);\r\n }\r\n if (this._$Scroll){\r\n return this._$Scroll;\r\n }\r\n const scrollBar = this.scrollBarService.mainScrollbar;\r\n return this._$Scroll = this.scrollBarService.monitorScrollTop(scrollBar, false)\r\n .pipe(\r\n filter(() => this.toolbarMode() !== ToolbarMode.solid && this.skipAnimation === false),\r\n map(([prev, curr]) => curr),\r\n distinctUntilChanged(),\r\n tap((curr) => {\r\n this.isScrolled.set(curr > 0);\r\n }\r\n )\r\n );\r\n }\r\n private _$Scroll: Observable = null;\r\n private _toolbarStateChange$: Observable\r\n get toolbarStateChange$(): Observable {\r\n if (!this._toolbarStateChange$) {\r\n this._toolbarStateChange$ = this.platform.isBrowser ?\r\n merge(\r\n this.toolbarStateChangeSubject.asObservable()\r\n .pipe(\r\n mergeMap(() => {\r\n return this.fuseMediaMatchService.onMediaChange$.pipe(\r\n map((media) => media.matchingAliases),\r\n map(() => {\r\n return {\r\n toolbarMode: this.toolbarMode(),\r\n collapsed: this.isCollapsed(),\r\n transparent: this.isTransparent(),\r\n hidden: this.hideToolbar()\r\n };\r\n })\r\n );\r\n }),\r\n distinctUntilChanged((prev, cur) => JSON.stringify(prev) === JSON.stringify(cur))\r\n )) : this.toolbarStateChangeSubject.asObservable(); // da server;\r\n }\r\n return this._toolbarStateChange$;\r\n }\r\n\r\n\r\n get toolbarExpandCollapseStart$(): Observable {\r\n return this.toolbarExpandCollapseStartSubject.asObservable();\r\n }\r\n\r\n get onAnimationStateChange(): Observable {\r\n return this.toolbarAnimationSubject.asObservable();\r\n }\r\n\r\n toggleLeftSidebarOpen(): void {\r\n this.#leftSidebarToggleOpen.update(value => !value);\r\n }\r\n\r\n toggleRightSidebarOpen(): void {\r\n this.#rightSidebarToggleOpen.update(value => !value);\r\n }\r\n\r\n setAnimationState(collapse: boolean, state: 'start' | 'end'): void {\r\n this.toolbarAnimationSubject.next({collapse: collapse, state: state, matchingMedia: this.matchingAliases()});\r\n }\r\n\r\n async showNewsletterSubscribeDialog(vc?: ViewContainerRef) {\r\n const { NewsletterSigninDialogComponent } = await import('app/shared/components/newsletter-signin/newsletter-signin-dialog/newsletter-signin-dialog.component');\r\n const dialog = vc.createComponent(NewsletterSigninDialogComponent);\r\n dialog.instance.openDialog();\r\n }\r\n}\r\n"], "mappings": "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", "names": ["TOLLBAR_MODE", "ToolbarService", "_leftSidebarToggleOpen", "_rightSidebarToggleOpen", "constructor", "scrollBarService", "fuseMediaMatchService", "platform", "router", "transferState", "__privateAdd", "toolbarMode", "signal", "ToolbarMode", "solid", "isScrolled", "matchingAliases", "toolbarExpandCollapseStartSubject", "Subject", "__privateSet", "leftSidebarToggleOpen", "__privateGet", "asReadonly", "rightSidebarToggleOpen", "skipAnimation", "hideToolbar", "toolbarStateChangeSubject", "ReplaySubject", "toolbarAnimationSubject", "isCollapsed", "computed", "isBrowser", "includes", "isSolid", "isTransparent", "both", "_$Scroll", "hasKey", "set", "get", "events", "subscribe", "e", "RoutesRecognized", "scrollSubscription", "unsubscribe", "data", "state", "root", "firstChild", "next", "collapsed", "transparent", "hidden", "ActivationEnd", "snapshot", "outlet", "children", "length", "NavigationEnd", "setTimeout", "$Scroll", "pipe", "map", "Scroll", "position", "of", "scrollBar", "mainScrollbar", "monitorScrollTop", "filter", "prev", "curr", "distinctUntilChanged", "tap", "toolbarStateChange$", "_toolbarStateChange$", "merge", "asObservable", "mergeMap", "onMediaChange$", "media", "cur", "JSON", "stringify", "toolbarExpandCollapseStart$", "onAnimationStateChange", "toggleLeftSidebarOpen", "update", "value", "toggleRightSidebarOpen", "setAnimationState", "collapse", "matchingMedia", "showNewsletterSubscribeDialog", "vc", "__async", "NewsletterSigninDialogComponent", "createComponent", "instance", "openDialog", "\u0275\u0275inject", "ScrollBarService", "FuseMatchMediaService", "Platform", "Router", "TransferState", "factory", "\u0275fac", "providedIn", "_ToolbarService"] }