{ "version": 3, "sources": ["src/app/_services/nav.service.ts"], "sourcesContent": ["import { DOCUMENT } from '@angular/common';\r\nimport { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\r\nimport { ReplaySubject, take } from 'rxjs';\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {environment} from \"../../environments/environment\";\r\nimport {SideNavStream} from \"../_models/sidenav/sidenav-stream\";\r\nimport {TextResonse} from \"../_types/text-response\";\r\nimport {DashboardStream} from \"../_models/dashboard/dashboard-stream\";\r\nimport {AccountService} from \"./account.service\";\r\nimport {tap} from \"rxjs/operators\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NavService {\r\n public localStorageSideNavKey = 'kavita--sidenav--expanded';\r\n\r\n private navbarVisibleSource = new ReplaySubject(1);\r\n /**\r\n * If the top Nav bar is rendered or not\r\n */\r\n navbarVisible$ = this.navbarVisibleSource.asObservable();\r\n\r\n private sideNavCollapseSource = new ReplaySubject(1);\r\n /**\r\n * If the Side Nav is in a collapsed state or not.\r\n */\r\n sideNavCollapsed$ = this.sideNavCollapseSource.asObservable();\r\n\r\n private sideNavVisibilitySource = new ReplaySubject(1);\r\n /**\r\n * If the side nav is rendered or not into the DOM.\r\n */\r\n sideNavVisibility$ = this.sideNavVisibilitySource.asObservable();\r\n\r\n private renderer: Renderer2;\r\n baseUrl = environment.apiUrl;\r\n\r\n constructor(@Inject(DOCUMENT) private document: Document, rendererFactory: RendererFactory2, private httpClient: HttpClient, private accountService: AccountService) {\r\n this.renderer = rendererFactory.createRenderer(null, null);\r\n\r\n // To avoid flashing, let's check if we are authenticated before we show\r\n this.accountService.currentUser$.pipe(take(1)).subscribe(u => {\r\n if (u) {\r\n this.showNavBar();\r\n }\r\n });\r\n\r\n const sideNavState = (localStorage.getItem(this.localStorageSideNavKey) === 'true') || false;\r\n this.sideNavCollapseSource.next(sideNavState);\r\n this.showSideNav();\r\n }\r\n\r\n getSideNavStreams(visibleOnly = true) {\r\n return this.httpClient.get>(this.baseUrl + 'stream/sidenav?visibleOnly=' + visibleOnly);\r\n }\r\n\r\n updateSideNavStreamPosition(streamName: string, sideNavStreamId: number, fromPosition: number, toPosition: number) {\r\n return this.httpClient.post(this.baseUrl + 'stream/update-sidenav-position', {streamName, id: sideNavStreamId, fromPosition, toPosition}, TextResonse);\r\n }\r\n\r\n updateSideNavStream(stream: SideNavStream) {\r\n return this.httpClient.post(this.baseUrl + 'stream/update-sidenav-stream', stream, TextResonse);\r\n }\r\n\r\n createSideNavStream(smartFilterId: number) {\r\n return this.httpClient.post(this.baseUrl + 'stream/add-sidenav-stream?smartFilterId=' + smartFilterId, {});\r\n }\r\n\r\n createSideNavStreamFromExternalSource(externalSourceId: number) {\r\n return this.httpClient.post(this.baseUrl + 'stream/add-sidenav-stream-from-external-source?externalSourceId=' + externalSourceId, {});\r\n }\r\n\r\n bulkToggleSideNavStreamVisibility(streamIds: Array, targetVisibility: boolean) {\r\n return this.httpClient.post(this.baseUrl + 'stream/bulk-sidenav-stream-visibility', {ids: streamIds, visibility: targetVisibility});\r\n }\r\n\r\n /**\r\n * Shows the top nav bar. This should be visible on all pages except the reader.\r\n */\r\n showNavBar() {\r\n this.renderer.setStyle(this.document.querySelector('body'), 'margin-top', '56px');\r\n this.renderer.setStyle(this.document.querySelector('body'), 'height', 'calc(var(--vh)*100 - 56px)');\r\n this.renderer.setStyle(this.document.querySelector('html'), 'height', 'calc(var(--vh)*100 - 56px)');\r\n this.navbarVisibleSource.next(true);\r\n }\r\n\r\n /**\r\n * Hides the top nav bar.\r\n */\r\n hideNavBar() {\r\n this.renderer.setStyle(this.document.querySelector('body'), 'margin-top', '0px');\r\n this.renderer.removeStyle(this.document.querySelector('body'), 'height');\r\n this.renderer.removeStyle(this.document.querySelector('html'), 'height');\r\n this.navbarVisibleSource.next(false);\r\n }\r\n\r\n /**\r\n * Shows the side nav. When being visible, the side nav will automatically return to previous collapsed state.\r\n */\r\n showSideNav() {\r\n this.sideNavVisibilitySource.next(true);\r\n }\r\n\r\n /**\r\n * Hides the side nav. This is useful for the readers and login page.\r\n */\r\n hideSideNav() {\r\n this.sideNavVisibilitySource.next(false);\r\n }\r\n\r\n toggleSideNav() {\r\n this.sideNavCollapseSource.pipe(take(1)).subscribe(val => {\r\n if (val === undefined) val = false;\r\n const newVal = !(val || false);\r\n this.sideNavCollapseSource.next(newVal);\r\n localStorage.setItem(this.localStorageSideNavKey, newVal + '');\r\n });\r\n }\r\n}\r\n"], "mappings": "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", "names": ["NavService", "constructor", "document", "rendererFactory", "httpClient", "accountService", "localStorageSideNavKey", "navbarVisibleSource", "ReplaySubject", "navbarVisible$", "asObservable", "sideNavCollapseSource", "sideNavCollapsed$", "sideNavVisibilitySource", "sideNavVisibility$", "baseUrl", "environment", "apiUrl", "renderer", "createRenderer", "currentUser$", "pipe", "take", "subscribe", "u", "showNavBar", "sideNavState", "localStorage", "getItem", "next", "showSideNav", "getSideNavStreams", "visibleOnly", "get", "updateSideNavStreamPosition", "streamName", "sideNavStreamId", "fromPosition", "toPosition", "post", "id", "TextResonse", "updateSideNavStream", "stream", "createSideNavStream", "smartFilterId", "createSideNavStreamFromExternalSource", "externalSourceId", "bulkToggleSideNavStreamVisibility", "streamIds", "targetVisibility", "ids", "visibility", "setStyle", "querySelector", "hideNavBar", "removeStyle", "hideSideNav", "toggleSideNav", "val", "undefined", "newVal", "setItem", "\u0275\u0275inject", "DOCUMENT", "RendererFactory2", "HttpClient", "AccountService", "factory", "\u0275fac", "providedIn", "_NavService"] }