{ "version": 3, "sources": ["src/app/shared/services/routing-strategy.service.ts"], "sourcesContent": ["import {\r\n ActivatedRoute,\r\n Data,\r\n Event,\r\n NavigationCancel,\r\n NavigationEnd,\r\n NavigationStart,\r\n ResolveStart,\r\n Router\r\n} from '@angular/router';\r\nimport { ENUM_ID_Q_PARAM, FORM_ID_HEADER } from '@app/shared/constants/constants';\r\nimport { FormService } from '@app/forms/shared/forms.service';\r\nimport { Injectable } from '@angular/core';\r\nimport { Logger } from '@app/logger/logger';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { filter, map, mergeMap } from 'rxjs/operators';\r\nimport { LoginStatusService } from '@app/security/shared/login-status.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class RoutingStrategyService {\r\n private database: string;\r\n private asyncLoadCount = 0;\r\n private initialized = false;\r\n private showRouteLoadIndicatorSub = new Subject();\r\n private titleChangedSub = new Subject();\r\n\r\n public get showRouteLoadIndicator$(): Observable {\r\n return this.showRouteLoadIndicatorSub.asObservable();\r\n }\r\n\r\n public get titleChanged$(): Observable {\r\n return this.titleChangedSub.asObservable();\r\n }\r\n\r\n constructor(\r\n private activatedRoute: ActivatedRoute,\r\n private formService: FormService,\r\n private logger: Logger,\r\n private loginStatus: LoginStatusService,\r\n private router: Router,\r\n private titleService: Title\r\n ) {}\r\n\r\n public initialize(): void {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.subscribeToAllRouteEvents();\r\n this.subscribeToResolveStart();\r\n this.subscribeToNavigationEnd();\r\n this.initialized = true;\r\n }\r\n\r\n public setTitle(title: string): void {\r\n title += this.database ? ' - ' + this.database : '';\r\n this.titleService.setTitle(title);\r\n this.titleChangedSub.next(this.titleService.getTitle());\r\n }\r\n\r\n private subscribeToAllRouteEvents(): void {\r\n this.router.events.subscribe((event: Event): void => {\r\n if (event instanceof NavigationStart) {\r\n this.asyncLoadCount++;\r\n } else if (event instanceof NavigationEnd || event instanceof NavigationCancel) {\r\n this.asyncLoadCount--;\r\n }\r\n\r\n this.showRouteLoadIndicatorSub.next(!!this.asyncLoadCount);\r\n });\r\n }\r\n\r\n private subscribeToResolveStart(): void {\r\n this.router.events\r\n .pipe(filter((event) => !!event === true && event instanceof ResolveStart))\r\n .subscribe((ar: ResolveStart) => {\r\n let destinationRoute = ar.state.root?.firstChild;\r\n while (destinationRoute?.firstChild) {\r\n destinationRoute = destinationRoute.firstChild;\r\n }\r\n\r\n const formIdQuery =\r\n parseInt(ar.state.root.queryParams[FORM_ID_HEADER], 10) ||\r\n destinationRoute?.data['formId'];\r\n\r\n if (formIdQuery) {\r\n this.logger.log('ResolveStart setting form from id', formIdQuery);\r\n this.formService.setCurrentForm(formIdQuery, ar.url);\r\n }\r\n });\r\n }\r\n\r\n private subscribeToNavigationEnd(): void {\r\n this.router.events\r\n .pipe(\r\n filter((event) => !!event === true && event instanceof NavigationEnd),\r\n map(() => this.activatedRoute),\r\n map((route: ActivatedRoute) => {\r\n while (route.firstChild) {\r\n route = route.firstChild;\r\n }\r\n\r\n return route;\r\n }),\r\n filter((route) => route.outlet === 'primary'),\r\n mergeMap((route) => route.data)\r\n )\r\n .subscribe((routeData: Data) => {\r\n this.database = this.loginStatus.getCurrent().database;\r\n this.setTitle(routeData['title']);\r\n const routeFormEnumId =\r\n routeData['formEnumId'] || this.activatedRoute.snapshot.queryParams[ENUM_ID_Q_PARAM];\r\n\r\n if (routeFormEnumId) {\r\n this.formService.setCurrentFormByEnumId(routeFormEnumId);\r\n } else {\r\n this.formService.setCurrentForm(routeData['formId'], this.router.url);\r\n }\r\n });\r\n }\r\n}\r\n"], "mappings": "6MAoBA,IAAaA,GAAsB,IAAA,CAA7B,MAAOA,CAAsB,CAgBvBC,eACAC,YACAC,OACAC,YACAC,OACAC,aApBFC,SACAC,eAAiB,EACjBC,YAAc,GACdC,0BAA4B,IAAIC,EAChCC,gBAAkB,IAAID,EAE9B,IAAWE,yBAAuB,CAChC,OAAO,KAAKH,0BAA0BI,aAAY,CACpD,CAEA,IAAWC,eAAa,CACtB,OAAO,KAAKH,gBAAgBE,aAAY,CAC1C,CAEAE,YACUf,EACAC,EACAC,EACAC,EACAC,EACAC,EAAmB,CALnB,KAAAL,eAAAA,EACA,KAAAC,YAAAA,EACA,KAAAC,OAAAA,EACA,KAAAC,YAAAA,EACA,KAAAC,OAAAA,EACA,KAAAC,aAAAA,CACP,CAEIW,YAAU,CACX,KAAKR,cAIT,KAAKS,0BAAyB,EAC9B,KAAKC,wBAAuB,EAC5B,KAAKC,yBAAwB,EAC7B,KAAKX,YAAc,GACrB,CAEOY,SAASC,EAAa,CAC3BA,GAAS,KAAKf,SAAW,MAAQ,KAAKA,SAAW,GACjD,KAAKD,aAAae,SAASC,CAAK,EAChC,KAAKV,gBAAgBW,KAAK,KAAKjB,aAAakB,SAAQ,CAAE,CACxD,CAEQN,2BAAyB,CAC/B,KAAKb,OAAOoB,OAAOC,UAAWC,GAAsB,CAC9CA,aAAiBC,EACnB,KAAKpB,kBACImB,aAAiBE,GAAiBF,aAAiBG,IAC5D,KAAKtB,iBAGP,KAAKE,0BAA0Ba,KAAK,CAAC,CAAC,KAAKf,cAAc,CAC3D,CAAC,CACH,CAEQW,yBAAuB,CAC7B,KAAKd,OAAOoB,OACTM,KAAKC,EAAQL,GAAU,CAAC,CAACA,GAAkBA,aAAiBM,CAAY,CAAC,EACzEP,UAAWQ,GAAoB,CAC9B,IAAIC,EAAmBD,EAAGE,MAAMC,MAAMC,WACtC,KAAOH,GAAkBG,YACvBH,EAAmBA,EAAiBG,WAGtC,IAAMC,EACJC,SAASN,EAAGE,MAAMC,KAAKI,YAAYC,CAAc,EAAG,EAAE,GACtDP,GAAkBQ,KAAK,OAErBJ,IACF,KAAKpC,OAAOyC,IAAI,oCAAqCL,CAAW,EAChE,KAAKrC,YAAY2C,eAAeN,EAAaL,EAAGY,GAAG,EAEvD,CAAC,CACL,CAEQ1B,0BAAwB,CAC9B,KAAKf,OAAOoB,OACTM,KACCC,EAAQL,GAAU,CAAC,CAACA,GAAkBA,aAAiBE,CAAa,EACpEkB,EAAI,IAAM,KAAK9C,cAAc,EAC7B8C,EAAKC,GAAyB,CAC5B,KAAOA,EAAMV,YACXU,EAAQA,EAAMV,WAGhB,OAAOU,CACT,CAAC,EACDhB,EAAQgB,GAAUA,EAAMC,SAAW,SAAS,EAC5CC,EAAUF,GAAUA,EAAML,IAAI,CAAC,EAEhCjB,UAAWyB,GAAmB,CAC7B,KAAK5C,SAAW,KAAKH,YAAYgD,WAAU,EAAG7C,SAC9C,KAAKc,SAAS8B,EAAU,KAAQ,EAChC,IAAME,EACJF,EAAU,YAAiB,KAAKlD,eAAeqD,SAASb,YAAYc,CAAe,EAEjFF,EACF,KAAKnD,YAAYsD,uBAAuBH,CAAe,EAEvD,KAAKnD,YAAY2C,eAAeM,EAAU,OAAW,KAAK9C,OAAOyC,GAAG,CAExE,CAAC,CACL,4CApGW9C,GAAsByD,EAAAC,CAAA,EAAAD,EAAAE,CAAA,EAAAF,EAAAG,CAAA,EAAAH,EAAAI,CAAA,EAAAJ,EAAAK,CAAA,EAAAL,EAAAM,CAAA,CAAA,CAAA,6BAAtB/D,EAAsBgE,QAAtBhE,EAAsBiE,UAAAC,WADT,MAAM,CAAA,SACnBlE,CAAsB,GAAA", "names": ["RoutingStrategyService", "activatedRoute", "formService", "logger", "loginStatus", "router", "titleService", "database", "asyncLoadCount", "initialized", "showRouteLoadIndicatorSub", "Subject", "titleChangedSub", "showRouteLoadIndicator$", "asObservable", "titleChanged$", "constructor", "initialize", "subscribeToAllRouteEvents", "subscribeToResolveStart", "subscribeToNavigationEnd", "setTitle", "title", "next", "getTitle", "events", "subscribe", "event", "NavigationStart", "NavigationEnd", "NavigationCancel", "pipe", "filter", "ResolveStart", "ar", "destinationRoute", "state", "root", "firstChild", "formIdQuery", "parseInt", "queryParams", "FORM_ID_HEADER", "data", "log", "setCurrentForm", "url", "map", "route", "outlet", "mergeMap", "routeData", "getCurrent", "routeFormEnumId", "snapshot", "ENUM_ID_Q_PARAM", "setCurrentFormByEnumId", "\u0275\u0275inject", "ActivatedRoute", "FormService", "Logger", "LoginStatusService", "Router", "Title", "factory", "\u0275fac", "providedIn"] }