@engie-group/ngx-gem-spaas
Version:
This library contains services, components, images and styles to provide a unified look and way-of-working throughout GEM SPaaS.
1 lines • 195 kB
Source Map (JSON)
{"version":3,"file":"engie-group-ngx-gem-spaas.mjs","sources":["../../../projects/ngx-gem-spaas/src/_models/embed-mode.model.ts","../../../projects/ngx-gem-spaas/src/_services/embed-mode.service.ts","../../../projects/ngx-gem-spaas/src/base/base.component.ts","../../../projects/ngx-gem-spaas/src/_services/window-utils.service.ts","../../../projects/ngx-gem-spaas/src/new-version/new-version.component.ts","../../../projects/ngx-gem-spaas/src/new-version/new-version.component.html","../../../projects/ngx-gem-spaas/src/_services/utils.service.ts","../../../projects/ngx-gem-spaas/src/_models/okta.model.ts","../../../projects/ngx-gem-spaas/src/_models/new-version.model.ts","../../../projects/ngx-gem-spaas/src/_models/config.model.ts","../../../projects/ngx-gem-spaas/src/_services/new-version.service.ts","../../../projects/ngx-gem-spaas/src/pwa-install/pwa-install.component.ts","../../../projects/ngx-gem-spaas/src/pwa-install/pwa-install.component.html","../../../projects/ngx-gem-spaas/src/_services/config.service.ts","../../../projects/ngx-gem-spaas/src/_services/local-storage.service.ts","../../../projects/ngx-gem-spaas/src/_services/pwa-install.service.ts","../../../projects/ngx-gem-spaas/src/_models/theme.model.ts","../../../projects/ngx-gem-spaas/src/_models/settings.model.ts","../../../projects/ngx-gem-spaas/src/_services/settings.service.ts","../../../projects/ngx-gem-spaas/src/_services/theme.service.ts","../../../projects/ngx-gem-spaas/src/_services/app-init.service.ts","../../../projects/ngx-gem-spaas/src/_models/bg.model.ts","../../../projects/ngx-gem-spaas/src/bg/bg.component.ts","../../../projects/ngx-gem-spaas/src/bg/bg.component.html","../../../projects/ngx-gem-spaas/src/embed/embed.component.ts","../../../projects/ngx-gem-spaas/src/embed/embed.component.html","../../../projects/ngx-gem-spaas/src/_services/session-storage.service.ts","../../../projects/ngx-gem-spaas/src/_services/okta.service.ts","../../../projects/ngx-gem-spaas/src/intro/intro.component.ts","../../../projects/ngx-gem-spaas/src/intro/intro.component.html","../../../projects/ngx-gem-spaas/src/material.module.ts","../../../projects/ngx-gem-spaas/src/_models/slide-out.model.ts","../../../projects/ngx-gem-spaas/src/_services/slide-out.service.ts","../../../projects/ngx-gem-spaas/src/menu/menu.component.ts","../../../projects/ngx-gem-spaas/src/menu/menu.component.html","../../../projects/ngx-gem-spaas/src/_models/active-route.model.ts","../../../projects/ngx-gem-spaas/src/_services/active-route.service.ts","../../../projects/ngx-gem-spaas/src/menu-side-bar/menu-side-bar.component.ts","../../../projects/ngx-gem-spaas/src/menu-side-bar/menu-side-bar.component.html","../../../projects/ngx-gem-spaas/src/menu-side-bar/menu-side-bar-submenu-list.component.ts","../../../projects/ngx-gem-spaas/src/menu-side-bar/menu-side-bar-submenu-list.component.html","../../../projects/ngx-gem-spaas/src/_directives/hover.directive.ts","../../../projects/ngx-gem-spaas/src/menu-side-bar/menu-side-bar-icon.component.ts","../../../projects/ngx-gem-spaas/src/menu-side-bar/menu-side-bar-icon.component.html","../../../projects/ngx-gem-spaas/src/_interceptors/okta-auth.interceptor.ts","../../../projects/ngx-gem-spaas/src/_services/preloader.service.ts","../../../projects/ngx-gem-spaas/src/preloader/preloader.component.ts","../../../projects/ngx-gem-spaas/src/preloader/preloader.component.html","../../../projects/ngx-gem-spaas/src/resizable/resizable.component.ts","../../../projects/ngx-gem-spaas/src/resizable/resizable.component.html","../../../projects/ngx-gem-spaas/src/toggle/toggle.component.ts","../../../projects/ngx-gem-spaas/src/toggle/toggle.component.html","../../../projects/ngx-gem-spaas/src/settings/settings.component.ts","../../../projects/ngx-gem-spaas/src/settings/settings.component.html","../../../projects/ngx-gem-spaas/src/_models/sync-scroll.model.ts","../../../projects/ngx-gem-spaas/src/_services/sync-scroll.service.ts","../../../projects/ngx-gem-spaas/src/_directives/sync-scroll.directive.ts","../../../projects/ngx-gem-spaas/src/slide-out/slide-out.component.ts","../../../projects/ngx-gem-spaas/src/slide-out/slide-out.component.html","../../../projects/ngx-gem-spaas/src/menu-side-bar/menu-side-bar-submenu-item.component.ts","../../../projects/ngx-gem-spaas/src/menu-side-bar/menu-side-bar-submenu-item.component.html","../../../projects/ngx-gem-spaas/src/user-info/user-info.component.ts","../../../projects/ngx-gem-spaas/src/user-info/user-info.component.html","../../../projects/ngx-gem-spaas/src/spaas.module.ts","../../../projects/ngx-gem-spaas/src/_guards/embedded-only.guard.ts","../../../projects/ngx-gem-spaas/src/_guards/okta-auth.guard.ts","../../../projects/ngx-gem-spaas/src/_models/generic-object.model.ts","../../../projects/ngx-gem-spaas/src/_models/post-message.model.ts","../../../projects/ngx-gem-spaas/src/_models/regex.model.ts","../../../projects/ngx-gem-spaas/src/_services/post-message.service.ts","../../../projects/ngx-gem-spaas/src/_services/snackbar.service.ts","../../../projects/ngx-gem-spaas/src/_interceptors/connection-error.interceptor.ts","../../../projects/ngx-gem-spaas/src/public-api.ts","../../../projects/ngx-gem-spaas/src/engie-group-ngx-gem-spaas.ts"],"sourcesContent":["export declare type EmbedModeType = '' | 'iframe';\r\nexport enum EmbedModeEnum {\r\n none = '',\r\n iframe = 'iframe',\r\n}\r\n\r\nexport class EmbedModeModel {\r\n parent: string;\r\n pwd: string;\r\n type: EmbedModeType;\r\n usr: string;\r\n\r\n constructor() {\r\n this.parent = '';\r\n this.pwd = '';\r\n this.type = EmbedModeEnum.none;\r\n this.usr = '';\r\n }\r\n\r\n isIframe(): boolean {\r\n return this.type === EmbedModeEnum.iframe;\r\n }\r\n\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable, ReplaySubject} from 'rxjs';\r\nimport {EmbedModeEnum, EmbedModeModel} from '../_models/embed-mode.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EmbedModeService {\r\n\r\n readonly POST_MESSAGE_GETTHEME = 'getTheme';\r\n\r\n private embedMode = new EmbedModeModel();\r\n private embedMode$ = new ReplaySubject<EmbedModeModel>(1);\r\n\r\n embeddedWindow: Window | null = null;\r\n\r\n private static getIframeParent(): string {\r\n const ref = document.referrer || '';\r\n if (ref) {\r\n const url = new URL(ref);\r\n if (url.pathname !== '/') {\r\n return url.pathname.replace(/\\//g, '');\r\n } else {\r\n const subdomain = url.hostname.split('.')[0] || '';\r\n if (!subdomain.includes('cylon')) {\r\n return subdomain;\r\n }\r\n }\r\n }\r\n return '';\r\n }\r\n\r\n // setEmbedMode is called from the app-init.service\r\n setEmbedMode(): void {\r\n if (window.location !== window.parent.location) {\r\n // iframe mode\r\n this.embedMode.type = EmbedModeEnum.iframe;\r\n this.embedMode.parent = EmbedModeService.getIframeParent();\r\n }\r\n this.newEmbedMode();\r\n }\r\n\r\n // ********************************************************************************************************\r\n // LOAD DATA\r\n // ********************************************************************************************************\r\n\r\n // ********************************************************************************************************\r\n // BROADCAST DATA\r\n // ********************************************************************************************************\r\n\r\n private newEmbedMode() {\r\n // console.log('embed mode set: ' + (this.embedMode.type || 'none'));\r\n this.embedMode$.next(this.embedMode);\r\n }\r\n\r\n onNewEmbedMode(): Observable<EmbedModeModel> {\r\n return this.embedMode$.asObservable();\r\n }\r\n\r\n getEmbedMode(): EmbedModeModel {\r\n return this.embedMode;\r\n }\r\n\r\n getEmbeddedWindow(): Window | null {\r\n return this.embeddedWindow;\r\n }\r\n\r\n}\r\n","import {Component, OnDestroy} from '@angular/core';\r\nimport {Subject} from 'rxjs';\r\n\r\n@Component({\r\n selector: 'spaas-base',\r\n template: '',\r\n standalone: false\r\n})\r\n\r\nexport class BaseComponent implements OnDestroy {\r\n\r\n onDestroy$: Subject<void> = new Subject<void>();\r\n\r\n ngOnDestroy(): void {\r\n this.onDestroy$.next();\r\n this.onDestroy$.complete();\r\n }\r\n\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { InjectionToken } from '@angular/core';\r\n\r\n\r\nexport const WINDOW = new InjectionToken<Window>('Window', {\r\n providedIn: 'root',\r\n factory: () => window\r\n});\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class WindowUtilsService {\r\n constructor(@Inject(WINDOW) private window: Window) { }\r\n\r\n getWindowWidth(): number {\r\n return this.window.innerWidth;\r\n }\r\n\r\n getWindowHeight(): number {\r\n return this.window.innerHeight;\r\n }\r\n\r\n getUserAgent(): string {\r\n return this.window.navigator.userAgent;\r\n }\r\n\r\n getLanguage(): string {\r\n return this.window.navigator.language;\r\n }\r\n\r\n isOnline(): boolean {\r\n return this.window.navigator.onLine;\r\n }\r\n\r\n getOrigin(): string {\r\n return this.window.location.origin;\r\n }\r\n\r\n reloadPage(): void {\r\n this.window.location.reload();\r\n }\r\n\r\n redirectTo(url: string): void {\r\n this.window.location.href = url;\r\n }\r\n\r\n getLocation(): Location {\r\n return this.window.location;\r\n }\r\n\r\n openWindow(url:string){\r\n this.window.open(url,'_blank');\r\n }\r\n\r\n}\r\n","import {Component} from '@angular/core';\r\nimport {MatBottomSheetRef} from \"@angular/material/bottom-sheet\";\r\nimport {BaseComponent} from \"../base/base.component\";\r\nimport { WindowUtilsService } from '../_services/window-utils.service';\r\n\r\n@Component({\r\n selector: 'spaas-new-version',\r\n templateUrl: './new-version.component.html',\r\n styleUrls: ['./new-version.component.scss'],\r\n standalone: false\r\n})\r\nexport class NewVersionComponent extends BaseComponent {\r\n\r\n constructor(\r\n private bottomSheetRef: MatBottomSheetRef<NewVersionComponent>,\r\n private windowUtilsService: WindowUtilsService\r\n ) {\r\n super();\r\n }\r\n\r\n reload(): void {\r\n this.bottomSheetRef.dismiss();\r\n this.windowUtilsService.reloadPage()\r\n }\r\n\r\n}\r\n","<div class=\"txt-center\">\r\n new version available\r\n <div class=\"flex center pad-big-top\">\r\n <button class=\"primary bold\" (click)=\"reload()\">\r\n load it now\r\n </button>\r\n </div>\r\n</div>\r\n","import {Injectable} from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UtilsService {\r\n\r\n static copy<T>(objIn: T): T {\r\n return JSON.parse(JSON.stringify(objIn));\r\n }\r\n\r\n // DISTINCT SORTED LIST WITHOUT NULL/UNDEFINED VALUES\r\n static distinct(listIn: string[], prefix = '', sortAsc = true): string[] {\r\n const sortCorr = sortAsc ? 1 : -1;\r\n let listOut = listIn\r\n .filter((value, index, self) => value && self.indexOf(value) === index)\r\n .sort((a, b) => a < b ? -1 * sortCorr : 1 * sortCorr);\r\n if (prefix) {\r\n listOut = listOut.map((c) => prefix + c);\r\n }\r\n return listOut;\r\n }\r\n\r\n static round(num: number, dec: number): number | null {\r\n if (num === null || num === undefined) {\r\n return null;\r\n }\r\n return Number((num).toFixed(dec));\r\n }\r\n\r\n static checkJSON(itemToCheck: string): boolean {\r\n let item = {};\r\n try {\r\n item = JSON.parse(itemToCheck);\r\n } catch (e) {\r\n return false;\r\n }\r\n return typeof item === 'object' && item !== null;\r\n }\r\n\r\n static convertToValidNumOrNull(\r\n inputValue: any,\r\n isToFloor = false,\r\n ): any {\r\n if (inputValue === null || inputValue === '') {\r\n return null;\r\n }\r\n const nv = inputValue.toString().trim().toLowerCase();\r\n const nvNum = Number(nv.replace(',', '.'));\r\n return Number.isNaN(nvNum) ? null : isToFloor ? Math.floor(nvNum) : nvNum;\r\n }\r\n\r\n static hasProp(obj: any, key: string): boolean {\r\n return Object.prototype.hasOwnProperty.call(obj, key);\r\n }\r\n\r\n}\r\n","/**\r\n * Okta configuration object to be provided via \"forRoot\" method of the SpaasModule.\r\n *\r\n * @property {string[]} additionalScopes the scopes needed for your particular back-end\r\n * @property {string} clientId the client id of your SPA\r\n * @property {boolean} interceptAddContentHeader whether to automatically add the \"json\" content-type header\r\n * to non-GET, intercepted http-requests (optional, default is true)\r\n * @property {string[]} interceptUrls the urls to intercept and add an Authorization - Bearer header to\r\n * @property {string} tenantId the tenant id of your Okta issuer\r\n * @property {string} url the url of your Okta issuer\r\n * @property {boolean} withPath false for subdomains, true for context (optional, default is false)\r\n */\r\nimport {UtilsService} from \"../_services/utils.service\";\r\n\r\nexport class OktaConfigModel {\r\n additionalScopes: string[] = [];\r\n clientId: string = '';\r\n interceptAddContentHeader?: boolean = true;\r\n interceptUrls: string[] = [];\r\n tenantId: string = '';\r\n url: string = '';\r\n withPath?: boolean = false;\r\n\r\n constructor(objIn: any) {\r\n this.additionalScopes = objIn.additionalScopes || [];\r\n this.clientId = objIn.clientId || '';\r\n this.interceptAddContentHeader = UtilsService.hasProp(objIn, 'interceptAddContentHeader') ? objIn.interceptAddContentHeader : true;\r\n this.interceptUrls = objIn.interceptUrls || [];\r\n this.tenantId = objIn.tenantId || '';\r\n this.url = objIn.url || '';\r\n this.withPath = UtilsService.hasProp(objIn, 'withPath') ? objIn.withPath : false;\r\n }\r\n\r\n}\r\n\r\nexport class OktaUserModel {\r\n email: string;\r\n firstName: string;\r\n lastName: string;\r\n groups: string[];\r\n userId: string;\r\n\r\n constructor(props: any) {\r\n this.email = props?.email || '';\r\n this.firstName = props?.firstName || '';\r\n this.groups = props?.groups || [];\r\n this.lastName = props?.lastName || '';\r\n this.userId = props.userid || props.userId || ''; // props.userId is for when OktaUserModel is extended and fed itself as props\r\n }\r\n\r\n static stripMail(strIn: string): string {\r\n return strIn ? strIn.replace('@engie.com', '').replace('@external.engie.com', '') : '';\r\n }\r\n\r\n checkGroup(group: string): boolean {\r\n return this.groups.some((g) => g.toLowerCase().startsWith((group || '').toLowerCase()));\r\n }\r\n\r\n}\r\n","/**\r\n * New version configuration object to be provided via \"forRoot\" method of the SpaasModule.\r\n *\r\n * @property {number} reminder default is zero. If not zero and hasBackdrop === true, this sets the interval\r\n * (in minutes) at which to prompt the user to load the newly deployed version. Will be floored to a 5-minute minimum.\r\n * @property {boolean} hasBackdrop default is true. If false, no backdrop is shown for the bottom-sheet pop-up (and\r\n * so the pop-up can only be dismissed by accepting the new version).\r\n */\r\n\r\nexport class NewVersionConfigModel {\r\n reminder?: number = 0;\r\n hasBackdrop?: boolean = true;\r\n\r\n constructor(objIn: any) {\r\n this.reminder = objIn.reminder ? Math.max(objIn.reminder, 5) : 0;\r\n this.hasBackdrop = objIn.hasOwnProperty('hasBackdrop') ? objIn.hasBackdrop : true;\r\n }\r\n\r\n}\r\n","import {OktaConfigModel} from \"./okta.model\";\r\nimport {NewVersionConfigModel} from \"./new-version.model\";\r\n\r\n/**\r\n * Library configuration object to be provided via \"forRoot\" method of the SpaasModule.\r\n *\r\n * @property {string} appName the application name. Will be shown in browser tab and will be used as storage prefix\r\n * @property {string} environment will be used as storage prefix, in combination with appName\r\n * @property {OktaConfigModel} oktaConfig the Okta configuration for this project\r\n * @property {NewVersionConfigModel} newVersionConfig the configuration for the new version handling\r\n */\r\nexport class SpaasConfigModel {\r\n appName: string = '';\r\n environment: string = '';\r\n oktaConfig = new OktaConfigModel({});\r\n newVersionConfig? = new NewVersionConfigModel({});\r\n\r\n constructor(objIn: SpaasConfigModel) {\r\n this.appName = objIn.appName || '';\r\n this.environment = objIn.environment || '';\r\n this.oktaConfig = new OktaConfigModel(objIn.oktaConfig || {})\r\n this.newVersionConfig = new NewVersionConfigModel(objIn.newVersionConfig || {})\r\n }\r\n\r\n}\r\n\r\nexport class SpaasExtConfigModel extends SpaasConfigModel {\r\n cleanAppName: string;\r\n storagePrefix: string;\r\n\r\n constructor(conf: SpaasConfigModel) {\r\n super(conf);\r\n this.cleanAppName = this.appName.charAt(0).toUpperCase() + this.appName.substring(1, this.appName.length).toLowerCase();\r\n this.storagePrefix = (this.appName || this.oktaConfig?.clientId) + '-' + this.environment + '-';\r\n }\r\n\r\n}\r\n","import {filter, timer} from 'rxjs';\nimport {Inject, Injectable, Optional} from '@angular/core';\nimport {MatBottomSheet} from \"@angular/material/bottom-sheet\";\nimport {SwUpdate, VersionReadyEvent} from \"@angular/service-worker\";\nimport {NewVersionComponent} from \"../new-version/new-version.component\";\nimport {SpaasConfigModel} from \"../_models/config.model\";\nimport {NewVersionConfigModel} from \"../_models/new-version.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NewVersionService {\n\n constructor(\n @Optional() @Inject(SpaasConfigModel) private readonly spaasConfig: SpaasConfigModel,\n private bottomSheet: MatBottomSheet,\n private swUpdate: SwUpdate,\n ) {\n // we get the raw spaasConfig provided by the client app, not the one from the ConfigService (because\n // this is called from appInit, so we cannot rely on the NewVersionConfigModel constructor making things clean.\n // Hence, always do a new NewVersionConfigModel\n }\n\n getNewVersion(): void {\n // LISTEN FOR NEW VERSIONS\n if (!this.swUpdate?.isEnabled) {\n return;\n }\n this.swUpdate.versionUpdates\n .pipe(filter((evt): evt is VersionReadyEvent => evt.type === 'VERSION_READY'))\n .subscribe(\n () => {\n const cfg = new NewVersionConfigModel(this.spaasConfig?.newVersionConfig || {});\n this.bottomSheet.open(NewVersionComponent, {hasBackdrop: cfg.hasBackdrop});\n this.startTimer();\n }\n );\n }\n\n private startTimer(): void {\n const cfg = new NewVersionConfigModel(this.spaasConfig?.newVersionConfig || {});\n if (cfg.reminder && cfg.hasBackdrop) {\n // if reminder is set and hasBackdrop is true, just start the timer (if no backdrop, the pop-up will stay open, no need for a reminder)\n // if the user has accepted the new version anyway, the page will reload\n // and after page reload, the timer will not be started again, because there will no longer be a new version\n timer(cfg.reminder * 60000, cfg.reminder * 60000)\n .subscribe(() => {\n this.bottomSheet.open(NewVersionComponent, {hasBackdrop: cfg.hasBackdrop});\n })\n }\n }\n\n}\n","import {Component} from '@angular/core';\nimport {PwaInstallService} from '../_services/pwa-install.service';\nimport {MatBottomSheetRef} from \"@angular/material/bottom-sheet\";\nimport {BaseComponent} from \"../base/base.component\";\n\n@Component({\n selector: 'spaas-pwa-install',\n templateUrl: './pwa-install.component.html',\n styleUrls: ['./pwa-install.component.scss'],\n standalone: false\n})\nexport class PwaInstallComponent extends BaseComponent {\n\n constructor(\n private bottomSheetRef: MatBottomSheetRef<PwaInstallComponent>,\n private pwaInstallService: PwaInstallService,\n ) {\n super();\n }\n\n doInstall(): void {\n this.pwaInstallService.doInstall();\n this.bottomSheetRef.dismiss();\n }\n\n ignoreInstall(): void {\n this.pwaInstallService.ignoreInstall();\n this.bottomSheetRef.dismiss();\n }\n\n}\n","<div class=\"txt-center\">\r\n install as an app?\r\n <div class=\"flex center column-gap-10 pad-big-top\">\r\n <button class=\"error bold\" (click)=\"ignoreInstall()\" data-testid=\"ignore-install\">\r\n no thanx\r\n </button>\r\n <button class=\"primary bold\" (click)=\"doInstall()\" data-testid=\"install\">\r\n yes please\r\n </button>\r\n </div>\r\n</div>\r\n","import {Inject, Injectable, Optional} from '@angular/core';\r\nimport {SpaasConfigModel, SpaasExtConfigModel} from \"../_models/config.model\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ConfigService {\r\n\r\n config: SpaasExtConfigModel;\r\n\r\n constructor(\r\n @Optional() @Inject(SpaasConfigModel) private readonly spaasConfig: SpaasConfigModel,\r\n ) {\r\n if (!spaasConfig) {\r\n throw new Error('please provide a SpaasConfigModel using the forRoot method of the SpaasModule');\r\n }\r\n this.config = new SpaasExtConfigModel(this.spaasConfig);\r\n }\r\n\r\n getConfig(): SpaasExtConfigModel {\r\n return this.config;\r\n }\r\n\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {ConfigService} from \"./config.service\";\r\nimport {UtilsService} from \"./utils.service\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalStorageService {\r\n\r\n private readonly storagePrefix: string;\r\n\r\n constructor(\r\n private configService: ConfigService,\r\n ) {\r\n this.storagePrefix = this.configService.getConfig().storagePrefix;\r\n }\r\n\r\n getItem(lsKey: string): any {\r\n const lsVal = localStorage.getItem(this.storagePrefix + lsKey) || '';\r\n return UtilsService.checkJSON(lsVal) ? JSON.parse(lsVal) : Number.isNaN(Number(lsVal)) ? lsVal : Number(lsVal);\r\n }\r\n\r\n getItems(searchString: string): any[] {\r\n const tempResults = [];\r\n for (const key in localStorage) {\r\n if (localStorage.hasOwnProperty(key)) {\r\n if (key.indexOf(searchString) > -1) {\r\n if (UtilsService.checkJSON(localStorage[key])) {\r\n tempResults.push(JSON.parse(localStorage[key]));\r\n } else {\r\n tempResults.push(localStorage[key]);\r\n }\r\n }\r\n }\r\n }\r\n return tempResults;\r\n }\r\n\r\n setItem(lsKey: string, lsValue: any): void {\r\n if (typeof lsValue === 'object') {\r\n localStorage.setItem(this.storagePrefix + lsKey, JSON.stringify(lsValue));\r\n } else {\r\n localStorage.setItem(this.storagePrefix + lsKey, lsValue);\r\n }\r\n }\r\n\r\n removeItem(lsKey: string): void {\r\n localStorage.removeItem(this.storagePrefix + lsKey);\r\n }\r\n\r\n}\r\n","import {fromEvent, timer} from 'rxjs';\nimport {Injectable} from '@angular/core';\nimport {Platform} from '@angular/cdk/platform';\nimport {take} from 'rxjs/operators';\nimport {MatBottomSheet} from \"@angular/material/bottom-sheet\";\nimport {PwaInstallComponent} from \"../pwa-install/pwa-install.component\";\nimport {LocalStorageService} from \"./local-storage.service\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PwaInstallService {\n\n private readonly LS_ALREADY_PROMPTED = 'installPrompted';\n\n private promptEvent: any;\n\n constructor(\n private bottomSheet: MatBottomSheet,\n private lsService: LocalStorageService,\n private platform: Platform,\n ) {\n }\n\n installPrompt() {\n if (!this.platform.IOS) {\n fromEvent(window, 'beforeinstallprompt')\n .subscribe(\n (e) => {\n e.preventDefault();\n this.promptEvent = e;\n this.openBottomSheet();\n }\n );\n } else {\n const isInStandaloneMode = ('standalone' in window.navigator) && (window.navigator['standalone']);\n if (!isInStandaloneMode) {\n this.openBottomSheet();\n }\n }\n }\n\n private openBottomSheet() {\n console.log('will prompt install');\n if (this.lsService.getItem(this.LS_ALREADY_PROMPTED) === 'true') {\n return;\n }\n timer(3000)\n .pipe(take(1))\n .subscribe(() => {\n this.bottomSheet.open(PwaInstallComponent);\n });\n }\n\n doInstall(): void {\n this.promptEvent.prompt();\n }\n\n ignoreInstall(): void {\n this.lsService.setItem(this.LS_ALREADY_PROMPTED, true);\n }\n\n}\n","export declare type ThemeType = '' | 'dark' | 'light';\r\nexport const DATA__HAS_MENU = {menu: 'yes'};\r\nexport const DATA__THEME_DARK = {theme: 'dark'};\r\nexport const DATA__THEME_LIGHT = {theme: 'light'};\r\nexport const FONT_FAMILY = 'Lato, Arial, sans-serif';\r\n\r\nexport class ThemeModel {\r\n name: ThemeType;\r\n properties: any;\r\n\r\n constructor(name: ThemeType, props: any) {\r\n this.name = name;\r\n this.properties = props;\r\n }\r\n\r\n getRgb(color: string, alpha = 1): string {\r\n const h = Number(this.properties['--' + color + '-h']);\r\n let s = Number(this.properties['--' + color + '-s'].replace('%', ''));\r\n let l = Number(this.properties['--' + color + '-l'].replace('%', ''));\r\n\r\n // Must be fractions of 1\r\n s /= 100;\r\n l /= 100;\r\n\r\n const c = (1 - Math.abs(2 * l - 1)) * s,\r\n x = c * (1 - Math.abs((h / 60) % 2 - 1)),\r\n m = l - c / 2;\r\n let r = 0,\r\n g = 0,\r\n b = 0;\r\n\r\n if (0 <= h && h < 60) {\r\n r = c;\r\n g = x;\r\n b = 0;\r\n } else if (60 <= h && h < 120) {\r\n r = x;\r\n g = c;\r\n b = 0;\r\n } else if (120 <= h && h < 180) {\r\n r = 0;\r\n g = c;\r\n b = x;\r\n } else if (180 <= h && h < 240) {\r\n r = 0;\r\n g = x;\r\n b = c;\r\n } else if (240 <= h && h < 300) {\r\n r = x;\r\n g = 0;\r\n b = c;\r\n } else if (300 <= h && h < 360) {\r\n r = c;\r\n g = 0;\r\n b = x;\r\n }\r\n r = Math.round((r + m) * 255);\r\n g = Math.round((g + m) * 255);\r\n b = Math.round((b + m) * 255);\r\n\r\n return 'rgba(' + r + ',' + g + ',' + b + ',' + alpha + ')';\r\n }\r\n\r\n}\r\n\r\n// THEMES\r\n\r\n// IMPORTANT: IF YOU UPDATE THE SETTINGS FOR PRIMARY, ACCENT OR ERROR HERE,\r\n// ALSO UPDATE THEM IN MATERIAL.SCSS !\r\nexport const light = new ThemeModel(\r\n 'light',\r\n {\r\n '--primary-h': 204,\r\n '--primary-s': '100%',\r\n '--primary-l': '40%',\r\n '--primary-op-min': 0.8,\r\n '--primary-op-max': 0.4,\r\n '--secondary-h': 27,\r\n '--secondary-s': '93%',\r\n '--secondary-l': '58%',\r\n '--secondary-op-min': 0.8,\r\n '--secondary-op-max': 0.4,\r\n '--accent-h': 144,\r\n '--accent-s': '100%',\r\n '--accent-l': '27%',\r\n '--accent-op-min': 0.95,\r\n '--accent-op-max': 0.4,\r\n '--error-h': 1,\r\n '--error-s': '70%',\r\n '--error-l': '53%',\r\n '--error-op-min': 0.6,\r\n '--error-op-max': 0.4,\r\n '--bg-h': 0,\r\n '--bg-s': '0%',\r\n '--bg-l': '98%',\r\n '--bg-accent': '-6%',\r\n '--bg-lighten': '6%',\r\n '--bg-darken': '-14%',\r\n '--bg-op-overlay': 0.4,\r\n '--bg-op-min': 0.84,\r\n '--bg-op-max': 0.2,\r\n '--color-h': 0,\r\n '--color-s': '0%',\r\n '--color-l': '13.4%',\r\n '--color-op-min': 0.8,\r\n '--color-op-max': 0.4,\r\n '--disabled-h': 0,\r\n '--disabled-s': '0%',\r\n '--disabled-l': '62%',\r\n '--disabled-op-min': 0.8,\r\n '--disabled-op-max': 0.4,\r\n '--table-even': '-8%',\r\n '--table-odd': '-3%',\r\n '--hover-lighten': '-12%',\r\n }\r\n);\r\n\r\n// IMPORTANT: IF YOU UPDATE THE SETTINGS FOR PRIMARY, ACCENT OR ERROR HERE,\r\n// ALSO UPDATE THEM IN MATERIAL.SCSS !\r\nexport const dark = new ThemeModel(\r\n 'dark',\r\n {\r\n '--primary-h': 200,\r\n '--primary-s': '75%',\r\n '--primary-l': '55%',\r\n '--primary-op-min': 0.8,\r\n '--primary-op-max': 0.4,\r\n '--secondary-h': 27,\r\n '--secondary-s': '93%',\r\n '--secondary-l': '58%',\r\n '--secondary-op-min': 0.8,\r\n '--secondary-op-max': 0.4,\r\n '--accent-h': 136,\r\n '--accent-s': '80%',\r\n '--accent-l': '38%',\r\n '--accent-op-min': 0.95,\r\n '--accent-op-max': 0.4,\r\n '--error-h': 1,\r\n '--error-s': '70%',\r\n '--error-l': '56%',\r\n '--error-op-min': 0.6,\r\n '--error-op-max': 0.4,\r\n '--bg-h': 210,\r\n '--bg-s': '16%',\r\n '--bg-l': '10%',\r\n '--bg-accent': '10%',\r\n '--bg-lighten': '4%',\r\n '--bg-darken': '-8%',\r\n '--bg-op-overlay': 0.4,\r\n '--bg-op-min': 0.84,\r\n '--bg-op-max': 0.2,\r\n '--color-h': 0,\r\n '--color-s': '0%',\r\n '--color-l': '98%',\r\n '--color-op-min': 0.8,\r\n '--color-op-max': 0.4,\r\n '--disabled-h': 0,\r\n '--disabled-s': '0%',\r\n '--disabled-l': '49.4%',\r\n '--disabled-op-min': 0.8,\r\n '--disabled-op-max': 0.4,\r\n '--table-even': '10%',\r\n '--table-odd': '3%',\r\n '--hover-lighten': '22%',\r\n }\r\n);\r\n","export type ExportExtensionType = 'csv' | 'xlsx';\r\nexport type DecimalSeparatorType = 'dot' | 'comma';\r\n\r\n/**\r\n * Settings model, used by the settings component to store data on user settings and preferences\r\n *\r\n * @property {boolean} dark the application theme, defaults to light\r\n * @property {ExportExtensionType} exportExtension the preferred extension for data exports, either xlsx or csv\r\n * @property {DecimalSeparatorType} decimalSeparator the user's decimal separator in Excel, used for exporting and\r\n * importing data\r\n * @property {any} extraData any extra data that you want the user to set and store via the settings component\r\n */\r\n\r\nexport class SettingsModel {\r\n dark: boolean;\r\n exportExtension: ExportExtensionType;\r\n decimalSeparator: DecimalSeparatorType;\r\n extraData: any;\r\n\r\n constructor(objIn: any) {\r\n this.dark = objIn.hasOwnProperty('dark') ? objIn.dark : false; // if you update the default, also update material.scss default!!\r\n this.decimalSeparator = objIn.decimalSeparator || 'dot';\r\n this.exportExtension = objIn.exportExtension || 'xlsx';\r\n this.extraData = objIn.extraData || {};\r\n }\r\n\r\n getCsvDelimiter(): string {\r\n return this.decimalSeparator === 'comma' ? ';' : ',';\r\n }\r\n\r\n}\r\n","import {BehaviorSubject, Observable} from 'rxjs';\r\nimport {Injectable} from '@angular/core';\r\nimport {LocalStorageService} from './local-storage.service';\r\nimport {SettingsModel} from '../_models/settings.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SettingsService {\r\n\r\n private readonly LS_SETTINGS = 'settings';\r\n private settings$ = new BehaviorSubject<SettingsModel>(new SettingsModel(this.lsService.getItem(this.LS_SETTINGS) || {}));\r\n\r\n constructor(\r\n private lsService: LocalStorageService,\r\n ) {\r\n }\r\n\r\n // ********************************************************************************************************\r\n // LOAD DATA\r\n // ********************************************************************************************************\r\n\r\n // ********************************************************************************************************\r\n // BROADCAST DATA\r\n // ********************************************************************************************************\r\n\r\n newSettings(settings: SettingsModel) {\r\n this.lsService.setItem(this.LS_SETTINGS, settings);\r\n this.settings$.next(settings);\r\n }\r\n\r\n onNewSettings(): Observable<SettingsModel> {\r\n return this.settings$.asObservable();\r\n }\r\n\r\n getSettings(): SettingsModel {\r\n return this.settings$.getValue();\r\n }\r\n\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {SettingsService} from \"./settings.service\";\r\nimport {Observable, ReplaySubject} from \"rxjs\";\r\nimport {dark, DATA__THEME_DARK, DATA__THEME_LIGHT, light, ThemeModel, ThemeType} from \"../_models/theme.model\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ThemeService {\r\n\r\n private activeTheme = new ThemeModel('', {});\r\n private activeTheme$ = new ReplaySubject<ThemeModel>(1);\r\n\r\n constructor(\r\n private settingsService: SettingsService,\r\n ) {\r\n }\r\n\r\n // initTheme is called from the app-init.service\r\n initTheme(): void {\r\n if (!this.activeTheme?.name) {\r\n this.setActiveTheme(this.settingsService.getSettings().dark ? 'dark' : 'light');\r\n }\r\n }\r\n\r\n toggleTheme(): void {\r\n if (this.activeTheme?.name === 'light') {\r\n this.setActiveTheme('dark');\r\n } else {\r\n this.setActiveTheme('light');\r\n }\r\n }\r\n\r\n setActiveTheme(theme: ThemeType): void {\r\n // console.log('setting theme to ' + theme);\r\n this.activeTheme = theme === 'dark' ? dark : light;\r\n this.setCssVariables(this.activeTheme.properties);\r\n this.setBodyData(theme === 'dark' ? DATA__THEME_DARK : DATA__THEME_LIGHT)\r\n this.newTheme();\r\n }\r\n\r\n setCssVariables(props: any): void {\r\n for (const prop in props) {\r\n if (props.hasOwnProperty(prop)) {\r\n document.documentElement.style.setProperty(prop, props[prop]);\r\n }\r\n }\r\n }\r\n\r\n setBodyData(props: any): void {\r\n for (const prop in props) {\r\n if (props.hasOwnProperty(prop)) {\r\n document.body.dataset[prop] = props[prop];\r\n }\r\n }\r\n }\r\n\r\n // ********************************************************************************************************\r\n // BROADCAST DATA\r\n // ********************************************************************************************************\r\n\r\n private newTheme() {\r\n this.activeTheme$.next(this.activeTheme);\r\n }\r\n\r\n onNewActiveTheme(): Observable<ThemeModel> {\r\n return this.activeTheme$.asObservable();\r\n }\r\n\r\n getActiveTheme(): ThemeModel {\r\n return this.activeTheme;\r\n }\r\n\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {ThemeService} from \"./theme.service\";\r\nimport {EmbedModeService} from \"./embed-mode.service\";\r\nimport {PwaInstallService} from \"./pwa-install.service\";\r\nimport {NewVersionService} from \"./new-version.service\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppInitService {\r\n\r\n constructor(\r\n private embedModeService: EmbedModeService,\r\n private newVersionService: NewVersionService,\r\n private pwaInstallService: PwaInstallService,\r\n private themeService: ThemeService,\r\n ) {\r\n }\r\n\r\n // initApp is called from the spaas.module using APP_INITIALIZER\r\n initApp(): void {\r\n this.embedModeService.setEmbedMode();\r\n this.themeService.initTheme();\r\n this.pwaInstallService.installPrompt();\r\n this.newVersionService.getNewVersion();\r\n }\r\n\r\n}\r\n","export declare type BgType = 'employee_solar' | 'kathu_mirrors' | 'outeiro_ccgt' | 'shem_mareges' | 'shem_thues' | 'tarfaya_windfarm';\r\n\r\nexport const BG_LIST = {\r\n employee_solar: {url: './assets/images/bgs/employee_solar', alt: 'Employee at a solar plant'},\r\n kathu_mirrors: {\r\n url: './assets/images/bgs/kathu_mirrors',\r\n alt: 'Cylindro-parabolic mirrors of Kathu Solar Park in South Africa'\r\n },\r\n outeiro_ccgt: {\r\n url: './assets/images/bgs/outeiro_ccgt',\r\n alt: 'Portugal Tapada do Outeiro combined cycle gas turbine power station'\r\n },\r\n shem_mareges: {url: './assets/images/bgs/shem_mareges', alt: 'SHEM Mareges hydro station'},\r\n shem_thues: {url: './assets/images/bgs/shem_thues', alt: 'SHEM Thues hydro dam'},\r\n tarfaya_windfarm: {url: './assets/images/bgs/tarfaya_windfarm', alt: 'The Tarfaya wind farm'},\r\n};\r\n","import {Component, Input, OnInit} from '@angular/core';\r\nimport {BG_LIST, BgType} from \"../_models/bg.model\";\r\nimport {BaseComponent} from \"../base/base.component\";\r\n\r\n@Component({\r\n selector: 'spaas-bg',\r\n templateUrl: './bg.component.html',\r\n styleUrls: ['./bg.component.scss'],\r\n standalone: false\r\n})\r\nexport class BgComponent extends BaseComponent implements OnInit {\r\n\r\n imgExt = '.webp';\r\n imgList = BG_LIST;\r\n\r\n // LEFT: ALIGN BG IMG LEFT INSTEAD OF DEFAULT RIGHT\r\n // PORTRAIT: SWITCHES BACKGROUND-SIZE FROM COVER TO AUTO (SO PORTRAIT IMGS ARE NOT STRETCHED OVER FULL WIDTH OF SCREEN)\r\n @Input() bgX = 100;\r\n @Input() bgY = 50;\r\n @Input() bgPortrait = false;\r\n @Input() bgImg: BgType = 'employee_solar';\r\n @Input() bgAnimate = true;\r\n\r\n bg: any;\r\n\r\n ngOnInit(): void {\r\n this.bg = this.imgList[this.bgImg];\r\n }\r\n\r\n}\r\n","<div class=\"bg\">\r\n <div class=\"bg__img-wrapper\"\r\n [title]=\"bg.alt\"\r\n [class.with-anim]=\"bgAnimate\"\r\n [style.background-position-x.%]=\"bgX\"\r\n [style.background-position-y.%]=\"bgY\"\r\n [class.portrait]=\"bgPortrait\"\r\n [style.background-image]=\"'url(' + bg.url + imgExt + ')'\">\r\n </div>\r\n</div>\r\n","import {AfterViewInit, Component, ElementRef, Input, OnInit, ViewChild} from '@angular/core';\r\nimport {BaseComponent} from \"../base/base.component\";\r\nimport {EmbedModeService} from \"../_services/embed-mode.service\";\r\nimport {DomSanitizer, SafeResourceUrl} from \"@angular/platform-browser\";\r\n\r\n@Component({\r\n selector: 'spaas-embed',\r\n templateUrl: './embed.component.html',\r\n styleUrls: ['./embed.component.scss'],\r\n standalone: false\r\n})\r\n\r\nexport class EmbedComponent extends BaseComponent implements OnInit, AfterViewInit {\r\n\r\n /** The url of the application to embed */\r\n @Input() url: string = '';\r\n\r\n /** Use as fullscreen component, or within parent div */\r\n @Input() takeOver: boolean = false;\r\n\r\n @ViewChild('iframe_div') iframeDiv: ElementRef | undefined;\r\n safeUrl: SafeResourceUrl | undefined;\r\n\r\n constructor(\r\n private embedModeService: EmbedModeService,\r\n private sanitizer: DomSanitizer,\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n if (this.url) {\r\n this.safeUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.url);\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.embedModeService.embeddedWindow = this.iframeDiv?.nativeElement.contentWindow || null;\r\n }\r\n\r\n}\r\n","@if (safeUrl) {\r\n <div [class.fullscreen]=\"takeOver\"\r\n class=\"embed flex\">\r\n <iframe #iframe_div [src]=\"safeUrl\"></iframe>\r\n </div>\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {ConfigService} from \"./config.service\";\r\nimport {UtilsService} from \"./utils.service\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SessionStorageService {\r\n\r\n private readonly storagePrefix: string;\r\n\r\n constructor(\r\n private configService: ConfigService,\r\n ) {\r\n this.storagePrefix = this.configService.getConfig().storagePrefix;\r\n }\r\n\r\n getItem(lsKey: string): any {\r\n const lsVal = sessionStorage.getItem(this.storagePrefix + lsKey) || '';\r\n return UtilsService.checkJSON(lsVal) ? JSON.parse(lsVal) : Number.isNaN(Number(lsVal)) ? lsVal : Number(lsVal);\r\n }\r\n\r\n getItems(searchString: string): any[] {\r\n const tempResults = [];\r\n for (const key in sessionStorage) {\r\n if (sessionStorage.hasOwnProperty(key)) {\r\n if (key.indexOf(searchString) > -1) {\r\n if (UtilsService.checkJSON(sessionStorage[key])) {\r\n tempResults.push(JSON.parse(sessionStorage[key]));\r\n } else {\r\n tempResults.push(sessionStorage[key]);\r\n }\r\n }\r\n }\r\n }\r\n return tempResults;\r\n }\r\n\r\n setItem(lsKey: string, lsValue: any): void {\r\n if (typeof lsValue === 'object') {\r\n sessionStorage.setItem(this.storagePrefix + lsKey, JSON.stringify(lsValue));\r\n } else {\r\n sessionStorage.setItem(this.storagePrefix + lsKey, lsValue);\r\n }\r\n }\r\n\r\n removeItem(lsKey: string): void {\r\n sessionStorage.removeItem(this.storagePrefix + lsKey);\r\n }\r\n\r\n}\r\n","import {BehaviorSubject, Observable, ReplaySubject, Subject} from 'rxjs';\r\nimport {Injectable, OnDestroy} from '@angular/core';\r\nimport {NavigationStart, Router} from '@angular/router';\r\nimport {\r\n OAuthError,\r\n OktaAuth,\r\n OktaAuthOptions,\r\n TokenManagerInterface,\r\n TokenParams,\r\n UserClaims\r\n} from '@okta/okta-auth-js';\r\nimport {takeUntil} from 'rxjs/operators';\r\nimport {ConfigService} from \"./config.service\";\r\nimport {LocalStorageService} from \"./local-storage.service\";\r\nimport {SessionStorageService} from \"./session-storage.service\";\r\nimport {OktaUserModel} from \"../_models/okta.model\";\r\nimport {UtilsService} from \"./utils.service\";\r\nimport {WindowUtilsService} from './window-utils.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OktaService implements OnDestroy {\r\n\r\n readonly LS_ACTIVEROUTE = 'activeRoute';\r\n readonly SS_ERROR = 'oktaError';\r\n\r\n private oktaError: OAuthError | null = null;\r\n private oktaError$: BehaviorSubject<OAuthError | null> = new BehaviorSubject<OAuthError | null>(null);\r\n\r\n private oktaUserInfo = new OktaUserModel({});\r\n private oktaUserInfo$ = new ReplaySubject<OktaUserModel>(1);\r\n\r\n private readonly oktaClient: OktaAuth;\r\n private readonly oktaClientConfig: OktaAuthOptions;\r\n private readonly tokenManager: TokenManagerInterface;\r\n private readonly tokenParams: TokenParams;\r\n\r\n private onDestroy$: Subject<void> = new Subject<void>();\r\n\r\n constructor(\r\n private configService: ConfigService,\r\n private lsService: LocalStorageService,\r\n private router: Router,\r\n private ssService: SessionStorageService,\r\n private windowUtilsService: WindowUtilsService\r\n ) {\r\n this.oktaClientConfig = this.setConfig();\r\n // CLIENT, TOKENPARAMS AND TOKENMANAGER\r\n this.oktaClient = new OktaAuth(this.oktaClientConfig);\r\n this.oktaClient.start(); // as of v5, needs to be started as a service to auto-renew\r\n this.tokenParams = {scopes: this.oktaClientConfig.scopes};\r\n this.tokenManager = this.oktaClient.tokenManager;\r\n this.tokenManager.on('error', (error) => {\r\n // auto-renew failed, usually cuz user deleted cookies or something (no more valid okta session), so sign out\r\n console.log(error);\r\n this.oktaClient.signOut({postLogoutRedirectUri: null}).catch((err) => console.log(err));\r\n }\r\n );\r\n // SUBSCRIBE TO ROUTING\r\n this.onRouting();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.onDestroy$.next();\r\n this.onDestroy$.complete();\r\n }\r\n\r\n // ********************************************************************************************************\r\n // GENERIC STUFF\r\n // ********************************************************************************************************\r\n\r\n private setConfig(): OktaAuthOptions {\r\n const spaasConfig = this.configService.getConfig();\r\n if (!spaasConfig?.oktaConfig) {\r\n throw new Error('please provide a valid Okta configuration via the \"forRoot\" method of the SpaasModule');\r\n }\r\n if (spaasConfig?.oktaConfig?.url?.slice(-1) === '/') {\r\n throw new Error('the okta url should not have a trailing slash');\r\n }\r\n if (spaasConfig?.oktaConfig?.tenantId.includes('/')) {\r\n throw new Error('the okta tenant id should not contain slashes');\r\n }\r\n return {\r\n clientId: spaasConfig.oktaConfig.clientId,\r\n issuer: spaasConfig.oktaConfig.url + '/oauth2/' + spaasConfig.oktaConfig.tenantId,\r\n pkce: true,\r\n redirectUri: spaasConfig.oktaConfig.withPath ? this.windowUtilsService.getLocation().origin + this.windowUtilsService.getLocation().pathname : this.windowUtilsService.getLocation().origin,\r\n responseType: ['id_token', 'token'],\r\n scopes: ['openid', 'email'].concat(spaasConfig.oktaConfig.additionalScopes || []),\r\n tokenManager: {\r\n storage: 'sessionStorage',\r\n storageKey: spaasConfig.storagePrefix + 'tokens',\r\n expireEarlySeconds: 300\r\n },\r\n transactionManager: {\r\n saveNonceCookie: false,\r\n saveParamsCookie: false,\r\n saveStateCookie: false,\r\n },\r\n };\r\n }\r\n\r\n private onRouting(): void {\r\n this.router.events\r\n .pipe(takeUntil(this.onDestroy$))\r\n .subscribe(\r\n (event) => {\r\n if (event instanceof NavigationStart) {\r\n // set active route here, so we know where to route to after token redirection\r\n if (event.url !== '/') {\r\n this.setActiveRoute(event.url);\r\n }\r\n // BECAUSE WE HANDLE THE CALLBACK BEFORE ROUTING, THE HIDDEN IFRAME REMAINS EMPTY\r\n this.handleRedirect();\r\n }\r\n });\r\n }\r\n\r\n // ********************************************************************************************************\r\n // OKTA STUFF\r\n // ********************************************************************************************************\r\n\r\n private handleRedirect(): void {\r\n if (this.oktaClient.token.isLoginRedirect() || this.windowUtilsService.getLocation().search.includes('error=')) {\r\n // IS REDIRECT OR OKTA ERROR\r\n this.updateOktaError(null);\r\n this.parseFromUrl();\r\n } else if (!this.oktaError) {\r\n // IS REGULAR NAVIGATION: CHECK USER INFO\r\n this.getUserInfoFromToken();\r\n }\r\n }\r\n\r\n private parseFromUrl() {\r\n this.oktaClient.token.parseFromUrl()\r\n .then((tokenResponse) => {\r\n this.tokenManager.setTokens(tokenResponse.tokens);\r\n // NOW SET USER INFO FROM THE TOKEN\r\n // IT'S THE USER INFO OBSERVABLE THAT OTHER COMPONENTS OR SERVICES SHOULD USE AS INDICATION THAT ALL IS GOOD TO GO\r\n this.getUserInfoFromToken();\r\n })\r\n .catch((err: OAuthError) => {\r\n this.updateOktaError(err);\r\n });\r\n }\r\n\r\n private getUserInfoFromToken(): void {\r\n if (this.oktaUserInfo.email) {\r\n return;\r\n }\r\n this.oktaClient.getUser()\r\n .then((claims) => {\r\n this.newUserInfo(claims);\r\n // set a default url. If it exists, fine, if not, it will force the configured redirects to kick in\r\n this.router.navigate([this.getActiveRoute() || '/home']);\r\n })\r\n .catch(() => {\r\n this.getTokenWithRedirect();\r\n });\r\n }\r\n\r\n private getTokenWithRedirect(): void {\r\n this.oktaClient.token.getWithRedirect(this.tokenParams)\r\n .catch((e) => console.log(e));\r\n }\r\n\r\n getCachedAccessToken(): string {\r\n // TO BE USED IN CANACTIVE AND/OR CANLOAD AND/OR HTTP INTERCEPTOR\r\n if (this.oktaClient && this.tokenManager) {\r\n return this.oktaClient.getAccessToken() || '';\r\n } else {\r\n console.log('should never happen: tokenmanager is null! Nothing left to do but redirect');\r\n this.getTokenWithRedirect();\r\n return '';\r\n }\r\n }\r\n\r\n updateOktaError(newState: OAuthError | null): void {\r\n this.oktaError = newState;\r\n this.ssService.setItem(this.SS_ERROR, this.oktaError);\r\n this.newOktaError();\r\n }\r\n\r\n forceRetry(): void {\r\n // METHOD THAT CAN BE CALLED BY WHICHEVER COMPONENT YOU HAVE TO HANDLE/DISPLAY OKTA ERRORS\r\n // FOR EXAMPLE ON A BUTTON CLICK 'TRY AGAIN' SO USER CAN FORCE AN OKTA RETRY\r\n this.updateOktaError(null);\r\n this.getTokenWithRedirect();\r\n }\r\n\r\n private setActiveRoute(url: string): void {\r\n this.lsService.setItem(this.LS_ACTIVEROUTE, url);\r\n }\r\n\r\n private getActiveRoute(): string {\r\n return this.lsService.getItem(this.LS_ACTIVEROUTE) || '';\r\n }\r\n\r\n // ********************************************************************************************************\r\n // BROADCAST DATA\r\n // ********************************************************************************************************\r\n\r\n private newUserInfo(userInfo: UserClaims | undefined): void {\r\n this.oktaUserInfo = new OktaUserModel(userInfo);\r\n this.oktaUserInfo$.next(this.oktaUserInfo);\r\n }\r\n\r\n onNewUserInfo(): Observable<OktaUserModel> {\r\n return this.oktaUserInfo$.asObservable();\r\n }\r\n\r\n getUserInfo(): OktaUserModel {\r\n return UtilsService.copy(this.oktaUserInfo);\r\n }\r\n\r\n private newOktaError(): void {\r\n this.oktaError$.next(this.oktaError);\r\n }\r\n\r\n onNewOktaError(): Observable<OAuthError | null> {\r\n return this.oktaError$.asObservable();\r\n }\r\n\r\n}\r\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\r\nimport {timer} from 'rxjs';\r\nimport {takeUntil} from 'rxjs/operators';\r\nimport {OktaService} from \"../_services/okta.service\";\r\nimport {BgType} from \"../_models/bg.model\";\r\nimport {BaseComponent} from \"../base/base.component\";\r\nimport {EmbedModeService} from \"../_services/embed-mode.service\";\r\nimport {ConfigService} from \"../_services/config.service\";\r\nimport {SpaasExtConfigModel} from \"../_models/config.model\";\r\nimport {OAuthError} from \"@okta/okta-auth-js\";\r\nimport { WindowUtilsService } from '../_services/window-utils.service';\r\n\r\n@Component({\r\n selector: 'spaas-okta-intro',\r\n templateUrl: './intro.component.html',\r\n styleUrls: ['./intro.component.scss'],\r\n standalone: false\r\n})\r\n\r\nexport class IntroComponent extends BaseComponent {\r\n\r\n @Input() introText = 'all good, loading your data';\r\n @Input() checkingAccessText = 'checking your access';\r\n @Input() tryAgainButtonTitle = 'try again';\r\n @Input() contactGuardButtonTitle = 'contact guard';\r\n @Input() goToSnowButtonTitle = 'request access in Snow';\r\n @Input() bgImg: BgType = 'employee_solar';\r\n\r\n isDone = false;\r\n @Output() public introDone = new EventEmitter<boolean>();\r\n\r\n oktaError: OAuthError | null = null;\r\n userReceived = false;\r\n\r\n isIframe = false;\r\n config: SpaasExtConfigModel;\r\n\r\n constructor(\r\n private configService: ConfigService,\r\n private embedModeService: EmbedModeService,\r\n private oktaService: OktaService,\r\n private windowUtilsService: WindowUtilsService,\r\n ) {\r\n super();\r\n this.config = this.configService.getConfig();\r\n this.isIframe = this.embedModeService.getEmbedMode().isIframe();\r\n this.onUserInfo();\r\n this.onOktaError();\r\n }\r\n\r\n private onUserInfo(): void {\r\n this.oktaService.onNewUserInfo()\r\n .pipe(takeUntil(this.onDestroy$))\r\n .subscribe(\r\n (user) => {\r\n if (user?.email) {\r\n this.userReceived = true;\r\n // emit that all is well, so the screen can already start rendering\r\n this.introDone.emit(true);\r\n // and only hide the okta itself after n ms\r\n timer(1400)\r\n .pipe(takeUntil(this.onDestroy$))\r\n .subscribe(() => {\r\n this.isDone = true;\r\n });\r\n }\r\n }\r\n );\r\n }\r\n\r\n private onOktaError(): void {\r\n this.oktaService.onNewOktaError()\r\n .pipe(takeUntil(this.onDestroy$))\r\n .subscribe(\r\n (error) => {\r\n this.oktaError = error;\r\n }\r\n );\r\n }\r\n\r\n oktaTryAgain(): void {\r\n this.oktaService.forceRetry();\r\n }\r\n\r\n contactGuard(): void {\r\n const body = 'Following error was received trying to sign in to ' + this.config?.cleanAppName + ':\\r\\n\\r\\n' +\r\n JSON.stringify(this.oktaError);\r\n const targetUrl = `mailto:5939@engie.com?subject=Okta sign-in error for ${this.config?.cleanAppName}&body=${encodeURIComponent(body)}`;\r\n this.windowUtilsService.redirectTo(targetUrl)\r\n }\r\n\r\n goToSnow(): void {\r\n this.windowUtilsService.openWindow('https://gemprod.service-now.com/gem');\r\n }\r\n\r\n}\r\n","@if (!isDone) {\r\n <div [class.in-iframe]=\"isIframe\"\r\n class=\"intro\">\r\n @if (!isIframe) {\r\n <div class=\"half-screen flex col center\">\r\n <!-- LOGO -->\r\n <div class=\"half-screen__logo flex center\">\r\n <svg viewBox=\"0 0 512 256\">\r\n <use [attr.xlink:href]=\"'../../assets/images/logo-engie.svg#svg1'\"></use>\r\n </svg>\r\n </div>\r\n @if (oktaError) {\r\n <!-- HAS OKTA ERROR -->\r\n <div class=\"txt-center\">\r\n <div class=\"txt-bold\">Bumped into an error:</div>\r\n <div>{{ oktaError.message }}</div>\r\n <div class=\"flex center pad-big-top column-gap-10\">\r\n <button (click)=\"oktaTryAgain()\" class=\"primary\">\r\n {{ tryAgainButtonTitle }}\r\n </button>\r\n @if ((oktaError.errorCode | lowercase) === 'access_denied') {\r\n <button (click)=\"goToSnow()\" class=\"error\">\r\n {{ goToSnowButtonTitle }}\r\n </button>\r\n } @else {\r\n <button (click)=\"contactGuard()\" class=\"error\">\r\n {{ contactGuardButtonTitle }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- NO OKTA ERROR -->\r\n <div class=\"txt-center pad-big-bottom\">\r\n <div class=\"pad-big-bottom\" data-testid=\"intro-text\">\r\n {{ userReceived ? introText : checkingAccessText }}\r\n </div>\r\n <mat-progress-bar [mode]=\"'indeterminate'\"></mat-progress-bar>\r\n </div>\r\n }\r\n </div>\r\n <spaas-bg [bgImg]=\"bgImg\"></spaas-bg>\r\n } @else {\r\n <div>\r\n loading embedded {{ config.cleanAppName }}\r\n <mat-progress-bar [mode]=\"'indeterminate'\"></mat-progress-bar>\r\n </div>\r\n }\r\n </div>\r\n}\r\n","import {MatSnackBarModule} from \"@angular/material/snack-bar\";\r\nimport {MAT_RADIO_DEFAULT_OPTIONS, MatRadioModule} from \"@angular/material/radio\";\r\nimport {MatProgressBarModule} from \"@angular/material/progress-bar\";\r\nimport {NgModule} from \"@angular/core\";\r\nimport {MatIconModule} from \"@angular/material/icon\";\r\nimport {MatTooltipModule} from \"@angular/material/tooltip\";\r\nimport {MAT_FORM_FIELD_DEFAULT_OPTIONS} from \"@angular/material/form-field\";\r\nimport {MatBottomSheetModule} from \"@angular/material/bottom-sheet\";\r\nimport {DragDropModule} from \"@angular/cdk/drag-drop\";\r\nimport {MatMenuModule} from '@angular/material/menu';\r\n\r\n@NgModule({\r\n exports: [\r\n DragDropModule,\r\n MatBottomSheetModule,\r\n MatIconModule,\r\n MatProgressBarModule,\r\n MatRadioModule,\r\n MatSnackBarModule,\r\n MatTooltipModule,\r\n MatMenuModule\r\n ],\r\n imports: [\r\n DragDropModule,\r\n MatBottomSheetModule,\r\n MatIconModule,\r\n MatProgressBarModule,\r\n MatRadioModule,\r\n MatSnackBarModule,\r\n MatTooltipModule,\r\n MatMenuModule\r\n ],\r\n providers: [\r\n {\r\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\r\n useValue: {\r\n subscriptSizing: 'dynamic'\r\n }\r\n },\r\n {\r\n provide: MAT_RADIO_DEFAULT_OPTIONS,\r\n useValue: { color: 'primary' },\r\n }\r\n ]\r\n})\r\nexport class MaterialModule {\r\n}\r\n","/**\r\n * Slide-out object to be provided to the slide-out serive.\r\n *\r\n * @property {Type<any> | null} component the component to be shown in the slide-out. Is set to null\r\n * when closing an active slide-out\r\n * @property {any} data any type of data to be passed to the component you're showing\r\n * in the slide-out [optional]\r\n * @property {Array<Provider | StaticProvider>} providers list of providers, aka services, that are not\r\n * provided in root, but only instantiated in the component calling the slide-out\r\n * @property {string} type the unique identifier for the slide-out to be activated. Is set to an empty string when\r\n * closing an active slide-out\r\n * @property {string} updateBrowserLocationTo to update the browser location and url while triggering a slide-out.\r\n * Typically, when the slide-out is used for editing, to add a unique id of the data to edit to the url [optional]\r\n */\r\nimport {Provider, StaticProvider, Type} from \"@angular/core\";\r\n\r\nexport class SlideOutModel {\r\n component: Type<any> | null;\r\n data?: any;\r\n providers?: (Provider | StaticProvider)[];\r\n type: string;\r\n updateBrowserLocationTo?: string;\r\n\r\n constructor(objIn: any = null) {\r\n this.component = objIn?.component || null;\r\n this.data = objIn?.data || null;\r\n this.providers = objIn?.providers || [];\r\n this.type = objIn?.type || '';\r\n this.updateBrowserLocationTo = objIn?.updateBrowserLocationTo || '';\r\n }\r\n}\r\n","import {BehaviorSubject, Observable} from 'rxjs';\r\nimport {Injectable} from '@angular/core';\r\nimport {Location} from \"@angular/common\";\r\nimport {SlideOutModel} from \"../_models/slide-out.model\";\r\n\r\n/*\r\nconst SLIDE_OUTS = {\r\n dagResults: 'dag-results',\r\n taskLogs: 'task-logs'\r\n} as const;\r\n\r\nexport type SlideOutType = typeof SLIDE_OUTS[keyof typeof SLIDE_OUTS];\r\n*/\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SlideOutService {\r\n\r\n private slideOut$ = new BehaviorSubject<SlideOutModel>(new SlideOutModel());\r\n private prevUpdate = '';\r\n\r\n constructor(\r\n private location: Location,\r\n ) {\r\n this.getPopStates();\r\n }\r\n\r\n getPopStates(): void {\r\n this.location.subscribe((location) => {\r\n if (location.type === 'popstate') {\r\n // close the active slide-out on back/forward\r\n this.prevUpdate = '';\r\n if (this.getSlideOut()?.type) {\r\n this.newSlideOut(null);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private updateBrowserLocation(url: string): void {\r\n if (\r\n url !== this.prevUpdate\r\n ) {\r\n this.prevUpdate = url;\r\n this.location.go(url);\r\n }\r\n }\r\n\r\n newSlideOut(\r\n so: SlideOutModel | null,\r\n ): void {\r\n const slideOut = new SlideOutModel(so);\r\n if (slideOut.type === this.getSlideOut()?.type) {\r\n slideOut.type = '';\r\n slideOut.component = null;\r\n }\r\n if (slideOut.type || slideOut.updateBrowserLocationTo) {\r\n // update location history so users stay in screen\r\n // when they try to close the slide-out with back\r\n this.updateBrowserLocation(slideOut.updateBrowserLocationTo || this.location.path());\r\n }\r\n this.slideOut$.next(slideOut);\r\n }\r\n\r\n onNewSlideOut(): Observable<SlideOutModel> {\r\n return this.slideOut$.asObservable();\r\n }\r\n\r\n getSlideOut(): SlideOutModel {\r\n return this.slideOut$.getValue();\r\n }\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {takeUntil} from 'rxjs/operators';\r\nimport {SlideOutService} from \"../_services/slide-out.service\";\r\nimport {BaseComponent} from \"../base/base.component\";\r\nimport {MenuItemModel} from \"../_models/menu-item.model\";\r\nimport {ThemeService} from \"../_services/theme.service\";\r\nimport {DATA__HAS_MENU} from \"../_models/theme.model\";\r\nimport {EmbedModeService} from \"../_services/embed-mode.service\";\r\n\r\n@Component({\r\n selector: 'spaas-menu',\r\n templateUrl: './menu.component.html',\r\n styleUrls: ['./menu.component.scss'],\r\n standalone: false\r\n})\r\n\r\nexport class MenuComponent extends BaseComponent {\r\n\r\n /** The menu items to render in the DOM. */\r\n @Input() menuItems: MenuItemModel[] = [];\r\n\r\n mmActive = false;\r\n so = '';\r\n isIframe = false;\r\n\r\n constructor(\r\n private embedModeService: EmbedModeService,\r\n private slideOutService: SlideOutService,\r\n private themeService: ThemeService,\r\n ) {\r\n super();\r\n this.isIframe = this.embedModeService.getEmbedMode().isIframe();\r\n if (!this.isIframe) {\r\n this.themeService.setBodyData(DATA__HAS_MENU);\r\n }\r\n this.onSo();\r\n }\r\n\r\n // ********************************************************************************************************\r\n // LOAD\r\n // ********************************************************************************************************\r\n\r\n private onSo(): void {\r\n this.slideOutService.onNewSlideOut()\r\n .pipe(takeUntil(this.onDestroy$))\r\n .subscribe(\r\n (so) => {\r\n if (so?.type) {\r\n this.mmActive = false;\r\n }\r\n }\r\n );\r\n }\r\n\r\n // ********************************************************************************************************\r\n // UI\r\n // ********************************************************************************************************\r\n\r\n // EVENT LISTENERS\r\n onToggleMenu(): void {\r\n this.mmActive = !this.mmActive;\r\n if (this.mmActive) {\r\n // menu active: close open slide-outs\r\n this.slideOutService.newSlideOut(null);\r\n }\r\n }\r\n\r\n}\r\n","@if (!isIframe) {\r\n <div class=\"mm\">\r\n\r\n <div (click)=\"onToggleMenu()\"\r\n [class.active]=\"mmActive\"\r\n class=\"mm__burger\">\r\n <span></span>\r\n <span></span>\r\n </div>\r\n <div [class.visible]=\"mmActive\"\r\n class=\"mm__slide-out\">\r\n @if (mmActive) {\r\n <div class=\"mm__slide-out__items\">\r\n @for (item of menuItems; track item) {\r\n <div (click)=\"onToggleMenu()\"\r\n [routerLink]=\"item.rtrLink\"\r\n routerLinkActive=\"accent\">\r\n {{ item.label }}\r\n </div>\r\n }\r\n </div>\r\n <div class=\"mm__slide-out__logo\">\r\n <svg viewBox=\"0 0 512 256\">\r\n <use [attr.xlink:href]=\"'assets/images/logo-engie.svg#svg1'\"></use>\r\n </svg>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n}\r\n","export class ActiveRouteModel {\r\n params: any;\r\n queryParams: any;\r\n url: string;\r\n\r\n constructor(url: string, queryParams: any, params: any) {\r\n this.params = params || {};\r\n this.queryParams = queryParams || {};\r\n this.url = url && url.startsWith('/') ? url.replace(/\\//g, ' ') : '';\r\n }\r\n\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable, ReplaySubject} from 'rxjs';\r\nimport {ActiveRouteModel} from '../_models/active-route.model';\r\nimport {Title} from '@angular/platform-browser';\r\nimport {ConfigService} from \"./config.service\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ActiveRouteService {\r\n\r\n private activeRoute = new ActiveRouteModel('', {}, {});\r\n private activeRoute$ = new ReplaySubject<ActiveRouteModel>(1);\r\n\r\n constructor(\r\n private configService: ConfigService,\r\n private titleService: Title,\r\n ) {\r\n }\r\n\r\n // ********************************************************************************************************\r\n // BROADCAST DATA\r\n // ********************************************************************************************************\r\n\r\n newActiveRoute(url: string, queryParams: any, params: any) {\r\n this.activeRoute = new ActiveRouteModel(url, queryParams, params);\r\n this.titleService.setTitle(\r\n this.configService.getConfig().cleanAppName + ' - ' + this.activeRoute.url + ' | Engie'\r\n );\r\n this.activeRoute$.next(this.activeRoute);\r\n }\r\n\r\n onNewActiveRoute(): Observable<ActiveRouteModel> {\r\n return this.activeRoute$.asObservable();\r\n }\r\n\r\n getActiveRoute(): ActiveRouteModel {\r\n return this.activeRoute;\r\n }\r\n\r\n}\r\n","import {ActiveRouteService} from '../_services/active-route.service';\r\nimport {Component, Input, OnInit} from '@angular/core';\r\nimport {BaseComponent} from \"../base/base.component\";\r\nimport {ThemeService} from \"../_services/theme.service\";\r\nimport {DATA__HAS_MENU} from \"../_models/theme.model\";\r\nimport {ConfigService} from \"../_services/config.service\";\r\n\r\n@Component({\r\n selector: 'spaas-menu-side-bar',\r\n templateUrl: './menu-side-bar.component.html',\r\n styleUrls: ['./menu-side-bar.component.scss'],\r\n standalone: false\r\n})\r\nexport class MenuSideBarComponent extends BaseComponent implements OnInit {\r\n\r\n @Input() titleText = '';\r\n @Input() withMinHeight = true;\r\n\r\n env = '';\r\n fullEnv: string = ''\r\n\r\n constructor(\r\n private activeRouteService: ActiveRouteService,\r\n private configService: ConfigService,\r\n private themeService: ThemeService,\r\n ) {\r\n super();\r\n // enable menu gutter and notify parent that iframe has menu\r\n this.themeService.setBodyData(DATA__HAS_MENU);\r\n this.setEnv();\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.titleText) {\r\n this.titleText = this.activeRouteService.getActiveRoute()?.url;\r\n }\r\n }\r\n\r\n private setEnv(): void {\r\n const config = this.configService.getConfig();\r\n if (\r\n config.environment &&\r\n !config.environment.startsWith('local') &&\r\n !config.environment.startsWith('prod')\r\n ) {\r\n this.env = config.environment.slice(0, 3);\r\n this.fullEnv = config.environment;\r\n }\r\n }\r\n\r\n}\r\n","<div class=\"mm-side-bar pad-small-top\">\r\n\r\n <ng-content select=\"spaas-user-info\"></ng-content>\r\n\r\n @if (env) {\r\n <div class=\"mm-side-bar__env {{env}}\"\r\n matTooltipPosition=\"right\"\r\n matTooltipClass=\"bg-error\"\r\n matTooltip=\"you are on the {{fullEnv | uppercase}} environment\">\r\n {{ env }}\r\n </div>\r\n }\r\n\r\n <div class=\"mm-side-bar__title\"\r\n [class.with-min-height]=\"withMinHeight\">\r\n {{ titleText }}\r\n </div>\r\n\r\n <ng-content select=\"spaas-menu-side-bar-icon\"></ng-content>\r\n\r\n</div>\r\n","import {AfterViewInit, Component, ElementRef, ViewChild} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'spaas-submenu-side-bar-list',\r\n templateUrl: './menu-side-bar-submenu-list.component.html',\r\n styleUrl: './menu-side-bar.component.scss',\r\n standalone: false,\r\n})\r\nexport class MenuSideBarSubmenuListComponent implements AfterViewInit {\r\n\r\n @ViewChild('refSubmenuItems', { read: ElementRef }) refSubmenuItems!: ElementRef;\r\n\r\n submenuItems: boolean = false;\r\n\r\n ngAfterViewInit() {\r\n this.submenuItems = !!this.refSubmenuItems.nativeElement.querySelector('spaas-submenu-side-bar-item');\r\n }\r\n\r\n}\r\n","<div class=\"mm-side-bar__icon__submenu-list__wrapper\" #refSubmenuItems>\r\n <ng-content></ng-content>\r\n</div>\r\n","import {Directive, ElementRef, HostListener, Input, Renderer2} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[spaasHover]',\r\n standalone: false,\r\n})\r\nexport class HoverDirective {\r\n\r\n @Input() spaasHover: string = '';\r\n\r\n constructor(\r\n private elementRef: ElementRef,\r\n private renderer: Renderer2,\r\n ) {\r\n }\r\n\r\n @HostListener('mouseenter', ['$event'])\r\n @HostListener('mouseleave', ['$event'])\r\n onMouseHover(event: MouseEvent): void {\r\n if (event.type === 'mouseenter') {\r\n this.renderer.addClass(this.elementRef.nativeElement, this.spaasHover);\r\n return;\r\n }\r\n\r\n this.renderer.removeClass(this.elementRef.nativeElement, this.spaasHover);\r\n }\r\n\r\n @HostListener('click')\r\n onClick(): void {\r\n if (this.elementRef.nativeElement.classList.contains(this.spaasHover)) {\r\n this.renderer.removeClass(this.elementRef.nativeElement, this.spaasHover);\r\n } else {\r\n this.renderer.addClass(this.elementRef.nativeElement, this.spaasHover);\r\n }\r\n\r\n }\r\n\r\n}\r\n","import {\r\n Component, ContentChild,\r\n EventEmitter,\r\n Input, OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {takeUntil} from 'rxjs/operators';\r\nimport {SlideOutService} from \"../_services/slide-out.service\";\r\nimport {BaseComponent} from \"../base/base.component\";\r\nimport {SlideOutModel} from \"../_models/slide-out.model\";\r\nimport {MenuSideBarSubmenuListComponent} from \"./menu-side-bar-submenu-list.component\";\r\n\r\n@Component({\r\n selector: 'spaas-menu-side-bar-icon',\r\n templateUrl: './menu-side-bar-icon.component.html',\r\n styleUrls: ['./menu-side-bar.component.scss'],\r\n standalone: false,\r\n})\r\nexport class MenuSideBarIconComponent extends BaseComponent implements OnInit {\r\n\r\n @ContentChild(MenuSideBarSubmenuListComponent) submenusList?: MenuSideBarSubmenuListComponent;\r\n\r\n @Input() tooltipMsg = '';\r\n @Input() withTopMargin = false;\r\n @Input() withHover = true;\r\n @Input() withDivider = false;\r\n\r\n @Input() submenuWidth: number = 100;\r\n\r\n // GENERIC STATE INDICATORS FROM PARENT\r\n @Input() isDisabled = false;\r\n\r\n // SLIDE-OUT TO INDICATE THAT THIS ICON SHOULD ACTIVATE A SLIDE-OUT\r\n @Input() slideOut: SlideOutModel | null = null;\r\n\r\n @Input() isActive = false;\r\n\r\n // MOUSE-EVENT EMITTER IF NOT SO-TYPE\r\n @Output() clicked = new EventEmitter<MouseEvent>();\r\n\r\n constructor(\r\n private slideOutService: SlideOutService,\r\n ) {\r\n super();\r\n this.getSoActive();\r\n }\r\n\r\n ngOnInit() {\r\n this.submenuWidth = Math.max(this.submenuWidth, 50);\r\n }\r\n\r\n private getSoActive(): void {\r\n this.slideOutService.onNewSlideOut()\r\n .pipe(takeUntil(this.onDestroy$))\r\n .subscribe(\r\n (so) => {\r\n this.isActive = this.slideOut?.type !== '' && so?.type === this.slideOut?.type;\r\n }\r\n );\r\n }\r\n\r\n onClick(e: MouseEvent): void {\r\n if (this.slideOut) {\r\n this.slideOutService.newSlideOut(this.slideOut);\r\n } else if (!this.isDisabled) {\r\n this.clicked.emit(e);\r\n }\r\n }\r\n}\r\n","<div class=\"mm-side-bar__icon\"\r\n spaasHover=\"show-submenu\"\r\n [style.--margin-top]=\"withTopMargin || withDivider ? '24px' : '0px'\"\r\n [class.active]=\"isActive\"\r\n [class.disabled]=\"isDisabled\"\r\n [class.with-divider]=\"withDivider\"\r\n [class.submenu-with-hover]=\"this.submenusList\"\r\n [class.with-hover]=\"!this.submenusList && withHover\"\r\n (click)=\"onClick($event)\">\r\n <div\r\n [matTooltipPosition]=\"this.submenusList ? 'above' : 'right'\"\r\n [matTooltip]=\"tooltipMsg\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div class=\"mm-side-bar__icon__submenu-list first-submenu flex column\"\r\n [style.--width-submenu]=\"submenuWidth + 'px'\">\r\n <ng-content select=\"spaas-submenu-side-bar-list\"></ng-content>\r\n </div>\r\n</div>\r\n","import {Observable} from 'rxjs';\r\nimport {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\r\nimport {Inject, Injectable} from '@angular/core';\r\nimport {OktaService} from \"../_services/okta.service\";\r\nimport {SpaasConfigModel} from \"../_models/config.model\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OktaAuthInterceptor implements HttpInterceptor {\r\n\r\n private static checkUrlsToIntercept(urlsToIntercept: string[], url: string): boolean {\r\n for (const curUrl of urlsToIntercept) {\r\n if (url.startsWith(curUrl)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n constructor(\r\n @Inject(SpaasConfigModel) private readonly spaasConfig: SpaasConfigModel,\r\n private oktaService: OktaService,\r\n ) {\r\n }\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n\r\n let headers = req.headers;\r\n if (\r\n // check for undefined also, because the value here comes directly from the injection-token, so not looped through the SpaasConfigModel constructor\r\n req.method !== 'GET' && (this.spaasConfig.oktaConfig.interceptAddContentHeader === undefined || this.spaasConfig.oktaConfig.interceptAddContentHeader)\r\n ) {\r\n headers = headers.set('Content-type', 'application/json');\r\n }\r\n\r\n if (\r\n req.url.startsWith(this.spaasConfig.oktaConfig.url) ||\r\n OktaAuthInterceptor.checkUrlsToIntercept(this.spaasConfig.oktaConfig.interceptUrls, req.url)\r\n ) {\r\n\r\n const token = this.oktaService.getCachedAccessToken();\r\n headers = headers.set('Authorization', `Bearer ${token}`);\r\n const authRequest = req.clone({headers: headers});\r\n return next.handle(authRequest);\r\n\r\n } else {\r\n\r\n const authRequest = req.clone();\r\n return next.handle(authRequest);\r\n\r\n }\r\n }\r\n\r\n}\r\n","import {BehaviorSubject, Observable} from 'rxjs';\r\nimport {Injectable} from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PreloaderService {\r\n\r\n private preloaderMsgs: string[] = [];\r\n private preloaderMsgs$ = new BehaviorSubject<string[]>([]);\r\n\r\n // ********************************************************************************************************\r\n // SAVE DATA\r\n // ********************************************************************************************************\r\n\r\n /**\r\n * Activates the preloader overlay (\"<spaas-preloader>\" to be added to your app.component.html).\r\n *\r\n * @param preloaderMsg will be added to the list of messages, to be shown as feedback to the user.\r\n */\r\n start(preloaderMsg: string): void {\r\n this.preloaderMsgs.push(preloaderMsg);\r\n this.newPreloaderMsg();\r\n }\r\n\r\n /**\r\n * Removes the \"preloaderMsg\" from the list of preloader messages.\r\n *\r\n * @param preloaderMsg message to be removed from the list. If the \"preloaderMsg\" was the last one on the list,\r\n * the preloader overlay will be hidden.\r\n */\r\n stop(preloaderMsg: string): void {\r\n this.preloaderMsgs = this.preloaderMsgs.filter((l) => l !== preloaderMsg);\r\n this.newPreloaderMsg();\r\n }\r\n\r\n // ********************************************************************************************************\r\n // BROADCAST DATA\r\n // ********************************************************************************************************\r\n\r\n private newPreloaderMsg() {\r\n this.preloaderMsgs$.next(this.preloaderMsgs);\r\n }\r\n\r\n onNewPreloaderMsg(): Observable<string[]> {\r\n return this.preloaderMsgs$.asObservable();\r\n }\r\n\r\n getPreloaderMsgs(): string[] {\r\n return JSON.parse(JSON.stringify(this.preloaderMsgs$.getValue()));\r\n }\r\n\r\n}\r\n","import {Component} from '@angular/core';\r\nimport {PreloaderService} from '../_services/preloader.service';\r\nimport {takeUntil} from 'rxjs/operators';\r\nimport {BaseComponent} from \"../base/base.component\";\r\n\r\n@Component({\r\n selector: 'spaas-preloader',\r\n templateUrl: './preloader.component.html',\r\n styleUrls: ['./preloader.component.scss'],\r\n standalone: false\r\n})\r\n\r\nexport class PreloaderComponent extends BaseComponent {\r\n\r\n isActive = false;\r\n mostRecent = '';\r\n\r\n constructor(\r\n private preloaderService: PreloaderService,\r\n ) {\r\n super();\r\n this.preloaderService.onNewPreloaderMsg()\r\n .pipe(takeUntil(this.onDestroy$))\r\n .subscribe(\r\n (msgs) => {\r\n this.isActive = msgs.length > 0;\r\n this.mostRecent = msgs[msgs.length - 1] || '';\r\n }\r\n );\r\n }\r\n\r\n}\r\n","@if (isActive) {\r\n <div class=\"preloader\">\r\n <mat-progress-bar [mode]=\"'indeterminate'\" class=\"preloader__progbar\">\r\n </mat-progress-bar>\r\n <div class=\"preloader__text\">\r\n {{ mostRecent }}\r\n </div>\r\n </div>\r\n}\r\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\r\nimport {CdkDragEnd} from \"@angular/cdk/drag-drop\";\r\nimport {LocalStorageService} from \"../_services/local-storage.service\";\r\nimport {SessionStorageService} from \"../_services/session-storage.service\";\r\n\r\n@Component({\r\n selector: 'spaas-resizable',\r\n templateUrl: './resizable.component.html',\r\n styleUrls: ['./resizable.component.scss'],\r\n standalone: false\r\n})\r\n\r\nexport class ResizableComponent implements OnInit {\r\n\r\n @Input() initSizePx = 324;\r\n @Input() minSizePx = 144;\r\n @Input() maxSizePx = 9999;\r\n @Input() resizeAxis: 'x' | 'y' = 'y';\r\n @Input() storage: 'session' | 'local' = 'local';\r\n @Input() storageId = '';\r\n\r\n @Output() sizePxChange = new EventEmitter<number>();\r\n\r\n sizePx = 324;\r\n\r\n constructor(\r\n private localStorageService: LocalStorageService,\r\n private sessionStorageService: SessionStorageService,\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n if (Number.isNaN(Number(this.initSizePx))) {\r\n throw new Error('the value you provided for initial size is not a number');\r\n }\r\n this.initSize();\r\n }\r\n\r\n private initSize() {\r\n let heightFromStorage: number = 0, initHeight = this.initSizePx;\r\n if (this.storageId) {\r\n if (this.storage === 'local') {\r\n heightFromStorage = this.localStorageService.getItem(this.storageId);\r\n } else {\r\n heightFromStorage = this.sessionStorageService.getItem(this.storageId);\r\n }\r\n if (Number.isNaN(Number(heightFromStorage))) {\r\n heightFromStorage = 0;\r\n }\r\n }\r\n // value stored gets priority (user has already changed the height)\r\n this.sizePx = heightFromStorage || initHeight;\r\n }\r\n\r\n onDragResizeEnd(e: CdkDragEnd): void {\r\n e.source.reset();\r\n const inc = this.resizeAxis === 'y' ? e.distance.y : e.distance.x;\r\n this.sizePx += inc;\r\n this.sizePx = Math.min(Math.max(this.sizePx, this.minSizePx), this.maxSizePx);\r\n this.sizePxChange.emit(this.sizePx);\r\n if (this.storageId) {\r\n if (this.storage === 'local') {\r\n this.localStorageService.setItem(this.storageId, this.sizePx);\r\n } else {\r\n this.sessionStorageService.setItem(this.storageId, this.sizePx);\r\n }\r\n }\r\n }\r\n\r\n}\r\n","<div class=\"resizable pos-relative\"\r\n [class.horizontal]=\"resizeAxis === 'x'\"\r\n [style.--resizable-size]=\"sizePx + 'px'\">\r\n <ng-content></ng-content>\r\n <div (cdkDragEnded)=\"onDragResizeEnd($event)\"\r\n [cdkDragLockAxis]=\"resizeAxis\"\r\n cdkDrag\r\n class=\"resizable__handle\">\r\n </div>\r\n</div>\r\n","import {Component, Input} from '@angular/core';\r\nimport {FormControl} from \"@angular/forms\";\r\nimport {BaseComponent} from \"../base/base.component\";\r\n\r\n/**\r\n * The toggle component provides a custom toggle-look for checkboxes,\r\n * in line with the Fluid UI theming.\r\n */\r\n@Component({\r\n selector: 'spaas-toggle',\r\n templateUrl: './toggle.component.html',\r\n standalone: false\r\n})\r\n\r\nexport class ToggleComponent extends BaseComponent {\r\n\r\n /** The boolean form control to bind to the toggle (checkbox) */\r\n @Input({required: true}) ctrl: FormControl<boolean> = new FormControl<boolean>(false, {nonNullable: true});\r\n /**\r\n * The unique id to reference the input with (necessary for label binding). If you have multiple\r\n * toggles, like in each row of a table, you'd typically use the for-index for this\r\n */\r\n @Input({required: true}) id: string = '';\r\n\r\n /** The label to display next to the toggle (clickable) */\r\n @Input() label = '';\r\n /** The label position, to the left or right of the toggle */\r\n @Input() labelPosition: 'left' | 'right' = 'right';\r\n /** Smaller subtext for underneath the label, usually to provide a more detailed description */\r\n @Input() subText = '';\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n}\r\n","<div class=\"flex column-gap-7 width-fit-content\"\r\n [ngClass]=\"labelPosition === 'right' ? 'row' : 'row-reverse txt-right'\">\r\n\r\n <input type=\"checkbox\"\r\n class=\"tgl tgl-flat\"\r\n [formControl]=\"ctrl\"\r\n [id]=\"'toggle_' + id\">\r\n <label [for]=\"'toggle_' + id\" class=\"tgl-btn\"></label>\r\n\r\n @if (label) {\r\n <label [for]=\"'toggle_' + id\">\r\n {{ label }}\r\n @if (subText) {\r\n <div class=\"tgl-subtxt\">\r\n {{ subText }}\r\n </div>\r\n }\r\n </label>\r\n }\r\n\r\n</div>\r\n","import {Component, Input} from '@angular/core';\r\nimport {DecimalSeparatorType, ExportExtensionType, SettingsModel} from \"../_models/settings.model\";\r\nimport {SettingsService} from \"../_services/settings.service\";\r\nimport {OktaService} from \"../_services/okta.service\";\r\nimport {takeUntil} from \"rxjs/operators\";\r\nimport {OktaUserModel} from \"../_models/okta.model\";\r\nimport {BaseComponent} from \"../base/base.component\";\r\nimport {ThemeService} from \"../_services/theme.service\";\r\nimport {FormControl, FormGroup} from \"@angular/forms\";\r\n\r\nclass SettingsFormModel {\r\n dark: FormControl<boolean>;\r\n decimalSeparator: FormControl<DecimalSeparatorType>;\r\n exportExtension: FormControl<ExportExtensionType>;\r\n\r\n constructor(settings: SettingsModel) {\r\n this.dark = new FormControl<boolean>(settings.dark, {nonNullable: true});\r\n this.decimalSeparator = new FormControl<DecimalSeparatorType>(settings.decimalSeparator, {nonNullable: true});\r\n this.exportExtension = new FormControl<ExportExtensionType>(settings.exportExtension, {nonNullable: true});\r\n }\r\n}\r\n\r\n/**\r\n * Settings component that you can simply inject in an otherwise empty 'settings' screen.\r\n * To let the user choose some basic preferences like dark or light theme.\r\n * The component uses content projection to allow you to add any app-specific settings you want to persist.\r\n */\r\n\r\n@Component({\r\n selector: 'spaas-settings',\r\n templateUrl: './settings.component.html',\r\n styleUrls: ['./settings.component.scss'],\r\n standalone: false\r\n})\r\nexport class SettingsComponent extends BaseComponent {\r\n\r\n @Input() settingTitle = 'These are your settings';\r\n\r\n @Input() darkModeButtonTitle = 'dark mode';\r\n @Input() darkModeHintText = ' rest your eyes a bit, switch to dark mode';\r\n\r\n @Input() exportDescriptionText = 'When downloading data, save as';\r\n @Input() excelExportRadioText = 'Excel Workbook (.xlsx)';\r\n @Input() csvExportRadioText = 'CSV file (.csv)';\r\n\r\n @Input() decimalSeparatorText = 'Your decimal separator in Excel';\r\n @Input() dotRadioText = 'dot';\r\n @Input() commaRadioText = 'comma';\r\n\r\n user = new OktaUserModel({});\r\n settings: SettingsModel;\r\n settingsForm: FormGroup<SettingsFormModel>;\r\n\r\n constructor(\r\n private oktaService: OktaService,\r\n private settingsService: SettingsService,\r\n private themeService: ThemeService,\r\n ) {\r\n super();\r\n this.onNewUser();\r\n this.settings = this.settingsService.getSettings();\r\n this.settingsForm = new FormGroup<SettingsFormModel>(new SettingsFormModel(this.settings));\r\n }\r\n\r\n private onNewUser(): void {\r\n this.oktaService.onNewUserInfo()\r\n .pipe(takeUntil(this.onDestroy$))\r\n .subscribe(\r\n (user) => {\r\n this.user = user;\r\n }\r\n );\r\n }\r\n\r\n onToggleTheme(): void {\r\n this.updateSettings();\r\n this.themeService.toggleTheme();\r\n }\r\n\r\n updateSettings(): void {\r\n // update settings with the form values. Leave extraData untouched, not handled by this component\r\n this.settings.dark = this.settingsForm.controls.dark.value;\r\n this.settings.decimalSeparator = this.settingsForm.controls.decimalSeparator.value;\r\n this.settings.exportExtension = this.settingsForm.controls.exportExtension.value;\r\n // broadcast the new settings\r\n this.settingsService.newSettings(this.settings);\r\n }\r\n\r\n}\r\n","<div class=\"settings\">\r\n\r\n <div class=\"half-screen\"\r\n [formGroup]=\"settingsForm\">\r\n\r\n <h3>{{ settingTitle }}{{ user.firstName ? ', ' + (user.firstName | titlecase) : '' }}</h3>\r\n\r\n <!-- dark mode -->\r\n <div>\r\n <spaas-toggle id=\"dark\"\r\n [ctrl]=\"settingsForm.controls.dark\"\r\n [label]=\"darkModeButtonTitle\"\r\n [subText]=\"darkModeHintText\"\r\n (change)=\"onToggleTheme()\">\r\n </spaas-toggle>\r\n </div>\r\n\r\n <!-- export type -->\r\n <div>\r\n {{ exportDescriptionText }}\r\n <mat-radio-group aria-label=\"select an export type\"\r\n class=\"flex col\"\r\n [formControl]=\"settingsForm.controls.exportExtension\"\r\n (change)=\"updateSettings()\">\r\n <mat-radio-button value=\"xlsx\">{{ excelExportRadioText }}</mat-radio-button>\r\n <mat-radio-button value=\"csv\">{{ csvExportRadioText }}</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <!-- decimal separator -->\r\n <div>\r\n {{ decimalSeparatorText }}\r\n <mat-radio-group aria-label=\"select a decimal separator\"\r\n class=\"flex col\"\r\n [formControl]=\"settingsForm.controls.decimalSeparator\"\r\n (change)=\"updateSettings()\">\r\n <mat-radio-button value=\"dot\">{{ dotRadioText }}</mat-radio-button>\r\n <mat-radio-button value=\"comma\">{{ commaRadioText }}</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <!-- projected content -->\r\n <div>\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n </div>\r\n\r\n <spaas-bg bgImg=\"employee_solar\"></spaas-bg>\r\n\r\n</div>\r\n","export class SyncScrollModel {\r\n absX: number;\r\n ratioVisible: number;\r\n relX: number;\r\n\r\n constructor() {\r\n this.absX = 0;\r\n this.ratioVisible = 0;\r\n this.relX = 0;\r\n }\r\n\r\n}\r\n","import {BehaviorSubject, Observable} from 'rxjs';\r\nimport {Injectable} from '@angular/core';\r\nimport {SyncScrollModel} from '../_models/sync-scroll.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SyncScrollService {\r\n\r\n private scrollX$ = new BehaviorSubject<SyncScrollModel>({absX: 0, relX: 0, ratioVisible: 1});\r\n\r\n // ********************************************************************************************************\r\n // BROADCAST DATA\r\n // ********************************************************************************************************\r\n\r\n newScrollX(x: SyncScrollModel) {\r\n // console.log(x);\r\n this.scrollX$.next(x);\r\n }\r\n\r\n onNewScrollX(): Observable<SyncScrollModel> {\r\n return this.scrollX$.asObservable();\r\n }\r\n\r\n}\r\n","import {Directive, ElementRef, HostListener, OnDestroy} from '@angular/core';\r\nimport {Subject} from 'rxjs';\r\nimport {takeUntil} from 'rxjs/operators';\r\nimport {SyncScrollService} from '../_services/sync-scroll.service';\r\nimport {SyncScrollModel} from '../_models/sync-scroll.model';\r\n\r\n@Directive({\r\n selector: '[spaasSyncScroll]',\r\n standalone: false\r\n})\r\nexport class SyncScrollDirective implements OnDestroy {\r\n\r\n private curSync = new SyncScrollModel();\r\n\r\n private onDestroy$: Subject<void> = new Subject<void>();\r\n\r\n constructor(\r\n private el: ElementRef,\r\n private syncScrollService: SyncScrollService,\r\n ) {\r\n this.syncScrollService.onNewScrollX()\r\n .pipe(takeUntil(this.onDestroy$))\r\n // .pipe(debounceTime(40)) // TODO: evaluate whether to debounce or not\r\n .subscribe(\r\n (x) => {\r\n this.curSync = x;\r\n this.el.nativeElement.scrollLeft = x.absX;\r\n }\r\n );\r\n }\r\n\r\n @HostListener('scroll', ['$event']) onScroll(e: any) {\r\n // only broadcast event if different scroll (to prevent slave components from also firing an update)\r\n if (e.target.scrollLeft !== this.curSync?.absX) {\r\n this.syncScrollService.newScrollX({\r\n absX: e.target.scrollLeft,\r\n relX: e.target.scrollLeft / e.target.scrollWidth,\r\n ratioVisible: e.target.clientWidth / e.target.scrollWidth,\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.onDestroy$.next();\r\n }\r\n\r\n}\r\n","import {Component, Injector, OnDestroy} from '@angular/core';\r\nimport {takeUntil} from 'rxjs/operators';\r\nimport {BaseComponent} from \"../base/base.component\";\r\nimport {SlideOutModel} from \"../_models/slide-out.model\";\r\nimport {SlideOutService} from \"../_services/slide-out.service\";\r\n\r\n@Component({\r\n selector: 'spaas-slide-out',\r\n templateUrl: './slide-out.component.html',\r\n styleUrls: ['./slide-out.component.scss'],\r\n standalone: false\r\n})\r\n\r\nexport class SlideOutComponent extends BaseComponent implements OnDestroy {\r\n\r\n slideOut: SlideOutModel = new SlideOutModel(null);\r\n providersInjector: Injector | undefined = undefined;\r\n\r\n constructor(\r\n private slideOutService: SlideOutService,\r\n ) {\r\n super();\r\n this.getSlideOut();\r\n }\r\n\r\n override ngOnDestroy() {\r\n this.slideOutService.newSlideOut(null);\r\n super.ngOnDestroy()\r\n }\r\n\r\n // ********************************************************************************************************\r\n // LOAD DATA\r\n // ********************************************************************************************************\r\n\r\n private getSlideOut(): void {\r\n this.slideOutService.onNewSlideOut()\r\n .pipe(takeUntil(this.onDestroy$))\r\n .subscribe(\r\n (so) => {\r\n this.slideOut = so;\r\n if (this.slideOut?.providers?.length) {\r\n this.providersInjector = Injector.create({\r\n providers: this.slideOut.providers,\r\n })\r\n }\r\n }\r\n );\r\n }\r\n\r\n // ********************************************************************************************************\r\n // UI\r\n // ********************************************************************************************************\r\n\r\n onClose(): void {\r\n this.slideOutService.newSlideOut(null);\r\n }\r\n\r\n}\r\n","<div class=\"slide-out\"\r\n [class.visible]=\"slideOut.type\">\r\n\r\n <div class=\"slide-out__close\">\r\n <mat-icon (click)=\"onClose()\">clear</mat-icon>\r\n </div>\r\n\r\n <div class=\"slide-out__content\">\r\n <ng-container *ngComponentOutlet=\"slideOut.component; inputs: slideOut.data; injector: providersInjector\">\r\n </ng-container>\r\n </div>\r\n</div>\r\n\r\n","import {\r\n AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef,\r\n Component, ContentChild,\r\n EventEmitter,\r\n Output,\r\n} from '@angular/core';\r\nimport {MenuSideBarSubmenuListComponent} from \"./menu-side-bar-submenu-list.component\";\r\n\r\n@Component({\r\n selector: 'spaas-submenu-side-bar-item',\r\n templateUrl: './menu-side-bar-submenu-item.component.html',\r\n styleUrls: ['./menu-side-bar.component.scss'],\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class MenuSideBarSubmenuItemComponent implements AfterViewInit {\r\n\r\n @ContentChild(MenuSideBarSubmenuListComponent) private submenuList!: MenuSideBarSubmenuListComponent;\r\n\r\n @Output() clicked = new EventEmitter<MouseEvent>();\r\n\r\n isThereSubmenus: boolean = false;\r\n\r\n constructor(\r\n private changeDetectionRef: ChangeDetectorRef\r\n ) { }\r\n\r\n ngAfterViewInit() {\r\n this.isThereSubmenus = this.submenuList?.submenuItems;\r\n this.changeDetectionRef.detectChanges();\r\n }\r\n\r\n onClick(event: MouseEvent) {\r\n // we block the trickling up of the click event if it has children\r\n // (items with children should not close the entire submenu)\r\n if (this.isThereSubmenus) {\r\n event.stopPropagation();\r\n }\r\n this.clicked.emit(event);\r\n }\r\n\r\n}\r\n","<div spaasHover=\"show-submenu\"\r\n class=\"mm-side-bar__icon__submenu-list__submenu_item flex align-center space-between\"\r\n (click)=\"onClick($event)\">\r\n <div class=\"flex space-between align-center full-width\">\r\n <ng-content></ng-content>\r\n\r\n @if (isThereSubmenus) {\r\n <mat-icon class=\"submenu-arrow\" fontIcon=\"arrow_forward_ios\"></mat-icon>\r\n }\r\n </div>\r\n <div class=\"mm-side-bar__icon__submenu-list subsequent-submenu flex column\">\r\n <ng-content select=\"spaas-submenu-side-bar-list\"></ng-content>\r\n </div>\r\n</div>\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {OktaUserModel} from '../_models/okta.model';\r\nimport {OktaService} from '../_services/okta.service';\r\n\r\n\r\n@Component({\r\n selector: 'spaas-user-info',\r\n standalone: false,\r\n templateUrl: './user-info.component.html',\r\n styleUrl: './user-info.component.scss'\r\n})\r\nexport class UserInfoComponent implements OnInit {\r\n\r\n currentUser: OktaUserModel | null = null;\r\n userInitials: string = ''\r\n\r\n constructor(\r\n private oktaService: OktaService,\r\n ) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.oktaService.onNewUserInfo()\r\n .subscribe((userInfo: OktaUserModel) => {\r\n this.currentUser = userInfo;\r\n if (this.currentUser) {\r\n this.userInitials = this.getUserInitials(this.currentUser);\r\n }\r\n }\r\n )\r\n }\r\n\r\n private getUserInitials(userInfo: OktaUserModel) {\r\n const {firstName, lastName} = userInfo;\r\n return `${firstName.charAt(0).toUpperCase()}${lastName.charAt(0).toUpperCase()}`\r\n }\r\n\r\n}\r\n","<div class=\"flex center\"\r\n [matMenuTriggerFor]=\"menu\">\r\n <mat-icon>account_circle</mat-icon>\r\n</div>\r\n\r\n<mat-menu #menu=\"matMenu\" class=\"user-menu-panel\">\r\n <div class=\"flex row pad-big space-between\">\r\n\r\n <div class=\"menu-bubble flex align-center center txt-bold\">\r\n {{ userInitials }}\r\n </div>\r\n\r\n <div class=\"flex column pad-small-top pad-big-right pad-big-left\">\r\n <h3>{{ currentUser?.firstName }} {{ currentUser?.lastName | titlecase }}</h3>\r\n <p>\r\n {{ currentUser?.userId }}<br>\r\n {{ currentUser?.email }}\r\n </p>\r\n <!--@if (currentUser?.groups) {\r\n <!–user groups–>\r\n <div class=\"flex row column-gap-10\">\r\n @for (item of currentUser?.groups; track $index) {\r\n <div class=\"group-item\">{{ item }}</div>\r\n }\r\n </div>\r\n }-->\r\n <!-- placeholder for content projection -->\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n </div>\r\n</mat-menu>\r\n","import {inject, ModuleWithProviders, NgModule, provideAppInitializer} from '@angular/core';\r\nimport {AppInitService} from \"./_services/app-init.service\";\r\nimport {BaseComponent} from \"./base/base.component\";\r\nimport {BgComponent} from \"./bg/bg.component\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {EmbedComponent} from \"./embed/embed.component\";\r\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\r\nimport {HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi} from \"@angular/common/http\";\r\nimport {IntroComponent} from \"./intro/intro.component\";\r\nimport {MaterialModule} from \"./material.module\";\r\nimport {MenuComponent} from \"./menu/menu.component\";\r\nimport {MenuSideBarComponent} from \"./menu-side-bar/menu-side-bar.component\";\r\nimport {MenuSideBarIconComponent} from \"./menu-side-bar/menu-side-bar-icon.component\";\r\nimport {NewVersionComponent} from \"./new-version/new-version.component\";\r\nimport {OktaAuthInterceptor} from \"./_interceptors/okta-auth.interceptor\";\r\nimport {PreloaderComponent} from \"./preloader/preloader.component\";\r\nimport {PwaInstallComponent} from \"./pwa-install/pwa-install.component\";\r\nimport {ResizableComponent} from \"./resizable/resizable.component\";\r\nimport {RouterModule} from \"@angular/router\";\r\nimport {ServiceWorkerModule} from \"@angular/service-worker\";\r\nimport {SettingsComponent} from \"./settings/settings.component\";\r\nimport {SpaasConfigModel} from \"./_models/config.model\";\r\nimport {SyncScrollDirective} from \"./_directives/sync-scroll.directive\";\r\nimport {ToggleComponent} from \"./toggle/toggle.component\";\r\nimport {SlideOutComponent} from \"./slide-out/slide-out.component\";\r\nimport {MenuSideBarSubmenuItemComponent} from \"./menu-side-bar/menu-side-bar-submenu-item.component\";\r\nimport {HoverDirective} from \"./_directives/hover.directive\";\r\nimport {MenuSideBarSubmenuListComponent} from \"./menu-side-bar/menu-side-bar-submenu-list.component\";\r\nimport { UserInfoComponent } from './user-info/user-info.component';\r\n\r\n/**\r\n * The SpaasModule offers all building blocks needed for a bespoke SPaaS SPA.\r\n *\r\n * <spaas-okta-intro> to display an intro for okta handling\r\n * <spaas-preloader> to add a preloader to your app\r\n * OktaAuthGuard to protect your routing\r\n * OktaAuthInterceptor to automatically include the token in your http requests\r\n */\r\n@NgModule({\r\n declarations: [\r\n BaseComponent,\r\n BgComponent,\r\n EmbedComponent,\r\n HoverDirective,\r\n IntroComponent,\r\n MenuComponent,\r\n MenuSideBarComponent,\r\n MenuSideBarIconComponent,\r\n MenuSideBarSubmenuItemComponent,\r\n MenuSideBarSubmenuListComponent,\r\n NewVersionComponent,\r\n PreloaderComponent,\r\n PwaInstallComponent,\r\n ResizableComponent,\r\n SettingsComponent,\r\n SlideOutComponent,\r\n SyncScrollDirective,\r\n ToggleComponent,\r\n UserInfoComponent\r\n ],\r\n exports: [\r\n BaseComponent,\r\n BgComponent,\r\n EmbedComponent,\r\n HoverDirective,\r\n IntroComponent,\r\n MenuComponent,\r\n MenuSideBarComponent,\r\n MenuSideBarIconComponent,\r\n MenuSideBarSubmenuItemComponent,\r\n MenuSideBarSubmenuListComponent,\r\n PreloaderComponent,\r\n ResizableComponent,\r\n SettingsComponent,\r\n SlideOutComponent,\r\n SyncScrollDirective,\r\n ToggleComponent,\r\n UserInfoComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MaterialModule,\r\n ReactiveFormsModule,\r\n RouterModule,\r\n ServiceWorkerModule.register('ngsw-worker.js', {enabled: !window.location.host.includes('localhost')}),\r\n ],\r\n providers: [\r\n provideAppInitializer(() => {\r\n const initializerFn = ((appInitService: AppInitService) => () => {\r\n return appInitService.initApp();\r\n })(inject(AppInitService));\r\n return initializerFn();\r\n }),\r\n {provide: HTTP_INTERCEPTORS, useClass: OktaAuthInterceptor, multi: true},\r\n provideHttpClient(withInterceptorsFromDi()),\r\n ]\r\n})\r\nexport class SpaasModule {\r\n static forRoot(config: SpaasConfigModel): ModuleWithProviders<SpaasModule> {\r\n return {\r\n ngModule: SpaasModule,\r\n providers: [{provide: SpaasConfigModel, useValue: config}]\r\n };\r\n }\r\n}\r\n","import { ActivatedRouteSnapshot, Route, Router, RouterStateSnapshot, UrlTree } from '@angular/router';\r\nimport {Injectable} from '@angular/core';\r\nimport {EmbedModeService} from \"../_services/embed-mode.service\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EmbeddedOnlyGuard {\r\n\r\n constructor(\r\n private embedModeService: EmbedModeService,\r\n private router: Router,\r\n ) {\r\n }\r\n\r\n private isIframe(): boolean | UrlTree {\r\n const isIframe = this.embedModeService.getEmbedMode().isIframe();\r\n if (!isIframe) {\r\n // set default url to \"home\". If \"home\" does not exist, router will fall back to redirect config\r\n return this.router.parseUrl('/home');\r\n }\r\n return isIframe;\r\n }\r\n\r\n // CAN LOAD: FOR FEATURE MODULES SECURITY\r\n canLoad(route: Route) {\r\n return this.isIframe();\r\n }\r\n\r\n // CAN ACTIVATE: FOR ROUTES SECURITY\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\r\n return this.isIframe();\r\n }\r\n\r\n canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\r\n return this.canActivate(route, state);\r\n }\r\n\r\n}\r\n","import { ActivatedRouteSnapshot, Route, RouterStateSnapshot } from '@angular/router';\r\nimport {Injectable} from '@angular/core';\r\nimport {OktaService} from '../_services/okta.service';\r\nimport {ActiveRouteService} from \"../_services/active-route.service\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OktaAuthGuard {\r\n\r\n constructor(\r\n private activeRouteService: ActiveRouteService,\r\n private oktaService: OktaService,\r\n ) {\r\n }\r\n\r\n // CAN LOAD: FOR FEATURE MODULES SECURITY\r\n canLoad(route: Route) {\r\n return !!this.oktaService.getCachedAccessToken();\r\n }\r\n\r\n // CAN ACTIVATE: FOR ROUTES SECURITY\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\r\n this.activeRouteService.newActiveRoute(state.url, route.queryParams, route.params);\r\n return !!this.oktaService.getCachedAccessToken();\r\n }\r\n\r\n canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\r\n return this.canActivate(route, state);\r\n }\r\n\r\n}\r\n","/**\r\n * Model used to replace <any>.\r\n * Contains keys of type T.\r\n */\r\n\r\nexport interface GenericObject<T> {\r\n [key: string]: T;\r\n}\r\n","/**\r\n * Enum used as msgType in the PostMessageModel. Will be used to know how to respond to a certain message.\r\n */\r\nexport enum PostMessageEnum {\r\n 'getTheme' = '1_getTheme',\r\n 'setTheme' = '2_setTheme',\r\n}\r\n\r\n/**\r\n * Model used to post messages from and to an iframe child app.\r\n *\r\n * @property {PostMessageEnum} msgType the type defined by PostMessageEnum. Will be used to know how\r\n * to respond to a certain message\r\n * @property {any} msgData any data you want to include in the PostMessage\r\n */\r\nexport class PostMessageModel {\r\n msgType: PostMessageEnum;\r\n msgData: any;\r\n\r\n constructor(type: PostMessageEnum, data: any = '') {\r\n this.msgType = type;\r\n this.msgData = data;\r\n }\r\n\r\n}\r\n","export const REGEX_DEC = '^-?(0|[1-9]\\\\d*)(\\\\.\\\\d+)?$';\r\nexport const REGEX_DEC_OR_HASH = '^[#]{1}$|^-?(0|[1-9]\\\\d*)(\\\\.\\\\d+)?$';\r\nexport const REGEX_INT = '^[-]?\\\\d*$'; // only integers, also negative\r\nexport const REGEX_INT_OR_1DEC = '^-?\\\\d+([.]\\\\d)?$';\r\nexport const REGEX_POSITIVE_INT = '^\\\\d+$';\r\n","import {Injectable} from '@angular/core';\r\nimport {fromEvent, Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\nimport {PostMessageEnum, PostMessageModel} from \"../_models/post-message.model\";\r\nimport {ThemeService} from \"./theme.service\";\r\nimport {SettingsService} from \"./settings.service\";\r\nimport {EmbedModeService} from \"./embed-mode.service\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PostMessageService {\r\n\r\n constructor(\r\n private embedModeService: EmbedModeService,\r\n private settingsService: SettingsService,\r\n private themeService: ThemeService,\r\n ) {\r\n this.onEmbedMode();\r\n this.startListening();\r\n }\r\n\r\n private onEmbedMode(): void {\r\n this.embedModeService.onNewEmbedMode()\r\n .subscribe(\r\n (mode) => {\r\n if (mode?.isIframe()) {\r\n // ask for theme from parent\r\n this.postMessage(\r\n window.parent,\r\n new PostMessageModel(PostMessageEnum.getTheme)\r\n );\r\n }\r\n }\r\n );\r\n }\r\n\r\n private startListening(): void {\r\n this.listenToPostMessages()\r\n .subscribe(\r\n (msg) => {\r\n\r\n // **************************************\r\n // MESSAGES TO BE PROCESSED BY PARENT\r\n\r\n // request for theme\r\n if (msg.msgType === PostMessageEnum.getTheme) {\r\n console.log('parent received request for theme');\r\n this.postMessage(\r\n this.embedModeService.embeddedWindow,\r\n new PostMessageModel(\r\n PostMessageEnum.setTheme,\r\n this.themeService.getActiveTheme().name\r\n )\r\n );\r\n }\r\n\r\n // **************************************\r\n // MESSAGES TO BE PROCESSED BY CHILD\r\n\r\n // set theme received from parent\r\n if (msg.msgType === PostMessageEnum.setTheme) {\r\n console.log('child received theme from parent: ' + msg.msgData);\r\n const settings = this.settingsService.getSettings();\r\n settings.dark = msg.msgData === 'dark';\r\n this.settingsService.newSettings(settings);\r\n this.themeService.setActiveTheme(msg.msgData);\r\n }\r\n\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * When you've embedded a SPaaS app using an iframe, you can use this method to listen to\r\n * the messages it will post. Some messages are automatically processed, check the doc.\r\n */\r\n listenToPostMessages(): Observable<PostMessageModel> {\r\n return fromEvent<MessageEvent>(window, 'message')\r\n .pipe(\r\n map((m) =>\r\n new PostMessageModel(m?.data?.msgType || '', m?.data?.msgData || '')\r\n )\r\n );\r\n }\r\n\r\n /**\r\n * When you've embedded a SPaaS app in an iframe and want to reply to some messages it will post,\r\n * you can use this method to do so.\r\n *\r\n * @param source the MessageEventSource of the iframe. You can retrieve its source by using\r\n * '@ViewChild('your_iframe_div') iframeDiv: ElementRef;' and then get 'this.iframeDiv.nativeElement.contentWindow'\r\n * @param msg the actual message to send to the child app in the iframe\r\n */\r\n postMessage(source: MessageEventSource | Window | null, msg: PostMessageModel): void {\r\n if (source) {\r\n source.postMessage(msg, {targetOrigin: '*'});\r\n }\r\n }\r\n\r\n}\r\n","import {Injectable, NgZone} from '@angular/core';\r\nimport {MatSnackBar, MatSnackBarConfig} from '@angular/material/snack-bar';\r\nimport {BehaviorSubject, Observable} from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SnackbarService {\r\n\r\n private confirm$: BehaviorSubject<string>;\r\n private readonly sbConfig: MatSnackBarConfig;\r\n\r\n private readonly DEF_DURATION = 6000;\r\n private duration = this.DEF_DURATION;\r\n\r\n static getConfirmId(type: string): string {\r\n return type + '_' + performance.now();\r\n }\r\n\r\n constructor(\r\n public snackbar: MatSnackBar,\r\n private zone: NgZone,\r\n ) {\r\n this.confirm$ = new BehaviorSubject<string>('');\r\n this.sbConfig = new MatSnackBarConfig();\r\n }\r\n\r\n /**\r\n * Shows a Material snackbar.\r\n *\r\n * @param message the message to show in the snackbar\r\n * @param action (optional) the message to show in the snackbar action button. When no action is provided, the button\r\n * will not show\r\n * @param append (optional, default true) specifies whether to append the new snackbar message to the previous one\r\n * if a previous snackbar is still active\r\n * @param duration (optional) set a one-time specific duration in milliseconds, just for this snackbar instance\r\n */\r\n message(\r\n message: string,\r\n action = '',\r\n append = true,\r\n duration = this.duration,\r\n ) {\r\n this.open(\r\n message,\r\n action,\r\n append,\r\n duration,\r\n false,\r\n )\r\n }\r\n\r\n /**\r\n * Shows a Material snackbar as an error (red background).\r\n *\r\n * @param message the message to show in the snackbar\r\n * @param action (optional) the message to show in the snackbar action button. When no action is provided, the button\r\n * will not show\r\n * @param append (optional, default true) specifies whether to append the new snackbar message to the previous one\r\n * if a previous snackbar is still active\r\n * @param duration (optional) set a one-time specific duration in milliseconds, just for this snackbar instance\r\n */\r\n error(\r\n message: string,\r\n action = '',\r\n append = true,\r\n duration = this.duration,\r\n ) {\r\n this.open(\r\n message,\r\n action,\r\n append,\r\n duration,\r\n true,\r\n )\r\n }\r\n\r\n private open(\r\n message: string,\r\n action: string,\r\n append: boolean,\r\n duration: number,\r\n isError: boolean,\r\n ) {\r\n this.zone.run(() => {\r\n if (append && this.snackbar._openedSnackBarRef?.instance?.data?.message) {\r\n message = this.snackbar._openedSnackBarRef.instance.data.message + '\\n------\\n' + message;\r\n }\r\n // reset panelClass in case the previous snackbar was an error\r\n this.sbConfig.panelClass = isError ? 'bg-error' : '';\r\n this.sbConfig.duration = duration;\r\n this.snackbar.open(message, action, this.sbConfig);\r\n });\r\n }\r\n\r\n /**\r\n * Shows a Material snackbar which awaits confirmation.\r\n *\r\n * @param message the message to show in the snackbar\r\n * @param action the message to show in the snackbar action button. When no action is provided, the button\r\n * will show \"Got it\"\r\n * @param confirmId a unique identifier by which you can recognise the confirmation response\r\n * that you get when listening to \"onNewConfirm\". Use static method \"SnackbarService.getConfirmId\" to get a unique id.\r\n * @param duration (optional) set a one-time specific duration in milliseconds, just for this snackbar instance\r\n */\r\n confirm(\r\n message: string,\r\n action: string = 'Got it',\r\n confirmId: string,\r\n duration = this.duration,\r\n ) {\r\n this.zone.run(() => {\r\n // reset panelClass in case the previous snackbar was an error\r\n this.sbConfig.panelClass = '';\r\n this.sbConfig.duration = duration;\r\n const snack = this.snackbar.open(message, action, this.sbConfig);\r\n snack.onAction()\r\n .subscribe(\r\n () => {\r\n this.newConfirm(confirmId);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Set the global duration for all snackbars\r\n *\r\n * @param ms duration in milliseconds\r\n */\r\n setDuration(\r\n ms: number,\r\n ): void {\r\n this.duration = ms;\r\n }\r\n\r\n /**\r\n * Reset the global duration for all snackbars to default (6000)\r\n */\r\n resetDuration(): void {\r\n this.duration = this.DEF_DURATION;\r\n }\r\n\r\n // ********************************************************************************************************\r\n // BROADCAST DATA\r\n // ********************************************************************************************************\r\n\r\n private newConfirm(newConfirm: string) {\r\n this.confirm$.next(newConfirm);\r\n }\r\n\r\n onNewConfirm(): Observable<string> {\r\n return this.confirm$.asObservable();\r\n }\r\n\r\n close() {\r\n this.zone.run(() => {\r\n this.snackbar.dismiss();\r\n });\r\n }\r\n\r\n}\r\n","import {\r\n HttpErrorResponse,\r\n HttpEvent,\r\n HttpHandler,\r\n HttpInterceptor,\r\n HttpRequest\r\n} from '@angular/common/http';\r\nimport {Injectable} from \"@angular/core\";\r\nimport {catchError, Observable, throwError} from \"rxjs\";\r\nimport {SnackbarService} from \"../_services/snackbar.service\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ConnectionErrorInterceptor implements HttpInterceptor {\r\n\r\n constructor(\r\n private snackbarService: SnackbarService,\r\n ) {\r\n }\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return next.handle(req).pipe(\r\n catchError((errorResponse: HttpErrorResponse) => {\r\n if (errorResponse.error instanceof ProgressEvent) {\r\n const s = errorResponse.error;\r\n let message = '';\r\n if (!s.lengthComputable && s.loaded === 0) {\r\n message = 'Unable to make a connection to the server, are you sure you are connected to the VPN ?';\r\n } else {\r\n message = 'Unable to reach ' + errorResponse.url + '\\nThis is usually a network related issue';\r\n }\r\n this.snackbarService.error(message, '', true, 60000);\r\n }\r\n\r\n return throwError(() => errorResponse);\r\n }),\r\n );\r\n }\r\n}\r\n","// MODULE\r\nexport * from './spaas.module';\r\n\r\n// COMPONENTS\r\nexport * from './base/base.component';\r\nexport * from './bg/bg.component';\r\nexport * from './embed/embed.component';\r\nexport * from './intro/intro.component';\r\nexport * from './menu-side-bar/menu-side-bar-icon.component';\r\nexport * from './menu-side-bar/menu-side-bar.component';\r\nexport * from './menu-side-bar/menu-side-bar-submenu-item.component';\r\nexport * from './menu-side-bar/menu-side-bar-submenu-list.component';\r\nexport * from './menu/menu.component';\r\nexport * from './preloader/preloader.component';\r\nexport * from './resizable/resizable.component';\r\nexport * from './settings/settings.component';\r\nexport * from './slide-out/slide-out.component';\r\nexport * from './toggle/toggle.component';\r\nexport * from './user-info/user-info.component';\r\n// DIRECTIVES\r\nexport * from './_directives/sync-scroll.directive';\r\nexport * from './_directives/hover.directive';\r\n\r\n// GUARDS\r\nexport * from './_guards/embedded-only.guard';\r\nexport * from './_guards/okta-auth.guard';\r\n\r\n// MODELS AND CONSTANTS\r\nexport * from './_models/config.model';\r\nexport * from './_models/generic-object.model';\r\nexport * from './_models/new-version.model';\r\nexport * from './_models/okta.model';\r\nexport * from './_models/post-message.model';\r\nexport * from './_models/regex.model';\r\nexport * from './_models/settings.model';\r\nexport * from './_models/slide-out.model';\r\nexport * from './_models/theme.model';\r\n\r\n// SERVICES\r\nexport * from './_services/active-route.service';\r\nexport * from './_services/config.service';\r\nexport * from './_services/local-storage.service';\r\nexport * from './_services/new-version.service';\r\nexport * from './_services/okta.service';\r\nexport * from './_services/post-message.service';\r\nexport * from './_services/preloader.service';\r\nexport * from './_services/session-storage.service';\r\nexport * from './_services/settings.service';\r\nexport * from './_services/slide-out.service';\r\nexport * from './_services/snackbar.service';\r\nexport * from './_services/sync-scroll.service';\r\nexport * from './_services/theme.service';\r\nexport * from './_services/utils.service';\r\nexport * from './_services/window-utils.service';\r\n\r\n// INTERCEPTORS\r\nexport * from './_interceptors/connection-error.interceptor';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.WindowUtilsService","i2.PwaInstallService","i1.ConfigService","i2.LocalStorageService","i1.LocalStorageService","i1.SettingsService","i1.EmbedModeService","i2.NewVersionService","i3.PwaInstallService","i4.ThemeService","i2","i3","i4.SessionStorageService","i5.WindowUtilsService","i2.EmbedModeService","i3.OktaService","i4.WindowUtilsService","i6.BgComponent","i7","i1","i2.SlideOutService","i3.ThemeService","i4","i1.ActiveRouteService","i2.ConfigService","i5","i1.SlideOutService","i3.HoverDirective","i1.OktaService","i1.PreloaderService","i2.SessionStorageService","i2.SettingsService","i7.ToggleComponent","i8","i1.SyncScrollService","i2.HoverDirective","i2.OktaService","i1.SnackbarService"],"mappings":"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"}