ngx-sp-auth 0.0.0-watch → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/login/login.component.mjs +4 -7
- package/esm2022/lib/components/menu-lateral/dropdown/primary-dropdown/primary-dropdown.component.mjs +1 -2
- package/esm2022/lib/components/menu-lateral/menu/menu-lateral.component.mjs +2 -4
- package/esm2022/lib/components/menu-lateral/menu-services.service.mjs +2 -2
- package/esm2022/lib/components/menu-lateral/model/infrausuarioimg.mjs +8 -8
- package/esm2022/lib/custom/custom-login.service.mjs +5 -5
- package/esm2022/lib/custom/custom-menu.service.mjs +3 -3
- package/esm2022/lib/custom/custom-storage.service.mjs +70 -0
- package/esm2022/lib/custom/menu-config.service.mjs +3 -3
- package/esm2022/lib/custom/models/icustom-storage-service.mjs +2 -0
- package/esm2022/lib/custom/models/imenu-config.mjs +1 -1
- package/esm2022/lib/environments/environments.service.mjs +1 -1
- package/esm2022/lib/storage/auth-storage.service.mjs +11 -55
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/ngx-sp-auth.mjs +98 -80
- package/fesm2022/ngx-sp-auth.mjs.map +1 -1
- package/lib/components/menu-lateral/model/infrausuarioimg.d.ts +7 -7
- package/lib/custom/custom-storage.service.d.ts +19 -0
- package/lib/custom/models/icustom-storage-service.d.ts +7 -0
- package/lib/storage/auth-storage.service.d.ts +3 -7
- package/package.json +19 -1
- package/public-api.d.ts +2 -0
- package/src/assets/styles/styles.novo.scss +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-sp-auth.mjs","sources":["../../../projects/ngx-sp-auth/src/lib/storage/auth-storage.service.ts","../../../projects/ngx-sp-auth/src/lib/custom/custom-login.service.ts","../../../projects/ngx-sp-auth/src/lib/auth.service.ts","../../../projects/ngx-sp-auth/src/lib/server/server.service.ts","../../../projects/ngx-sp-auth/src/lib/environments/environments.service.ts","../../../projects/ngx-sp-auth/src/lib/components/login/login.component.ts","../../../projects/ngx-sp-auth/src/lib/components/login/login.component.html","../../../projects/ngx-sp-auth/src/lib/custom/menu-config.service.ts","../../../projects/ngx-sp-auth/src/lib/custom/custom-menu.service.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/dropdown/secondary-dropdown/secondary-dropdown.component.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/dropdown/secondary-dropdown/secondary-dropdown.component.html","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/dropdown/primary-dropdown/primary-dropdown.component.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/dropdown/primary-dropdown/primary-dropdown.component.html","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/menu-services.service.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/menu/selecao-estabelecimentos-modal/selecao-estabelecimentos-modal.component.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/menu/selecao-estabelecimentos-modal/selecao-estabelecimentos-modal.component.html","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/submenus/dynamic-menu/dynamic-menu.component.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/submenus/dynamic-menu/dynamic-menu.component.html","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/submenus/notif-submenu/notif-submenu.component.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/submenus/notif-submenu/notif-submenu.component.html","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/menu/menu-lateral.component.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/menu/menu-lateral.component.html","../../../projects/ngx-sp-auth/src/lib/components/nova-senha/nova-senhacomponent.ts","../../../projects/ngx-sp-auth/src/lib/components/nova-senha/nova-senha.component.html","../../../projects/ngx-sp-auth/src/lib/auth.module.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/menu/list-estab.service.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/model/imenu.model.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/model/infrausuarioimg.ts","../../../projects/ngx-sp-auth/src/lib/models/custom-propriedades-login.ts","../../../projects/ngx-sp-auth/src/lib/guards/auth-guard.ts","../../../projects/ngx-sp-auth/src/lib/guards/external-login-guard.ts","../../../projects/ngx-sp-auth/src/lib/guards/login-guard.ts","../../../projects/ngx-sp-auth/src/lib/interceptors/auth-aplic.interceptor.ts","../../../projects/ngx-sp-auth/src/lib/interceptors/auth-infra.interceptor.ts","../../../projects/ngx-sp-auth/src/ngx-sp-auth.ts"],"sourcesContent":["import { HttpBackend, HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Payload } from './../models/payload';\r\n\r\nimport { BehaviorSubject, Observable, take, tap } from 'rxjs';\r\n\r\nimport { Utils } from 'ngx-sp-infra';\r\nimport { RetToken } from '../models/ret-token';\r\nimport { Token } from '../models/token';\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class AuthStorageService {\r\n\r\n\r\n private readonly _HOSTNAME: any = window.location.hostname.includes(\"localhost\")\r\n ? `http://${window.location.hostname}`\r\n : `https://${window.location.hostname}`;\r\n\r\n private readonly _BASE_URL: string = `${this._HOSTNAME}/SisproErpCloud/Service_Private/Infra/SpInfra2LoginWS/api/LoginSisproERP`; // SpInfra2WS\r\n\r\n private readonly __local_key = 'user_auth_v6';\r\n\r\n // indica se objeto já está marcado para salvar os dados no local storage.\r\n private __isSaving: boolean = false;\r\n\r\n /** Se ainda estamos com uma função rodando para verificar o login do usuário */\r\n private __isCheckingAuth: boolean = false;\r\n\r\n /* Variável para contornar o erro >>> NG0200: Circular dependency\" */\r\n private _httpClient: HttpClient;\r\n\r\n constructor(\r\n private _httpBackend: HttpBackend,\r\n ) {\r\n this._httpClient = new HttpClient(_httpBackend);\r\n\r\n //this._BASE_URL = !environment.production ? this._BASE_URL : `${environment.SpInfra2LoginWS}/LoginSisproERP`;\r\n\r\n // Método com customizações para inicializações da storage\r\n this.storageConstructor()\r\n\r\n const expectedLocalAuthStorage = localStorage.getItem(this.__local_key);\r\n\r\n if (expectedLocalAuthStorage) {\r\n const localAuthStorage = JSON.parse(expectedLocalAuthStorage) as AuthStorageService;\r\n\r\n this.__ip = localAuthStorage.__ip;\r\n this.__tenantId = localAuthStorage.__tenantId;\r\n this.__infraUsuarioId = localAuthStorage.__infraUsuarioId;\r\n this.__infraEstabId = localAuthStorage.__infraEstabId;\r\n this.__infraEstabNome = localAuthStorage.__infraEstabNome;\r\n this.__infraEmpresaId = localAuthStorage.__infraEmpresaId;\r\n this.__infraEmpresaNome = localAuthStorage.__infraEmpresaNome;\r\n this.__user = localAuthStorage.__user;\r\n this.__userName = localAuthStorage.__userName;\r\n this.__tokenPayload = localAuthStorage.__tokenPayload;\r\n this.__authToken = localAuthStorage.__authToken;\r\n this.__dominio = localAuthStorage.__dominio;\r\n this.__isExternalLogin = localAuthStorage.__isExternalLogin;\r\n\r\n this.startLoginCheck();\r\n }\r\n\r\n }\r\n\r\n // #region GETTERS/SETTERS\r\n\r\n public isLoggedInSub = new BehaviorSubject<boolean>(false);\r\n\r\n //ip\r\n private __ip: string = \"\";\r\n\r\n public get ip(): string {\r\n return this.__ip;\r\n }\r\n\r\n public set ip(value: string) {\r\n this.__ip = value;\r\n\r\n if (this.isLoggedInSub.value) {\r\n this.__saveLocalInstance();\r\n }\r\n\r\n }\r\n\r\n //tenantId\r\n private __tenantId: number = 0;\r\n\r\n public get tenantId(): number {\r\n return this.__tenantId;\r\n }\r\n\r\n public set tenantId(value: number) {\r\n this.__tenantId = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n //infraUsuarioId\r\n private __infraUsuarioId: string = \"\";\r\n\r\n public get infraUsuarioId(): string {\r\n return this.__infraUsuarioId;\r\n }\r\n\r\n public set infraUsuarioId(value: string) {\r\n this.__infraUsuarioId = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n // EstabelecimentoID\r\n private __infraEstabId: string = \"\";\r\n\r\n public get infraEstabId(): string {\r\n return this.__infraEstabId;\r\n }\r\n\r\n public set infraEstabId(value: string) {\r\n this.__infraEstabId = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n // NomeEstabelecimento\r\n private __infraEstabNome: string = \"\";\r\n\r\n public get infraEstabNome(): string {\r\n return this.__infraEstabNome;\r\n }\r\n\r\n public set infraEstabNome(value: string) {\r\n this.__infraEstabNome = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n // EmpresaID\r\n private __infraEmpresaId: string = \"\";\r\n\r\n public get infraEmpresaId(): string {\r\n return this.__infraEmpresaId;\r\n }\r\n\r\n public set infraEmpresaId(value: string) {\r\n this.__infraEmpresaId = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n // NomeEmpresa\r\n private __infraEmpresaNome: string = \"\";\r\n\r\n public get infraEmpresaNome(): string {\r\n return this.__infraEmpresaNome;\r\n }\r\n\r\n public set infraEmpresaNome(value: string) {\r\n this.__infraEmpresaNome = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n //user\r\n private __user: string = \"\";\r\n\r\n public get user(): string {\r\n return this.__user;\r\n }\r\n\r\n public set user(value: string) {\r\n this.__user = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n //username\r\n private __userName: string = \"\";\r\n\r\n public get userName(): string {\r\n return this.__userName;\r\n }\r\n\r\n public set userName(value: string) {\r\n this.__userName = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n //tokenPayload\r\n private __tokenPayload!: Payload;\r\n\r\n public get tokenPayload(): Payload {\r\n return this.__tokenPayload;\r\n }\r\n\r\n //authToken\r\n private __authToken: string = \"\";\r\n\r\n public get authToken(): string {\r\n return this.__authToken;\r\n }\r\n\r\n public set authToken(value: string) {\r\n this.__authToken = value;\r\n\r\n if (this.__authToken != '') {\r\n // Utiliza-se a função dos Utils para pegar o segundo valor do Token, separados por um '.'\r\n // e define o __tokenPayload como o objeto resultante do JSON.parse(payloadJson)\r\n const payloadJson: string = Utils.b64DecodeUnicode(this.__authToken.split('.')[1]);\r\n\r\n this.__tokenPayload = JSON.parse(payloadJson);\r\n\r\n this.startLoginCheck();\r\n }\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n /** Domínio */\r\n private __dominio: string = \"\";\r\n\r\n public get dominio(): string {\r\n return this.__dominio;\r\n }\r\n\r\n public set dominio(value: string) {\r\n this.__dominio = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n //url para redirecionamento\r\n private __UrlRedirect: string = \"/\";\r\n\r\n public get urlRedirect(): string {\r\n return this.__UrlRedirect;\r\n }\r\n\r\n public set urlRedirect(value: string) {\r\n this.__UrlRedirect = value;\r\n }\r\n\r\n //indica Login Externo\r\n private __isExternalLogin: boolean = false;\r\n\r\n public get isExternalLogin(): boolean {\r\n return this.__isExternalLogin;\r\n }\r\n\r\n public set isExternalLogin(value: boolean) {\r\n this.__isExternalLogin = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n /** Se é para ignorar o método reCheckLogin */\r\n private __ignoreCheckLogin: boolean = false;\r\n\r\n public get ignoreCheckLogin(): boolean {\r\n return this.__ignoreCheckLogin;\r\n }\r\n\r\n public set ignoreCheckLogin(value: boolean) {\r\n this.__ignoreCheckLogin = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n // #endregion GETTERS/SETTERS\r\n\r\n private async __saveLocalInstance(): Promise<void> {\r\n\r\n if (this.__isSaving) {\r\n return;\r\n }\r\n\r\n this.__isSaving = true;\r\n\r\n localStorage.setItem(this.__local_key, this.toJson());\r\n\r\n // Método com customizações para salvar informações na storage\r\n this.storageSaveLocalInstance();\r\n\r\n this.__notSaving();\r\n }\r\n\r\n private async __notSaving(): Promise<void> {\r\n this.__isSaving = false;\r\n }\r\n\r\n /**\r\n * Salva a instância como JSON seguro, ignorando objetos que não podem se tornar um JSON.\r\n */\r\n public toJson(): string {\r\n const json = `\r\n {\r\n \"__ip\": \"${this.ip}\",\r\n \"__tenantId\": ${this.tenantId},\r\n \"__infraUsuarioId\": \"${this.infraUsuarioId}\",\r\n \"__infraEstabId\": \"${this.infraEstabId}\",\r\n \"__infraEstabNome\": \"${this.infraEstabNome}\",\r\n \"__infraEmpresaId\": \"${this.infraEmpresaId}\",\r\n \"__infraEmpresaNome\": \"${this.infraEmpresaNome}\",\r\n \"__user\": \"${this.user}\",\r\n \"__userName\": \"${this.userName}\",\r\n \"__authToken\": \"${this.authToken}\",\r\n \"__tokenPayload\": ${JSON.stringify(this.tokenPayload)},\r\n \"__dominio\": \"${this.dominio}\",\r\n \"__isExternalLogin\": ${this.isExternalLogin}\r\n }\r\n `;\r\n\r\n return json;\r\n }\r\n\r\n /** Inicia a verificação do login. */\r\n public startLoginCheck() {\r\n\r\n if (!this.__isCheckingAuth) {\r\n this.reCheckLogin();\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Verifica a cada diferença de tempo entre a data atual e a data do token.\r\n */\r\n public async reCheckLogin() {\r\n\r\n if (this.__authToken === undefined || this.__authToken === '' || this.authToken === null || this.authToken === '') {\r\n this.__isCheckingAuth = false;\r\n return;\r\n }\r\n\r\n this.__isCheckingAuth = true;\r\n\r\n let isRenewToken: boolean = false;\r\n let nowDate: number = Math.round(Date.now() / 1000);\r\n\r\n if (this.tokenPayload.exp <= nowDate) {\r\n isRenewToken = true;\r\n }\r\n\r\n let leftTime: number = this.tokenPayload.exp - nowDate\r\n\r\n if (leftTime <= 0) {\r\n isRenewToken = true;\r\n }\r\n\r\n // TODO: Alterar aqui para não deslogar e avisar o usuário para logar denovo.\r\n if (isRenewToken) {\r\n const response = await this.getNewToken();\r\n\r\n if (response !== undefined && response !== null && response != '') {\r\n this.authToken = response;\r\n nowDate = Math.round(Date.now() / 1000);\r\n leftTime = this.tokenPayload.exp - nowDate;\r\n } else {\r\n this.logout();\r\n\r\n return;\r\n }\r\n\r\n }\r\n\r\n if (this.ignoreCheckLogin) {\r\n this.ignoreCheckLogin = false;\r\n } else {\r\n // Método com customizações para inicializações da AutoStorage\r\n this.storageInitializeAutoStorage();\r\n }\r\n\r\n this.isLoggedInSub.next(true);\r\n\r\n setTimeout(this.reCheckLogin.bind(this), leftTime * 1000);\r\n }\r\n\r\n public logout(): void {\r\n this.__isCheckingAuth = false;\r\n this.isLoggedInSub.next(false);\r\n this.__UrlRedirect = \"/\";\r\n\r\n this.__ip = \"\";\r\n this.__tenantId = 0;\r\n this.__infraUsuarioId = \"\";\r\n this.__infraEstabId = \"\";\r\n this.__infraEstabNome = \"\";\r\n this.__infraEmpresaId = \"\";\r\n this.__infraEmpresaNome = \"\";\r\n this.__user = \"\";\r\n this.__userName = \"\";\r\n this.__authToken = \"\";\r\n this.__dominio = \"\";\r\n this.__tokenPayload = {} as Payload;\r\n this.__isExternalLogin = false;\r\n\r\n localStorage.removeItem(this.__local_key);\r\n\r\n // Método com customizações para finalizações da storage\r\n this.storageLogout();\r\n }\r\n\r\n private getNewTokenBack(): Observable<RetToken> {\r\n let token: Token = {\r\n domain: this.__dominio,\r\n user: this.__user,\r\n tenantId: this.tenantId,\r\n token: this.authToken,\r\n infraUsuarioId: this.__infraUsuarioId,\r\n userName: this.__userName\r\n }\r\n\r\n const url = `${this._BASE_URL}/GetNewToken`;\r\n\r\n const headers = new HttpHeaders()\r\n .set('Content-Type', 'application/json')\r\n .set('Authorization',\r\n `Basic ${btoa(`${localStorage.getItem('configServerUser')}:${localStorage.getItem('configServerPassword')}`)}`\r\n );\r\n\r\n return this._httpClient\r\n .post<RetToken>(url, token, { 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n\r\n }),\r\n );\r\n\r\n }\r\n\r\n private getNewToken(): Promise<any> {\r\n\r\n return new Promise((resolve, reject) => {\r\n this.getNewTokenBack().subscribe({\r\n next: response => {\r\n resolve(response.Token);\r\n },\r\n error: error => {\r\n reject(error);\r\n }\r\n });\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Renova o Token quando este estiver vencido.\r\n */\r\n public async renewToken() {\r\n\r\n if (!this.isLoggedInSub || this.__authToken === undefined || this.__authToken === '' || this.authToken === null || this.authToken === '') {\r\n return;\r\n }\r\n\r\n let isRenewToken: boolean = false;\r\n let nowDate: number = Math.round(Date.now() / 1000);\r\n\r\n if (this.tokenPayload.exp <= nowDate) {\r\n isRenewToken = true;\r\n }\r\n\r\n let leftTime: number = this.tokenPayload.exp - nowDate\r\n\r\n if (leftTime <= 0) {\r\n isRenewToken = true;\r\n }\r\n\r\n if (isRenewToken) {\r\n const response = await this.getNewToken();\r\n\r\n if (response !== undefined && response !== null && response != '') {\r\n this.authToken = response;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n private isPrePortal(): boolean {\r\n\r\n // Identifica se a origem é PrePortal\r\n var url = new URL(window.location.href);\r\n var isPrePortal = url.searchParams.get(\"PrePortal\");\r\n\r\n if (isPrePortal != null) {\r\n\r\n if (isPrePortal.toString() == \"true\") {\r\n return true\r\n } else {\r\n return false\r\n }\r\n\r\n } else {\r\n return false\r\n }\r\n\r\n }\r\n\r\n // #region ==========> UTILS <==========\r\n\r\n // #endregion Propriedades Customizadas para o Componente auth-storage.service.ts\r\n\r\n // #region Métodos Customizadas para o Componente auth-storage.service.ts\r\n\r\n // Método executado no auth-storage.service.ts - método: constructor ()\r\n // Utilizado para inicializações diversas\r\n public storageConstructor(callback?: () => void): void {\r\n if (callback) {\r\n callback();\r\n }\r\n }\r\n\r\n // Método executado no auth-storage.service.ts - método: saveLocalInstance ()\r\n // Utilizado para salvar informações no localStorage\r\n public storageSaveLocalInstance(callback?: () => void): void {\r\n if (callback) {\r\n callback();\r\n }\r\n }\r\n\r\n // Método executado no auth-storage.service.ts - método: logout ()\r\n // Utilizado para inicializar informações no localStorage na logout da aplicação\r\n public storageLogout(callback?: () => void): void {\r\n if (callback) {\r\n callback();\r\n }\r\n }\r\n\r\n // Método executado no auth-storage.service.ts - método: reCheckLogin ()\r\n // Utilizado para inicializações diversas quando o Login exeutado via Pré Portal\r\n public storageInitializeAutoStorage(callback?: () => void): void {\r\n if (callback) {\r\n callback();\r\n }\r\n }\r\n\r\n // Método executado para salvar as propriedades no LocalStorage (não deve ser modificado)\r\n private async __authStorageSaveLocalInstance(): Promise<void> {\r\n\r\n if (this.__isSaving) {\r\n return\r\n }\r\n this.__isSaving = true\r\n\r\n this.storageSaveLocalInstance();\r\n\r\n this.__authStorageNotSaving()\r\n }\r\n\r\n // Método executado para salvar as propriedades no LocalStorage (não deve ser modificado)\r\n private async __authStorageNotSaving(): Promise<void> {\r\n this.__isSaving = false\r\n }\r\n\r\n // #endregion ==========> UTILS <==========\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { ICustomLoginService } from './models/icustom-login-service';\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class LibCustomLoginService {\r\n constructor() { }\r\n\r\n // #region Propriedade Customizadas para o Componente login.component.ts\r\n loginTitle!: string;\r\n loginSubtitle!: string;\r\n loginBackground!: string;\r\n loginLogotipo!: string;\r\n loginAltLogotipo!: string;\r\n loginPageTitle!: string;\r\n loginDesenvDomain!: string;\r\n loginDesenvUser!: string;\r\n loginDesenvPassword!: string;\r\n // #endregion Propriedade Customizadas para o Componente login.component.ts\r\n\r\n // #region Métodos Customizadas para o Componente auth.service.ts\r\n\r\n /**\r\n * Método executado no auth.service.ts - método: login ()\r\n * Utilizado para inicializações diversas\r\n */\r\n public authLogin(): void {\r\n this.storedAuthLogin\r\n }\r\n\r\n /**\r\n * Método executado no auth.service.ts - método: logout ()\r\n * Utilizado para inicializações diversas\r\n */\r\n public authLogout(): void {\r\n this.storedAuthLogout\r\n }\r\n\r\n /**\r\n * Método executado no auth.service.ts - método: login ()\r\n * Utilizado para informar o redirecionamento para a tela inicial após o login ok\r\n * \r\n * @param router Objeto de Router que será utilizado\r\n */\r\n public authNavigateToPage(router: Router): void {\r\n router.navigate([\"/home\"]);\r\n }\r\n // #endregion Métodos Customizadas para o Componente auth.service.ts\r\n\r\n // #region UTILS\r\n\r\n public storedAuthLogin!: () => void;\r\n public storedAuthLogout!: () => void;\r\n public storedAuthNavigateToPage!: (router: Router) => void;\r\n\r\n public ConfigurarCustomLogin(customLoginService: ICustomLoginService): void {\r\n\r\n //passando propriedades do produto para a lib\r\n this.loginTitle = customLoginService.loginTitle\r\n\r\n this.loginSubtitle = customLoginService.loginSubtitle\r\n\r\n this.loginBackground = customLoginService.loginBackground\r\n\r\n this.loginLogotipo = customLoginService.loginLogotipo\r\n\r\n this.loginAltLogotipo = customLoginService.loginAltLogotipo\r\n\r\n this.loginPageTitle = customLoginService.loginPageTitle\r\n\r\n this.loginDesenvDomain = customLoginService.loginDesenvDomain\r\n\r\n this.loginDesenvUser = customLoginService.loginDesenvUser\r\n\r\n this.loginDesenvPassword = customLoginService.loginDesenvPassword\r\n\r\n //passando implementação dos métodos do produto para a lib\r\n this.storedAuthLogin = customLoginService.authLogin;\r\n this.storedAuthLogout = customLoginService.authLogout;\r\n }\r\n\r\n // #endregion UTILS\r\n}\r\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { LibCustomLoginService } from '../lib/custom/custom-login.service';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map, take, tap } from 'rxjs/operators';\r\n\r\n\r\nimport { Code2Fa } from './models/code-2fa';\r\nimport { ForgottenPasswordForm } from './models/forgotten-password-form';\r\nimport { Login } from './models/login';\r\nimport { LoginForm } from './models/login-form';\r\nimport { NovaSenhaForm } from './models/nova-senha-form';\r\nimport { PasswordRecup } from './models/password-recup';\r\nimport { RetLogin } from './models/ret-login';\r\n\r\nimport { IpServiceService, RetError } from 'ngx-sp-infra';\r\nimport { AuthStorageService } from './storage/auth-storage.service';\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\n\r\nexport class AuthService {\r\n\r\n // #region ==========> PROPERTIES <==========\r\n\r\n // #region PRIVATE\r\n\r\n // private readonly _HOSTNAME: any = window.location.hostname.includes(\"localhost\")\r\n // ? `http://${window.location.hostname}`\r\n // : `https://${window.location.hostname}`;\r\n\r\n private readonly _HOSTNAME: any = \"https://siscandesv6.sispro.com.br\";\r\n\r\n private readonly _BASE_URL: string = `${this._HOSTNAME}/SisproErpCloud/Service_Private/Infra/SpInfra2LoginWS/api/LoginSisproERP`; // SpInfra2WS\r\n private readonly _HTTP_HEADERS = new HttpHeaders().set('Content-Type', 'application/json');\r\n private ip: string = \"undefined\";\r\n private city: string = \"undefined\";\r\n private state: string = \"undefined\";\r\n private country: string = \"undefined\";\r\n\r\n // #endregion PRIVATE\r\n\r\n // #endregion ==========> PROPERTIES <==========\r\n\r\n constructor(\r\n private _httpClient: HttpClient,\r\n private _router: Router,\r\n private _authStorageService: AuthStorageService,\r\n private _customLoginService: LibCustomLoginService,\r\n private _ipServiceService: IpServiceService,\r\n ) {\r\n //this._BASE_URL = !environment.production ? this._BASE_URL : `${environment.SpInfra2LoginWS}/LoginSisproERP`;\r\n this._BASE_URL.includes(\"localhost\") || this._BASE_URL.includes('127.0.0.1')\r\n ? this._BASE_URL\r\n : this._BASE_URL = \"https://siscandesv6.sispro.com.br/SisproErpCloud/Service_Private/Infra/SpInfra2LoginWS/api/LoginSisproERP\";\r\n\r\n this.getParms();\r\n }\r\n\r\n // #region ==========> SERVICE METHODS <==========\r\n\r\n // #region GET\r\n\r\n private getParms(): void {\r\n this.ip = \"undefined\";\r\n\r\n this._ipServiceService.getIPAddress().subscribe({\r\n next: (res: any) => {\r\n this.ip = res.ip;\r\n },\r\n error: (error: any) => {\r\n },\r\n });\r\n\r\n this.city = \"undefined\";\r\n this.state = \"undefined\";\r\n this.country = \"undefined\";\r\n\r\n this._ipServiceService.getDataUser().subscribe({\r\n next: (res: any) => {\r\n this.city = res.city;\r\n this.state = res.region_code;\r\n this.country = res.country_name;\r\n },\r\n error: (error: any) => {\r\n },\r\n });\r\n\r\n }\r\n\r\n private geHostName(): string {\r\n let product: string = window.location.pathname;\r\n\r\n let index: number = product.indexOf(\"/auth/login\");\r\n\r\n if (index != -1) {\r\n product = product.substring(0, index);\r\n } else {\r\n product = \"\";\r\n }\r\n\r\n return this._HOSTNAME + product;\r\n }\r\n\r\n // #endregion GET\r\n\r\n // #region POST\r\n\r\n /** Realiza o login no sistema\r\n * @param login Informações do formulário de login\r\n * @returns Observable com os dados do login realizado, seja erro ou sucesso\r\n */\r\n public login(parmsLogin: LoginForm): Observable<RetLogin> {\r\n\r\n let login: Login = {\r\n usuario: parmsLogin.usuario,\r\n senha: parmsLogin.senha\r\n }\r\n\r\n const params = new HttpParams()\r\n\r\n .set('dominio', parmsLogin.dominio)\r\n .set('urlServidor', this.geHostName())\r\n .set('ip', this.ip)\r\n .set('browse', `${this._ipServiceService.getDataBrowserUser().browser} - ${this._ipServiceService.getDataBrowserUser().so}`)\r\n .set('localization', `${this.city}, ${this.state}, ${this.country}`);\r\n\r\n const url = `${this._BASE_URL}/ValidateLogin`;\r\n\r\n const headers = this._HTTP_HEADERS;\r\n\r\n return this._httpClient\r\n .post<RetLogin>(url, login, { 'params': params, 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n if (response.FeedbackMessage != \"\") {\r\n return;\r\n }\r\n\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n\r\n if (response.InitializePassword) {\r\n //Inicializar password\r\n this._authStorageService.logout();\r\n\r\n } else if (response.InfraInAuthTypeId == 1 && response.InfraIn2FaTypeId != null && response.InfraIn2FaTypeId == 1 && response.Is2FaEnabled) {\r\n //Inicializar Autenticação Local 2 Fatores via Email\r\n this._authStorageService.logout();\r\n\r\n this._authStorageService.ip = this.ip;\r\n this._authStorageService.tenantId = response.TenantId;\r\n this._authStorageService.infraUsuarioId = response.InfraUsuarioId;\r\n this._authStorageService.user = login.usuario;\r\n this._authStorageService.userName = response.UserName;\r\n this._authStorageService.dominio = response.Dominio;\r\n this._authStorageService.isExternalLogin = false;\r\n\r\n } else {\r\n this._authStorageService.ignoreCheckLogin = true;\r\n\r\n this._authStorageService.isLoggedInSub.next(true);\r\n\r\n this._authStorageService.ip = this.ip;\r\n this._authStorageService.tenantId = response.TenantId;\r\n this._authStorageService.infraUsuarioId = response.InfraUsuarioId;\r\n this._authStorageService.infraEstabId = response.EstabelecimentoId;\r\n this._authStorageService.infraEstabNome = response.NomeEstabelecimento;\r\n this._authStorageService.infraEmpresaId = response.EmpresaId;\r\n this._authStorageService.infraEmpresaNome = response.NomeEmpresa;\r\n this._authStorageService.user = login.usuario;\r\n this._authStorageService.userName = response.UserName;\r\n this._authStorageService.authToken = response.Token;\r\n this._authStorageService.dominio = response.Dominio;\r\n this._authStorageService.isExternalLogin = false;\r\n\r\n // Método com customizações para inicializações do Login\r\n this._customLoginService.authLogin();\r\n\r\n if (this._authStorageService.urlRedirect == '' || this._authStorageService.urlRedirect == '/' || this._authStorageService.urlRedirect == '/auth/login') {\r\n // Método com customizações para redirecionamento da tela inicial após login ok\r\n this._customLoginService.authNavigateToPage(this._router);\r\n } else {\r\n this._router.navigate([this._authStorageService.urlRedirect]);\r\n }\r\n\r\n this._authStorageService.urlRedirect = \"/\";\r\n }\r\n\r\n })\r\n );\r\n }\r\n\r\n public loginExternal(dominio: string, user: string, password: string): Observable<boolean> {\r\n\r\n let login: Login = {\r\n usuario: user,\r\n senha: password\r\n }\r\n\r\n const params = new HttpParams()\r\n .set('dominio', dominio);\r\n\r\n const url = `${this._BASE_URL}/ValidateExternalLogin`;\r\n\r\n const headers = this._HTTP_HEADERS;\r\n\r\n return this._httpClient\r\n .post<RetLogin>(url, login, { 'params': params, 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n if (!response.Error) {\r\n this._authStorageService.isLoggedInSub.next(true);\r\n\r\n this._authStorageService.ip = this.ip;\r\n this._authStorageService.tenantId = response.TenantId;\r\n this._authStorageService.infraUsuarioId = response.InfraUsuarioId;\r\n this._authStorageService.infraEstabId = response.EstabelecimentoId;\r\n this._authStorageService.infraEstabNome = response.NomeEstabelecimento;\r\n this._authStorageService.infraEmpresaId = response.EmpresaId;\r\n this._authStorageService.infraEmpresaNome = response.NomeEmpresa;\r\n this._authStorageService.user = login.usuario;\r\n this._authStorageService.userName = response.UserName;\r\n this._authStorageService.authToken = response.Token;\r\n this._authStorageService.dominio = response.Dominio;\r\n this._authStorageService.isExternalLogin = true;\r\n }\r\n\r\n }),\r\n map((response) => {\r\n return response.Error;\r\n }\r\n )\r\n\r\n );\r\n }\r\n\r\n public logout() {\r\n this._authStorageService.logout();\r\n\r\n localStorage.removeItem('configsServerUser');\r\n localStorage.removeItem('configsServerPassword');\r\n\r\n // Método com customizações para inicializações do Logout\r\n this._customLoginService.authLogout();\r\n\r\n this._router.navigate([\"/auth/login\"]);\r\n }\r\n\r\n public validateAuthentication2Fa(code: string): Observable<RetLogin> {\r\n\r\n let Code2Fa: Code2Fa = {\r\n infraUsuarioId: this._authStorageService.infraUsuarioId,\r\n code: code\r\n }\r\n\r\n const params = new HttpParams()\r\n .set('domain', this._authStorageService.dominio)\r\n .set('user', this._authStorageService.user)\r\n .set('userName', this._authStorageService.userName)\r\n\r\n const url = `${this._BASE_URL}/ValidadeLogin2FaWithEmail`;\r\n\r\n const headers = this._HTTP_HEADERS;\r\n\r\n return this._httpClient\r\n .post<RetLogin>(url, Code2Fa, { 'params': params, 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n\r\n this._authStorageService.ignoreCheckLogin = true;\r\n\r\n this._authStorageService.isLoggedInSub.next(true);\r\n\r\n this._authStorageService.ip = this.ip;\r\n this._authStorageService.tenantId = response.TenantId;\r\n this._authStorageService.infraUsuarioId = response.InfraUsuarioId;\r\n this._authStorageService.infraEstabId = response.EstabelecimentoId;\r\n this._authStorageService.infraEstabNome = response.NomeEstabelecimento;\r\n this._authStorageService.infraEmpresaId = response.EmpresaId;\r\n this._authStorageService.infraEmpresaNome = response.NomeEmpresa;\r\n this._authStorageService.user = this._authStorageService.user;\r\n this._authStorageService.userName = response.UserName;\r\n this._authStorageService.authToken = response.Token;\r\n this._authStorageService.dominio = response.Dominio;\r\n this._authStorageService.isExternalLogin = false;\r\n\r\n // Método com customizações para inicializações do Login\r\n this._customLoginService.authLogin();\r\n\r\n if (this._authStorageService.urlRedirect == '' || this._authStorageService.urlRedirect == '/' || this._authStorageService.urlRedirect == '/auth/login') {\r\n // Método com customizações para redirecionamento da tela inicial após login ok\r\n this._customLoginService.authNavigateToPage(this._router);\r\n } else {\r\n this._router.navigate([this._authStorageService.urlRedirect]);\r\n }\r\n\r\n this._authStorageService.urlRedirect = \"/\";\r\n })\r\n\r\n );\r\n }\r\n\r\n public GetNewCode2Fa(): Observable<RetError> {\r\n\r\n const params = new HttpParams()\r\n .set('domain', this._authStorageService.dominio)\r\n .set('user', this._authStorageService.user)\r\n .set('ip', this.ip)\r\n .set('browse', `${this._ipServiceService.getDataBrowserUser().browser} - ${this._ipServiceService.getDataBrowserUser().so}`)\r\n .set('localization', `${this.city}, ${this.state}, ${this.country}`);\r\n\r\n const url = `${this._BASE_URL}/GetNewCode2FaWithEmail`;\r\n\r\n const headers = this._HTTP_HEADERS;\r\n\r\n return this._httpClient\r\n .post<RetLogin>(url, null, { 'params': params, 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n\r\n })\r\n\r\n );\r\n }\r\n\r\n public forgottenPassword(parms: ForgottenPasswordForm): Observable<RetError> {\r\n\r\n this._authStorageService.logout();\r\n\r\n const params = new HttpParams()\r\n .set('domain', parms.dominioFgtPsw)\r\n .set('user', parms.usuarioFgtPsw)\r\n .set('urlServidor', this.geHostName())\r\n .set('ip', this.ip)\r\n .set('browse', `${this._ipServiceService.getDataBrowserUser().browser} - ${this._ipServiceService.getDataBrowserUser().so}`)\r\n .set('localization', `${this.city}, ${this.state}, ${this.country}`);\r\n\r\n const headers = this._HTTP_HEADERS;\r\n\r\n const url = `${this._BASE_URL}/ForgottenPassword`;\r\n\r\n return this._httpClient\r\n .post<RetError>(url, null, { 'params': params, 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n\r\n })\r\n\r\n );\r\n\r\n }\r\n\r\n public recoverPassword(dominio: string, usuario: string, parms: NovaSenhaForm): Observable<RetError> {\r\n\r\n let recupPassword: PasswordRecup = {\r\n password: parms.password,\r\n confirmPassword: parms.confirmPassword,\r\n code: parms.code\r\n }\r\n\r\n const params = new HttpParams()\r\n .set('domain', dominio)\r\n .set('user', usuario)\r\n\r\n const headers = this._HTTP_HEADERS;\r\n\r\n const url = `${this._BASE_URL}/RecoverPassword`;\r\n\r\n return this._httpClient\r\n .post<RetError>(url, recupPassword, { 'params': params, 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n\r\n })\r\n\r\n );\r\n\r\n }\r\n\r\n public createPassword(dominio: string, usuario: string, parms: NovaSenhaForm): Observable<RetError> {\r\n\r\n let recupPassword: PasswordRecup = {\r\n password: parms.password,\r\n confirmPassword: parms.confirmPassword,\r\n code: parms.code\r\n }\r\n\r\n const params = new HttpParams()\r\n .set('domain', dominio)\r\n .set('user', usuario)\r\n\r\n const headers = this._HTTP_HEADERS;\r\n\r\n const url = `${this._BASE_URL}/CreatePassword`;\r\n\r\n return this._httpClient\r\n .post<RetError>(url, recupPassword, { 'params': params, 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n\r\n })\r\n );\r\n }\r\n\r\n // #endregion POST\r\n\r\n // #endregion ==========> SERVICE METHODS <==========\r\n\r\n // #region ==========> UTILS <==========\r\n\r\n // #endregion ==========> UTILS <==========\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { Observable, take, tap } from 'rxjs';\r\n\r\nimport { RetServerConfig } from './ret-server-config';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ServerService {\r\n\r\n\r\n // private readonly _HOSTNAME: any = window.location.hostname.includes(\"localhost\")\r\n // ? `http://${window.location.hostname}`\r\n // : `https://${window.location.hostname}`;\r\n\r\n private readonly _HOSTNAME: any = \"https://siscandesv6.sispro.com.br\";\r\n\r\n private readonly _BASE_URL: string = `${this._HOSTNAME}/SisproErpCloud/Service_Private/Infra/SpInfra2ConfigWS/api/Config`;\r\n private readonly _HTTP_HEADERS = new HttpHeaders().set('Content-Type', 'application/json');\r\n\r\n constructor(private _httpClient: HttpClient) {\r\n this._BASE_URL.includes(\"localhost\") || this._BASE_URL.includes('127.0.0.1')\r\n ? this._BASE_URL\r\n : this._BASE_URL = \"https://siscandesv6.sispro.com.br/SisproErpCloud/Service_Private/Infra/SpInfra2ConfigWS/api/Config\";\r\n }\r\n\r\n // #region GET Server\r\n public getServer(): Observable<RetServerConfig> {\r\n const url = `${this._BASE_URL}/GetConfig`;\r\n\r\n return this._httpClient\r\n .post<RetServerConfig>(url, null, { 'headers': this._HTTP_HEADERS })\r\n .pipe(\r\n take(1),\r\n tap(response => {\r\n localStorage.setItem('configServerUser', response.User);\r\n localStorage.setItem('configServerPassword', response.Password);\r\n })\r\n )\r\n }\r\n // #endregion GET Server\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\n//import { IEnvironments } from \"ngx-sp-auth\";\r\nimport { IEnvironments } from \"./models/ienvironments\";\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\n/**Service responsável por pegar as opções do menu do projeto em que está sendo utilizada*/\r\nexport class EnvironmentService {\r\n\r\n // URLs que necessitam de autenticação da infra.\r\n needsAuthInfra!: Map<string, string[]>;\r\n\r\n // URLs que necessitam de autenticação do usuário para funcionar.\r\n needsAuthAplic!: Map<string, string[]>;\r\n\r\n production: boolean = false;\r\n hostName: string = \"https://siscandesv6.sispro.com.br\";\r\n\r\n ConfigurarEnvironments(propriedades: IEnvironments): void {\r\n\r\n //passando propriedades do produto para a lib\r\n this.needsAuthAplic = propriedades.needsAuthAplic;\r\n this.needsAuthInfra = propriedades.needsAuthInfra;\r\n }\r\n\r\n}\r\n\r\n","import { Component, OnInit, TemplateRef } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { Router } from '@angular/router';\r\n\r\n\r\nimport { map, Subscription, take, timer } from 'rxjs';\r\n\r\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\r\nimport { ToastrService } from 'ngx-toastr';\r\n\r\n//import { CustomLoginService } from 'src/app/project/custom/login/custom-login.service';\r\nimport { FormUtils, MessageService } from 'ngx-sp-infra';\r\nimport { AuthService } from '../../auth.service';\r\nimport { EnvironmentService } from '../../environments/environments.service';\r\n// import { environment } from '../../environments/environments';\r\nimport { LibCustomLoginService } from '../../custom/custom-login.service';\r\nimport { ServerService } from '../../server/server.service';\r\nimport { AuthStorageService } from '../../storage/auth-storage.service';\r\n\r\n@Component({\r\n\tselector: 'lib-login',\r\n\ttemplateUrl: './login.component.html',\r\n\tstyleUrls: ['./login.component.scss'],\r\n\tstandalone: false,\r\n\tpreserveWhitespaces: true,\r\n})\r\nexport class LoginComponent implements OnInit {\r\n\r\n\tconstructor(\r\n\t\t//public _customLoginService: CustomLoginService,\r\n\t\tprivate _bsModalService: BsModalService,\r\n\t\tprivate _messageService: MessageService,\r\n\t\tprivate _formBuilder: FormBuilder,\r\n\t\tprivate _authService: AuthService,\r\n\t\tprivate _serverService: ServerService,\r\n\t\tprivate _environmentService: EnvironmentService,\r\n\t\tprivate _authStorageService: AuthStorageService,\r\n\t\tpublic _customLoginService: LibCustomLoginService,\r\n\t\tprivate _title: Title,\r\n\t\tprivate _router: Router,\r\n\t\tprivate _toastrService: ToastrService\r\n\t) { }\r\n\r\n\t// #region ==========> PROPERTIES <==========\r\n\r\n\t// #region PRIVATE\r\n\r\n\tprivate idFgtPsw: number = 1;\r\n\r\n\t// #endregion PRIVATE\r\n\r\n\t// #region PUBLIC\r\n\r\n\tpublic modalRef?: BsModalRef;\r\n\r\n\t// Variáveis específicas para funcionalidades padrões dos formulários\r\n\tpublic currentTime: Date = new Date();\r\n\tpublic year: number = this.currentTime.getFullYear();\r\n\r\n\tpublic isLoading: boolean = false;\r\n\tpublic isLoadingSendAuthentication2Fa: boolean = false;\r\n\tpublic showParmsAuthentication2Fa = false;\r\n\tpublic isLoadingGetNewCode: boolean = false;\r\n\r\n\t//propriedades que vão receber os valores do customLoginService ####VERIFICAR DEPOIS####\r\n\r\n\t// @Input() customPropriedadesLogin?: CustomPropriedadesLogin;\r\n\r\n\t// #endregion PUBLIC\r\n\r\n\t// #region Timer\r\n\r\n\tprivate _subscription: Subscription = new Subscription();\r\n\tprivate timerDuration: number = 90;\r\n\tpublic secondsLeft: number = this.timerDuration;\r\n\r\n\tprivate countdown$ = timer(0, 1000).pipe(\r\n\t\ttake(this.timerDuration + 1),\r\n\r\n\t\tmap(secondsElapsed => this.timerDuration - secondsElapsed)\r\n\t);\r\n\r\n\t// #endregion Timer\r\n\r\n\t// #region ==========> FORM BUILDER <==========\r\n\tpublic form: FormGroup = new FormGroup({});\r\n\tpublic formFgtPsw: FormGroup = new FormGroup({});;\r\n\tpublic formAuthentication2Fa: FormGroup = new FormGroup({});;\r\n\r\n\t// Propriedade necessário para que a classe static FormUtils possa ser utilizada no Html\r\n\tpublic get FormUtils(): typeof FormUtils {\r\n\t\treturn FormUtils;\r\n\t}\r\n\r\n\t// #region FORM DATA\r\n\r\n\t// Variáveis específicas para funcionalidades padrões dos formulários (Login)\r\n\tpublic get dominio(): string {\r\n\t\treturn this.form.get('dominio')?.value;\r\n\t}\r\n\r\n\tpublic get usuario(): string {\r\n\t\treturn this.form.get('usuario')?.value;\r\n\t}\r\n\r\n\tpublic get senha(): string {\r\n\t\treturn this.form.get('senha')?.value;\r\n\t}\r\n\r\n\t// Variáveis específicas para funcionalidades padrões dos formulários (RequestRecoverPassword)\r\n\tpublic get dominioFgtPsw(): string {\r\n\t\treturn this.formFgtPsw.get('dominioFgtPsw')?.value;\r\n\t}\r\n\r\n\tpublic get usuarioFgtPsw(): string {\r\n\t\treturn this.formFgtPsw.get('usuarioFgtPsw')?.value;\r\n\t}\r\n\r\n\t// Variáveis específicas para funcionalidades padrões dos formulários (Autenticação 2 Fatores)\r\n\tpublic get code(): string {\r\n\t\treturn this.formAuthentication2Fa.get('code')?.value;\r\n\t}\r\n\r\n\t// #endregion FORM DATA\r\n\r\n\t// #endregion ==========> PROPERTIES <==========\r\n\r\n\tngOnInit(): void {\r\n\r\n\t\tthis._title.setTitle(this._customLoginService.loginPageTitle);\r\n\r\n\t\tif (this._customLoginService.loginTitle != \"\") {\r\n\t\t\tdocument.getElementById(\"title\")!.innerHTML = this._customLoginService.loginTitle;\r\n\t\t}\r\n\r\n\t\tif (this._customLoginService.loginSubtitle != \"\") {\r\n\t\t\tdocument.getElementById(\"subtitle\")!.innerHTML = this._customLoginService.loginSubtitle;\r\n\t\t}\r\n\t\tthis.createForm();\r\n\t}\r\n\r\n\t// #region FORM VALIDATORS\r\n\r\n\t// Método para configuração dos campos de edição do formulário (Login)\r\n\tprivate createForm(): void {\r\n\r\n\t\t// Dados originais de Login\r\n\t\tif (this._environmentService.production) {\r\n\t\t\tthis.form = this._formBuilder.group({\r\n\t\t\t\tdominio: ['', [Validators.required, Validators.maxLength(50)]],\r\n\t\t\t\tusuario: ['', [Validators.required, Validators.maxLength(100)]],\r\n\t\t\t\tsenha: ['', [Validators.required, Validators.maxLength(100)]]\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.form = this._formBuilder.group({\r\n\t\t\t\tdominio: [this._customLoginService.loginDesenvDomain, [Validators.required, Validators.maxLength(50)]],\r\n\t\t\t\tusuario: [this._customLoginService.loginDesenvUser, [Validators.required, Validators.maxLength(100)]],\r\n\t\t\t\tsenha: [this._customLoginService.loginDesenvPassword, [Validators.required, Validators.maxLength(100)]]\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t// Método para configuração dos campos de edição do formulário (RequestRecoverPassword)\r\n\tprivate createFormForgottenPassword(): void {\r\n\r\n\t\tthis.formFgtPsw = this._formBuilder.group({\r\n\t\t\tdominioFgtPsw: ['', [Validators.required, Validators.maxLength(50)]],\r\n\t\t\tusuarioFgtPsw: ['', [Validators.required, Validators.maxLength(100)]],\r\n\t\t});\r\n\r\n\t\tthis.formFgtPsw.get('recoverCdominioFgtPswodeRecPsw')?.setValue('');\r\n\t\tthis.formFgtPsw.get('usuarioFgtPsw')?.setValue('');\r\n\t}\r\n\r\n\t// Método para configuração dos campos de edição do formulário (Autenticação 2 Fatores)\r\n\tprivate createFormAuthentication2Fa(): void {\r\n\r\n\t\tthis.formAuthentication2Fa = this._formBuilder.group({\r\n\t\t\tcode: ['', [Validators.required, Validators.maxLength(6)]],\r\n\t\t});\r\n\r\n\t\tthis.form.get('code')?.setValue('');\r\n\t}\r\n\r\n\t// #endregion FORM VALIDATORS\r\n\r\n\t// #endregion ==========> FORM BUILDER <==========\r\n\r\n\t// #region ==========> SERVICE METHODS <==========\r\n\r\n\t// #region GET\r\n\r\n\t// Obtém a Url do Config Erp\r\n\tpublic geturlErpConfig(): string {\r\n\t\t// verificar depois \r\n\t\treturn `${this._environmentService.hostName}/SisproErpCloud/ConfigErp`;\r\n\t}\r\n\r\n\t/*\r\n\t* Obtém os parâmetros de configuração do servidor para Autenticação Básica de segurança\r\n\t*/\r\n\tpublic getServer(): void {\r\n\r\n\t\tif (this.form.valid) {\r\n\t\t\tthis.isLoading = true;\r\n\r\n\t\t\tthis._serverService.getServer().subscribe({\r\n\t\t\t\tnext: response => {\r\n\t\t\t\t\tthis.logOn();\r\n\t\t\t\t},\r\n\t\t\t\terror: (error) => {\r\n\t\t\t\t\tthis.isLoading = false;\r\n\r\n\t\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\r\n\t\t\t\t\t//pode ser substituido por console.error\r\n\t\t\t\t\tthrow new Error(error)\r\n\t\t\t\t},\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tFormUtils.validateFields(this.form);\r\n\t\t}\r\n\t}\r\n\r\n\t// #endregion GET\r\n\r\n\t// #region POST\r\n\r\n\t// Executa o Login\r\n\tpublic logOn(): void {\r\n\t\tthis._authService.login(this.form.value).subscribe({\r\n\t\t\tnext: (response) => {\r\n\t\t\t\tthis.isLoading = false;\r\n\r\n\t\t\t\tif (response.FeedbackMessage != \"\") {\r\n\t\t\t\t\tthis._toastrService.warning(response.FeedbackMessage,\r\n\t\t\t\t\t\t'',\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttimeOut: 3000,\r\n\t\t\t\t\t\t\textendedTimeOut: 2000\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Incialização de Senha\r\n\t\t\t\tif (response.InitializePassword) {\r\n\t\t\t\t\tlet param: string = btoa(`true$${this.dominio}$${this.usuario}`);\r\n\r\n\t\t\t\t\tthis._router.navigate([`auth/login/novaSenha/${param}`]);\r\n\r\n\t\t\t\t\tthis._toastrService.success(\"Verifique no seu e-mail o código de validação.\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (response.InfraInAuthTypeId == 1 && response.InfraIn2FaTypeId != null && response.InfraIn2FaTypeId == 1 && response.Is2FaEnabled) {\r\n\t\t\t\t\tthis.createFormAuthentication2Fa();\r\n\r\n\t\t\t\t\tthis._subscription = this.countdown$.subscribe(secondsLeft => {\r\n\t\t\t\t\t\tthis.secondsLeft = secondsLeft;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tthis.showParmsAuthentication2Fa = true;\r\n\r\n\t\t\t\t\tthis._toastrService.success(\"Verifique no seu e-mail o código de validação.\");\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\t\t\terror: (error) => {\r\n\t\t\t\tthis.isLoading = false;\r\n\r\n\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\tthrow new Error(error)\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t}\r\n\r\n\t// Envia requisição para esquecer senha\r\n\tpublic sendForgottenPassword(): void {\r\n\r\n\t\tif (this.formFgtPsw.valid) {\r\n\t\t\tthis._serverService.getServer().subscribe({\r\n\t\t\t\tnext: response => {\r\n\t\t\t\t\tthis.forgottenPassword();\r\n\t\t\t\t},\r\n\t\t\t\terror: (error) => {\r\n\t\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\t\tthrow new Error(error)\r\n\t\t\t\t},\r\n\t\t\t})\r\n\r\n\t\t} else {\r\n\t\t\tFormUtils.validateFields(this.formFgtPsw);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Requisição para esquecer senha\r\n\tpublic forgottenPassword(): void {\r\n\r\n\t\tthis._authService.forgottenPassword(this.formFgtPsw.value).subscribe({\r\n\t\t\tnext: (response) => {\r\n\t\t\t\tthis.closeForgottenPasswordModal();\r\n\r\n\t\t\t\tlet param: string = btoa(`false$${this.dominio}$${this.usuario}$${3}`);\r\n\r\n\t\t\t\tthis._router.navigate([`auth/login/novaSenha/${param}`]);\r\n\r\n\t\t\t\tthis._toastrService.success(\"Verifique no seu e-mail o código de validação.\");\r\n\t\t\t},\r\n\t\t\terror: (error) => {\r\n\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\tthrow new Error(error)\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t}\r\n\r\n\t// Envia requisição para validar código 2 fatores\r\n\tpublic sendCode(): void {\r\n\r\n\t\tif (this.formAuthentication2Fa.valid) {\r\n\t\t\tthis.isLoadingSendAuthentication2Fa = true;\r\n\r\n\t\t\tthis.validateCode();\r\n\t\t} else {\r\n\t\t\tFormUtils.validateFields(this.formAuthentication2Fa);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Validação do código 2 fatores\r\n\tpublic validateCode(): void {\r\n\r\n\t\tthis._authService.validateAuthentication2Fa(this.code).subscribe({\r\n\t\t\tnext: (response) => {\r\n\t\t\t\tthis._subscription.unsubscribe();\r\n\r\n\t\t\t\tthis.isLoadingSendAuthentication2Fa = false;\r\n\t\t\t},\r\n\t\t\terror: (error) => {\r\n\t\t\t\tthis.isLoadingSendAuthentication2Fa = false;\r\n\r\n\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\tthrow new Error(error)\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t}\r\n\r\n\t// Envia requisição para validar código 2 fatores\r\n\tpublic getNewCode(): void {\r\n\t\tthis.isLoadingGetNewCode = true;\r\n\r\n\t\tthis._serverService.getServer().subscribe({\r\n\t\t\tnext: response => {\r\n\t\t\t\tthis._subscription = this.countdown$.subscribe(secondsLeft => {\r\n\t\t\t\t\tthis.secondsLeft = secondsLeft;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.GetNewCode2Fa();\r\n\t\t\t},\r\n\t\t\terror: (error) => {\r\n\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\tthrow new Error(error)\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t}\r\n\r\n\t// Validação do código 2 fatores\r\n\tpublic GetNewCode2Fa(): void {\r\n\r\n\t\tthis._authService.GetNewCode2Fa().subscribe({\r\n\t\t\tnext: (response) => {\r\n\t\t\t\tthis.isLoadingGetNewCode = false;\r\n\r\n\t\t\t\tthis._toastrService.success(\"Enviamos um novo código para o endereço de e-mail vinculado ao seu usuário. Verifique o lixo eletrônico (SPAM) da sua caixa de entrada, caso não tenha encontrado nossa mensagem.\");\r\n\t\t\t},\r\n\t\t\terror: (error) => {\r\n\t\t\t\tthis.isLoadingGetNewCode = false;\r\n\r\n\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\tthrow new Error(error);\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t}\r\n\r\n\t// #endregion POST\r\n\r\n\t// #region UTILIDADES\r\n\r\n\t// Retorno para a tela de login\r\n\tpublic voltar(): void {\r\n\t\tthis._subscription.unsubscribe();\r\n\t\tthis.showParmsAuthentication2Fa = false;\r\n\r\n\t\tthis._authStorageService.logout();\r\n\r\n\t\tthis._router.navigate([\"/auth/login\"]);\r\n\t}\r\n\r\n\t// #endregion UTILIDADES\r\n\r\n\t// #endregion ==========> SERVICE METHODS <==========\r\n\r\n\t// #region ==========> MODALS <==========\r\n\r\n\t// Executa esquecer senha\r\n\tpublic openForgottenPasswordModal(template: TemplateRef<any>): void {\r\n\t\tthis.createFormForgottenPassword();\r\n\r\n\t\tthis.modalRef = this._bsModalService.show(template, {\r\n\t\t\tclass: 'modal-dialog-centered',\r\n\t\t\tignoreBackdropClick: false,\r\n\t\t\tkeyboard: false,\r\n\t\t\tid: this.idFgtPsw\r\n\t\t});\r\n\r\n\t}\r\n\r\n\t// Encerra esquecer senha\r\n\tpublic closeForgottenPasswordModal(): void {\r\n\t\tthis._bsModalService.hide(this.idFgtPsw);\r\n\t}\r\n\r\n\t// #endregion ==========> MODALS <==========\r\n\r\n}\r\n","<div class=\"container-fluid\">\r\n\t<div class=\"row\">\r\n\t\t<!-- Conteúdo da DIV do background -->\r\n\t\t<div class=\"col-md-7\">\r\n\t\t\t<div class=\"background\" style=\"background-image: linear-gradient(to bottom, rgba(10, 44, 81, 0.9), rgba(10, 44, 81, 0.9)), url({{_customLoginService.loginBackground}})\">\r\n\t\t\t\t<div class=\"text-position texto-apresentacao ps-5\">\r\n\t\t\t\t\t<h1 class=\"title\" id=\"title\"></h1>\r\n\t\t\t\t\t<p class=\"subtitle\" id=\"subtitle\"></p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<!-- Conteúdo da DIV de Login -->\r\n\t\t<div class=\"col-md-5\">\r\n\r\n\t\t\t<div class=\"div-size\">\r\n\t\t\t\t<div class=\"logotipo\">\r\n\t\t\t\t\t<img style=\"height: 95px;\" src=\"{{ this._customLoginService.loginLogotipo }}\" alt=\"{{ this._customLoginService.loginAltLogotipo }}\" />\r\n\t\t\t\t</div>\r\n\t\t\t\t<form *ngIf=\"!showParmsAuthentication2Fa; else Authentication2Fa\" [formGroup]=\"form\" class=\"form-position\">\r\n\t\t\t\t\t<div class=\"input-group input-group-lg form-item\">\r\n\t\t\t\t\t\t<span class=\"input-group-text\" id=\"basic-addon1\"\r\n\t\t\t\t\t\t\tstyle=\"padding: 10px; border-radius: 4px 0px 0px 4px\">\r\n\t\t\t\t\t\t\t<img src=\"assets/icons/cloud.svg\" alt=\"cloud icon\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" formControlName=\"dominio\" id=\"dominio\"\r\n\t\t\t\t\t\t\taria-label=\"Sizing example input\" placeholder=\"Domínio\" aria-label=\"Domínio\"\r\n\t\t\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('dominio'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('dominio')\" label=\"Domínio\"></app-field-error-message>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"input-group input-group-lg form-item\">\r\n\t\t\t\t\t\t<span class=\"input-group-text\" id=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\tstyle=\"padding: 10px; border-radius: 4px 0px 0px 4px\">\r\n\t\t\t\t\t\t\t<img src=\"assets/icons/at-sign.svg\" alt=\"at-sign icon\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" formControlName=\"usuario\" id=\"usuario\"\r\n\t\t\t\t\t\t\taria-label=\"Sizing example input\" placeholder=\"Usuário\" aria-label=\"Usuário\"\r\n\t\t\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('usuario'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('usuario')\" label=\"Usuário\"></app-field-error-message>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"input-group input-group-lg form-item\" style=\"margin-bottom: 8px;\">\r\n\t\t\t\t\t\t<span class=\"input-group-text\" id=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\tstyle=\"padding: 10px; border-radius: 4px 0px 0px 4px;\">\r\n\t\t\t\t\t\t\t<img src=\"assets/icons/lock.svg\" alt=\"lock-icon\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<input type=\"password\" class=\"form-control\" formControlName=\"senha\" id=\"senha\"\r\n\t\t\t\t\t\t\taria-label=\"Sizing example input\" placeholder=\"Senha\" aria-label=\"senha\"\r\n\t\t\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('senha'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('senha')\" label=\"Senha\"></app-field-error-message>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"remember-password\">\r\n\t\t\t\t\t<!-- Lembrar Senha\r\n\t\t\t\t\t\t<input id=\"checkboxLembrarSenha\" type=\"checkbox\" />\r\n\t\t\t\t\t\t<label for=\"checkboxLembrarSenha\"> Lembrar minha senha </label>\r\n \t\t\t\t\t-->\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<button [disabled]=\"isLoading\" (click)=\"getServer()\" type=\"submit\"\r\n\t\t\t\t\t\tclass=\"btn btn-primary btn-acessar btn-lg\">\r\n\t\t\t\t\t\t<app-loading-button [isLoading]=\"isLoading\"></app-loading-button>\r\n\t\t\t\t\t\t<span> Acessar </span>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<button type=\"button\" (click)=\"openForgottenPasswordModal(forgottenPasswordModal)\" class=\"forgotten-password\">\r\n\t\t\t\t\t\t<span> Esqueceu sua senha? </span>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</form>\r\n\r\n\t\t\t\t<ng-template #Authentication2Fa>\r\n\t\t\t\t\t<form [formGroup]=\"formAuthentication2Fa\" class=\"form-position\">\r\n\t\t\t\t\t\t<div class=\"input-group input-group-lg form-item mb-3\">\r\n\t\t\t\t\t\t\t<span class=\"input-group-text\" id=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t\tstyle=\"padding: 10px; border-radius: 4px 0px 0px 4px;\">\r\n\t\t\t\t\t\t\t\t<img src=\"assets/icons/lock.svg\" alt=\"lock-icon\" />\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" formControlName=\"code\" id=\"code\"\r\n\t\t\t\t\t\t\t\taria-label=\"Sizing example input\" placeholder=\"Código de 2 fatores\" aria-label=\"Código de 2 fatores\"\r\n\t\t\t\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(formAuthentication2Fa.get('code'))\">\r\n\t\t\t\t\t\t\t<app-field-error-message [control]=\"formAuthentication2Fa.get('code')\" label=\"Código de 2 fatores\"></app-field-error-message>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"row mb-3\">\r\n\t\t\t\t\t\t\t<button (click)=\"voltar()\" type=\"button\" class=\"btn btn-acessar glb-btn-outline-dark-disabled col me-1\">\r\n\t\t\t\t\t\t\t\tVoltar\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<button [disabled]=\"isLoadingSendAuthentication2Fa\" (click)=\"sendCode()\" type=\"button\" class=\"btn btn-acessar btn-primary col ms-1\">\r\n\t\t\t\t\t\t\t\t<app-loading-button [isLoading]=\"isLoadingSendAuthentication2Fa\"></app-loading-button>\r\n\t\t\t\t\t\t\t\tAcessar\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t<button *ngIf=\"secondsLeft == 0; else newCode\" \r\n\t\t\t\t\t\t\t\t[disabled]=\"isLoading\" (click)=\"getNewCode()\" type=\"button\" class=\"btn btn-acessar btn-outline-primary col\">\r\n\t\t\t\t\t\t\t\t<app-loading-button [isLoading]=\"isLoading\"></app-loading-button>\r\n\t\t\t\t\t\t\t\tEnviar novo código\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<ng-template #newCode>\r\n\t\t\t\t\t\t\t\t<p class=\"text-center\">{{ secondsLeft}} {{ secondsLeft == 1 ? 'segundo' : 'segundos' }} para obter novo código</p>\r\n\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</form>\t\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t\r\n\t\t\t\t<div class=\"footer-position\">\r\n\t\t\t\t\t<footer>\r\n\t\t\t\t\t\t<span class=\"footer\"> \r\n\t\t\t\t\t\t\t<a href=\"https://dpo.privacytools.com.br/policy-view/JmGeNlJdw/1/poli%CC%81tica-de-privacidade/pt_BR?s=1685731510066\" target=\"_blank\" class=\"sispro text-primary\"> Política de Privacidade </a>\r\n\t\t\t\t\t\t\t<p class=\"separator\"> | </p>\r\n\t\t\t\t\t\t\t<a href=\"https://dpo.privacytools.com.br/policy-view/Rork35NN2/2/poli%CC%81tica-de-cookies/pt_BR?s=1685731551976\" target=\"_blank\" class=\"sispro text-primary\"> Política de Cookies </a>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class=\"footer\"> Desenvolvido por \r\n\t\t\t\t\t\t\t<a href=\"https://www.sispro.com.br/\" target=\"_blank\" class=\"sispro text-primary\"> sispro s/a </a>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class=\"footer\"> Serviços e Tecnologia da informação © {{ year }} Todos os direitos reservados </span>\r\n\t\t\t\t\t\t\t<div class=\"icons\">\r\n\t\t\t\t\t\t\t\t<a href=\"https://pt-br.facebook.com/SisproERP/\" target=\"_blank\">\r\n\t\t\t\t\t\t\t\t\t<lib-icon class=\"text-primary\" iconName=\"facebook\" iconSize=\"medium-small\"/>\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t<a href=\"https://www.instagram.com/accounts/login/?next=/sispro_software/\" target=\"_blank\">\r\n\t\t\t\t\t\t\t\t\t<lib-icon class=\"text-primary\" iconName=\"instagram\" iconSize=\"medium-small\"/>\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t<a href=\"https://br.linkedin.com/company/sispro\" target=\"_blank\">\r\n\t\t\t\t\t\t\t\t\t<lib-icon class=\"text-primary\" iconName=\"linkedin\" iconSize=\"medium-small\"/>\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t<div class=\"d-flex justify-content-center\">\r\n\t\t\t\t\t\t\t\t<a [href]=\"geturlErpConfig()\" style=\"text-decoration: none; font-size: 12px;\">\r\n\t\t\t\t\t\t\t\t\tConfigurar ERP\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</footer>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n<!-- Template do modal de senha esquecida -->\r\n<ng-template #forgottenPasswordModal>\r\n\t<form [formGroup]=\"formFgtPsw\">\r\n\t\t<div class=\"modal-content\" style=\"box-shadow: 2px 2px 5px 0px rgba(0,0,0,0.5);\">\r\n\t\t\t<div class=\"modal-header p-3\">\r\n\t\t\t\t<h4 class=\"modal-title\"> Recuperação de senha </h4>\r\n\t\t\t\t<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\r\n\t\t\t\t\t(click)=\"closeForgottenPasswordModal()\">\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"modal-body\">\r\n\t\t\t\t<label for=\"inputDominioFgtPsw\" class=\"input-label\"> Domínio <span class=\"text-danger\">*</span></label>\r\n\t\t\t\t<input type=\"text\" id=\"inputDominioFgtPsw\" formControlName=\"dominioFgtPsw\"\r\n\t\t\t\t\tclass=\"form-control input-text\" aria-label=\"Sizing example input\" aria-label=\"Domínio\"\r\n\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(formFgtPsw.get('dominioFgtPsw'))\">\r\n\t\t\t\t<app-field-error-message [control]=\"formFgtPsw.get('dominioFgtPsw')\" label=\"Domínio\"></app-field-error-message>\t\t\t\t\r\n\r\n\t\t\t\t<label for=\"inputUsuarioFgtPsw\" class=\"input-label\"> Usuário <span class=\"text-danger\">*</span></label>\r\n\t\t\t\t<input type=\"text\" id=\"inputUsuarioFgtPsw\" formControlName=\"usuarioFgtPsw\"\r\n\t\t\t\t\tclass=\"form-control input-text\" aria-label=\"Sizing example input\" aria-label=\"Usuário\"\r\n\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(formFgtPsw.get('usuarioFgtPsw'))\">\r\n\t\t\t\t<app-field-error-message [control]=\"formFgtPsw.get('usuarioFgtPsw')\" label=\"Usuário\"></app-field-error-message>\t\t\t\t\r\n\t\t\r\n\t\t\t</div>\r\n\t\t\t<div class=\"modal-footer\">\r\n\t\t\t\t<button type=\"button\" class=\"btn glb-btn-dark-disabled modal-button\" (click)=\"closeForgottenPasswordModal()\">\r\n\t\t\t\t\t<span> Cancelar </span>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button type=\"button\" class=\"btn btn-primary modal-button\" (click)=\"sendForgottenPassword();\">\r\n\t\t\t\t\t<span> Continuar </span>\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t</div>\r\n\t</form>\r\n</ng-template>\r\n","import { Injectable } from \"@angular/core\";\r\nimport { IMenuItemStructure } from './../components/menu-lateral/model/imenu-item-structure.model';\r\nimport { IMenuConfig } from \"./models/imenu-config\";\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\n/**Service responsável por pegar as opções do menu do projeto em que está sendo utilizada*/\r\nexport class MenuConfigService {\r\n\r\n private _menuOptions: IMenuItemStructure[] = [];\r\n\r\n /** Indica se o menu é estático ou dinâmico. */\r\n public _isMenuStatic: boolean = false;\r\n\r\n /** Obtém as opções do menu. */\r\n public get menuOptions(): IMenuItemStructure[] { return this._menuOptions; }\r\n public set menuOptions(value: IMenuItemStructure[]) { this._menuOptions = value; }\r\n\r\n\r\n public storedInitializeMenu!: (currentRoute: string, customList?: IMenuItemStructure[]) => IMenuItemStructure[];\r\n public storedUpdateRouteSelection!: (currentRoute: string, currentList: IMenuItemStructure[]) => IMenuItemStructure[];\r\n public storedInitializeMenuDropdown!: (primaryDropdownList: Array<any>) => any[];\r\n\r\n\r\n public menu: IMenuItemStructure[] = []\r\n public menuDropdown: any[] = [];\r\n\r\n\r\n /** Inicializa as opções do menu com base na rota atual e em uma lista personalizada (opcional).\r\n * @param currentRoute A rota atual da aplicação\r\n * @param customList Uma lista personalizada de opções de menu (opcional).\r\n * @returns As opções do menu inicializadas.\r\n */\r\n\r\n public setMenuStatic(isStaticMenu: boolean) {\r\n this._isMenuStatic = isStaticMenu;\r\n }\r\n\r\n public initializeMenu(currentRoute: string, customList?: IMenuItemStructure[]): IMenuItemStructure[] {\r\n if (this.storedInitializeMenu) {\r\n this.menu = this.storedInitializeMenu(currentRoute, customList);\r\n }\r\n return this.menu;\r\n }\r\n\r\n\r\n public updateRouteSelection(currentRoute: string, currentList: IMenuItemStructure[]): IMenuItemStructure[] {\r\n currentList.forEach((item) => {\r\n if (item.children) { item.children.forEach(child => { child.isSelected = currentRoute.includes(child.route); }) }\r\n\r\n const anyChildSelected = item.children ? item.children.some(child => child.isSelected === true) : false;\r\n item.isSelected = false;\r\n\r\n if (!item.children && currentRoute.includes(item.route)) { item.isSelected = true; }\r\n else if (item.children && anyChildSelected) { item.isSelected = true; }\r\n })\r\n\r\n return currentList;\r\n }\r\n\r\n /** Inicializa as opções do menu dropdown com base em uma lista personalizada (opcional).\r\n * @param primaryDropdownList Uma lista personalizada de opções do dropdown (opcional).\r\n * @returns As opções do dropdown inicializadas.\r\n */\r\n public initializeMenuDropdown(primaryDropdownList: Array<any>): any[] {\r\n if (this.storedInitializeMenuDropdown) {\r\n this.menuDropdown = this.storedInitializeMenuDropdown(primaryDropdownList);\r\n }\r\n return this.menuDropdown;\r\n }\r\n\r\n public ConfigurarMenuConfig(menuConfig: IMenuConfig): void {\r\n\r\n //passando propriedades do produto para a lib\r\n this._menuOptions = menuConfig.menuOptions;\r\n this._isMenuStatic = menuConfig.isMenuStatic;\r\n\r\n //passando implementação dos métodos do produto para a lib\r\n this.storedInitializeMenu = menuConfig.initializeMenu;\r\n this.storedInitializeMenuDropdown = menuConfig.initializeMenuDropdown;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\nimport { IMenuItemStructure } from '../components/menu-lateral/model/imenu-item-structure.model';\r\nimport { IMenu } from '../components/menu-lateral/model/imenu.model';\r\n// import { environment } from '../environments/environments';\r\nimport { AuthStorageService } from '../storage/auth-storage.service';\r\nimport { MenuConfigService } from './menu-config.service';\r\nimport { ICustomMenuService } from './models/icustom-menu-service';\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class LibCustomMenuService {\r\n\r\n public menuService!: ICustomMenuService;\r\n\r\n // #region Propriedade Customizadas do Menu\r\n\r\n public menuDynamic: boolean = false;\r\n\r\n public moduleName: string = \"\";\r\n\r\n public moduleImg: string = \"\";\r\n\r\n public moduleSvg: string = \"\";\r\n\r\n public themeColor: string = \"\";\r\n\r\n // #endregion Propriedade Customizadas do Menu\r\n\r\n // #region Propriedade do Menu\r\n\r\n private readonly _MENU_BASE_URL: string = \"https://siscandesv6.sispro.com.br/SisproErpCloud/Service_Private/Infra/SpInfra2ErpWS/api\";\r\n\r\n private currentURL: string = \"\";\r\n private _menuItems: IMenuItemStructure[] = [];\r\n private menuList: IMenu[] = [];\r\n private menuLateralUpdated: IMenuItemStructure[] = [];\r\n //verificar esse cara aqui\r\n public menuConfig: MenuConfigService;\r\n\r\n /** Obtém as opções do menu. */\r\n public get menuItems(): IMenuItemStructure[] {\r\n return this._menuItems;\r\n }\r\n\r\n public set menuItems(value: IMenuItemStructure[]) {\r\n this._menuItems = value;\r\n }\r\n\r\n // ! Definição do BehaviorSubject: responsável principal da emissão do evento\r\n private empresaId: BehaviorSubject<{ estabelecimentoID: string, empresaID: string }> = new BehaviorSubject<{ estabelecimentoID: string, empresaID: string }>({ estabelecimentoID: \"\", empresaID: \"\" });\r\n public applyEmpresa$: Observable<{ estabelecimentoID: string, empresaID: string }> = this.empresaId.asObservable();\r\n\r\n public setEmpresa(value: { estabelecimentoID: string, empresaID: string }) { this.empresaId.next(value) }\r\n // ! Definição do BehaviorSubject: responsável principal da emissão do evento\r\n\r\n // #endregion Propriedade do Menu\r\n\r\n private storedMenuStaticOnInit?: () => void;\r\n private storedMenuDynamicOnInit?: () => void;\r\n private storedMenuopenExpansibleMenu?: (ref: HTMLDivElement) => void;\r\n\r\n\r\n constructor(\r\n private _menuConfig: MenuConfigService,\r\n private _authStorageService: AuthStorageService,\r\n private _router: Router,\r\n\r\n ) {\r\n // inicializações do Menu Dinâmico\r\n this.currentURL = this._router.url;\r\n this.menuConfig = _menuConfig;\r\n }\r\n\r\n public ConfigurarCustomMenuService(RealcustomMenuService: ICustomMenuService): void {\r\n\r\n //passando propriedades do produto para a lib\r\n this.menuDynamic = RealcustomMenuService.menuDynamic;\r\n this.moduleName = RealcustomMenuService.moduleName;\r\n this.moduleImg = RealcustomMenuService.moduleImg;\r\n this.moduleSvg = RealcustomMenuService.moduleSvg;\r\n this.themeColor = RealcustomMenuService.themeColor;\r\n\r\n //passando implementação dos métodos do produto para a lib\r\n this.storedMenuStaticOnInit = RealcustomMenuService.menuStaticOnInit;\r\n this.storedMenuopenExpansibleMenu = RealcustomMenuService.menuopenExpansibleMenu;\r\n this.storedMenuDynamicOnInit = RealcustomMenuService.menuDynamicOnInit;\r\n }\r\n\r\n // #region - Métodos Customizadas para o Menu dinâmico\r\n\r\n // Método executado no menu-lateral.component.ts - método: onInit ()\r\n // Utilizado para inicializações diversas\r\n public menuDynamicOnInit(): void {\r\n if (this.storedMenuDynamicOnInit) {\r\n this.storedMenuDynamicOnInit();\r\n }\r\n }\r\n\r\n // Método executado no menu-lateral.component.ts - método: onInit ()\r\n // Utilizado para inicializações diversas\r\n public menuStaticOnInit(): void {\r\n if (this.storedMenuStaticOnInit) {\r\n this.storedMenuStaticOnInit();\r\n }\r\n }\r\n\r\n // Método executado no menu-lateral.component.ts - método: openExpansibleMenu()\r\n // Utilizado para inicializações ao Exoandir a opção de Menu\r\n public menuopenExpansibleMenu(ref: HTMLDivElement): void {\r\n if (this.storedMenuopenExpansibleMenu) {\r\n this.storedMenuopenExpansibleMenu(ref);\r\n }\r\n }\r\n\r\n /** Método que deve ser chamado na seleção de um novo estabelecimento, ele atualizará os valores do nosso BehaviorSubject para que possamos utilizá-lo em outras partes do sistema. */\r\n public emitEstabelecimentoEvent(): void {\r\n\r\n this.setEmpresa({\r\n estabelecimentoID: this._authStorageService.infraEstabId,\r\n empresaID: this._authStorageService.infraEmpresaId\r\n });\r\n }\r\n // #endregion - Métodos Customizadas para o Menu dinâmico\r\n}\r\n","\r\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\n//import { environment } from '../../../../environments/environments';\r\n// import { ProjectUtilservice } from 'src/app/project/utils/project-utils.service';\r\n\r\n@Component({\r\n selector: 'app-secondary-dropdown',\r\n templateUrl: './secondary-dropdown.component.html',\r\n styleUrls: ['./secondary-dropdown.component.scss'],\r\n})\r\nexport class SecondaryDropdownComponent implements OnInit {\r\n\r\n @Input() public modulo: any = { id: null, icon: null, label: null, URL: null, secondary_level: null }\r\n ;\r\n @Output() public backPrimaryDropdown = new EventEmitter<boolean>();\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n public backToPrimary() {\r\n this.backPrimaryDropdown.emit(true);\r\n }\r\n\r\n public redirectToModulo(modulo: string): void {\r\n const url: string = `https://siscandesv6.sispro.com.br/SisproErpCloud/${modulo}`;\r\n\r\n window.open(url, '_blank');\r\n }\r\n\r\n}\r\n","<div class=\"d-flex flex-row\">\r\n <button class=\"chevron d-flex m-0 p-0 align-items-start\" (click)=\"backToPrimary()\"> \r\n <lib-icon iconName=\"seta-esquerda\" iconSize=\"small\"/>\r\n </button>\r\n\r\n <div class=\"d-flex flex-column flex-row\">\r\n <li *ngIf=\"modulo != null\">\r\n <img class=\"ms-1 mb-2\" src=\"{{ modulo.icon }}\" alt=\"{{ modulo.label }}\">\r\n <span>{{ modulo.label }}</span>\r\n </li>\r\n <div *ngIf=\"modulo && modulo.secondary_level != null\">\r\n <li *ngFor=\"let moduloItem of modulo.secondary_level;\" (click)=\"redirectToModulo(moduloItem.URL)\">\r\n <a class=\"dropdown-item mb-2 ms-2\">\r\n <img src=\"{{ moduloItem.icon }}\" alt=\"{{ moduloItem.label }}\">\r\n {{ moduloItem.label }}\r\n </a>\r\n <li>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input, OnInit, TemplateRef } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { LibCustomMenuService } from '../../../../custom/custom-menu.service';\r\n//import { ProjectUtilservice } from 'src/app/project/utils/project-utils.service';\r\n//import { environment } from '../../../../environments/environments';\r\n\r\n@Component({\r\n selector: 'app-primary-dropdown',\r\n templateUrl: './primary-dropdown.component.html',\r\n styleUrls: ['./primary-dropdown.component.scss'],\r\n})\r\nexport class PrimaryDropdownComponent implements OnInit {\r\n\r\n public selectDataState!: boolean;\r\n public modulo: any;\r\n\r\n @Input() buttonWasClicked: Observable<boolean> = new Observable;\r\n\r\n public primaryDropdown: Array<any> = [\r\n ]\r\n\r\n constructor(\r\n private _customMenuService: LibCustomMenuService,\r\n //private _projectUtilservice: ProjectUtilservice\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n console.log('ngOnInit');\r\n this.buttonWasClicked.subscribe(() => { this.selectDataState = true });\r\n\r\n // Resolver colisão de eventos\r\n if (this._customMenuService.menuDynamic) {\r\n\r\n if (!this._customMenuService.menuConfig) {\r\n setTimeout(() => {\r\n this.primaryDropdown = this._customMenuService.menuConfig.initializeMenuDropdown(this.primaryDropdown);\r\n }, 2000);\r\n } else {\r\n this.primaryDropdown = this._customMenuService.menuConfig.initializeMenuDropdown(this.primaryDropdown);\r\n }\r\n\r\n } else {\r\n this.primaryDropdown = this._customMenuService.menuConfig.initializeMenuDropdown(this.primaryDropdown);\r\n }\r\n\r\n }\r\n\r\n public openDropdown(modulo: any, desiredDropdown: TemplateRef<any>) {\r\n this.modulo = modulo;\r\n\r\n if (desiredDropdown == null) {\r\n this.selectDataState = true;\r\n } else {\r\n this.selectDataState = false;\r\n }\r\n }\r\n\r\n public onClickedOutside(e: Event, ref: HTMLDivElement) {\r\n if (this.selectDataState = false) {\r\n this.selectDataState = true;\r\n }\r\n }\r\n\r\n public backToPrimary(data: boolean) {\r\n this.selectDataState = true;\r\n }\r\n\r\n public redirectToPrePortal(): void {\r\n const url: string = `https://siscandesv6.sispro.com.br/SisproErpCloud/PrePortal`;\r\n\r\n window.open(url, '_blank');\r\n }\r\n\r\n public redirectToModulo(modulo: string): void {\r\n const url: string = `https://siscandesv6.sispro.com.br/SisproErpCloud/${modulo}`;\r\n\r\n window.open(url, '_blank');\r\n }\r\n\r\n}\r\n","<div class=\"p-2\">\r\n <div *ngIf=\"selectDataState; else secondary_dropdown\" class=\"mb-2 w-100\">\r\n <li *ngFor=\"let modulo of primaryDropdown\" (click)=\"(modulo.secondary_level != null ? openDropdown(modulo, secondary_dropdown) : redirectToModulo(modulo.URL))\">\r\n <a class=\"dropdown-item mb-2\">\r\n <img src=\"{{ modulo.icon }}\" alt=\"{{ modulo.label }}\">\r\n {{ modulo.label }}\r\n </a>\r\n </li>\r\n <hr class=\"dropdown-divider\">\r\n <li>\r\n <a class=\"dropdown-item link-portal mt-2\" (click)=\"redirectToPrePortal()\" target=\"_blank\">Portal Sispro</a>\r\n </li>\r\n </div>\r\n\r\n <ng-template #secondary_dropdown>\r\n <div #secondary_ref (clickOutside)=\"onClickedOutside($event, secondary_ref)\">\r\n <app-secondary-dropdown [modulo]=\"this.modulo\" (backPrimaryDropdown)=\"backToPrimary($event)\"></app-secondary-dropdown>\r\n </div>\r\n </ng-template>\r\n</div>","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { Observable, Subject, take, tap } from 'rxjs';\r\n\r\nimport { RetError, RetEstabelecimentosModal } from 'ngx-sp-infra';\r\n// import { environment } from '../../environments/environments';\r\nimport { AuthStorageService } from '../../storage/auth-storage.service';\r\n\r\nimport { RetEstabelecimentoSession } from './model/ret-estabelecimento-session';\r\nimport { RetInfraUsuarioEmail } from './model/ret-infrausuarioemail';\r\nimport { RetInfraUsuarioImg } from './model/ret-infrausuarioimg';\r\nimport { Usuario_IMG } from './model/usuario-img';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MenuServicesService {\r\n private readonly _BASE_URL: string = \"https://siscandesv6.sispro.com.br/SisproErpCloud/Service_Private/Infra/SpInfra2ErpWS/api\"; // SpInfra2AplicWS\r\n private readonly _HTTP_HEADERS = new HttpHeaders().set('Content-Type', 'application/json');\r\n\r\n constructor(\r\n private _authStorageService: AuthStorageService,\r\n private _httpClient: HttpClient\r\n ) {\r\n //verificar se é a melhor solucão\r\n //this._BASE_URL = !environment.production ? this._BASE_URL : `${environment.SpInfra2ErpWS}`;\r\n }\r\n\r\n // #region ==========> SERVICES <==========\r\n\r\n // #region PREPARATION\r\n\r\n // #region Menu: Usuário\r\n // [...]\r\n // #endregion Menu: Usuário\r\n\r\n // #region Menu: Estabelecimentos\r\n public getEstabelecimentosModalList(usuarioID: string, pesquisa: string): Observable<RetEstabelecimentosModal> {\r\n const params = new HttpParams()\r\n .set('pesquisa', pesquisa)\r\n\r\n const headers = new HttpHeaders()\r\n .set('Content-Type', 'application/json');\r\n\r\n const url = `${this._BASE_URL}/InfraEstabelecimento/GetEstabelecimentosModal`;\r\n\r\n return this._httpClient\r\n .get<RetEstabelecimentosModal>(url, { 'params': params, 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap(response => {\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n })\r\n )\r\n }\r\n // #endregion Menu: Estabelecimentos\r\n\r\n // #endregion PREPARATION\r\n\r\n // #region GET\r\n\r\n // #region Menu: Usuário\r\n public getImagemMenu(): Observable<RetInfraUsuarioImg> {\r\n\r\n const url = `${this._BASE_URL}/InfraUsuario/GetImagemMenu`;\r\n\r\n return this._httpClient\r\n .get<RetInfraUsuarioImg>(url, { 'headers': this._HTTP_HEADERS })\r\n .pipe(\r\n take(1),\r\n tap(response => {\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n\r\n this.saveImageToStorage(response.InfraUsuarioImg.IMAGEM, response.InfraUsuarioImg.FILENAME);\r\n })\r\n )\r\n }\r\n // #endregion Menu: Usuário\r\n\r\n // #region Menu: Estabelecimentos\r\n public getEstabelecimentoSession(estabID: string): Observable<RetEstabelecimentoSession> {\r\n const params = new HttpParams()\r\n .set('id', estabID);\r\n\r\n const url = `${this._BASE_URL}/InfraEstabelecimento/GetEstabelecimentoSession`;\r\n\r\n return this._httpClient\r\n .get<RetEstabelecimentoSession>(url, { 'params': params, 'headers': this._HTTP_HEADERS })\r\n .pipe(\r\n take(1),\r\n tap(response => {\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n })\r\n )\r\n }\r\n // #endregion Menu: Estabelecimentos\r\n\r\n // #region Get Usuario Email\r\n public getUsuarioEmail(): Observable<RetInfraUsuarioEmail> {\r\n const url = `${this._BASE_URL}/InfraUsuario/GetUsuarioEmail`;\r\n\r\n return this._httpClient\r\n .get<RetInfraUsuarioEmail>(url, { 'headers': this._HTTP_HEADERS })\r\n .pipe(\r\n take(1),\r\n tap(response => {\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n })\r\n )\r\n }\r\n // #endregion Get Usuario Email\r\n\r\n // #endregion GET\r\n\r\n // #region CREATE\r\n // [...]\r\n // #endregion CREATE\r\n\r\n // #region UPDATE\r\n\r\n // #region Menu: Usuário\r\n public updateLastLogEstabID(estabID: string): Observable<RetError> {\r\n const params = new HttpParams()\r\n .set('estabID', estabID)\r\n\r\n const url = `${this._BASE_URL}/InfraUsuario/UpdateLastSelectedEstabelecimento`;\r\n\r\n return this._httpClient\r\n .post<RetError>(url, null, { 'params': params, 'headers': this._HTTP_HEADERS })\r\n .pipe(\r\n take(1),\r\n tap(response => {\r\n if (response.Error) { throw Error(response.ErrorMessage); }\r\n })\r\n )\r\n }\r\n // #endregion Menu: Usuário\r\n\r\n // #region Menu: Estabelecimentos\r\n public defineDefaultEstabelecimento(estabID: string, usuarioID: string, isDefault: boolean): Observable<RetError> {\r\n const params = new HttpParams()\r\n .set('estabID', estabID)\r\n .set('isDefault', isDefault)\r\n\r\n const url = `${this._BASE_URL}/InfraEstabelecimento/DefineDefaultEstab`;\r\n\r\n return this._httpClient\r\n .post<RetError>(url, null, { 'params': params, 'headers': this._HTTP_HEADERS })\r\n .pipe(\r\n take(1),\r\n tap(response => {\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n })\r\n )\r\n }\r\n // #endregion Menu: Estabelecimentos\r\n\r\n // #endregion UPDATE\r\n\r\n // #region DELETE\r\n // [...]\r\n // #endregion DELETE\r\n\r\n // #endregion ==========> SERVICES <==========\r\n\r\n\r\n // #region ==========> UTILITIES <==========\r\n private _menuFooterImg: Usuario_IMG | null = null;\r\n\r\n public getMenuFooterImg(): Usuario_IMG | null {\r\n const cachedFooterImg = JSON.parse(localStorage.getItem('menuFooterImg')!);\r\n\r\n if (cachedFooterImg) { return cachedFooterImg; }\r\n return this._menuFooterImg;\r\n }\r\n public setMenuFooterImg(value: Usuario_IMG): void {\r\n this._menuFooterImg = value;\r\n localStorage.setItem('menuFooterImg', JSON.stringify(value));\r\n }\r\n\r\n\r\n public saveImageToStorage(footerImgSrc: string, footerImgName: string): void {\r\n this.setMenuFooterImg({ USUARIOID: this._authStorageService.infraUsuarioId, FILENAME: footerImgName, FILE: footerImgSrc });\r\n }\r\n\r\n\r\n // #region NewImg Event\r\n\r\n // Implementação de lógica vista no link: https://hasangalakdinu.medium.com/how-to-call-a-function-in-another-component-angular-using-rxjs-3f2e85920705\r\n private _subject = new Subject<any>();\r\n\r\n public newUserImageEvent(value: any): void {\r\n this._subject.next(value);\r\n }\r\n\r\n public getNewUserImageEvent(): Observable<any> {\r\n return this._subject.asObservable();\r\n }\r\n\r\n // #endregion NewImg Event\r\n\r\n // #endregion ==========> UTILITIES <==========\r\n\r\n}\r\n","import { Component, EventEmitter, OnInit, Output, TemplateRef } from '@angular/core';\r\n\r\nimport { BsModalService } from 'ngx-bootstrap/modal';\r\n\r\nimport { InfraEstabelecimentoFavoritoDefault, MessageService } from 'ngx-sp-infra';\r\n//import { ProjectUtilservice } from 'src/app/project/utils/project-utils.service';\r\nimport { AuthStorageService } from '../../../../storage/auth-storage.service';\r\n\r\nimport { LibCustomMenuService } from '../../../../custom/custom-menu.service';\r\nimport { MenuServicesService } from '../../menu-services.service';\r\n\r\n\r\n@Component({\r\n selector: 'selecao-estabelecimentos-modal',\r\n templateUrl: './selecao-estabelecimentos-modal.component.html',\r\n styleUrls: ['./selecao-estabelecimentos-modal.component.scss'],\r\n})\r\nexport class SelecaoEstabelecimentosModalComponent implements OnInit {\r\n constructor(\r\n private _authStorageService: AuthStorageService,\r\n private _bsModalService: BsModalService,\r\n private _customMenuService: LibCustomMenuService,\r\n private _menuServicesService: MenuServicesService,\r\n private _messageService: MessageService,\r\n //private _projectUtilService: ProjectUtilservice\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.getEstabelecimentos(\"\");\r\n }\r\n\r\n // #region ==========> PROPERTIES <==========\r\n\r\n // #region PRIVATE\r\n // [...]\r\n // #endregion PRIVATE\r\n\r\n // #region PUBLIC\r\n @Output() public onClose = new EventEmitter<any>();\r\n @Output() public onSelected = new EventEmitter<any>();\r\n\r\n public $estabelecimentosList: InfraEstabelecimentoFavoritoDefault[] = [];\r\n\r\n public page: number = 1;\r\n public itemsPerPage: number = 10;\r\n\r\n public response_messages = {\r\n 'emptyMessage': 'Consulta não retornou registros...',\r\n 'totalMessage': 'Linhas encontradas.'\r\n };\r\n // #endregion PUBLIC\r\n\r\n // #endregion ==========> PROPERTIES <==========\r\n\r\n\r\n // #region ==========> FORM BUILDER <==========\r\n\r\n // #region DATA\r\n // [...]\r\n // #endregion DATA\r\n\r\n // #region VALIDATORS\r\n // [...]\r\n // #endregion VALIDATORS\r\n\r\n // #endregion ==========> FORM BUILDER <==========\r\n\r\n\r\n // #region ==========> SERVICES <==========\r\n\r\n // #region PREPARATION\r\n\r\n public refreshList(pesquisa: string): void {\r\n this.getEstabelecimentos(pesquisa);\r\n }\r\n\r\n private getEstabelecimentos(pesquisa: string = \"\"): void {\r\n this._menuServicesService.getEstabelecimentosModalList(this._authStorageService.infraUsuarioId, pesquisa).subscribe({\r\n next: response => {\r\n this.$estabelecimentosList = response.InfraEstabelecimentos;\r\n\r\n this.resetPagination(this.$estabelecimentosList);\r\n\r\n if (response.InfraEstabelecimentos.length == 0) {\r\n this._messageService.showAlertDanger(this.response_messages.emptyMessage);\r\n }\r\n },\r\n error: error => {\r\n //this._projectUtilService.showHttpError(error);\r\n this._messageService.showAlertDanger(error);\r\n throw new Error(error);\r\n\r\n this.$estabelecimentosList = [];\r\n }\r\n })\r\n }\r\n\r\n // #endregion PREPARATION\r\n\r\n // #region GET\r\n // [...]\r\n // #endregion GET\r\n\r\n // #region CREATE OR UPDATE\r\n\r\n /**\r\n * Atualiza o estado do Estabelecimento, informando se ele é Padrão ou não.\r\n * @param estabID ID do Estabelecimento a ser alterado\r\n * @param isDefault Informa se ele é Padrão ou não\r\n */\r\n public defineDefaultEstabelecimento(estabID: string, isDefault: boolean): void {\r\n this._menuServicesService.defineDefaultEstabelecimento(estabID, this._authStorageService.infraUsuarioId, isDefault).subscribe({\r\n next: () => {\r\n this.getEstabelecimentos(\"\");\r\n\r\n isDefault\r\n ? this._messageService.showAlertSuccess('Novo estabelecimento definido como padrão para o usuário')\r\n : this._messageService.showAlertSuccess('Estabelecimento padrão removido para o usuário');\r\n },\r\n error: error => {\r\n //this._projectUtilService.showHttpError(error);\r\n this._messageService.showAlertDanger(error);\r\n throw new Error(error);\r\n\r\n }\r\n })\r\n }\r\n\r\n // #endregion CREATE OR UPDATE\r\n\r\n // #region DELETE\r\n // [...]\r\n // #endregion DELETE\r\n\r\n // #endregion ==========> SERVICES <==========\r\n\r\n\r\n // #region ==========> UTILITIES <==========\r\n\r\n /**\r\n * Envia um sinal ao componente pai com o ID e Nome do Estabelecimento selecionado no Modal\r\n * @param estabID ID do Estabelecimento que será enviado\r\n * @param estabNome Nome do Estabelecimento que será enviado\r\n */\r\n public selectEstabelecimento(estabID: string, estabNome: string): void {\r\n\r\n // * Método customizado para emissão de evento ao trocar de estabelecimento\r\n this._customMenuService.emitEstabelecimentoEvent();\r\n\r\n this.onSelected.emit(estabID + \" - \" + estabNome);\r\n }\r\n\r\n\r\n /**\r\n * Realiza uma nova pesquisa no banco para atualizar a lista a cada 3 caracteres digitados\r\n * @param pesquisa Texto do input de pesquisa\r\n */\r\n public updateSearch(pesquisa: string): void {\r\n pesquisa.length % 3 == 0\r\n ? this.getEstabelecimentos(pesquisa)\r\n : null;\r\n }\r\n\r\n /**\r\n * Verifica se a string passada é alfanumérica.\r\n * @param str String que será verificada\r\n * @returns TRUE se for alfanumérica, caso contrário FALSE.\r\n */\r\n private isAlphanumeric(str: string) {\r\n var code, i, len;\r\n\r\n for (i = 0, len = str.length; i < len; i++) {\r\n code = str.charCodeAt(i);\r\n if (!(code > 47 && code < 58) && // (0-9)\r\n !(code > 64 && code < 91) && // (A-Z)\r\n !(code > 96 && code < 123)) { // (a-z)\r\n\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n /** Modifica a quantidade de itens a ser mostrada na lista.\r\n * @param event parâmetro de evento que irá selecionar a nova quantidade.\r\n */\r\n public onSelectChange(event: any) {\r\n this.itemsPerPage = parseInt(event.target.value, 10);\r\n this.page = 1;\r\n }\r\n\r\n /** Reseta a paginação da listagem.\r\n */\r\n public resetPagination(list: any[]): void {\r\n // Cálculo para encontrar o valor inicial do index da página atual\r\n const startIndex = (this.page - 1) * this.itemsPerPage;\r\n\r\n // Condição para resetar o valor da paginação\r\n if (list.length <= startIndex) {\r\n this.page = 1;\r\n }\r\n }\r\n // #endregion ==========> UTILITIES <==========\r\n\r\n\r\n // #region ==========> MODALS <==========\r\n\r\n /**\r\n * Função simples com o objetivo de abrir os modais no centro da tela.\r\n * @param template Template HTML do modal que será aberto.\r\n * @param modalID ID do modal que será aberto, para que possa ser referenciado depois.\r\n */\r\n public openModal(template: TemplateRef<any>, modalID: number) {\r\n if (modalID == 4) {\r\n this._bsModalService.show(template, {\r\n id: modalID,\r\n class: 'modal-dialog-centered modal-lg',\r\n ignoreBackdropClick: false,\r\n keyboard: false\r\n });\r\n } else {\r\n this._bsModalService.show(template, {\r\n id: modalID,\r\n class: 'modal-dialog-centered',\r\n ignoreBackdropClick: false,\r\n keyboard: false\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Função simples com o objetivo de fechar os modais que estiverem abertos (baseados pelo ID).\r\n * @param modalID ID do modal que será fechado.\r\n */\r\n public closeModal(modalID: number) {\r\n this._bsModalService.hide(modalID);\r\n }\r\n\r\n public closeSelf() {\r\n this.onClose.emit();\r\n }\r\n\r\n // #endregion ==========> MODALS <==========\r\n\r\n}\r\n","<div class=\"main-container\">\r\n <div class=\"modal-header modal-style modal-dialog-centered\">\r\n <h4 class=\"modal-title pull-left color-modal\" style=\"font-size: 20px; font-weight: bold;\"> Selecione um\r\n estabelecimento </h4>\r\n <button (click)=\"closeSelf()\" type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"modal-message\">\r\n <div class=\"search-and-filters d-flex flex-row align-items-center justify-content-between\">\r\n <div class=\"d-flex flex-row w-100\">\r\n <div class=\"input-group\">\r\n <span class=\"input-group-text px-2\" id=\"basic-addon1\"\r\n style=\"background-color: transparent; border-right: none;\">\r\n <lib-icon iconName=\"lupa\" iconColor=\"gray\"/>\r\n </span>\r\n <input type=\"text\" class=\"form-control border-start-0 ps-0\" id=\"pesquisaInput\" #pesquisa\r\n placeholder=\"Digite o Código\" (keyup.enter)=\"refreshList(pesquisa.value)\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"filters d-flex align-items-center justify-content-between ms-3\">\r\n <div class=\"search-buttons d-flex flex-row align-items-center my-0 mx-0\">\r\n <button id=\"clearFilterBtn\" class=\"btn btn-outline-primary ms-0 no-hover-btn me-2\"\r\n (click)=\"pesquisa.value = ''; refreshList(pesquisa.value)\"> Limpar </button>\r\n <button id=\"searchFilterBtn\" class=\"btn btn-primary me-0\" (click)=\"refreshList(pesquisa.value)\"> Pesquisar\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"table-list w-100 mt-3\" *ngIf=\"$estabelecimentosList; else loading\">\r\n <table class=\"table table-bordered table-hover mb-0\">\r\n <thead class=\"fs-6\">\r\n <tr>\r\n <th scope=\"col\" class=\"col-11 align-middle th\">Estabelecimento <span\r\n class=\"text-primary fst-italic\">(duplo-clique para selecionar)</span></th>\r\n <th scope=\"col\" class=\"col-1 align-middle text-center th\">Ações</th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody *ngIf=\"$estabelecimentosList.length > 0; else emptyList\">\r\n <tr\r\n *ngFor=\"let estabelecimento of $estabelecimentosList | paginate: { itemsPerPage: itemsPerPage, currentPage: page }\"\r\n (dblclick)=\"selectEstabelecimento(estabelecimento.ID, estabelecimento.NOMEEXIBICAO)\" role=\"button\">\r\n <td><span class=\"row-name\"> {{ estabelecimento.CODIGO }} - {{ estabelecimento.NOMEEXIBICAO }} </span>\r\n <span class=\"subname\"> {{ estabelecimento.IS_MATRIZ ? \"Matriz \" : null }} CNPJ: {{ estabelecimento.CNPJ\r\n }} </span></td>\r\n <td class=\"text-center align-middle\">\r\n <div class=\"action-icons d-flex flex-row align-items-center justify-content-around\">\r\n <div class=\"form-check form-switch\">\r\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" id=\"flexSwitchCheckChecked\"\r\n tooltip=\"Estabelecimento padrão\" [checked]=\"estabelecimento.IS_DEFAULT\"\r\n style=\"transform: translateY(3px); height: 1rem; width: 28px;\" #isDefaultRow\r\n (click)=\"estabelecimento.IS_DEFAULT = !estabelecimento.IS_DEFAULT; defineDefaultEstabelecimento(estabelecimento.ID, estabelecimento.IS_DEFAULT)\">\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n\r\n <!-- #region EMPTY LIST CELL -->\r\n <ng-template #emptyList>\r\n <tbody>\r\n <tr>\r\n <td colspan=\"2\" class=\"align-middle\"><span class=\"row-name fw-light fst-italic text-center\"> {{\r\n response_messages.emptyMessage }} </span></td>\r\n </tr>\r\n </tbody>\r\n </ng-template>\r\n <!-- #endregion EMPTY LIST CELL -->\r\n </table>\r\n\r\n <!-- #region PAGINATION -->\r\n <div class=\"d-flex justify-content-end mt-2\" *ngIf=\"$estabelecimentosList.length > 0\">\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"me-2\" style=\"white-space: nowrap;\">Itens por página</label>\r\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\r\n <option class=\"selected\" value=\"10\" selected>10</option>\r\n <option value=\"25\">25</option>\r\n <option value=\"50\">50</option>\r\n </select>\r\n </div>\r\n\r\n <pagination-controls class=\"sp-pagination mt-3\" (pageChange)=\"page = $event\"\r\n previousLabel=\"« \" nextLabel=\" »\" [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINATION -->\r\n \r\n </div>\r\n\r\n <!-- <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n <span style=\"color: #6C757D\"> Registros {{$estabelecimentosList.length}} de {{$estabelecimentosList.length}} </span>\r\n <nav aria-label=\"...\">\r\n <ul class=\"pagination mb-0\">\r\n <li class=\"page-item disabled\"> <a class=\"page-link\" href=\"#\" tabindex=\"-1\">Anterior</a> </li>\r\n <li class=\"page-item active\"> <a class=\"page-link\" href=\"#\">1</a> </li>\r\n <li class=\"page-item\"> <a class=\"page-link\" href=\"#\">2</a> </li>\r\n <li class=\"page-item\"> <a class=\"page-link\" href=\"#\">3</a> </li>\r\n <li class=\"page-item\"> <a class=\"page-link\" href=\"#\">Próximo</a> </li>\r\n </ul>\r\n </nav>\r\n </div> -->\r\n\r\n\r\n <ng-template #loading>\r\n <lib-spinner></lib-spinner>\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>","import { Component, ContentChild, EventEmitter, Input, OnInit, Output, TemplateRef } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { IMenuItemStructure } from '../../model/imenu-item-structure.model';\r\n\r\n@Component({\r\n selector: 'app-dynamic-menu',\r\n templateUrl: './dynamic-menu.component.html',\r\n styleUrls: ['./dynamic-menu.component.scss'],\r\n})\r\n\r\nexport class DynamicMenuComponent implements OnInit {\r\n\r\n @Output() selectTemplate: EventEmitter<any> = new EventEmitter;\r\n\r\n @Input() submenuRef!: HTMLDivElement;\r\n\r\n @Input() recebeParam!: Function;\r\n\r\n @Input() titleSubmenu = \"\";\r\n\r\n @Input() submenuList?: IMenuItemStructure[] = [];\r\n\r\n menuList: IMenuItemStructure[] = [];\r\n\r\n menuStatic: IMenuItemStructure[] = [];\r\n\r\n selectedMenuItem: number[] = [];\r\n\r\n selectedItem: number = -1;\r\n\r\n @ContentChild(TemplateRef) desiredContent?: TemplateRef<any>;\r\n\r\n constructor(public router: Router,\r\n\r\n ) { }\r\n\r\n ngOnInit(): void { }\r\n\r\n onClickedOutside(e: Event, ref: HTMLDivElement) {\r\n ref.classList.remove(\"opened-sub\");\r\n this.submenuList = [];\r\n this.indicateSelectedMenuItem();\r\n }\r\n\r\n indicateSelectedMenuItem() {\r\n if (this.selectedMenuItem.length) {\r\n this.selectedItem = this.selectedMenuItem[0];\r\n }\r\n }\r\n\r\n changeStar(ref: HTMLButtonElement, id: IMenuItemStructure | undefined) {\r\n ref.classList.toggle(\"star\");\r\n ref.classList.toggle(\"yellow-star\");\r\n }\r\n\r\n public getExternalUrl(url: string) {\r\n return `https://siscandesv6.sispro.com.br/SisproErpCloud/${url}`;\r\n }\r\n\r\n}\r\n","<div #submenu class=\"header-submenu\">\r\n <h1 class=\"titulo pb-3 pt-4\">{{ titleSubmenu }}</h1>\r\n <div class=\"itens-list\">\r\n <ul style=\"width: 100%\">\r\n \r\n <li *ngFor=\"let itemList of submenuList; let i = index\" [id]=\"itemList!.id\" \r\n class=\"d-flex justify-content-between align-items-center\"\r\n [class]=\"i == 0 ? 'mt-1' : ''\">\r\n \r\n <a *ngIf=\"!itemList.isExternal; else externalMenu\"\r\n [routerLink]=\"itemList!.route != null ? ['/' + itemList!.route] : null\" \r\n (click)=\"recebeParam($event, submenuRef)\">\r\n <span>{{ itemList!.label }}</span>\r\n </a>\r\n \r\n <ng-template #externalMenu>\r\n <a [href]=\"getExternalUrl(itemList.route)\"\r\n target=\"_blank\" \r\n (click)=\"recebeParam($event, submenuRef)\">\r\n <span>{{ itemList!.label }}</span>\r\n </a>\r\n </ng-template>\r\n\r\n <!-- <button class=\"star favoritos\" #star (click)=\"changeStar(star, itemList)\"></button> -->\r\n </li>\r\n\r\n </ul>\r\n </div>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-notif-submenu',\r\n templateUrl: './notif-submenu.component.html',\r\n styleUrls: ['./notif-submenu.component.scss'],\r\n})\r\nexport class NotifSubmenuComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n\r\n }\r\n}\r\n","<div class=\"header-submenu\">\r\n <h1 class=\"titulo pb-3 pt-4\">Notificações</h1>\r\n</div>\r\n<div class=\"body-notif\">\r\n <div class=\"new-notif\">\r\n <div class=\"session-header p-2\">\r\n <p class=\"session-h-item\">Novas (2)</p><p>Marcar todas como Lidas</p>\r\n </div>\r\n <div class=\"scroll\">\r\n <div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"read-notif\">\r\n <div class=\"session-header p-2\">\r\n <p class=\"session-h-item\">Lidas</p>\r\n </div>\r\n <div class=\"scroll-second\">\r\n <div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has\r\n Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, ContentChild, OnInit, TemplateRef, ViewChild } from '@angular/core';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { BsModalService } from 'ngx-bootstrap/modal';\r\nimport { MessageService } from 'ngx-sp-infra';\r\nimport { filter, Subject } from 'rxjs';\r\nimport { LibCustomMenuService } from './../../../custom/custom-menu.service';\r\n\r\n//import { environment } from '../../../environments/environments';\r\n//import { ProjectUtilservice } from 'src/app/project/utils/project-utils.service';\r\nimport { AuthService } from '../../../auth.service';\r\nimport { MenuConfigService } from '../../../custom/menu-config.service';\r\nimport { AuthStorageService } from '../../../storage/auth-storage.service';\r\nimport { MenuServicesService } from '../menu-services.service';\r\nimport { IMenuItemStructure } from '../model/imenu-item-structure.model';\r\nimport { ISubmenuItemStructure } from '../model/isubmenu-item-structure.model';\r\nimport { Usuario_IMG } from '../model/usuario-img';\r\n\r\n@Component({\r\n selector: 'app-menu-lateral',\r\n templateUrl: './menu-lateral.component.html',\r\n styleUrls: ['./menu-lateral.component.scss'],\r\n})\r\nexport class MenuLateralComponent implements OnInit {\r\n constructor(\r\n public _customMenuService: LibCustomMenuService,\r\n private _authStorageService: AuthStorageService,\r\n private _bsModalService: BsModalService,\r\n private _menuServices: MenuServicesService,\r\n private _messageService: MessageService,\r\n //private _projectUtilService: ProjectUtilservice,\r\n private _router: Router,\r\n private _authService: AuthService\r\n ) {\r\n // Implementação que verifica eventos acionados na classe de service.\r\n this._menuServices.getNewUserImageEvent().subscribe(() => { this.getMenuUserImg(); })\r\n }\r\n\r\n public ngOnInit(): void {\r\n\r\n console.log(this.menuConfig)\r\n\r\n // Inscreva-se no evento NavigationEnd para receber notificações quando a rota mudar, serve para atualizar a seleção do menu corretamente\r\n this._router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe((event: any) => {\r\n this._customMenuService.menuItems = this._customMenuService.menuConfig.updateRouteSelection(this._router.url, this._customMenuService.menuItems)\r\n });\r\n\r\n if (!this._customMenuService.menuDynamic) {\r\n this._customMenuService.menuConfig.setMenuStatic(true);\r\n this._customMenuService.menuItems = this._customMenuService.menuConfig.initializeMenu(this._router.url); \r\n\r\n // Método com customizações para inicialização do Menu Estático\r\n this._customMenuService.menuStaticOnInit();\r\n }\r\n else {\r\n // Método com customizações para inicialização do Menu Dinâmico\r\n this._customMenuService.menuDynamicOnInit();\r\n }\r\n\r\n this.nomeEstabelecimento = this._authStorageService.infraEstabNome;\r\n this.footerUserName = this._authStorageService.userName;\r\n\r\n this.checkForCachedImage();\r\n\r\n this.getUserEmail();\r\n }\r\n\r\n // #region ==========> PROPERTIES <==========\r\n\r\n // #region PRIVATE\r\n\r\n // ERICK: vou manter este por enquanto para quando for necessário esta funcionalidade eu consiga refazê-las sem muito problema\r\n @ViewChild(\"notif_menu\") private notif_template?: TemplateRef<any>;\r\n\r\n // #region PUBLIC\r\n\r\n @ViewChild('menuLink') public menuLink?: HTMLAnchorElement;\r\n @ContentChild(TemplateRef) public desiredContent?: TemplateRef<any>;\r\n\r\n public readonly MODAL_ESTABELECIMENTO: number = 1;\r\n\r\n public nomeEstabelecimento: string = 'Estabelecimento padrão';\r\n public titleSubmenu: string = \"\";\r\n public submenuList: (ISubmenuItemStructure | undefined)[] = [];\r\n\r\n public messageIfClicked = new Subject<boolean>();\r\n\r\n /** Esta variável é usada na abertura do submenu e do submenu secundário para \r\n * que a função onClickedOutside() que está na segunda div principal do HTML do\r\n * componente não seja ativada, pois se ela for ativada ela irá fechar o menu\r\n * lateral, e quando vamos do submenu para o submenu secundário não queremos\r\n * fechar o menu lateral, e quando vamos do submenu secundário para o submenu\r\n * também não queremos fechar o menu lateral;\r\n */\r\n public closeMenu: boolean = true;\r\n\r\n /** Utilizada como a fonte da imagem de perfil do usuário logado no sistema. */\r\n public footerUserImgSrc: string = \"\";\r\n\r\n /** Emai do usuário logado para ser exibido no popover */\r\n public footerUserEmail: string = \"\";\r\n\r\n /** Nome do usuário logado para ser exibido no rodapé do menu. */\r\n public footerUserName: string = \"Usuário\";\r\n\r\n public isPopoverVisible: boolean = false;\r\n public showBalloon: boolean = false;\r\n\r\n\r\n\r\n // propriedades iniciadas quando passar o CustomMenuService\r\n\r\n public menuDynamic: boolean = false;\r\n public menuConfig: MenuConfigService = new MenuConfigService;\r\n\r\n // #endregion PUBLIC\r\n\r\n // #endregion ==========> PROPERTIES <==========\r\n\r\n // #region ==========> SERVICES <==========\r\n\r\n // #region GET\r\n private getEstabelecimentoSession(estabID: string): void {\r\n this._menuServices.getEstabelecimentoSession(estabID).subscribe({\r\n next: response => {\r\n this.nomeEstabelecimento = response.InfraEstabNome;\r\n this._authStorageService.infraEmpresaId = response.InfraEmpresaId;\r\n this._authStorageService.infraEmpresaNome = response.InfraEmpresaNome;\r\n },\r\n error: error => {\r\n //this._projectUtilService.showHttpError(error); \r\n this._messageService.showAlertDanger(error);\r\n throw new Error(error);\r\n }\r\n })\r\n }\r\n\r\n private getMenuUserImg(): void {\r\n this._menuServices.getImagemMenu().subscribe({\r\n next: response => { this.footerUserImgSrc = response.InfraUsuarioImg.IMAGEM; },\r\n error: error => {\r\n //this._projectUtilService.showHttpError(error);\r\n this._messageService.showAlertDanger(error);\r\n throw new Error(error);\r\n }\r\n })\r\n }\r\n\r\n public getUserEmail(): void {\r\n this._menuServices.getUsuarioEmail().subscribe({\r\n next: response => { this.footerUserEmail = response.Email; },\r\n error: error => {\r\n //this._projectUtilService.showHttpError(error);\r\n this._messageService.showAlertDanger(error);\r\n throw new Error(error);\r\n }\r\n })\r\n }\r\n // #endregion GET\r\n\r\n // #region UPDATE\r\n public updateLastLogEstabelecimento(estab: string): void {\r\n this._menuServices.updateLastLogEstabID(estab.split(\" - \")[0]).subscribe({\r\n next: () => {\r\n this._messageService.showAlertSuccess('Estabelecimento alterado com sucesso!');\r\n\r\n this.getEstabelecimentoSession(estab.split(\" - \")[0]);\r\n }\r\n })\r\n\r\n this._authStorageService.infraEstabId = estab.split(\" - \")[0];\r\n this._authStorageService.infraEstabNome = estab.split(\" - \")[1];\r\n }\r\n // #endregion UPDATE\r\n\r\n // #endregion ==========> SERVICES <==========\r\n\r\n // #region ==========> UTILITIES <==========\r\n\r\n public togglePopover() { this.showBalloon = !this.showBalloon; }\r\n\r\n public dropdownWasOpened(value: boolean): void { this.messageIfClicked.next(value); }\r\n\r\n public openExpansibleMenu(ref: HTMLDivElement): void {\r\n ref.classList.toggle(\"closed\");\r\n ref.classList.toggle(\"col\");\r\n document.querySelector(\".sidebar-control\")?.classList.toggle(\"col\");\r\n\r\n // Método com customizações para inicialização do Menu Estático\r\n this._customMenuService.menuopenExpansibleMenu(ref);\r\n }\r\n\r\n public openSubmenu(menu: IMenuItemStructure, ref: HTMLDivElement, desiredMenu: TemplateRef<any>): void {\r\n\r\n if (menu.children && menu.children.length > 0) {\r\n this.titleSubmenu = menu.label\r\n this.desiredContent = desiredMenu;\r\n ref.classList.remove(\"opened-notif-sub\");\r\n\r\n if (this.submenuList === menu.children) {\r\n this.closeMenu = false;\r\n }\r\n else if (!ref.classList.contains(\"opened-sub\")) { ref.classList.toggle(\"opened-sub\"); }\r\n this.submenuList = menu.children;\r\n }\r\n\r\n else if (!menu.children || (menu.children && menu.children.length == 0)) {\r\n this.submenuList = [];\r\n ref.classList.toggle(\"selectedItem\");\r\n this.onClickedOutside(new Event(\"\"), ref);\r\n }\r\n }\r\n\r\n // public onClickedOutside(e: Event, ref: HTMLDivElement): void {\r\n // ref.classList.remove(\"opened-sub\");\r\n // this.submenuList = [];\r\n // }\r\n\r\n public onClickedOutside(e: Event, ref: HTMLDivElement): void {\r\n if (ref) {\r\n ref.classList.remove(\"opened-sub\");\r\n this.submenuList = [];\r\n } else {\r\n console.log(ref)\r\n console.warn('ref is undefined or null');\r\n }\r\n}\r\n\r\n // #region MENU FOOTER USER IMAGE\r\n private validateCachedImg(footerImg: Usuario_IMG | null): boolean {\r\n let usuarioId: string = this._authStorageService.infraUsuarioId;\r\n\r\n if (!footerImg || footerImg == null) { return true; }\r\n\r\n if (usuarioId != footerImg.USUARIOID) { return true; }\r\n\r\n this.footerUserImgSrc = footerImg.FILE;\r\n return false;\r\n }\r\n\r\n private checkForCachedImage(): void {\r\n const isAPIRequestNeeded = this.validateCachedImg(this._menuServices.getMenuFooterImg());\r\n if (isAPIRequestNeeded) { this.getMenuUserImg(); }\r\n }\r\n // #endregion MENU FOOTER USER IMAGE\r\n\r\n public logout(): void {\r\n this._authService.logout();\r\n }\r\n\r\n public getExternalUrl(url: string) {\r\n return `https://siscandesv6.sispro.com.br/SisproErpCloud/${url}`;\r\n }\r\n\r\n // #endregion ==========> UTILITIES <==========\r\n\r\n // #region ==========> MODALS <==========\r\n\r\n /** Função simples com o objetivo de abrir os modais no centro da tela.\r\n * @param template Template HTML do modal que será aberto.\r\n * @param modalID ID do modal que será aberto, para que possa ser referenciado depois.\r\n */\r\n openModal(template: TemplateRef<any>, modalID: number) {\r\n this._bsModalService.show(template, {\r\n class: 'modal-dialog-centered modal-lg',\r\n ignoreBackdropClick: false,\r\n keyboard: false,\r\n id: modalID\r\n });\r\n }\r\n\r\n /** Função simples com o objetivo de fechar os modais que estiverem abertos (baseados pelo ID).\r\n * @param modalID ID do modal que será fechado.\r\n */\r\n closeModal(modalID: number) {\r\n this._bsModalService.hide(modalID);\r\n }\r\n\r\n // #endregion ==========> MODALS <==========\r\n\r\n}\r\n","<!-- #region MAIN CONTENT -->\r\n<div class=\"main col-12\">\r\n\r\n <div style=\"height: 100vh; z-index: 3;\" class=\"sidebar-control position-relative d-flex flex-row\" \r\n (clickOutside)=\"closeMenu == true ? onClickedOutside($event, submenu_ref) : closeMenu = true\">\r\n <div class=\"sidebar {{_customMenuService.themeColor}} closed\" #sidebar>\r\n <div class=\"menu-header\">\r\n <ul>\r\n <li class=\"mb-3\">\r\n <div class=\"logo-hamburguer\">\r\n <img src=\"assets/icons/logotipo-sispro.svg\" alt=\"logo-sispro\" class=\"logo-sispro\" title=\"logo\" width=\"136px\" height=\"48px\">\r\n <button class=\"button-hamburguer\" (click)=\"openExpansibleMenu(sidebar)\">\r\n <img src=\"assets/icons/menu.svg\" alt=\"menu hamburguer\">\r\n </button>\r\n </div>\r\n </li>\r\n\r\n <!-- #region MÓDULOS -->\r\n <li class=\"mb-3\" style=\"margin-left: 8px; margin-right: 8px\">\r\n <div class=\"btn-group\">\r\n <button (click)=\"dropdownWasOpened(true)\" type=\"button\" class=\"dropdown-button\" data-bs-toggle=\"dropdown\"\r\n aria-expanded=\"false\" data-bs-auto-close=\"outside\">\r\n\r\n <ng-container>\r\n <img *ngIf=\"_customMenuService.moduleImg != ''; else moduleSVG\" [src]=\"_customMenuService.moduleImg\" alt=\"\">\r\n <span class=\"ps-2\"> {{ this._customMenuService.moduleName }} <lib-icon iconName=\"seta-direita\" iconColor=\"white\" /> </span>\r\n\r\n <ng-template #moduleSVG>\r\n <lib-icon iconColor=\"white\" [iconName]=\"_customMenuService.moduleSvg\"/>\r\n </ng-template>\r\n </ng-container>\r\n\r\n </button>\r\n <ul class=\"dropdown-menu\" #dropdown_ref>\r\n <app-primary-dropdown [buttonWasClicked]=\"messageIfClicked\"></app-primary-dropdown>\r\n </ul>\r\n </div>\r\n </li>\r\n <!-- #endregion MÓDULOS -->\r\n\r\n <!-- #region ESTABELECIMENTOS -->\r\n <li class=\"mx-3\" style=\"margin-bottom: 16px;\">\r\n <div class=\"icon-estabelecimento\">\r\n <button class=\"row justify-content-between bg-transparent border-0\"\r\n (click)=\"openModal(modalEstabelecimento, MODAL_ESTABELECIMENTO)\"\r\n [tooltip]=\"!sidebar.classList.contains('closed') ? '' : nomeEstabelecimento\" placement=\"right\">\r\n\r\n <lib-icon class=\"col-1\" iconName=\"predio\" iconColor=\"white\" />\r\n <span *ngIf=\"!sidebar.classList.contains('closed')\" class=\"col-9 ps-2 glb-text-width-160 text-start text-truncate\"> {{ nomeEstabelecimento }} </span>\r\n <lib-icon *ngIf=\"!sidebar.classList.contains('closed')\" class=\"col-1\" iconName=\"seta-direita\" iconColor=\"white\" />\r\n </button>\r\n </div>\r\n </li>\r\n <!-- #endregion ESTABELECIMENTOS -->\r\n\r\n </ul>\r\n\r\n </div>\r\n\r\n <!-- #region MENUS DE NAVEGAÇÃO -->\r\n <div class=\"main-menu\">\r\n <div class=\"scroll\">\r\n <div class=\"list-menu px-2 pb-1\">\r\n\r\n <!-- #region MENU DINÂMICO -->\r\n <div class=\"dynamic-menu\">\r\n <ul #dynamic_menu_items *ngIf=\"_customMenuService.menuItems; else isLoading\">\r\n\r\n <li *ngFor=\"let menuItem of _customMenuService.menuItems; let i = index\" \r\n class=\"p-1 rounded\" \r\n (click)=\"openSubmenu(menuItem, submenu_ref, dynamic_menu)\" \r\n [class.selectedItem]=\"menuItem.isSelected\">\r\n\r\n <a *ngIf=\"!menuItem.isExternal; else externalMenu\"\r\n [routerLink]=\"menuItem.route != '' ? menuItem.route : null\" \r\n [id]=\"'item' + menuItem.id\" \r\n [tooltip]=\"!sidebar.classList.contains('closed') ? '' : menuItem.label\" \r\n placement=\"left\" class=\"w-100 d-flex align-items-center button-icons text-decoration-none p-1 glb-cursor-pointer\" \r\n [class]=\"sidebar.classList.contains('closed') ? 'justify-content-center' : 'justify-content-between'\">\r\n\r\n <div class=\"container\">\r\n <lib-icon *ngIf=\"!menuItem.icon.includes('assets/icons'); else iconImg\" [iconName]=\"menuItem.icon\" iconColor=\"white\"/>\r\n <span class=\"span-main\">{{ menuItem.label }}</span>\r\n <ng-template #iconImg>\r\n <img [src]=\"menuItem.icon\" [alt]=\"'icone: ' + menuItem.label\">\r\n </ng-template>\r\n </div>\r\n <lib-icon *ngIf=\"(menuItem.children && menuItem.children.length > 0) && !sidebar.classList.contains('closed')\" \r\n iconName=\"seta-direita\" iconColor=\"white\"/>\r\n </a>\r\n \r\n <ng-template #externalMenu>\r\n <a [href]=\"getExternalUrl(menuItem.route)\"\r\n target=\"_blank\" \r\n [id]=\"'item' + menuItem.id\" \r\n [tooltip]=\"!sidebar.classList.contains('closed') ? '' : menuItem.label\" \r\n placement=\"left\" class=\"w-100 d-flex align-items-center button-icons text-decoration-none p-1 glb-cursor-pointer\" \r\n [class]=\"sidebar.classList.contains('closed') ? 'justify-content-center' : 'justify-content-between'\">\r\n\r\n <div class=\"container\">\r\n <lib-icon *ngIf=\"!menuItem.icon.includes('assets/icons'); else iconImgExternal\" [iconName]=\"menuItem.icon\" iconColor=\"white\"/>\r\n <span class=\"span-main\">{{ menuItem.label }}</span>\r\n <ng-template #iconImgExternal>\r\n <img [src]=\"menuItem.icon\" [alt]=\"'icone: ' + menuItem.label\">\r\n </ng-template>\r\n </div>\r\n <lib-icon *ngIf=\"(menuItem.children && menuItem.children.length > 0) && !sidebar.classList.contains('closed')\" \r\n iconName=\"seta-direita\" iconColor=\"white\"/>\r\n </a>\r\n </ng-template>\r\n </li>\r\n\r\n </ul>\r\n </div>\r\n\r\n <ng-template #isLoading>\r\n <li class=\"spinner-border spinner-border-sm mt-2\" role=\"status\" aria-hidden=\"true\"></li>\r\n </ng-template>\r\n <!-- #endregion MENU DINÂMICO -->\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <!-- #endregion MENUS DE NAVEGAÇÃO -->\r\n\r\n <!-- #region FOOTER -->\r\n <div class=\"footer-menu\" (mouseenter)=\"showBalloon = true\" (mouseleave)=\"showBalloon = false\"\r\n [popover]=\"popoverContent\" placement=\"right bottom\" [outsideClick]=\"true\" containerClass=\"width: 200px\" >\r\n <div class=\"footer-components ps-1 pt-2\" [class.open]=\"showBalloon\">\r\n <button type=\"button\" class=\"btn btn-primary\">\r\n <img *ngIf=\"footerUserImgSrc; else noUserImg\" class=\"photo-profile ms-1\"\r\n [src]=\"['data:image/jpeg;base64,' + footerUserImgSrc]\" alt=\"foto-perfil\">\r\n <ng-template #noUserImg>\r\n <lib-icon iconName=\"contraparte\" iconColor=\"white\"/>\r\n </ng-template>\r\n <span class=\"glb-text-width-120 w-auto fw-bold text-start text-truncate ms-1 me-1\">\r\n {{ footerUserName }}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <ng-template #popoverContent>\r\n <div class=\"footer-menu\" style=\"width: 1000px;\">\r\n <div class=\"d-flex align-items-center\"> \r\n <img *ngIf=\"footerUserImgSrc; else noUserImg\" class=\"photo-profile\"\r\n [src]=\"['data:image/jpeg;base64,' + footerUserImgSrc]\" alt=\"foto-perfil\"> \r\n <ng-template #noUserImg>\r\n <lib-icon iconName=\"contraparte\" iconColor=\"white\"/>\r\n </ng-template>\r\n <div class=\"d-flex flex-column ms-1\"> \r\n <div [tooltip]=\"footerUserName\" class=\"dynamic-container\" style=\"white-space: nowrap; flex-grow: 1;max-width: 200px; font-size: 16px;\">{{footerUserName}}</div>\r\n <div [tooltip]=\"footerUserEmail\" class=\"dynamic-container\" style=\"white-space: nowrap; font-size: 12px; flex-grow: 1;max-width: 200px;\">{{footerUserEmail}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <hr class=\"mb-2 mt-2\">\r\n <div routerLink=\"meu-perfil\" style=\"cursor: pointer;\" (click)=\"togglePopover(); $event.stopPropagation()\">\r\n <lib-icon [iconSize]=\"'small'\" iconName=\"contraparte\"/> Meu Perfil\r\n </div>\r\n <div class=\"mt-2\" (click)=\"logout()\" style=\"cursor: pointer;\">\r\n <lib-icon [iconSize]=\"'small'\" iconName=\"logout\"/> Sair\r\n </div>\r\n </ng-template>\r\n <!-- #endregion FOOTER -->\r\n\r\n </div>\r\n\r\n <div class=\"submenu\" #submenu_ref>\r\n <ng-template [ngIf]=\"desiredContent !== null\">\r\n <ng-content *ngTemplateOutlet=\"desiredContent!; context: {$implicit: submenuList}\"></ng-content>\r\n </ng-template>\r\n </div>\r\n </div>\r\n \r\n <div class=\"main-content col d-flex flex-column align-content-between\" id=\"body-content\">\r\n <div class=\"content\" style=\"position: relative;\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n <div app-footer></div>\r\n </div>\r\n\r\n</div>\r\n<!-- #endregion MAIN CONTENT -->\r\n\r\n<!-- #region TEMPLATES -->\r\n<!-- tem que perguntar pro Erick -->\r\n<!-- [submenuRef]=\"submenu_ref\" -->\r\n<ng-template #dynamic_menu let-data>\r\n <app-dynamic-menu \r\n [submenuList]=\"data\"\r\n [titleSubmenu]=\"titleSubmenu\"\r\n [submenuRef]=\"submenu_ref\"\r\n [recebeParam]=\"onClickedOutside.bind(this)\">\r\n </app-dynamic-menu>\r\n</ng-template>\r\n\r\n<ng-template #notif_menu>\r\n <app-notif-submenu></app-notif-submenu>\r\n</ng-template>\r\n\r\n<!-- #region MODAL SELECAO ESTABELECIMENTO -->\r\n<ng-template #modalEstabelecimento>\r\n <selecao-estabelecimentos-modal (onClose)=\"closeModal(MODAL_ESTABELECIMENTO)\"\r\n (onSelected)=\"closeModal(MODAL_ESTABELECIMENTO); updateLastLogEstabelecimento($event);\"></selecao-estabelecimentos-modal>\r\n</ng-template>\r\n<!-- #endregion MODAL SELECAO ESTABELECIMENTO -->\r\n\r\n<!-- #endregion TEMPLATES -->\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\nimport { FormUtils, MessageService } from 'ngx-sp-infra';\r\nimport { AuthService } from '../../auth.service';\r\nimport { ServerService } from '../../server/server.service';\r\nimport { AuthStorageService } from '../../storage/auth-storage.service';\r\n\r\n@Component({\r\n\tselector: 'app-nova-senha',\r\n\ttemplateUrl: './nova-senha.component.html',\r\n\tstyleUrls: ['./nova-senha.component.scss'],\r\n\tpreserveWhitespaces: true,\r\n})\r\nexport class NovaSenhaComponent implements OnInit {\r\n\r\n\tconstructor(\r\n\t\tprivate _formBuilder: FormBuilder,\r\n\t\tprivate _messageService: MessageService,\r\n\t\tprivate _serverService: ServerService,\r\n\t\tprivate _authService: AuthService,\r\n\t\tprivate _authStorageService: AuthStorageService,\r\n\t\tprivate _title: Title,\r\n\t\tprivate _router: Router,\r\n\t\tprivate _route: ActivatedRoute\r\n\t) { }\r\n\r\n\tngOnInit(): void {\r\n\r\n\t\tthis._title.setTitle(\"Nova Senha\");\r\n\r\n\t\tthis.createForm();\r\n\r\n\t\tthis.getParmsFromRoute();\r\n\r\n\t\tthis.form.get('password')?.disable();\r\n\t\tthis.form.get('confirmPassword')?.disable();\r\n\r\n\t\tthis.form.get('code')?.setValue('');\r\n\r\n\t\tthis.form.get('code')?.valueChanges.subscribe(value => {\r\n\t\t\tif (value && value.length === 6) {\r\n\t\t\t\tthis.form.get('password')?.enable();\r\n\t\t\t\tthis.form.get('confirmPassword')?.enable();\r\n\t\t\t} else {\r\n\t\t\t\tthis.form.get('password')?.disable();\r\n\t\t\t\tthis.form.get('confirmPassword')?.disable();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// #region ==========> PROPERTIES <==========\r\n\r\n\t// #region PRIVATE\r\n\tprivate domain: string | null = \"\";\r\n\tprivate user: string | null = \"\";\r\n\tprivate createPassword: boolean = false;\r\n\r\n\tpublic esqueceuSenhaText: string = \"Enviamos um código para o seu e-mail.<br>Insira-o abaixo para redefinir sua senha.\"\r\n\tpublic primeiroAcessoText: string = \"Este é o seu primeiro acesso. Por favor,<br>Insira abaixo o código enviado pare seu<br>e-mail para definir sua senha.\"\r\n\tpublic senhaExpiradaText: string = \"Sua senha expirou e precisa ser atualizada.<br>Enviamos um código para o seu e-mail.<br>Insira-o abaixo para definir sua senha.\"\r\n\r\n\tpublic cadeadoImg = 'assets/imgs/Property1-cadeado.png';\r\n\tpublic maoImg = 'assets/imgs/Property1-mao.png';\r\n\tpublic calendarioImg = 'assets/imgs/Property1-calendariofino.png';\r\n\r\n\t// #region PRIVATE\r\n\r\n\t// #region PUBLIC\r\n\r\n\t// #region ==========> FORM BUILDER <==========\r\n\tpublic form: FormGroup = new FormGroup({});\r\n\r\n\t// Propriedade necessário para que a classe static FormUtils possa ser utilizada no Html\r\n\tpublic get FormUtils(): typeof FormUtils {\r\n\t\treturn FormUtils;\r\n\t}\r\n\r\n\tpublic passwordLabel: string = \"\";\r\n\r\n\tpublic statusSenha: number = 0;\r\n\r\n\t// #region FORM DATA\r\n\r\n\t// Variáveis específicas para funcionalidades padrões dos formulários\r\n\tpublic get code(): string | null {\r\n\t\treturn this.form.get('code')?.value;\r\n\t}\r\n\r\n\tpublic get password(): string {\r\n\t\treturn this.form.get('password')?.value;\r\n\t}\r\n\r\n\tpublic get confirmPassword(): string {\r\n\t\treturn this.form.get('confirmPassword')?.value;\r\n\t}\r\n\r\n\t// #endregion FORM DATA\r\n\r\n\t// #region FORM VALIDATORS\r\n\r\n\t// #region PUBLIC\r\n\r\n\t// Método para configuração dos campos de edição do formulário\r\n\tprivate createForm(): void {\r\n\r\n\t\tthis.form = this._formBuilder.group({\r\n\t\t\tcode: ['', [Validators.required, Validators.maxLength(6)]],\r\n\t\t\tpassword: ['', [Validators.required, Validators.maxLength(100)]],\r\n\t\t\tconfirmPassword: ['', [Validators.required, Validators.maxLength(100)]]\r\n\t\t});\r\n\r\n\t\tthis.form.get('code')?.setValue('');\r\n\t\tthis.form.get('password')?.setValue('');\r\n\t\tthis.form.get('confirmPassword')?.setValue('');\r\n\t}\r\n\r\n\t// #endregion FORM VALIDATORS\r\n\r\n\t// #endregion ==========> FORM BUILDER <==========\r\n\r\n\t// #region ==========> SERVICE METHODS <==========\r\n\r\n\r\n\t// #region GET\r\n\r\n\t/**\r\n\t * Puxa o nome do servidor salvo na configuração da máquina\r\n\t */\r\n\tpublic getServer(): void {\r\n\r\n\t\tif (this.form.valid) {\r\n\t\t\tthis._serverService.getServer().subscribe({\r\n\t\t\t\tnext: response => {\r\n\t\t\t\t},\r\n\t\t\t\terror: (error) => {\r\n\t\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\t\tthrow new Error(error)\r\n\t\t\t\t},\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tFormUtils.validateFields(this.form);\r\n\t\t}\r\n\t}\r\n\t// #endregion GET\r\n\r\n\t// #region POST\r\n\r\n\t// Envia requisição para recuperar de senha\r\n\tpublic sendPassword(): void {\r\n\r\n\t\tif (this.form.valid) {\r\n\t\t\tthis._serverService.getServer().subscribe({\r\n\t\t\t\tnext: response => {\r\n\t\t\t\t\tthis.updatePassword();\r\n\t\t\t\t},\r\n\t\t\t\terror: (error) => {\r\n\t\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\t},\r\n\t\t\t})\r\n\r\n\t\t} else {\r\n\t\t\tFormUtils.validateFields(this.form);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Recuperar senha\r\n\tpublic updatePassword(): void {\r\n\r\n\t\tif (this.createPassword) {\r\n\t\t\tthis._authService.createPassword(this.domain!, this.user!, this.form.value).subscribe({\r\n\t\t\t\tnext: (response) => {\r\n\t\t\t\t\tthis._messageService.showAlertSuccess('Você definiu sua senha com sucesso. Preencha suas novas credenciais para acessar o sistema.');\r\n\r\n\t\t\t\t\tthis.cancelar();\r\n\t\t\t\t},\r\n\t\t\t\terror: (error) => {\r\n\t\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\t\tthrow new Error(error)\r\n\t\t\t\t},\r\n\t\t\t});\r\n\r\n\t\t} else {\r\n\t\t\tthis._authService.recoverPassword(this.domain!, this.user!, this.form.value).subscribe({\r\n\t\t\t\tnext: (response) => {\r\n\t\t\t\t\tthis._messageService.showAlertSuccess('Você redefiniu sua senha com sucesso. Preencha suas novas credenciais para acessar o sistema.');\r\n\r\n\t\t\t\t\tthis.cancelar();\r\n\t\t\t\t},\r\n\t\t\t\terror: (error) => {\r\n\t\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\t\tthrow new Error(error)\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// #endregion POST\r\n\r\n\t// #region UTILIDADES\r\n\tprivate getParmsFromRoute(): void {\r\n\r\n\t\tif (this._route.snapshot.paramMap.get('param') != null) {\r\n\t\t\tlet param: string = atob(this._route.snapshot.paramMap.get('param')!);\r\n\r\n\t\t\tvar params = param.split('$');\r\n\r\n\t\t\tlet numero: number = +params[params.length - 1].slice(-1)\r\n\t\t\tthis.statusSenha = numero;\r\n\r\n\t\t\tthis.createPassword = (params[0] == 'true' ? true : false);\r\n\t\t\tthis.domain = params[1];\r\n\t\t\tthis.user = params[2];\r\n\t\t\tthis.passwordLabel = (this.createPassword ? \"Escolha sua nova senha\" : \"Digite uma nova Senha\");\r\n\r\n\t\t\tif (params[3] != null) {\r\n\t\t\t\tthis.form.get('code')?.setValue(params[3]);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\tthis.createPassword = false;\r\n\t\t\tthis.domain = \"\";\r\n\t\t\tthis.user = \"\";\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Retorno para o login\r\n\tpublic cancelar(): void {\r\n\t\tthis._authStorageService.logout();\r\n\r\n\t\tthis._router.navigate([\"/auth/login\"]);\r\n\t}\r\n\r\n\t// #endregion UTILIDADES\r\n\r\n\t// #endregion ==========> SERVICE METHODS <==========\r\n\r\n\t// #endregion ==========> MODALS <==========\r\n\r\n}\r\n","<body>\r\n\t<div id=\"main-container\">\r\n\t\t<!-- #region MAIN CONTENT -->\r\n\t\t<div class=\"glb-main-container password-container\">\r\n\t\t\t<div class=\"password-info-container\">\r\n\t\t\t\t<div class=\"img mb-3\">\r\n\t\t\t\t\t<img [src]=\"statusSenha == 2 ? calendarioImg : statusSenha == 1 ? maoImg : statusSenha == 3 ? cadeadoImg : '' \" width=\"125.69\" height=\"122\">\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"text\">\r\n\t\t\t\t\t<h4>{{statusSenha == 2 ? 'Senha expirada' : statusSenha == 1 ? 'Primeiro acesso' : statusSenha == 3 ? 'Esqueceu sua senha?' : ''}}</h4>\r\n\t\t\t\t\t<p [innerHTML]=\"statusSenha == 2 ? senhaExpiradaText : statusSenha == 1 ? primeiroAcessoText : statusSenha == 3 ? esqueceuSenhaText : '' \"></p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<form [formGroup]=\"form\">\r\n\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t<div class=\"col-12 mb-3\">\r\n\t\t\t\t\t\t<label for=\"inputCode\" class=\"form-label\"> Código de validação <span class=\"text-danger\">*</span></label>\r\n\t\t\t\t\t\t<input type=\"text\" placeholder=\"Insira seu código aqui...\" id=\"inputCode\" class=\"form-control\" formControlName=\"code\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('code'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('code')\" label=\"Código de validação\"></app-field-error-message>\t\t\t\t\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\r\n\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t<div class=\"col-12 mb-3\">\r\n\t\t\t\t\t\t<label for=\"inputPassword\" class=\"form-label\"> Digite uma nova Senha <span class=\"text-danger\">*</span></label>\r\n\t\t\t\t\t\t<input type=\"password\" placeholder=\"Digite sua nova senha...\" id=\"inputPassword\" class=\"form-control\" formControlName=\"password\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('password'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('password')\" label=\"{{ passwordLabel }}\"></app-field-error-message>\t\t\t\t\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t\r\n\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t<div class=\"col-12 mb-3\">\r\n\t\t\t\t\t\t<label for=\"inputConfirmPassword\" class=\"form-label\"> Confirme sua nova Senha <span class=\"text-danger\">*</span></label>\r\n\t\t\t\t\t\t<input type=\"password\" placeholder=\"Digite a senha novamente...\" id=\"inputConfirmPassword\" class=\"form-control\" formControlName=\"confirmPassword\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('confirmPassword'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('confirmPassword')\" label=\"Confirme sua Senha\"></app-field-error-message>\t\t\t\t\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\r\n\t\t\t\t\t<div class=\"btns\">\r\n\t\t\t\t\t\t<button type=\"button\" class=\"btn btn-primary modal-button\" (click)=\"sendPassword()\">\r\n\t\t\t\t\t\t\t<span> Redefinir senha </span>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t<button type=\"button\" class=\"btn modal-button cancelar-btn\" (click)=\"cancelar()\">\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<span><span class=\"icon\"><lib-icon iconName=\"p-seta-esquerda\" [iconSize]=\"20\"/></span>Voltar para a tela de login</span>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t</form>\r\n\t\t</div>\r\n\t\t<!-- #endregion MAIN CONTENT -->\r\n\t</div>\r\n\t</body>\r\n\t","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { RouterLink, RouterOutlet } from '@angular/router';\r\nimport { PopoverModule } from 'ngx-bootstrap/popover';\r\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\r\nimport { NgxPaginationModule } from 'ngx-pagination';\r\nimport { InfraModule } from 'ngx-sp-infra';\r\nimport { LoginComponent } from '../lib/components/login/login.component';\r\nimport { PrimaryDropdownComponent } from '../lib/components/menu-lateral/dropdown/primary-dropdown/primary-dropdown.component';\r\nimport { SecondaryDropdownComponent } from '../lib/components/menu-lateral/dropdown/secondary-dropdown/secondary-dropdown.component';\r\nimport { MenuLateralComponent } from '../lib/components/menu-lateral/menu/menu-lateral.component';\r\nimport { SelecaoEstabelecimentosModalComponent } from '../lib/components/menu-lateral/menu/selecao-estabelecimentos-modal/selecao-estabelecimentos-modal.component';\r\nimport { DynamicMenuComponent } from '../lib/components/menu-lateral/submenus/dynamic-menu/dynamic-menu.component';\r\nimport { NotifSubmenuComponent } from '../lib/components/menu-lateral/submenus/notif-submenu/notif-submenu.component';\r\nimport { NovaSenhaComponent } from '../lib/components/nova-senha/nova-senhacomponent';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n LoginComponent,\r\n NovaSenhaComponent,\r\n PrimaryDropdownComponent,\r\n SecondaryDropdownComponent,\r\n SelecaoEstabelecimentosModalComponent,\r\n MenuLateralComponent,\r\n DynamicMenuComponent,\r\n NotifSubmenuComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n InfraModule,\r\n NgxPaginationModule,\r\n PopoverModule,\r\n TooltipModule,\r\n CommonModule,\r\n RouterLink,\r\n RouterOutlet\r\n ],\r\n exports: [\r\n LoginComponent,\r\n NovaSenhaComponent,\r\n PrimaryDropdownComponent,\r\n SecondaryDropdownComponent,\r\n SelecaoEstabelecimentosModalComponent,\r\n MenuLateralComponent,\r\n DynamicMenuComponent,\r\n NotifSubmenuComponent\r\n ]\r\n})\r\nexport class AuthModule { }","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { merge, Observable, of, tap } from 'rxjs';\r\n\r\nimport { IEstabelecimento } from '../model/iestabelecimento.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ListEstabService {\r\n private storage: Storage;\r\n\r\n public cacheName: string = \"\";\r\n\r\n public readonly menuKey = `${this.cacheName}_ListaEstabs`;\r\n\r\n baseUrl = \"assets/jsons/lista-estabs.json\";\r\n\r\n constructor(private http: HttpClient) {\r\n this.storage = window.localStorage;\r\n }\r\n\r\n getList(): Observable<IEstabelecimento[]> {\r\n let iMenu: IEstabelecimento[] | null = this.get();\r\n let httpCall: Observable<IEstabelecimento[]> = this.http.get<IEstabelecimento[]>(this.baseUrl).pipe(\r\n tap((iMenuFromServer: IEstabelecimento[]) => {\r\n this.set(iMenuFromServer);\r\n })\r\n );\r\n\r\n // Caso o menu já esteja gravado no local, é retornado ele no observable e logo em seguida\r\n // é realizada a chamada HTTP para buscar o mais novo menu.\r\n if (iMenu) {\r\n let obs: Observable<IEstabelecimento[]> = of(iMenu!);\r\n let obsMerged: Observable<IEstabelecimento[]> = merge(obs, httpCall);\r\n\r\n return obsMerged;\r\n }\r\n\r\n return httpCall;\r\n }\r\n\r\n set(value: IEstabelecimento[]): void {\r\n let iMenuJson = JSON.stringify(value);\r\n this.storage.setItem(this.menuKey, iMenuJson);\r\n }\r\n\r\n get(): IEstabelecimento[] | null {\r\n let possibleIMenus: string | null = this.storage.getItem(this.menuKey);\r\n\r\n if (possibleIMenus) {\r\n let iMenus: IEstabelecimento[] = JSON.parse(possibleIMenus);\r\n\r\n return iMenus;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n remove(): void {\r\n this.storage.removeItem(this.menuKey);\r\n }\r\n\r\n public getCacheName(cacheName: string): void {\r\n //passando propriedades do produto para a service\r\n this.cacheName = cacheName;\r\n }\r\n\r\n\r\n}\r\n","export class IMenu {\r\n ID!: number;\r\n UNICOID!: number;\r\n LABEL: string = \"\";\r\n DESCRICAO: string = \"\";\r\n URL: string = \"\";\r\n CLASS_ICON: string = \"\";\r\n IS_EXIBEMENU!: boolean;\r\n URL_DASHBOARD: string = \"\";\r\n TAG: string = \"\";\r\n FK!: number;\r\n STRUCT_LIST: [] | [{\r\n ID: number;\r\n UNICOID: number;\r\n LABEL: string;\r\n DESCRICAO: string;\r\n URL: string;\r\n CLASS_ICON: string;\r\n IS_EXIBEMENU: boolean;\r\n URL_DASHBOARD: string;\r\n TAG: string;\r\n FK: number;\r\n STRUCT_LIST: [] | [{\r\n ID: number;\r\n UNICOID: number;\r\n LABEL: string;\r\n DESCRICAO: string;\r\n URL: string;\r\n CLASS_ICON: string;\r\n IS_EXIBEMENU: boolean;\r\n URL_DASHBOARD: string;\r\n TAG: string;\r\n FK: number;\r\n }]\r\n }] = []\r\n}","export class InfraUsuarioImg {\r\n TENANT_ID: number = 0;\r\n ID: number = 0;\r\n IMAGEM: string = \"\";\r\n FILENAME: string = \"\";\r\n DATACRIACAO: Date = new Date();\r\n IS_ACTIVE: boolean = false;\r\n USUARIOID: string = \"\";\r\n}\r\n","export class CustomPropriedadesLogin {\r\n loginTitle!: string;\r\n loginSubtitle!: string;\r\n loginBackground!: string;\r\n loginLogotipo!: string;\r\n loginAltLogotipo!: string;\r\n loginPageTitle!: string;\r\n loginDesenvDomain!: string;\r\n loginDesenvUser!: string;\r\n loginDesenvPassword!: string;\r\n}","import { Injectable } from '@angular/core';\r\nimport { Router, RouterStateSnapshot, ActivatedRouteSnapshot, Route, UrlTree } from '@angular/router';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { AuthStorageService } from '../storage/auth-storage.service';\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class AuthGuard {\r\n\r\n constructor(\r\n private router: Router,\r\n private authStorageService: AuthStorageService\r\n ) { }\r\n\r\n IsUserAuth(): Observable<boolean | UrlTree>\r\n {\r\n\r\n return this.authStorageService.isLoggedInSub\r\n .pipe(\r\n map((isLoggedIn: boolean) => {\r\n\r\n if (!isLoggedIn || this.authStorageService.isExternalLogin){ \r\n let login: UrlTree = this.router.parseUrl(\"/auth/login\");\r\n \r\n return login;\r\n }\r\n\r\n return true;\r\n })\r\n\r\n );\r\n\r\n }\r\n\r\n canActivate(_route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree\r\n {\r\n return this.IsUserAuth();\r\n }\r\n\r\n canLoad(_route: Route): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree\r\n {\r\n return this.IsUserAuth();\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router, RouterStateSnapshot, ActivatedRouteSnapshot, Route, UrlTree } from '@angular/router';\r\n\r\nimport { Observable, lastValueFrom, of } from 'rxjs';\r\nimport { switchMap, take } from 'rxjs/operators';\r\n\r\nimport { ServerService } from '../server/server.service';\r\nimport { AuthStorageService } from '../storage/auth-storage.service';\r\nimport { AuthService } from '../auth.service';\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class ExternaLoginlGuard {\r\n\r\n constructor(\r\n private router: Router,\r\n private authService: AuthService,\r\n private authStorageService: AuthStorageService,\r\n\t\tprivate serverService: ServerService\r\n ) { }\r\n\r\n canActivate(_route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree\r\n {\r\n let param: string = atob(_route.paramMap.get('param')!);\r\n\r\n return this.IsUserAuth(param);\r\n }\r\n\r\n private navigateToError(): UrlTree {\r\n this.authStorageService.isExternalLogin = true;\r\n\r\n let login: UrlTree = this.router.parseUrl(\"/error-404\");\r\n\r\n return login;\r\n }\r\n\r\n private IsUserAuth(param: string): Observable<boolean | UrlTree>\r\n {\r\n return this.authStorageService.isLoggedInSub\r\n .pipe(\r\n take(1),\r\n switchMap((isLoggedIn: boolean) => {\r\n // Split dos parâmetros para o login externo\r\n var params = param.split('$');\r\n \r\n let domain = params[0];\r\n let user = params[1];\r\n let password = params[2];\r\n\r\n if (isLoggedIn && !this.authStorageService.isExternalLogin && this.authStorageService.dominio.toLowerCase() == domain.toLowerCase())\r\n {\r\n return of(true);\r\n };\r\n\r\n // antes alteração - se precisar voltar\r\n return this.logOnExternal(domain, user, password);\r\n })\r\n );\r\n\r\n }\r\n\r\n // Executa o Login Externo\r\n private async logOnExternal(domain: string, user: string, password: string): Promise<boolean | UrlTree> {\r\n const retConfig: boolean = await this.handleGetServer();\r\n\r\n if (!retConfig) {\r\n return this.navigateToError();\r\n }\r\n\r\n try {\r\n\r\n const error: boolean = await lastValueFrom(\r\n this.authService.loginExternal(domain, user, password)\r\n );\r\n\r\n if (error) {\r\n return this.navigateToError();\r\n }\r\n\r\n return true;\r\n } catch (error) {\r\n return this.navigateToError();\r\n }\r\n\r\n }\r\n\r\n // Retorna os parâmetros de configuração.\r\n private getServer(): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n\r\n this.serverService.getServer().subscribe({\r\n next: response => {\r\n resolve(true);\r\n },\r\n error: error => {\r\n reject(error);\r\n }\r\n\r\n });\r\n });\r\n\r\n }\r\n\r\n // Handle para busca dos parâmetros de configuração.\r\n private async handleGetServer(): Promise<boolean> {\r\n\r\n try\r\n {\r\n const response = await this.getServer();\r\n \r\n return true;\r\n } catch (error) {\r\n return false;\r\n }\r\n\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Route, Router, UrlSegment, UrlTree } from '@angular/router';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { AuthStorageService } from '../storage/auth-storage.service';\r\n\r\n/**\r\n * Protege a página de login de ser carregada quando o usuário já está logado,\r\n * redirecionando ele para a página home da aplicação.\r\n */\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class LoginGuard {\r\n\r\n constructor(\r\n private router: Router,\r\n private authStorageService: AuthStorageService\r\n ) { }\r\n\r\n /**\r\n * Verifica se pode carregar a tela de login caso o usuário não esteja logado e \r\n * a rota seja de login.\r\n * \r\n * @param route Rota atual\r\n * @param segments Segmentos.\r\n * @returns \r\n */\r\n canLoad(_route: Route, _segments: UrlSegment[]): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> {\r\n\r\n if (_route.path === \"auth/login\" && this.authStorageService.isLoggedInSub.value && !this.authStorageService.isExternalLogin) {\r\n return this.router.createUrlTree([\"/home\"]);\r\n }\r\n \r\n return true;\r\n }\r\n\r\n}\r\n","import { HttpEvent, HttpHandler, HttpHeaders, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { EnvironmentService } from './../environments/environments.service';\r\n\r\nimport { Observable, from, lastValueFrom } from 'rxjs';\r\n//import { environment } from '../environments/environments';\r\n\r\nimport { CheckUrlAndMethodService } from 'ngx-sp-infra';\r\nimport { AuthStorageService } from '../storage/auth-storage.service';\r\n\r\n/**\r\n * \\brief Intercepta uma chamada HTTP para inserir o usuário logado no header em conjunto\r\n * com o login para uso da API.\r\n *\r\n * Depende do serviço de autenticação.\r\n */\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class AuthAplicInterceptor implements HttpInterceptor {\r\n\r\n constructor(\r\n private authCheckService: CheckUrlAndMethodService,\r\n private _environmentService: EnvironmentService,\r\n private token: AuthStorageService\r\n ) { }\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n // convert promise to observable using 'from' operator\r\n return from(this.handle(req, next))\r\n }\r\n\r\n async handle(req: HttpRequest<any>, next: HttpHandler) {\r\n let changedReq: HttpRequest<any> = req;\r\n\r\n if (this.authCheckService.needsAuthRequest(req.url, req.method, this._environmentService.needsAuthAplic)) {\r\n // Verifica se o Token precisa ser renovado\r\n await this.token.renewToken();\r\n\r\n // Adiciona as autenticações necessárias ao servidor.\r\n let headers: HttpHeaders = req.headers.set(\r\n 'Authorization',\r\n `Bearer ${this.token.authToken}`\r\n );\r\n\r\n changedReq = req.clone({ headers: headers });\r\n }\r\n\r\n return await lastValueFrom(next.handle(changedReq));\r\n }\r\n\r\n /* >>> Comentado por Molina - 19/10/2023 - Lógica anterior\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n let changedReq: HttpRequest<any> = req;\r\n\r\n if (this.authCheckService.needsAuthRequest(req.url, req.method, environment.needsAuthAplic)) {\r\n\r\n // Adiciona as autenticações necessárias ao servidor.\r\n let headers: HttpHeaders = req.headers.set(\r\n 'Authorization',\r\n `Bearer ${ this.token.authToken }`\r\n );\r\n\r\n changedReq = req.clone({ headers: headers });\r\n }\r\n\r\n return next.handle(changedReq);\r\n }\r\n */\r\n\r\n}\r\n","import { HttpEvent, HttpHandler, HttpHeaders, HttpInterceptor, HttpRequest } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { EnvironmentService } from './../environments/environments.service';\r\n\r\nimport { Observable } from \"rxjs\";\r\n//import { environment } from \"../environments/environments\";\r\n\r\nimport { CheckUrlAndMethodService } from \"ngx-sp-infra\";\r\n\r\n/**\r\n * \\brief Intercepta uma chamada HTTP para inserir a autenticação da Sispro.\r\n */\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class AuthInfraInterceptor implements HttpInterceptor {\r\n\r\n constructor(\r\n private authCheckService: CheckUrlAndMethodService,\r\n private _environmentService: EnvironmentService\r\n ) { }\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n let changedReq: HttpRequest<any> = req;\r\n\r\n if (this.authCheckService.needsAuthRequest(req.url, req.method, this._environmentService.needsAuthInfra)) {\r\n // Adiciona as autenticações necessárias ao servidor. Autenticação básica.\r\n let headers: HttpHeaders = req.headers.set(\r\n \"Authorization\",\r\n `Basic ${btoa(`${ localStorage.getItem('configServerUser') }:${ localStorage.getItem('configServerPassword') }`) }\r\n `);\r\n\r\n changedReq = req.clone({ headers: headers });\r\n }\r\n\r\n return next.handle(changedReq);\r\n }\r\n\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["take","tap","i2","i3.AuthStorageService","i4.LibCustomLoginService","map","i1","i4.AuthService","i5.ServerService","i6.EnvironmentService","i7.AuthStorageService","i8.LibCustomLoginService","i10","i12","i1.MenuConfigService","i2.AuthStorageService","i3","i1.LibCustomMenuService","i4.SecondaryDropdownComponent","i1.AuthStorageService","i3.LibCustomMenuService","i4.MenuServicesService","i6","i7","i9","i7.AuthService","i8","i11.PrimaryDropdownComponent","i12.SelecaoEstabelecimentosModalComponent","i13.DynamicMenuComponent","i14.NotifSubmenuComponent","i3.ServerService","i5.AuthStorageService","i2.AuthService","i4.ServerService","i2.EnvironmentService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-sp-auth.mjs","sources":["../../../projects/ngx-sp-auth/src/lib/custom/custom-storage.service.ts","../../../projects/ngx-sp-auth/src/lib/storage/auth-storage.service.ts","../../../projects/ngx-sp-auth/src/lib/custom/custom-login.service.ts","../../../projects/ngx-sp-auth/src/lib/auth.service.ts","../../../projects/ngx-sp-auth/src/lib/server/server.service.ts","../../../projects/ngx-sp-auth/src/lib/environments/environments.service.ts","../../../projects/ngx-sp-auth/src/lib/components/login/login.component.ts","../../../projects/ngx-sp-auth/src/lib/components/login/login.component.html","../../../projects/ngx-sp-auth/src/lib/custom/menu-config.service.ts","../../../projects/ngx-sp-auth/src/lib/custom/custom-menu.service.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/dropdown/secondary-dropdown/secondary-dropdown.component.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/dropdown/secondary-dropdown/secondary-dropdown.component.html","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/dropdown/primary-dropdown/primary-dropdown.component.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/dropdown/primary-dropdown/primary-dropdown.component.html","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/menu-services.service.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/menu/selecao-estabelecimentos-modal/selecao-estabelecimentos-modal.component.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/menu/selecao-estabelecimentos-modal/selecao-estabelecimentos-modal.component.html","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/submenus/dynamic-menu/dynamic-menu.component.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/submenus/dynamic-menu/dynamic-menu.component.html","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/submenus/notif-submenu/notif-submenu.component.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/submenus/notif-submenu/notif-submenu.component.html","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/menu/menu-lateral.component.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/menu/menu-lateral.component.html","../../../projects/ngx-sp-auth/src/lib/components/nova-senha/nova-senhacomponent.ts","../../../projects/ngx-sp-auth/src/lib/components/nova-senha/nova-senha.component.html","../../../projects/ngx-sp-auth/src/lib/auth.module.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/menu/list-estab.service.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/model/imenu.model.ts","../../../projects/ngx-sp-auth/src/lib/components/menu-lateral/model/infrausuarioimg.ts","../../../projects/ngx-sp-auth/src/lib/models/custom-propriedades-login.ts","../../../projects/ngx-sp-auth/src/lib/guards/auth-guard.ts","../../../projects/ngx-sp-auth/src/lib/guards/external-login-guard.ts","../../../projects/ngx-sp-auth/src/lib/guards/login-guard.ts","../../../projects/ngx-sp-auth/src/lib/interceptors/auth-aplic.interceptor.ts","../../../projects/ngx-sp-auth/src/lib/interceptors/auth-infra.interceptor.ts","../../../projects/ngx-sp-auth/src/ngx-sp-auth.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { ICustomStorageService } from './models/icustom-storage-service';\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class LibCustomStorageService {\r\n\r\n constructor() { }\r\n\r\n // #region Propriedades Customizadas para o Componente auth-storage.service.ts\r\n\r\n // indica se objeto já está marcado para salvar os dados no local storage.\r\n private __isSaving: boolean = false;\r\n\r\n // #endregion Propriedades Customizadas para o Componente auth-storage.service.ts\r\n\r\n\r\n // #region Métodos recebidos do projeto\r\n\r\n public storedStorageConstructor(): void { };\r\n public storedStorageSaveLocalInstance(): void { };\r\n public storedStorageLogout(): void { }\r\n public storedStorageInitializeAutoStorage(): void { };\r\n\r\n // #endregion Métodos recebidos do projeto\r\n\r\n // #region Métodos Customizadas para o Componente auth-storage.service.ts\r\n\r\n // Método executado no auth-storage.service.ts - método: constructor ()\r\n // Utilizado para inicializações diversas\r\n public storageConstructor(): void {\r\n this.storedStorageConstructor();\r\n }\r\n\r\n // Método executado no auth-storage.service.ts - método: saveLocalInstance ()\r\n // Utilizado para salvar informações no localStorage\r\n public storageSaveLocalInstance(): void {\r\n this.storedStorageSaveLocalInstance();\r\n }\r\n\r\n // Método executado no auth-storage.service.ts - método: logout ()\r\n // Utilizado para inicializar informações no localStorage na logout da aplicação\r\n public storageLogout(): void {\r\n this.storedStorageLogout();\r\n }\r\n\r\n // Método executado no auth-storage.service.ts - método: reCheckLogin ()\r\n // Utilizado para inicializações diversas quando o Login exeutado via Pré Portal\r\n public storageInitializeAutoStorage(): void {\r\n this.storedStorageInitializeAutoStorage();\r\n }\r\n\r\n // Método executado para salvar as propriedades no LocalStorage (não deve ser modificado)\r\n private async __authStorageSaveLocalInstance(): Promise<void> {\r\n\r\n if (this.__isSaving) {\r\n return\r\n }\r\n\r\n this.__isSaving = true\r\n\r\n this.storageSaveLocalInstance();\r\n\r\n this.__authStorageNotSaving()\r\n }\r\n\r\n // Método executado para salvar as propriedades no LocalStorage (não deve ser modificado)\r\n private async __authStorageNotSaving(): Promise<void> {\r\n this.__isSaving = false\r\n }\r\n // #endregion Métodos Customizadas para o Componente auth-storage.service.ts\r\n\r\n public ConfigurarCustomStorage(customStorageService: ICustomStorageService): void {\r\n\r\n //passando propriedades do projeto para a lib\r\n this.__isSaving = customStorageService.isSaving;\r\n\r\n //passando implementação dos métodos do projeto para a lib\r\n this.storedStorageConstructor = customStorageService.storageConstructor;\r\n this.storedStorageInitializeAutoStorage = customStorageService.storageInitializeAutoStorage;\r\n this.storedStorageLogout = customStorageService.storageLogout;\r\n this.storedStorageSaveLocalInstance = customStorageService.storageSaveLocalInstance;\r\n }\r\n\r\n}\r\n","import { HttpBackend, HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Payload } from './../models/payload';\r\n\r\nimport { BehaviorSubject, Observable, take, tap } from 'rxjs';\r\n\r\nimport { Utils } from 'ngx-sp-infra';\r\nimport { RetToken } from '../models/ret-token';\r\nimport { Token } from '../models/token';\r\nimport { LibCustomStorageService } from '../custom/custom-storage.service';\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class AuthStorageService {\r\n\r\n\r\n private readonly _HOSTNAME: any = \"https://siscandesv6.sispro.com.br\";\r\n\r\n private readonly _BASE_URL: string = `${this._HOSTNAME}/SisproErpCloud/Service_Private/Infra/SpInfra2LoginWS/api/LoginSisproERP`; // SpInfra2WS\r\n\r\n private readonly __local_key = 'user_auth_v6';\r\n\r\n // indica se objeto já está marcado para salvar os dados no local storage.\r\n private __isSaving: boolean = false;\r\n\r\n /** Se ainda estamos com uma função rodando para verificar o login do usuário */\r\n private __isCheckingAuth: boolean = false;\r\n\r\n /* Variável para contornar o erro >>> NG0200: Circular dependency\" */\r\n private _httpClient: HttpClient;\r\n\r\n constructor(\r\n private _httpBackend: HttpBackend,\r\n private _customStorageService: LibCustomStorageService\r\n ) {\r\n this._httpClient = new HttpClient(_httpBackend);\r\n\r\n //this._BASE_URL = !environment.production ? this._BASE_URL : `${environment.SpInfra2LoginWS}/LoginSisproERP`;\r\n\r\n // Método com customizações para inicializações da storage\r\n this._customStorageService.storageConstructor()\r\n\r\n const expectedLocalAuthStorage = localStorage.getItem(this.__local_key);\r\n\r\n if (expectedLocalAuthStorage) {\r\n const localAuthStorage = JSON.parse(expectedLocalAuthStorage) as AuthStorageService;\r\n\r\n this.__ip = localAuthStorage.__ip;\r\n this.__tenantId = localAuthStorage.__tenantId;\r\n this.__infraUsuarioId = localAuthStorage.__infraUsuarioId;\r\n this.__infraEstabId = localAuthStorage.__infraEstabId;\r\n this.__infraEstabNome = localAuthStorage.__infraEstabNome;\r\n this.__infraEmpresaId = localAuthStorage.__infraEmpresaId;\r\n this.__infraEmpresaNome = localAuthStorage.__infraEmpresaNome;\r\n this.__user = localAuthStorage.__user;\r\n this.__userName = localAuthStorage.__userName;\r\n this.__tokenPayload = localAuthStorage.__tokenPayload;\r\n this.__authToken = localAuthStorage.__authToken;\r\n this.__dominio = localAuthStorage.__dominio;\r\n this.__isExternalLogin = localAuthStorage.__isExternalLogin;\r\n\r\n this.startLoginCheck();\r\n }\r\n\r\n }\r\n\r\n // #region GETTERS/SETTERS\r\n\r\n public isLoggedInSub = new BehaviorSubject<boolean>(false);\r\n\r\n //ip\r\n private __ip: string = \"\";\r\n\r\n public get ip(): string {\r\n return this.__ip;\r\n }\r\n\r\n public set ip(value: string) {\r\n this.__ip = value;\r\n\r\n if (this.isLoggedInSub.value) {\r\n this.__saveLocalInstance();\r\n }\r\n\r\n }\r\n\r\n //tenantId\r\n private __tenantId: number = 0;\r\n\r\n public get tenantId(): number {\r\n return this.__tenantId;\r\n }\r\n\r\n public set tenantId(value: number) {\r\n this.__tenantId = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n //infraUsuarioId\r\n private __infraUsuarioId: string = \"\";\r\n\r\n public get infraUsuarioId(): string {\r\n return this.__infraUsuarioId;\r\n }\r\n\r\n public set infraUsuarioId(value: string) {\r\n this.__infraUsuarioId = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n // EstabelecimentoID\r\n private __infraEstabId: string = \"\";\r\n\r\n public get infraEstabId(): string {\r\n return this.__infraEstabId;\r\n }\r\n\r\n public set infraEstabId(value: string) {\r\n this.__infraEstabId = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n // NomeEstabelecimento\r\n private __infraEstabNome: string = \"\";\r\n\r\n public get infraEstabNome(): string {\r\n return this.__infraEstabNome;\r\n }\r\n\r\n public set infraEstabNome(value: string) {\r\n this.__infraEstabNome = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n // EmpresaID\r\n private __infraEmpresaId: string = \"\";\r\n\r\n public get infraEmpresaId(): string {\r\n return this.__infraEmpresaId;\r\n }\r\n\r\n public set infraEmpresaId(value: string) {\r\n this.__infraEmpresaId = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n // NomeEmpresa\r\n private __infraEmpresaNome: string = \"\";\r\n\r\n public get infraEmpresaNome(): string {\r\n return this.__infraEmpresaNome;\r\n }\r\n\r\n public set infraEmpresaNome(value: string) {\r\n this.__infraEmpresaNome = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n //user\r\n private __user: string = \"\";\r\n\r\n public get user(): string {\r\n return this.__user;\r\n }\r\n\r\n public set user(value: string) {\r\n this.__user = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n //username\r\n private __userName: string = \"\";\r\n\r\n public get userName(): string {\r\n return this.__userName;\r\n }\r\n\r\n public set userName(value: string) {\r\n this.__userName = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n //tokenPayload\r\n private __tokenPayload!: Payload;\r\n\r\n public get tokenPayload(): Payload {\r\n return this.__tokenPayload;\r\n }\r\n\r\n //authToken\r\n private __authToken: string = \"\";\r\n\r\n public get authToken(): string {\r\n return this.__authToken;\r\n }\r\n\r\n public set authToken(value: string) {\r\n this.__authToken = value;\r\n\r\n if (this.__authToken != '') {\r\n // Utiliza-se a função dos Utils para pegar o segundo valor do Token, separados por um '.'\r\n // e define o __tokenPayload como o objeto resultante do JSON.parse(payloadJson)\r\n const payloadJson: string = Utils.b64DecodeUnicode(this.__authToken.split('.')[1]);\r\n\r\n this.__tokenPayload = JSON.parse(payloadJson);\r\n\r\n this.startLoginCheck();\r\n }\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n /** Domínio */\r\n private __dominio: string = \"\";\r\n\r\n public get dominio(): string {\r\n return this.__dominio;\r\n }\r\n\r\n public set dominio(value: string) {\r\n this.__dominio = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n //url para redirecionamento\r\n private __UrlRedirect: string = \"/\";\r\n\r\n public get urlRedirect(): string {\r\n return this.__UrlRedirect;\r\n }\r\n\r\n public set urlRedirect(value: string) {\r\n this.__UrlRedirect = value;\r\n }\r\n\r\n //indica Login Externo\r\n private __isExternalLogin: boolean = false;\r\n\r\n public get isExternalLogin(): boolean {\r\n return this.__isExternalLogin;\r\n }\r\n\r\n public set isExternalLogin(value: boolean) {\r\n this.__isExternalLogin = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n /** Se é para ignorar o método reCheckLogin */\r\n private __ignoreCheckLogin: boolean = false;\r\n\r\n public get ignoreCheckLogin(): boolean {\r\n return this.__ignoreCheckLogin;\r\n }\r\n\r\n public set ignoreCheckLogin(value: boolean) {\r\n this.__ignoreCheckLogin = value;\r\n\r\n this.__saveLocalInstance();\r\n }\r\n\r\n // #endregion GETTERS/SETTERS\r\n\r\n private async __saveLocalInstance(): Promise<void> {\r\n\r\n if (this.__isSaving) {\r\n return;\r\n }\r\n\r\n this.__isSaving = true;\r\n\r\n localStorage.setItem(this.__local_key, this.toJson());\r\n\r\n // Método com customizações para salvar informações na storage\r\n this._customStorageService.storageSaveLocalInstance();\r\n\r\n this.__notSaving();\r\n }\r\n\r\n private async __notSaving(): Promise<void> {\r\n this.__isSaving = false;\r\n }\r\n\r\n /**\r\n * Salva a instância como JSON seguro, ignorando objetos que não podem se tornar um JSON.\r\n */\r\n public toJson(): string {\r\n const json = `\r\n {\r\n \"__ip\": \"${this.ip}\",\r\n \"__tenantId\": ${this.tenantId},\r\n \"__infraUsuarioId\": \"${this.infraUsuarioId}\",\r\n \"__infraEstabId\": \"${this.infraEstabId}\",\r\n \"__infraEstabNome\": \"${this.infraEstabNome}\",\r\n \"__infraEmpresaId\": \"${this.infraEmpresaId}\",\r\n \"__infraEmpresaNome\": \"${this.infraEmpresaNome}\",\r\n \"__user\": \"${this.user}\",\r\n \"__userName\": \"${this.userName}\",\r\n \"__authToken\": \"${this.authToken}\",\r\n \"__tokenPayload\": ${JSON.stringify(this.tokenPayload)},\r\n \"__dominio\": \"${this.dominio}\",\r\n \"__isExternalLogin\": ${this.isExternalLogin}\r\n }\r\n `;\r\n\r\n return json;\r\n }\r\n\r\n /** Inicia a verificação do login. */\r\n public startLoginCheck() {\r\n\r\n if (!this.__isCheckingAuth) {\r\n this.reCheckLogin();\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Verifica a cada diferença de tempo entre a data atual e a data do token.\r\n */\r\n public async reCheckLogin() {\r\n\r\n if (this.__authToken === undefined || this.__authToken === '' || this.authToken === null || this.authToken === '') {\r\n this.__isCheckingAuth = false;\r\n return;\r\n }\r\n\r\n this.__isCheckingAuth = true;\r\n\r\n let isRenewToken: boolean = false;\r\n let nowDate: number = Math.round(Date.now() / 1000);\r\n\r\n if (this.tokenPayload.exp <= nowDate) {\r\n isRenewToken = true;\r\n }\r\n\r\n let leftTime: number = this.tokenPayload.exp - nowDate\r\n\r\n if (leftTime <= 0) {\r\n isRenewToken = true;\r\n }\r\n\r\n // TODO: Alterar aqui para não deslogar e avisar o usuário para logar denovo.\r\n if (isRenewToken) {\r\n const response = await this.getNewToken();\r\n\r\n if (response !== undefined && response !== null && response != '') {\r\n this.authToken = response;\r\n nowDate = Math.round(Date.now() / 1000);\r\n leftTime = this.tokenPayload.exp - nowDate;\r\n } else {\r\n this.logout();\r\n\r\n return;\r\n }\r\n\r\n }\r\n\r\n if (this.ignoreCheckLogin) {\r\n this.ignoreCheckLogin = false;\r\n } else {\r\n // Método com customizações para inicializações da AutoStorage\r\n this._customStorageService.storageInitializeAutoStorage();\r\n }\r\n\r\n this.isLoggedInSub.next(true);\r\n\r\n setTimeout(this.reCheckLogin.bind(this), leftTime * 1000);\r\n }\r\n\r\n public logout(): void {\r\n this.__isCheckingAuth = false;\r\n this.isLoggedInSub.next(false);\r\n this.__UrlRedirect = \"/\";\r\n\r\n this.__ip = \"\";\r\n this.__tenantId = 0;\r\n this.__infraUsuarioId = \"\";\r\n this.__infraEstabId = \"\";\r\n this.__infraEstabNome = \"\";\r\n this.__infraEmpresaId = \"\";\r\n this.__infraEmpresaNome = \"\";\r\n this.__user = \"\";\r\n this.__userName = \"\";\r\n this.__authToken = \"\";\r\n this.__dominio = \"\";\r\n this.__tokenPayload = {} as Payload;\r\n this.__isExternalLogin = false;\r\n\r\n localStorage.removeItem(this.__local_key);\r\n\r\n // Método com customizações para finalizações da storage\r\n this._customStorageService.storageLogout();\r\n }\r\n\r\n private getNewTokenBack(): Observable<RetToken> {\r\n let token: Token = {\r\n domain: this.__dominio,\r\n user: this.__user,\r\n tenantId: this.tenantId,\r\n token: this.authToken,\r\n infraUsuarioId: this.__infraUsuarioId,\r\n userName: this.__userName\r\n }\r\n\r\n const url = `${this._BASE_URL}/GetNewToken`;\r\n\r\n const headers = new HttpHeaders()\r\n .set('Content-Type', 'application/json')\r\n .set('Authorization',\r\n `Basic ${btoa(`${localStorage.getItem('configServerUser')}:${localStorage.getItem('configServerPassword')}`)}`\r\n );\r\n\r\n return this._httpClient\r\n .post<RetToken>(url, token, { 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n\r\n }),\r\n );\r\n\r\n }\r\n\r\n private getNewToken(): Promise<any> {\r\n\r\n return new Promise((resolve, reject) => {\r\n this.getNewTokenBack().subscribe({\r\n next: response => {\r\n resolve(response.Token);\r\n },\r\n error: error => {\r\n reject(error);\r\n }\r\n });\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Renova o Token quando este estiver vencido.\r\n */\r\n public async renewToken() {\r\n\r\n if (!this.isLoggedInSub || this.__authToken === undefined || this.__authToken === '' || this.authToken === null || this.authToken === '') {\r\n return;\r\n }\r\n\r\n let isRenewToken: boolean = false;\r\n let nowDate: number = Math.round(Date.now() / 1000);\r\n\r\n if (this.tokenPayload.exp <= nowDate) {\r\n isRenewToken = true;\r\n }\r\n\r\n let leftTime: number = this.tokenPayload.exp - nowDate\r\n\r\n if (leftTime <= 0) {\r\n isRenewToken = true;\r\n }\r\n\r\n if (isRenewToken) {\r\n const response = await this.getNewToken();\r\n\r\n if (response !== undefined && response !== null && response != '') {\r\n this.authToken = response;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n private isPrePortal(): boolean {\r\n\r\n // Identifica se a origem é PrePortal\r\n var url = new URL(window.location.href);\r\n var isPrePortal = url.searchParams.get(\"PrePortal\");\r\n\r\n if (isPrePortal != null) {\r\n\r\n if (isPrePortal.toString() == \"true\") {\r\n return true\r\n } else {\r\n return false\r\n }\r\n\r\n } else {\r\n return false\r\n }\r\n\r\n }\r\n\r\n // #region ==========> UTILS <==========\r\n\r\n // #endregion Propriedades Customizadas para o Componente auth-storage.service.ts\r\n\r\n // #region Métodos Customizadas para o Componente auth-storage.service.ts\r\n\r\n // Método executado no auth-storage.service.ts - método: constructor ()\r\n\r\n // #endregion ==========> UTILS <==========\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { ICustomLoginService } from './models/icustom-login-service';\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class LibCustomLoginService {\r\n constructor() { }\r\n\r\n // #region Propriedade Customizadas para o Componente login.component.ts\r\n loginTitle!: string;\r\n loginSubtitle!: string;\r\n loginBackground!: string;\r\n loginLogotipo!: string;\r\n loginAltLogotipo!: string;\r\n loginPageTitle!: string;\r\n loginDesenvDomain!: string;\r\n loginDesenvUser!: string;\r\n loginDesenvPassword!: string;\r\n // #endregion Propriedade Customizadas para o Componente login.component.ts\r\n\r\n // #region Métodos Customizadas para o Componente auth.service.ts\r\n\r\n /**\r\n * Método executado no auth.service.ts - método: login ()\r\n * Utilizado para inicializações diversas\r\n */\r\n public authLogin(): void {\r\n this.storedAuthLogin();\r\n }\r\n\r\n /**\r\n * Método executado no auth.service.ts - método: logout ()\r\n * Utilizado para inicializações diversas\r\n */\r\n public authLogout(): void {\r\n this.storedAuthLogout();\r\n }\r\n\r\n /**\r\n * Método executado no auth.service.ts - método: login ()\r\n * Utilizado para informar o redirecionamento para a tela inicial após o login ok\r\n * \r\n * @param router Objeto de Router que será utilizado\r\n */\r\n public authNavigateToPage(router: Router): void {\r\n router.navigate([\"/home\"]);\r\n }\r\n // #endregion Métodos Customizadas para o Componente auth.service.ts\r\n\r\n // #region UTILS\r\n\r\n public storedAuthLogin!: () => void;\r\n public storedAuthLogout!: () => void;\r\n public storedAuthNavigateToPage!: (router: Router) => void;\r\n\r\n public ConfigurarCustomLogin(customLoginService: ICustomLoginService): void {\r\n\r\n //passando propriedades do projeto para a lib\r\n this.loginTitle = customLoginService.loginTitle\r\n\r\n this.loginSubtitle = customLoginService.loginSubtitle\r\n\r\n this.loginBackground = customLoginService.loginBackground\r\n\r\n this.loginLogotipo = customLoginService.loginLogotipo\r\n\r\n this.loginAltLogotipo = customLoginService.loginAltLogotipo\r\n\r\n this.loginPageTitle = customLoginService.loginPageTitle\r\n\r\n this.loginDesenvDomain = customLoginService.loginDesenvDomain\r\n\r\n this.loginDesenvUser = customLoginService.loginDesenvUser\r\n\r\n this.loginDesenvPassword = customLoginService.loginDesenvPassword\r\n\r\n //passando implementação dos métodos do projeto para a lib\r\n this.storedAuthLogin = customLoginService.authLogin;\r\n this.storedAuthLogout = customLoginService.authLogout;\r\n }\r\n\r\n // #endregion UTILS\r\n}\r\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { LibCustomLoginService } from '../lib/custom/custom-login.service';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map, take, tap } from 'rxjs/operators';\r\n\r\n\r\nimport { Code2Fa } from './models/code-2fa';\r\nimport { ForgottenPasswordForm } from './models/forgotten-password-form';\r\nimport { Login } from './models/login';\r\nimport { LoginForm } from './models/login-form';\r\nimport { NovaSenhaForm } from './models/nova-senha-form';\r\nimport { PasswordRecup } from './models/password-recup';\r\nimport { RetLogin } from './models/ret-login';\r\n\r\nimport { IpServiceService, RetError } from 'ngx-sp-infra';\r\nimport { AuthStorageService } from './storage/auth-storage.service';\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\n\r\nexport class AuthService {\r\n\r\n // #region ==========> PROPERTIES <==========\r\n\r\n // #region PRIVATE\r\n\r\n // private readonly _HOSTNAME: any = window.location.hostname.includes(\"localhost\")\r\n // ? `http://${window.location.hostname}`\r\n // : `https://${window.location.hostname}`;\r\n\r\n private readonly _HOSTNAME: any = \"https://siscandesv6.sispro.com.br\";\r\n\r\n private readonly _BASE_URL: string = `${this._HOSTNAME}/SisproErpCloud/Service_Private/Infra/SpInfra2LoginWS/api/LoginSisproERP`; // SpInfra2WS\r\n private readonly _HTTP_HEADERS = new HttpHeaders().set('Content-Type', 'application/json');\r\n private ip: string = \"undefined\";\r\n private city: string = \"undefined\";\r\n private state: string = \"undefined\";\r\n private country: string = \"undefined\";\r\n\r\n // #endregion PRIVATE\r\n\r\n // #endregion ==========> PROPERTIES <==========\r\n\r\n constructor(\r\n private _httpClient: HttpClient,\r\n private _router: Router,\r\n private _authStorageService: AuthStorageService,\r\n private _customLoginService: LibCustomLoginService,\r\n private _ipServiceService: IpServiceService,\r\n ) {\r\n //this._BASE_URL = !environment.production ? this._BASE_URL : `${environment.SpInfra2LoginWS}/LoginSisproERP`;\r\n this._BASE_URL.includes(\"localhost\") || this._BASE_URL.includes('127.0.0.1')\r\n ? this._BASE_URL\r\n : this._BASE_URL = \"https://siscandesv6.sispro.com.br/SisproErpCloud/Service_Private/Infra/SpInfra2LoginWS/api/LoginSisproERP\";\r\n\r\n this.getParms();\r\n }\r\n\r\n // #region ==========> SERVICE METHODS <==========\r\n\r\n // #region GET\r\n\r\n private getParms(): void {\r\n this.ip = \"undefined\";\r\n\r\n this._ipServiceService.getIPAddress().subscribe({\r\n next: (res: any) => {\r\n this.ip = res.ip;\r\n },\r\n error: (error: any) => {\r\n },\r\n });\r\n\r\n this.city = \"undefined\";\r\n this.state = \"undefined\";\r\n this.country = \"undefined\";\r\n\r\n this._ipServiceService.getDataUser().subscribe({\r\n next: (res: any) => {\r\n this.city = res.city;\r\n this.state = res.region_code;\r\n this.country = res.country_name;\r\n },\r\n error: (error: any) => {\r\n },\r\n });\r\n\r\n }\r\n\r\n private geHostName(): string {\r\n let product: string = window.location.pathname;\r\n\r\n let index: number = product.indexOf(\"/auth/login\");\r\n\r\n if (index != -1) {\r\n product = product.substring(0, index);\r\n } else {\r\n product = \"\";\r\n }\r\n\r\n return this._HOSTNAME + product;\r\n }\r\n\r\n // #endregion GET\r\n\r\n // #region POST\r\n\r\n /** Realiza o login no sistema\r\n * @param login Informações do formulário de login\r\n * @returns Observable com os dados do login realizado, seja erro ou sucesso\r\n */\r\n public login(parmsLogin: LoginForm): Observable<RetLogin> {\r\n\r\n let login: Login = {\r\n usuario: parmsLogin.usuario,\r\n senha: parmsLogin.senha\r\n }\r\n\r\n const params = new HttpParams()\r\n\r\n .set('dominio', parmsLogin.dominio)\r\n .set('urlServidor', this.geHostName())\r\n .set('ip', this.ip)\r\n .set('browse', `${this._ipServiceService.getDataBrowserUser().browser} - ${this._ipServiceService.getDataBrowserUser().so}`)\r\n .set('localization', `${this.city}, ${this.state}, ${this.country}`);\r\n\r\n const url = `${this._BASE_URL}/ValidateLogin`;\r\n\r\n const headers = this._HTTP_HEADERS;\r\n\r\n return this._httpClient\r\n .post<RetLogin>(url, login, { 'params': params, 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n if (response.FeedbackMessage != \"\") {\r\n return;\r\n }\r\n\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n\r\n if (response.InitializePassword) {\r\n //Inicializar password\r\n this._authStorageService.logout();\r\n\r\n } else if (response.InfraInAuthTypeId == 1 && response.InfraIn2FaTypeId != null && response.InfraIn2FaTypeId == 1 && response.Is2FaEnabled) {\r\n //Inicializar Autenticação Local 2 Fatores via Email\r\n this._authStorageService.logout();\r\n\r\n this._authStorageService.ip = this.ip;\r\n this._authStorageService.tenantId = response.TenantId;\r\n this._authStorageService.infraUsuarioId = response.InfraUsuarioId;\r\n this._authStorageService.user = login.usuario;\r\n this._authStorageService.userName = response.UserName;\r\n this._authStorageService.dominio = response.Dominio;\r\n this._authStorageService.isExternalLogin = false;\r\n\r\n } else {\r\n this._authStorageService.ignoreCheckLogin = true;\r\n\r\n this._authStorageService.isLoggedInSub.next(true);\r\n\r\n this._authStorageService.ip = this.ip;\r\n this._authStorageService.tenantId = response.TenantId;\r\n this._authStorageService.infraUsuarioId = response.InfraUsuarioId;\r\n this._authStorageService.infraEstabId = response.EstabelecimentoId;\r\n this._authStorageService.infraEstabNome = response.NomeEstabelecimento;\r\n this._authStorageService.infraEmpresaId = response.EmpresaId;\r\n this._authStorageService.infraEmpresaNome = response.NomeEmpresa;\r\n this._authStorageService.user = login.usuario;\r\n this._authStorageService.userName = response.UserName;\r\n this._authStorageService.authToken = response.Token;\r\n this._authStorageService.dominio = response.Dominio;\r\n this._authStorageService.isExternalLogin = false;\r\n\r\n // Método com customizações para inicializações do Login\r\n this._customLoginService.authLogin();\r\n\r\n if (this._authStorageService.urlRedirect == '' || this._authStorageService.urlRedirect == '/' || this._authStorageService.urlRedirect == '/auth/login') {\r\n // Método com customizações para redirecionamento da tela inicial após login ok\r\n this._customLoginService.authNavigateToPage(this._router);\r\n } else {\r\n this._router.navigate([this._authStorageService.urlRedirect]);\r\n }\r\n\r\n this._authStorageService.urlRedirect = \"/\";\r\n }\r\n\r\n })\r\n );\r\n }\r\n\r\n public loginExternal(dominio: string, user: string, password: string): Observable<boolean> {\r\n\r\n let login: Login = {\r\n usuario: user,\r\n senha: password\r\n }\r\n\r\n const params = new HttpParams()\r\n .set('dominio', dominio);\r\n\r\n const url = `${this._BASE_URL}/ValidateExternalLogin`;\r\n\r\n const headers = this._HTTP_HEADERS;\r\n\r\n return this._httpClient\r\n .post<RetLogin>(url, login, { 'params': params, 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n if (!response.Error) {\r\n this._authStorageService.isLoggedInSub.next(true);\r\n\r\n this._authStorageService.ip = this.ip;\r\n this._authStorageService.tenantId = response.TenantId;\r\n this._authStorageService.infraUsuarioId = response.InfraUsuarioId;\r\n this._authStorageService.infraEstabId = response.EstabelecimentoId;\r\n this._authStorageService.infraEstabNome = response.NomeEstabelecimento;\r\n this._authStorageService.infraEmpresaId = response.EmpresaId;\r\n this._authStorageService.infraEmpresaNome = response.NomeEmpresa;\r\n this._authStorageService.user = login.usuario;\r\n this._authStorageService.userName = response.UserName;\r\n this._authStorageService.authToken = response.Token;\r\n this._authStorageService.dominio = response.Dominio;\r\n this._authStorageService.isExternalLogin = true;\r\n }\r\n\r\n }),\r\n map((response) => {\r\n return response.Error;\r\n }\r\n )\r\n\r\n );\r\n }\r\n\r\n public logout() {\r\n this._authStorageService.logout();\r\n\r\n localStorage.removeItem('configsServerUser');\r\n localStorage.removeItem('configsServerPassword');\r\n\r\n // Método com customizações para inicializações do Logout\r\n this._customLoginService.authLogout();\r\n\r\n this._router.navigate([\"/auth/login\"]);\r\n }\r\n\r\n public validateAuthentication2Fa(code: string): Observable<RetLogin> {\r\n\r\n let Code2Fa: Code2Fa = {\r\n infraUsuarioId: this._authStorageService.infraUsuarioId,\r\n code: code\r\n }\r\n\r\n const params = new HttpParams()\r\n .set('domain', this._authStorageService.dominio)\r\n .set('user', this._authStorageService.user)\r\n .set('userName', this._authStorageService.userName)\r\n\r\n const url = `${this._BASE_URL}/ValidadeLogin2FaWithEmail`;\r\n\r\n const headers = this._HTTP_HEADERS;\r\n\r\n return this._httpClient\r\n .post<RetLogin>(url, Code2Fa, { 'params': params, 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n\r\n this._authStorageService.ignoreCheckLogin = true;\r\n\r\n this._authStorageService.isLoggedInSub.next(true);\r\n\r\n this._authStorageService.ip = this.ip;\r\n this._authStorageService.tenantId = response.TenantId;\r\n this._authStorageService.infraUsuarioId = response.InfraUsuarioId;\r\n this._authStorageService.infraEstabId = response.EstabelecimentoId;\r\n this._authStorageService.infraEstabNome = response.NomeEstabelecimento;\r\n this._authStorageService.infraEmpresaId = response.EmpresaId;\r\n this._authStorageService.infraEmpresaNome = response.NomeEmpresa;\r\n this._authStorageService.user = this._authStorageService.user;\r\n this._authStorageService.userName = response.UserName;\r\n this._authStorageService.authToken = response.Token;\r\n this._authStorageService.dominio = response.Dominio;\r\n this._authStorageService.isExternalLogin = false;\r\n\r\n // Método com customizações para inicializações do Login\r\n this._customLoginService.authLogin();\r\n\r\n if (this._authStorageService.urlRedirect == '' || this._authStorageService.urlRedirect == '/' || this._authStorageService.urlRedirect == '/auth/login') {\r\n // Método com customizações para redirecionamento da tela inicial após login ok\r\n this._customLoginService.authNavigateToPage(this._router);\r\n } else {\r\n this._router.navigate([this._authStorageService.urlRedirect]);\r\n }\r\n\r\n this._authStorageService.urlRedirect = \"/\";\r\n })\r\n\r\n );\r\n }\r\n\r\n public GetNewCode2Fa(): Observable<RetError> {\r\n\r\n const params = new HttpParams()\r\n .set('domain', this._authStorageService.dominio)\r\n .set('user', this._authStorageService.user)\r\n .set('ip', this.ip)\r\n .set('browse', `${this._ipServiceService.getDataBrowserUser().browser} - ${this._ipServiceService.getDataBrowserUser().so}`)\r\n .set('localization', `${this.city}, ${this.state}, ${this.country}`);\r\n\r\n const url = `${this._BASE_URL}/GetNewCode2FaWithEmail`;\r\n\r\n const headers = this._HTTP_HEADERS;\r\n\r\n return this._httpClient\r\n .post<RetLogin>(url, null, { 'params': params, 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n\r\n })\r\n\r\n );\r\n }\r\n\r\n public forgottenPassword(parms: ForgottenPasswordForm): Observable<RetError> {\r\n\r\n this._authStorageService.logout();\r\n\r\n const params = new HttpParams()\r\n .set('domain', parms.dominioFgtPsw)\r\n .set('user', parms.usuarioFgtPsw)\r\n .set('urlServidor', this.geHostName())\r\n .set('ip', this.ip)\r\n .set('browse', `${this._ipServiceService.getDataBrowserUser().browser} - ${this._ipServiceService.getDataBrowserUser().so}`)\r\n .set('localization', `${this.city}, ${this.state}, ${this.country}`);\r\n\r\n const headers = this._HTTP_HEADERS;\r\n\r\n const url = `${this._BASE_URL}/ForgottenPassword`;\r\n\r\n return this._httpClient\r\n .post<RetError>(url, null, { 'params': params, 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n\r\n })\r\n\r\n );\r\n\r\n }\r\n\r\n public recoverPassword(dominio: string, usuario: string, parms: NovaSenhaForm): Observable<RetError> {\r\n\r\n let recupPassword: PasswordRecup = {\r\n password: parms.password,\r\n confirmPassword: parms.confirmPassword,\r\n code: parms.code\r\n }\r\n\r\n const params = new HttpParams()\r\n .set('domain', dominio)\r\n .set('user', usuario)\r\n\r\n const headers = this._HTTP_HEADERS;\r\n\r\n const url = `${this._BASE_URL}/RecoverPassword`;\r\n\r\n return this._httpClient\r\n .post<RetError>(url, recupPassword, { 'params': params, 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n\r\n })\r\n\r\n );\r\n\r\n }\r\n\r\n public createPassword(dominio: string, usuario: string, parms: NovaSenhaForm): Observable<RetError> {\r\n\r\n let recupPassword: PasswordRecup = {\r\n password: parms.password,\r\n confirmPassword: parms.confirmPassword,\r\n code: parms.code\r\n }\r\n\r\n const params = new HttpParams()\r\n .set('domain', dominio)\r\n .set('user', usuario)\r\n\r\n const headers = this._HTTP_HEADERS;\r\n\r\n const url = `${this._BASE_URL}/CreatePassword`;\r\n\r\n return this._httpClient\r\n .post<RetError>(url, recupPassword, { 'params': params, 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n\r\n })\r\n );\r\n }\r\n\r\n // #endregion POST\r\n\r\n // #endregion ==========> SERVICE METHODS <==========\r\n\r\n // #region ==========> UTILS <==========\r\n\r\n // #endregion ==========> UTILS <==========\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { Observable, take, tap } from 'rxjs';\r\n\r\nimport { RetServerConfig } from './ret-server-config';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ServerService {\r\n\r\n\r\n // private readonly _HOSTNAME: any = window.location.hostname.includes(\"localhost\")\r\n // ? `http://${window.location.hostname}`\r\n // : `https://${window.location.hostname}`;\r\n\r\n private readonly _HOSTNAME: any = \"https://siscandesv6.sispro.com.br\";\r\n\r\n private readonly _BASE_URL: string = `${this._HOSTNAME}/SisproErpCloud/Service_Private/Infra/SpInfra2ConfigWS/api/Config`;\r\n private readonly _HTTP_HEADERS = new HttpHeaders().set('Content-Type', 'application/json');\r\n\r\n constructor(private _httpClient: HttpClient) {\r\n this._BASE_URL.includes(\"localhost\") || this._BASE_URL.includes('127.0.0.1')\r\n ? this._BASE_URL\r\n : this._BASE_URL = \"https://siscandesv6.sispro.com.br/SisproErpCloud/Service_Private/Infra/SpInfra2ConfigWS/api/Config\";\r\n }\r\n\r\n // #region GET Server\r\n public getServer(): Observable<RetServerConfig> {\r\n const url = `${this._BASE_URL}/GetConfig`;\r\n\r\n return this._httpClient\r\n .post<RetServerConfig>(url, null, { 'headers': this._HTTP_HEADERS })\r\n .pipe(\r\n take(1),\r\n tap(response => {\r\n localStorage.setItem('configServerUser', response.User);\r\n localStorage.setItem('configServerPassword', response.Password);\r\n })\r\n )\r\n }\r\n // #endregion GET Server\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { IEnvironments } from \"./models/ienvironments\";\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\n/**Service responsável por pegar as opções do menu do projeto em que está sendo utilizada*/\r\nexport class EnvironmentService {\r\n\r\n // URLs que necessitam de autenticação da infra.\r\n needsAuthInfra!: Map<string, string[]>;\r\n\r\n // URLs que necessitam de autenticação do usuário para funcionar.\r\n needsAuthAplic!: Map<string, string[]>;\r\n\r\n production: boolean = false;\r\n hostName: string = \"https://siscandesv6.sispro.com.br\";\r\n\r\n ConfigurarEnvironments(propriedades: IEnvironments): void {\r\n\r\n //passando propriedades do produto para a lib\r\n this.needsAuthAplic = propriedades.needsAuthAplic;\r\n this.needsAuthInfra = propriedades.needsAuthInfra;\r\n }\r\n\r\n}\r\n\r\n","import { Component, OnInit, TemplateRef } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { Router } from '@angular/router';\r\nimport { map, Subscription, take, timer } from 'rxjs';\r\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\r\nimport { ToastrService } from 'ngx-toastr';\r\n\r\nimport { FormUtils, MessageService } from 'ngx-sp-infra';\r\nimport { AuthService } from '../../auth.service';\r\nimport { EnvironmentService } from '../../environments/environments.service';\r\nimport { LibCustomLoginService } from '../../custom/custom-login.service';\r\nimport { ServerService } from '../../server/server.service';\r\nimport { AuthStorageService } from '../../storage/auth-storage.service';\r\n\r\n@Component({\r\n\tselector: 'lib-login',\r\n\ttemplateUrl: './login.component.html',\r\n\tstyleUrls: ['./login.component.scss'],\r\n\tstandalone: false,\r\n\tpreserveWhitespaces: true,\r\n})\r\nexport class LoginComponent implements OnInit {\r\n\r\n\tconstructor(\r\n\t\tprivate _bsModalService: BsModalService,\r\n\t\tprivate _messageService: MessageService,\r\n\t\tprivate _formBuilder: FormBuilder,\r\n\t\tprivate _authService: AuthService,\r\n\t\tprivate _serverService: ServerService,\r\n\t\tprivate _environmentService: EnvironmentService,\r\n\t\tprivate _authStorageService: AuthStorageService,\r\n\t\tpublic _customLoginService: LibCustomLoginService,\r\n\t\tprivate _title: Title,\r\n\t\tprivate _router: Router,\r\n\t\tprivate _toastrService: ToastrService\r\n\t) { }\r\n\r\n\t// #region ==========> PROPERTIES <==========\r\n\r\n\t// #region PRIVATE\r\n\r\n\tprivate idFgtPsw: number = 1;\r\n\r\n\t// #endregion PRIVATE\r\n\r\n\t// #region PUBLIC\r\n\r\n\tpublic modalRef?: BsModalRef;\r\n\r\n\t// Variáveis específicas para funcionalidades padrões dos formulários\r\n\tpublic currentTime: Date = new Date();\r\n\tpublic year: number = this.currentTime.getFullYear();\r\n\r\n\tpublic isLoading: boolean = false;\r\n\tpublic isLoadingSendAuthentication2Fa: boolean = false;\r\n\tpublic showParmsAuthentication2Fa = false;\r\n\tpublic isLoadingGetNewCode: boolean = false;\r\n\r\n\t//propriedades que vão receber os valores do customLoginService ####VERIFICAR DEPOIS####\r\n\r\n\t// @Input() customPropriedadesLogin?: CustomPropriedadesLogin;\r\n\r\n\t// #endregion PUBLIC\r\n\r\n\t// #region Timer\r\n\r\n\tprivate _subscription: Subscription = new Subscription();\r\n\tprivate timerDuration: number = 90;\r\n\tpublic secondsLeft: number = this.timerDuration;\r\n\r\n\tprivate countdown$ = timer(0, 1000).pipe(\r\n\t\ttake(this.timerDuration + 1),\r\n\r\n\t\tmap(secondsElapsed => this.timerDuration - secondsElapsed)\r\n\t);\r\n\r\n\t// #endregion Timer\r\n\r\n\t// #region ==========> FORM BUILDER <==========\r\n\tpublic form: FormGroup = new FormGroup({});\r\n\tpublic formFgtPsw: FormGroup = new FormGroup({});;\r\n\tpublic formAuthentication2Fa: FormGroup = new FormGroup({});;\r\n\r\n\t// Propriedade necessário para que a classe static FormUtils possa ser utilizada no Html\r\n\tpublic get FormUtils(): typeof FormUtils {\r\n\t\treturn FormUtils;\r\n\t}\r\n\r\n\t// #region FORM DATA\r\n\r\n\t// Variáveis específicas para funcionalidades padrões dos formulários (Login)\r\n\tpublic get dominio(): string {\r\n\t\treturn this.form.get('dominio')?.value;\r\n\t}\r\n\r\n\tpublic get usuario(): string {\r\n\t\treturn this.form.get('usuario')?.value;\r\n\t}\r\n\r\n\tpublic get senha(): string {\r\n\t\treturn this.form.get('senha')?.value;\r\n\t}\r\n\r\n\t// Variáveis específicas para funcionalidades padrões dos formulários (RequestRecoverPassword)\r\n\tpublic get dominioFgtPsw(): string {\r\n\t\treturn this.formFgtPsw.get('dominioFgtPsw')?.value;\r\n\t}\r\n\r\n\tpublic get usuarioFgtPsw(): string {\r\n\t\treturn this.formFgtPsw.get('usuarioFgtPsw')?.value;\r\n\t}\r\n\r\n\t// Variáveis específicas para funcionalidades padrões dos formulários (Autenticação 2 Fatores)\r\n\tpublic get code(): string {\r\n\t\treturn this.formAuthentication2Fa.get('code')?.value;\r\n\t}\r\n\r\n\t// #endregion FORM DATA\r\n\r\n\t// #endregion ==========> PROPERTIES <==========\r\n\r\n\tngOnInit(): void {\r\n\r\n\t\tthis._title.setTitle(this._customLoginService.loginPageTitle);\r\n\r\n\t\tif (this._customLoginService.loginTitle != \"\") {\r\n\t\t\tdocument.getElementById(\"title\")!.innerHTML = this._customLoginService.loginTitle;\r\n\t\t}\r\n\r\n\t\tif (this._customLoginService.loginSubtitle != \"\") {\r\n\t\t\tdocument.getElementById(\"subtitle\")!.innerHTML = this._customLoginService.loginSubtitle;\r\n\t\t}\r\n\t\tthis.createForm();\r\n\t}\r\n\r\n\t// #region FORM VALIDATORS\r\n\r\n\t// Método para configuração dos campos de edição do formulário (Login)\r\n\tprivate createForm(): void {\r\n\r\n\t\t// Dados originais de Login\r\n\t\tif (this._environmentService.production) {\r\n\t\t\tthis.form = this._formBuilder.group({\r\n\t\t\t\tdominio: ['', [Validators.required, Validators.maxLength(50)]],\r\n\t\t\t\tusuario: ['', [Validators.required, Validators.maxLength(100)]],\r\n\t\t\t\tsenha: ['', [Validators.required, Validators.maxLength(100)]]\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.form = this._formBuilder.group({\r\n\t\t\t\tdominio: [this._customLoginService.loginDesenvDomain, [Validators.required, Validators.maxLength(50)]],\r\n\t\t\t\tusuario: [this._customLoginService.loginDesenvUser, [Validators.required, Validators.maxLength(100)]],\r\n\t\t\t\tsenha: [this._customLoginService.loginDesenvPassword, [Validators.required, Validators.maxLength(100)]]\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t// Método para configuração dos campos de edição do formulário (RequestRecoverPassword)\r\n\tprivate createFormForgottenPassword(): void {\r\n\r\n\t\tthis.formFgtPsw = this._formBuilder.group({\r\n\t\t\tdominioFgtPsw: ['', [Validators.required, Validators.maxLength(50)]],\r\n\t\t\tusuarioFgtPsw: ['', [Validators.required, Validators.maxLength(100)]],\r\n\t\t});\r\n\r\n\t\tthis.formFgtPsw.get('recoverCdominioFgtPswodeRecPsw')?.setValue('');\r\n\t\tthis.formFgtPsw.get('usuarioFgtPsw')?.setValue('');\r\n\t}\r\n\r\n\t// Método para configuração dos campos de edição do formulário (Autenticação 2 Fatores)\r\n\tprivate createFormAuthentication2Fa(): void {\r\n\r\n\t\tthis.formAuthentication2Fa = this._formBuilder.group({\r\n\t\t\tcode: ['', [Validators.required, Validators.maxLength(6)]],\r\n\t\t});\r\n\r\n\t\tthis.form.get('code')?.setValue('');\r\n\t}\r\n\r\n\t// #endregion FORM VALIDATORS\r\n\r\n\t// #endregion ==========> FORM BUILDER <==========\r\n\r\n\t// #region ==========> SERVICE METHODS <==========\r\n\r\n\t// #region GET\r\n\r\n\t// Obtém a Url do Config Erp\r\n\tpublic geturlErpConfig(): string {\r\n\t\t// verificar depois \r\n\t\treturn `${this._environmentService.hostName}/SisproErpCloud/ConfigErp`;\r\n\t}\r\n\r\n\t/*\r\n\t* Obtém os parâmetros de configuração do servidor para Autenticação Básica de segurança\r\n\t*/\r\n\tpublic getServer(): void {\r\n\r\n\t\tif (this.form.valid) {\r\n\t\t\tthis.isLoading = true;\r\n\r\n\t\t\tthis._serverService.getServer().subscribe({\r\n\t\t\t\tnext: response => {\r\n\t\t\t\t\tthis.logOn();\r\n\t\t\t\t},\r\n\t\t\t\terror: (error) => {\r\n\t\t\t\t\tthis.isLoading = false;\r\n\r\n\t\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\r\n\t\t\t\t\t//pode ser substituido por console.error\r\n\t\t\t\t\tthrow new Error(error)\r\n\t\t\t\t},\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tFormUtils.validateFields(this.form);\r\n\t\t}\r\n\t}\r\n\r\n\t// #endregion GET\r\n\r\n\t// #region POST\r\n\r\n\t// Executa o Login\r\n\tpublic logOn(): void {\r\n\t\tthis._authService.login(this.form.value).subscribe({\r\n\t\t\tnext: (response) => {\r\n\t\t\t\tthis.isLoading = false;\r\n\r\n\t\t\t\tif (response.FeedbackMessage != \"\") {\r\n\t\t\t\t\tthis._toastrService.warning(response.FeedbackMessage,\r\n\t\t\t\t\t\t'',\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttimeOut: 3000,\r\n\t\t\t\t\t\t\textendedTimeOut: 2000\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Incialização de Senha\r\n\t\t\t\tif (response.InitializePassword) {\r\n\t\t\t\t\tlet param: string = btoa(`true$${ this.dominio }$${ this.usuario }$${response.statusSenha}`);\r\n\r\n\t\t\t\t\tthis._router.navigate([`auth/login/novaSenha/${param}`]);\r\n\r\n\t\t\t\t\tthis._toastrService.success(\"Verifique no seu e-mail o código de validação.\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (response.InfraInAuthTypeId == 1 && response.InfraIn2FaTypeId != null && response.InfraIn2FaTypeId == 1 && response.Is2FaEnabled) {\r\n\t\t\t\t\tthis.createFormAuthentication2Fa();\r\n\r\n\t\t\t\t\tthis._subscription = this.countdown$.subscribe(secondsLeft => {\r\n\t\t\t\t\t\tthis.secondsLeft = secondsLeft;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tthis.showParmsAuthentication2Fa = true;\r\n\r\n\t\t\t\t\tthis._toastrService.success(\"Verifique no seu e-mail o código de validação.\");\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\t\t\terror: (error) => {\r\n\t\t\t\tthis.isLoading = false;\r\n\r\n\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\tthrow new Error(error)\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t}\r\n\r\n\t// Envia requisição para esquecer senha\r\n\tpublic sendForgottenPassword(): void {\r\n\r\n\t\tif (this.formFgtPsw.valid) {\r\n\t\t\tthis._serverService.getServer().subscribe({\r\n\t\t\t\tnext: response => {\r\n\t\t\t\t\tthis.forgottenPassword();\r\n\t\t\t\t},\r\n\t\t\t\terror: (error) => {\r\n\t\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\t\tthrow new Error(error)\r\n\t\t\t\t},\r\n\t\t\t})\r\n\r\n\t\t} else {\r\n\t\t\tFormUtils.validateFields(this.formFgtPsw);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Requisição para esquecer senha\r\n\tpublic forgottenPassword(): void {\r\n\r\n\t\tthis._authService.forgottenPassword(this.formFgtPsw.value).subscribe({\r\n\t\t\tnext: (response) => {\r\n\t\t\t\tthis.closeForgottenPasswordModal();\r\n\r\n\t\t\t\tlet param: string = btoa(`false$${this.dominioFgtPsw}$${this.usuarioFgtPsw}$${3}`);\r\n\r\n\t\t\t\tthis._router.navigate([`auth/login/novaSenha/${param}`]);\r\n\r\n\t\t\t\tthis._toastrService.success(\"Verifique no seu e-mail o código de validação.\");\r\n\t\t\t},\r\n\t\t\terror: (error) => {\r\n\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\tthrow new Error(error)\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t}\r\n\r\n\t// Envia requisição para validar código 2 fatores\r\n\tpublic sendCode(): void {\r\n\r\n\t\tif (this.formAuthentication2Fa.valid) {\r\n\t\t\tthis.isLoadingSendAuthentication2Fa = true;\r\n\r\n\t\t\tthis.validateCode();\r\n\t\t} else {\r\n\t\t\tFormUtils.validateFields(this.formAuthentication2Fa);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Validação do código 2 fatores\r\n\tpublic validateCode(): void {\r\n\r\n\t\tthis._authService.validateAuthentication2Fa(this.code).subscribe({\r\n\t\t\tnext: (response) => {\r\n\t\t\t\tthis._subscription.unsubscribe();\r\n\r\n\t\t\t\tthis.isLoadingSendAuthentication2Fa = false;\r\n\t\t\t},\r\n\t\t\terror: (error) => {\r\n\t\t\t\tthis.isLoadingSendAuthentication2Fa = false;\r\n\r\n\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\tthrow new Error(error)\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t}\r\n\r\n\t// Envia requisição para validar código 2 fatores\r\n\tpublic getNewCode(): void {\r\n\t\tthis.isLoadingGetNewCode = true;\r\n\r\n\t\tthis._serverService.getServer().subscribe({\r\n\t\t\tnext: response => {\r\n\t\t\t\tthis._subscription = this.countdown$.subscribe(secondsLeft => {\r\n\t\t\t\t\tthis.secondsLeft = secondsLeft;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.GetNewCode2Fa();\r\n\t\t\t},\r\n\t\t\terror: (error) => {\r\n\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\tthrow new Error(error)\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t}\r\n\r\n\t// Validação do código 2 fatores\r\n\tpublic GetNewCode2Fa(): void {\r\n\r\n\t\tthis._authService.GetNewCode2Fa().subscribe({\r\n\t\t\tnext: (response) => {\r\n\t\t\t\tthis.isLoadingGetNewCode = false;\r\n\r\n\t\t\t\tthis._toastrService.success(\"Enviamos um novo código para o endereço de e-mail vinculado ao seu usuário. Verifique o lixo eletrônico (SPAM) da sua caixa de entrada, caso não tenha encontrado nossa mensagem.\");\r\n\t\t\t},\r\n\t\t\terror: (error) => {\r\n\t\t\t\tthis.isLoadingGetNewCode = false;\r\n\r\n\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\tthrow new Error(error);\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t}\r\n\r\n\t// #endregion POST\r\n\r\n\t// #region UTILIDADES\r\n\r\n\t// Retorno para a tela de login\r\n\tpublic voltar(): void {\r\n\t\tthis._subscription.unsubscribe();\r\n\t\tthis.showParmsAuthentication2Fa = false;\r\n\r\n\t\tthis._authStorageService.logout();\r\n\r\n\t\tthis._router.navigate([\"/auth/login\"]);\r\n\t}\r\n\r\n\t// #endregion UTILIDADES\r\n\r\n\t// #endregion ==========> SERVICE METHODS <==========\r\n\r\n\t// #region ==========> MODALS <==========\r\n\r\n\t// Executa esquecer senha\r\n\tpublic openForgottenPasswordModal(template: TemplateRef<any>): void {\r\n\t\tthis.createFormForgottenPassword();\r\n\r\n\t\tthis.modalRef = this._bsModalService.show(template, {\r\n\t\t\tclass: 'modal-dialog-centered',\r\n\t\t\tignoreBackdropClick: false,\r\n\t\t\tkeyboard: false,\r\n\t\t\tid: this.idFgtPsw\r\n\t\t});\r\n\r\n\t}\r\n\r\n\t// Encerra esquecer senha\r\n\tpublic closeForgottenPasswordModal(): void {\r\n\t\tthis._bsModalService.hide(this.idFgtPsw);\r\n\t}\r\n\r\n\t// #endregion ==========> MODALS <==========\r\n\r\n}\r\n","<div class=\"container-fluid\">\r\n\t<div class=\"row\">\r\n\t\t<!-- Conteúdo da DIV do background -->\r\n\t\t<div class=\"col-md-7\">\r\n\t\t\t<div class=\"background\" style=\"background-image: linear-gradient(to bottom, rgba(10, 44, 81, 0.9), rgba(10, 44, 81, 0.9)), url({{_customLoginService.loginBackground}})\">\r\n\t\t\t\t<div class=\"text-position texto-apresentacao ps-5\">\r\n\t\t\t\t\t<h1 class=\"title\" id=\"title\"></h1>\r\n\t\t\t\t\t<p class=\"subtitle\" id=\"subtitle\"></p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<!-- Conteúdo da DIV de Login -->\r\n\t\t<div class=\"col-md-5\">\r\n\r\n\t\t\t<div class=\"div-size\">\r\n\t\t\t\t<div class=\"logotipo\">\r\n\t\t\t\t\t<img style=\"height: 95px;\" src=\"{{ this._customLoginService.loginLogotipo }}\" alt=\"{{ this._customLoginService.loginAltLogotipo }}\" />\r\n\t\t\t\t</div>\r\n\t\t\t\t<form *ngIf=\"!showParmsAuthentication2Fa; else Authentication2Fa\" [formGroup]=\"form\" class=\"form-position\">\r\n\t\t\t\t\t<div class=\"input-group input-group-lg form-item\">\r\n\t\t\t\t\t\t<span class=\"input-group-text\" id=\"basic-addon1\"\r\n\t\t\t\t\t\t\tstyle=\"padding: 10px; border-radius: 4px 0px 0px 4px\">\r\n\t\t\t\t\t\t\t<img src=\"assets/icons/cloud.svg\" alt=\"cloud icon\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" formControlName=\"dominio\" id=\"dominio\"\r\n\t\t\t\t\t\t\taria-label=\"Sizing example input\" placeholder=\"Domínio\" aria-label=\"Domínio\"\r\n\t\t\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('dominio'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('dominio')\" label=\"Domínio\"></app-field-error-message>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"input-group input-group-lg form-item\">\r\n\t\t\t\t\t\t<span class=\"input-group-text\" id=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\tstyle=\"padding: 10px; border-radius: 4px 0px 0px 4px\">\r\n\t\t\t\t\t\t\t<img src=\"assets/icons/at-sign.svg\" alt=\"at-sign icon\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" formControlName=\"usuario\" id=\"usuario\"\r\n\t\t\t\t\t\t\taria-label=\"Sizing example input\" placeholder=\"Usuário\" aria-label=\"Usuário\"\r\n\t\t\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('usuario'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('usuario')\" label=\"Usuário\"></app-field-error-message>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"input-group input-group-lg form-item\" style=\"margin-bottom: 8px;\">\r\n\t\t\t\t\t\t<span class=\"input-group-text\" id=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\tstyle=\"padding: 10px; border-radius: 4px 0px 0px 4px;\">\r\n\t\t\t\t\t\t\t<img src=\"assets/icons/lock.svg\" alt=\"lock-icon\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<input type=\"password\" class=\"form-control\" formControlName=\"senha\" id=\"senha\"\r\n\t\t\t\t\t\t\taria-label=\"Sizing example input\" placeholder=\"Senha\" aria-label=\"senha\"\r\n\t\t\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('senha'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('senha')\" label=\"Senha\"></app-field-error-message>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"remember-password\">\r\n\t\t\t\t\t<!-- Lembrar Senha\r\n\t\t\t\t\t\t<input id=\"checkboxLembrarSenha\" type=\"checkbox\" />\r\n\t\t\t\t\t\t<label for=\"checkboxLembrarSenha\"> Lembrar minha senha </label>\r\n \t\t\t\t\t-->\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<button [disabled]=\"isLoading\" (click)=\"getServer()\" type=\"submit\"\r\n\t\t\t\t\t\tclass=\"btn btn-primary btn-acessar btn-lg\">\r\n\t\t\t\t\t\t<app-loading-button [isLoading]=\"isLoading\"></app-loading-button>\r\n\t\t\t\t\t\t<span> Acessar </span>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<button type=\"button\" (click)=\"openForgottenPasswordModal(forgottenPasswordModal)\" class=\"forgotten-password\">\r\n\t\t\t\t\t\t<span> Esqueceu sua senha? </span>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</form>\r\n\r\n\t\t\t\t<ng-template #Authentication2Fa>\r\n\t\t\t\t\t<form [formGroup]=\"formAuthentication2Fa\" class=\"form-position\">\r\n\t\t\t\t\t\t<div class=\"input-group input-group-lg form-item mb-3\">\r\n\t\t\t\t\t\t\t<span class=\"input-group-text\" id=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t\tstyle=\"padding: 10px; border-radius: 4px 0px 0px 4px;\">\r\n\t\t\t\t\t\t\t\t<img src=\"assets/icons/lock.svg\" alt=\"lock-icon\" />\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" formControlName=\"code\" id=\"code\"\r\n\t\t\t\t\t\t\t\taria-label=\"Sizing example input\" placeholder=\"Código de 2 fatores\" aria-label=\"Código de 2 fatores\"\r\n\t\t\t\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(formAuthentication2Fa.get('code'))\">\r\n\t\t\t\t\t\t\t<app-field-error-message [control]=\"formAuthentication2Fa.get('code')\" label=\"Código de 2 fatores\"></app-field-error-message>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"row mb-3\">\r\n\t\t\t\t\t\t\t<button (click)=\"voltar()\" type=\"button\" class=\"btn btn-acessar glb-btn-outline-dark-disabled col me-1\">\r\n\t\t\t\t\t\t\t\tVoltar\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<button [disabled]=\"isLoadingSendAuthentication2Fa\" (click)=\"sendCode()\" type=\"button\" class=\"btn btn-acessar btn-primary col ms-1\">\r\n\t\t\t\t\t\t\t\t<app-loading-button [isLoading]=\"isLoadingSendAuthentication2Fa\"></app-loading-button>\r\n\t\t\t\t\t\t\t\tAcessar\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t<button *ngIf=\"secondsLeft == 0; else newCode\" \r\n\t\t\t\t\t\t\t\t[disabled]=\"isLoading\" (click)=\"getNewCode()\" type=\"button\" class=\"btn btn-acessar btn-outline-primary col\">\r\n\t\t\t\t\t\t\t\t<app-loading-button [isLoading]=\"isLoading\"></app-loading-button>\r\n\t\t\t\t\t\t\t\tEnviar novo código\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<ng-template #newCode>\r\n\t\t\t\t\t\t\t\t<p class=\"text-center\">{{ secondsLeft}} {{ secondsLeft == 1 ? 'segundo' : 'segundos' }} para obter novo código</p>\r\n\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</form>\t\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t\r\n\t\t\t\t<div class=\"footer-position\">\r\n\t\t\t\t\t<footer>\r\n\t\t\t\t\t\t<span class=\"footer\"> \r\n\t\t\t\t\t\t\t<a href=\"https://dpo.privacytools.com.br/policy-view/JmGeNlJdw/1/poli%CC%81tica-de-privacidade/pt_BR?s=1685731510066\" target=\"_blank\" class=\"sispro text-primary\"> Política de Privacidade </a>\r\n\t\t\t\t\t\t\t<p class=\"separator\"> | </p>\r\n\t\t\t\t\t\t\t<a href=\"https://dpo.privacytools.com.br/policy-view/Rork35NN2/2/poli%CC%81tica-de-cookies/pt_BR?s=1685731551976\" target=\"_blank\" class=\"sispro text-primary\"> Política de Cookies </a>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class=\"footer\"> Desenvolvido por \r\n\t\t\t\t\t\t\t<a href=\"https://www.sispro.com.br/\" target=\"_blank\" class=\"sispro text-primary\"> sispro s/a </a>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class=\"footer\"> Serviços e Tecnologia da informação © {{ year }} Todos os direitos reservados </span>\r\n\t\t\t\t\t\t\t<div class=\"icons\">\r\n\t\t\t\t\t\t\t\t<a href=\"https://pt-br.facebook.com/SisproERP/\" target=\"_blank\">\r\n\t\t\t\t\t\t\t\t\t<lib-icon class=\"text-primary\" iconName=\"facebook\" iconSize=\"medium-small\"/>\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t<a href=\"https://www.instagram.com/accounts/login/?next=/sispro_software/\" target=\"_blank\">\r\n\t\t\t\t\t\t\t\t\t<lib-icon class=\"text-primary\" iconName=\"instagram\" iconSize=\"medium-small\"/>\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t<a href=\"https://br.linkedin.com/company/sispro\" target=\"_blank\">\r\n\t\t\t\t\t\t\t\t\t<lib-icon class=\"text-primary\" iconName=\"linkedin\" iconSize=\"medium-small\"/>\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t<div class=\"d-flex justify-content-center\">\r\n\t\t\t\t\t\t\t\t<a [href]=\"geturlErpConfig()\" style=\"text-decoration: none; font-size: 12px;\">\r\n\t\t\t\t\t\t\t\t\tConfigurar ERP\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</footer>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n<!-- Template do modal de senha esquecida -->\r\n<ng-template #forgottenPasswordModal>\r\n\t<form [formGroup]=\"formFgtPsw\">\r\n\t\t<div class=\"modal-content\" style=\"box-shadow: 2px 2px 5px 0px rgba(0,0,0,0.5);\">\r\n\t\t\t<div class=\"modal-header p-3\">\r\n\t\t\t\t<h4 class=\"modal-title\"> Recuperação de senha </h4>\r\n\t\t\t\t<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\r\n\t\t\t\t\t(click)=\"closeForgottenPasswordModal()\">\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"modal-body\">\r\n\t\t\t\t<label for=\"inputDominioFgtPsw\" class=\"input-label\"> Domínio <span class=\"text-danger\">*</span></label>\r\n\t\t\t\t<input type=\"text\" id=\"inputDominioFgtPsw\" formControlName=\"dominioFgtPsw\"\r\n\t\t\t\t\tclass=\"form-control input-text\" aria-label=\"Sizing example input\" aria-label=\"Domínio\"\r\n\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(formFgtPsw.get('dominioFgtPsw'))\">\r\n\t\t\t\t<app-field-error-message [control]=\"formFgtPsw.get('dominioFgtPsw')\" label=\"Domínio\"></app-field-error-message>\t\t\t\t\r\n\r\n\t\t\t\t<label for=\"inputUsuarioFgtPsw\" class=\"input-label\"> Usuário <span class=\"text-danger\">*</span></label>\r\n\t\t\t\t<input type=\"text\" id=\"inputUsuarioFgtPsw\" formControlName=\"usuarioFgtPsw\"\r\n\t\t\t\t\tclass=\"form-control input-text\" aria-label=\"Sizing example input\" aria-label=\"Usuário\"\r\n\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(formFgtPsw.get('usuarioFgtPsw'))\">\r\n\t\t\t\t<app-field-error-message [control]=\"formFgtPsw.get('usuarioFgtPsw')\" label=\"Usuário\"></app-field-error-message>\t\t\t\t\r\n\t\t\r\n\t\t\t</div>\r\n\t\t\t<div class=\"modal-footer\">\r\n\t\t\t\t<button type=\"button\" class=\"btn glb-btn-dark-disabled modal-button\" (click)=\"closeForgottenPasswordModal()\">\r\n\t\t\t\t\t<span> Cancelar </span>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button type=\"button\" class=\"btn btn-primary modal-button\" (click)=\"sendForgottenPassword();\">\r\n\t\t\t\t\t<span> Continuar </span>\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t</div>\r\n\t</form>\r\n</ng-template>\r\n","import { Injectable } from \"@angular/core\";\r\nimport { IMenuItemStructure } from './../components/menu-lateral/model/imenu-item-structure.model';\r\nimport { IMenuConfig } from \"./models/imenu-config\";\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\n/**Service responsável por pegar as opções do menu do projeto em que está sendo utilizada*/\r\nexport class MenuConfigService {\r\n\r\n private _menuOptions: IMenuItemStructure[] = [];\r\n\r\n /** Indica se o menu é estático ou dinâmico. */\r\n public _isMenuStatic: boolean = false;\r\n\r\n /** Obtém as opções do menu. */\r\n public get menuOptions(): IMenuItemStructure[] { return this._menuOptions; }\r\n public set menuOptions(value: IMenuItemStructure[]) { this._menuOptions = value; }\r\n\r\n\r\n public storedInitializeMenu!: (currentRoute: string, customList?: IMenuItemStructure[]) => IMenuItemStructure[];\r\n public storedUpdateRouteSelection!: (currentRoute: string, currentList: IMenuItemStructure[]) => IMenuItemStructure[];\r\n public storedInitializeMenuDropdown!: (primaryDropdownList: Array<any>) => any[];\r\n\r\n\r\n public menu: IMenuItemStructure[] = []\r\n public menuDropdown: any[] = [];\r\n\r\n\r\n /** Inicializa as opções do menu com base na rota atual e em uma lista personalizada (opcional).\r\n * @param currentRoute A rota atual da aplicação\r\n * @param customList Uma lista personalizada de opções de menu (opcional).\r\n * @returns As opções do menu inicializadas.\r\n */\r\n\r\n public setMenuStatic(isStaticMenu: boolean) {\r\n this._isMenuStatic = isStaticMenu;\r\n }\r\n\r\n public initializeMenu(currentRoute: string, customList?: IMenuItemStructure[]): IMenuItemStructure[] {\r\n if (this.storedInitializeMenu) {\r\n this.menu = this.storedInitializeMenu(currentRoute, customList);\r\n }\r\n return this.menu;\r\n }\r\n\r\n\r\n public updateRouteSelection(currentRoute: string, currentList: IMenuItemStructure[]): IMenuItemStructure[] {\r\n currentList.forEach((item) => {\r\n if (item.children) { item.children.forEach(child => { child.isSelected = currentRoute.includes(child.route); }) }\r\n\r\n const anyChildSelected = item.children ? item.children.some(child => child.isSelected === true) : false;\r\n item.isSelected = false;\r\n\r\n if (!item.children && currentRoute.includes(item.route)) { item.isSelected = true; }\r\n else if (item.children && anyChildSelected) { item.isSelected = true; }\r\n })\r\n\r\n return currentList;\r\n }\r\n\r\n /** Inicializa as opções do menu dropdown com base em uma lista personalizada (opcional).\r\n * @param primaryDropdownList Uma lista personalizada de opções do dropdown (opcional).\r\n * @returns As opções do dropdown inicializadas.\r\n */\r\n public initializeMenuDropdown(primaryDropdownList: Array<any>): any[] {\r\n if (this.storedInitializeMenuDropdown) {\r\n this.menuDropdown = this.storedInitializeMenuDropdown(primaryDropdownList);\r\n }\r\n return this.menuDropdown;\r\n }\r\n\r\n public ConfigurarMenuConfig(menuConfig: IMenuConfig): void {\r\n\r\n //passando propriedades do projeto para a lib\r\n this._menuOptions = menuConfig.menuOptions;\r\n this._isMenuStatic = menuConfig.isMenuStatic;\r\n\r\n //passando implementação dos métodos do projeto para a lib\r\n this.storedInitializeMenu = menuConfig.initializeMenu;\r\n this.storedInitializeMenuDropdown = menuConfig.initializeMenuDropdown;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\nimport { IMenuItemStructure } from '../components/menu-lateral/model/imenu-item-structure.model';\r\nimport { IMenu } from '../components/menu-lateral/model/imenu.model';\r\nimport { AuthStorageService } from '../storage/auth-storage.service';\r\nimport { MenuConfigService } from './menu-config.service';\r\nimport { ICustomMenuService } from './models/icustom-menu-service';\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class LibCustomMenuService {\r\n\r\n public menuService!: ICustomMenuService;\r\n\r\n // #region Propriedade Customizadas do Menu\r\n\r\n public menuDynamic: boolean = false;\r\n\r\n public moduleName: string = \"\";\r\n\r\n public moduleImg: string = \"\";\r\n\r\n public moduleSvg: string = \"\";\r\n\r\n public themeColor: string = \"\";\r\n\r\n // #endregion Propriedade Customizadas do Menu\r\n\r\n // #region Propriedade do Menu\r\n\r\n private readonly _MENU_BASE_URL: string = \"https://siscandesv6.sispro.com.br/SisproErpCloud/Service_Private/Infra/SpInfra2ErpWS/api\";\r\n\r\n private currentURL: string = \"\";\r\n private _menuItems: IMenuItemStructure[] = [];\r\n private menuList: IMenu[] = [];\r\n private menuLateralUpdated: IMenuItemStructure[] = [];\r\n //verificar esse cara aqui\r\n public menuConfig: MenuConfigService;\r\n\r\n /** Obtém as opções do menu. */\r\n public get menuItems(): IMenuItemStructure[] {\r\n return this._menuItems;\r\n }\r\n\r\n public set menuItems(value: IMenuItemStructure[]) {\r\n this._menuItems = value;\r\n }\r\n\r\n // ! Definição do BehaviorSubject: responsável principal da emissão do evento\r\n private empresaId: BehaviorSubject<{ estabelecimentoID: string, empresaID: string }> = new BehaviorSubject<{ estabelecimentoID: string, empresaID: string }>({ estabelecimentoID: \"\", empresaID: \"\" });\r\n public applyEmpresa$: Observable<{ estabelecimentoID: string, empresaID: string }> = this.empresaId.asObservable();\r\n\r\n public setEmpresa(value: { estabelecimentoID: string, empresaID: string }) { this.empresaId.next(value) }\r\n // ! Definição do BehaviorSubject: responsável principal da emissão do evento\r\n\r\n // #endregion Propriedade do Menu\r\n\r\n private storedMenuStaticOnInit?: () => void;\r\n private storedMenuDynamicOnInit?: () => void;\r\n private storedMenuopenExpansibleMenu?: (ref: HTMLDivElement) => void;\r\n\r\n\r\n constructor(\r\n private _menuConfig: MenuConfigService,\r\n private _authStorageService: AuthStorageService,\r\n private _router: Router,\r\n\r\n ) {\r\n // inicializações do Menu Dinâmico\r\n this.currentURL = this._router.url;\r\n this.menuConfig = _menuConfig;\r\n }\r\n\r\n public ConfigurarCustomMenuService(RealcustomMenuService: ICustomMenuService): void {\r\n\r\n //passando propriedades do projeto para a lib\r\n this.menuDynamic = RealcustomMenuService.menuDynamic;\r\n this.moduleName = RealcustomMenuService.moduleName;\r\n this.moduleImg = RealcustomMenuService.moduleImg;\r\n this.moduleSvg = RealcustomMenuService.moduleSvg;\r\n this.themeColor = RealcustomMenuService.themeColor;\r\n\r\n //passando implementação dos métodos do projeto para a lib\r\n this.storedMenuStaticOnInit = RealcustomMenuService.menuStaticOnInit;\r\n this.storedMenuopenExpansibleMenu = RealcustomMenuService.menuopenExpansibleMenu;\r\n this.storedMenuDynamicOnInit = RealcustomMenuService.menuDynamicOnInit;\r\n }\r\n\r\n // #region - Métodos Customizadas para o Menu dinâmico\r\n\r\n // Método executado no menu-lateral.component.ts - método: onInit ()\r\n // Utilizado para inicializações diversas\r\n public menuDynamicOnInit(): void {\r\n if (this.storedMenuDynamicOnInit) {\r\n this.storedMenuDynamicOnInit();\r\n }\r\n }\r\n\r\n // Método executado no menu-lateral.component.ts - método: onInit ()\r\n // Utilizado para inicializações diversas\r\n public menuStaticOnInit(): void {\r\n if (this.storedMenuStaticOnInit) {\r\n this.storedMenuStaticOnInit();\r\n }\r\n }\r\n\r\n // Método executado no menu-lateral.component.ts - método: openExpansibleMenu()\r\n // Utilizado para inicializações ao Exoandir a opção de Menu\r\n public menuopenExpansibleMenu(ref: HTMLDivElement): void {\r\n if (this.storedMenuopenExpansibleMenu) {\r\n this.storedMenuopenExpansibleMenu(ref);\r\n }\r\n }\r\n\r\n /** Método que deve ser chamado na seleção de um novo estabelecimento, ele atualizará os valores do nosso BehaviorSubject para que possamos utilizá-lo em outras partes do sistema. */\r\n public emitEstabelecimentoEvent(): void {\r\n\r\n this.setEmpresa({\r\n estabelecimentoID: this._authStorageService.infraEstabId,\r\n empresaID: this._authStorageService.infraEmpresaId\r\n });\r\n }\r\n // #endregion - Métodos Customizadas para o Menu dinâmico\r\n}\r\n","\r\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\n//import { environment } from '../../../../environments/environments';\r\n// import { ProjectUtilservice } from 'src/app/project/utils/project-utils.service';\r\n\r\n@Component({\r\n selector: 'app-secondary-dropdown',\r\n templateUrl: './secondary-dropdown.component.html',\r\n styleUrls: ['./secondary-dropdown.component.scss'],\r\n})\r\nexport class SecondaryDropdownComponent implements OnInit {\r\n\r\n @Input() public modulo: any = { id: null, icon: null, label: null, URL: null, secondary_level: null }\r\n ;\r\n @Output() public backPrimaryDropdown = new EventEmitter<boolean>();\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n public backToPrimary() {\r\n this.backPrimaryDropdown.emit(true);\r\n }\r\n\r\n public redirectToModulo(modulo: string): void {\r\n const url: string = `https://siscandesv6.sispro.com.br/SisproErpCloud/${modulo}`;\r\n\r\n window.open(url, '_blank');\r\n }\r\n\r\n}\r\n","<div class=\"d-flex flex-row\">\r\n <button class=\"chevron d-flex m-0 p-0 align-items-start\" (click)=\"backToPrimary()\"> \r\n <lib-icon iconName=\"seta-esquerda\" iconSize=\"small\"/>\r\n </button>\r\n\r\n <div class=\"d-flex flex-column flex-row\">\r\n <li *ngIf=\"modulo != null\">\r\n <img class=\"ms-1 mb-2\" src=\"{{ modulo.icon }}\" alt=\"{{ modulo.label }}\">\r\n <span>{{ modulo.label }}</span>\r\n </li>\r\n <div *ngIf=\"modulo && modulo.secondary_level != null\">\r\n <li *ngFor=\"let moduloItem of modulo.secondary_level;\" (click)=\"redirectToModulo(moduloItem.URL)\">\r\n <a class=\"dropdown-item mb-2 ms-2\">\r\n <img src=\"{{ moduloItem.icon }}\" alt=\"{{ moduloItem.label }}\">\r\n {{ moduloItem.label }}\r\n </a>\r\n <li>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input, OnInit, TemplateRef } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { LibCustomMenuService } from '../../../../custom/custom-menu.service';\r\n//import { ProjectUtilservice } from 'src/app/project/utils/project-utils.service';\r\n//import { environment } from '../../../../environments/environments';\r\n\r\n@Component({\r\n selector: 'app-primary-dropdown',\r\n templateUrl: './primary-dropdown.component.html',\r\n styleUrls: ['./primary-dropdown.component.scss'],\r\n})\r\nexport class PrimaryDropdownComponent implements OnInit {\r\n\r\n public selectDataState!: boolean;\r\n public modulo: any;\r\n\r\n @Input() buttonWasClicked: Observable<boolean> = new Observable;\r\n\r\n public primaryDropdown: Array<any> = [\r\n ]\r\n\r\n constructor(\r\n private _customMenuService: LibCustomMenuService,\r\n //private _projectUtilservice: ProjectUtilservice\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.buttonWasClicked.subscribe(() => { this.selectDataState = true });\r\n\r\n // Resolver colisão de eventos\r\n if (this._customMenuService.menuDynamic) {\r\n\r\n if (!this._customMenuService.menuConfig) {\r\n setTimeout(() => {\r\n this.primaryDropdown = this._customMenuService.menuConfig.initializeMenuDropdown(this.primaryDropdown);\r\n }, 2000);\r\n } else {\r\n this.primaryDropdown = this._customMenuService.menuConfig.initializeMenuDropdown(this.primaryDropdown);\r\n }\r\n\r\n } else {\r\n this.primaryDropdown = this._customMenuService.menuConfig.initializeMenuDropdown(this.primaryDropdown);\r\n }\r\n\r\n }\r\n\r\n public openDropdown(modulo: any, desiredDropdown: TemplateRef<any>) {\r\n this.modulo = modulo;\r\n\r\n if (desiredDropdown == null) {\r\n this.selectDataState = true;\r\n } else {\r\n this.selectDataState = false;\r\n }\r\n }\r\n\r\n public onClickedOutside(e: Event, ref: HTMLDivElement) {\r\n if (this.selectDataState = false) {\r\n this.selectDataState = true;\r\n }\r\n }\r\n\r\n public backToPrimary(data: boolean) {\r\n this.selectDataState = true;\r\n }\r\n\r\n public redirectToPrePortal(): void {\r\n const url: string = `https://siscandesv6.sispro.com.br/SisproErpCloud/PrePortal`;\r\n\r\n window.open(url, '_blank');\r\n }\r\n\r\n public redirectToModulo(modulo: string): void {\r\n const url: string = `https://siscandesv6.sispro.com.br/SisproErpCloud/${modulo}`;\r\n\r\n window.open(url, '_blank');\r\n }\r\n\r\n}\r\n","<div class=\"p-2\">\r\n <div *ngIf=\"selectDataState; else secondary_dropdown\" class=\"mb-2 w-100\">\r\n <li *ngFor=\"let modulo of primaryDropdown\" (click)=\"(modulo.secondary_level != null ? openDropdown(modulo, secondary_dropdown) : redirectToModulo(modulo.URL))\">\r\n <a class=\"dropdown-item mb-2\">\r\n <img src=\"{{ modulo.icon }}\" alt=\"{{ modulo.label }}\">\r\n {{ modulo.label }}\r\n </a>\r\n </li>\r\n <hr class=\"dropdown-divider\">\r\n <li>\r\n <a class=\"dropdown-item link-portal mt-2\" (click)=\"redirectToPrePortal()\" target=\"_blank\">Portal Sispro</a>\r\n </li>\r\n </div>\r\n\r\n <ng-template #secondary_dropdown>\r\n <div #secondary_ref (clickOutside)=\"onClickedOutside($event, secondary_ref)\">\r\n <app-secondary-dropdown [modulo]=\"this.modulo\" (backPrimaryDropdown)=\"backToPrimary($event)\"></app-secondary-dropdown>\r\n </div>\r\n </ng-template>\r\n</div>","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { Observable, Subject, take, tap } from 'rxjs';\r\n\r\nimport { RetError, RetEstabelecimentosModal } from 'ngx-sp-infra';\r\n// import { environment } from '../../environments/environments';\r\nimport { AuthStorageService } from '../../storage/auth-storage.service';\r\n\r\nimport { RetEstabelecimentoSession } from './model/ret-estabelecimento-session';\r\nimport { RetInfraUsuarioEmail } from './model/ret-infrausuarioemail';\r\nimport { RetInfraUsuarioImg } from './model/ret-infrausuarioimg';\r\nimport { Usuario_IMG } from './model/usuario-img';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MenuServicesService {\r\n private readonly _BASE_URL: string = \"https://siscandesv6.sispro.com.br/SisproErpCloud/Service_Private/Infra/SpInfra2ErpWS/api\"; // SpInfra2AplicWS\r\n private readonly _HTTP_HEADERS = new HttpHeaders().set('Content-Type', 'application/json');\r\n\r\n constructor(\r\n private _authStorageService: AuthStorageService,\r\n private _httpClient: HttpClient\r\n ) {\r\n //verificar se é a melhor solucão\r\n //this._BASE_URL = !environment.production ? this._BASE_URL : `${environment.SpInfra2ErpWS}`;\r\n }\r\n\r\n // #region ==========> SERVICES <==========\r\n\r\n // #region PREPARATION\r\n\r\n // #region Menu: Usuário\r\n // [...]\r\n // #endregion Menu: Usuário\r\n\r\n // #region Menu: Estabelecimentos\r\n public getEstabelecimentosModalList(usuarioID: string, pesquisa: string): Observable<RetEstabelecimentosModal> {\r\n const params = new HttpParams()\r\n .set('pesquisa', pesquisa)\r\n\r\n const headers = new HttpHeaders()\r\n .set('Content-Type', 'application/json');\r\n\r\n const url = `${this._BASE_URL}/InfraEstabelecimento/GetEstabelecimentosModal`;\r\n\r\n return this._httpClient\r\n .get<RetEstabelecimentosModal>(url, { 'params': params, 'headers': headers })\r\n .pipe(\r\n take(1),\r\n tap(response => {\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n })\r\n )\r\n }\r\n // #endregion Menu: Estabelecimentos\r\n\r\n // #endregion PREPARATION\r\n\r\n // #region GET\r\n\r\n // #region Menu: Usuário\r\n public getImagemMenu(): Observable<RetInfraUsuarioImg> {\r\n\r\n const url = `${this._BASE_URL}/InfraUsuario/GetImagemMenu`;\r\n\r\n return this._httpClient\r\n .get<RetInfraUsuarioImg>(url, { 'headers': this._HTTP_HEADERS })\r\n .pipe(\r\n take(1),\r\n tap(response => {\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n\r\n this.saveImageToStorage(response.InfraUsuarioImg.Imagem, response.InfraUsuarioImg.FileName);\r\n })\r\n )\r\n }\r\n // #endregion Menu: Usuário\r\n\r\n // #region Menu: Estabelecimentos\r\n public getEstabelecimentoSession(estabID: string): Observable<RetEstabelecimentoSession> {\r\n const params = new HttpParams()\r\n .set('id', estabID);\r\n\r\n const url = `${this._BASE_URL}/InfraEstabelecimento/GetEstabelecimentoSession`;\r\n\r\n return this._httpClient\r\n .get<RetEstabelecimentoSession>(url, { 'params': params, 'headers': this._HTTP_HEADERS })\r\n .pipe(\r\n take(1),\r\n tap(response => {\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n })\r\n )\r\n }\r\n // #endregion Menu: Estabelecimentos\r\n\r\n // #region Get Usuario Email\r\n public getUsuarioEmail(): Observable<RetInfraUsuarioEmail> {\r\n const url = `${this._BASE_URL}/InfraUsuario/GetUsuarioEmail`;\r\n\r\n return this._httpClient\r\n .get<RetInfraUsuarioEmail>(url, { 'headers': this._HTTP_HEADERS })\r\n .pipe(\r\n take(1),\r\n tap(response => {\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n })\r\n )\r\n }\r\n // #endregion Get Usuario Email\r\n\r\n // #endregion GET\r\n\r\n // #region CREATE\r\n // [...]\r\n // #endregion CREATE\r\n\r\n // #region UPDATE\r\n\r\n // #region Menu: Usuário\r\n public updateLastLogEstabID(estabID: string): Observable<RetError> {\r\n const params = new HttpParams()\r\n .set('estabID', estabID)\r\n\r\n const url = `${this._BASE_URL}/InfraUsuario/UpdateLastSelectedEstabelecimento`;\r\n\r\n return this._httpClient\r\n .post<RetError>(url, null, { 'params': params, 'headers': this._HTTP_HEADERS })\r\n .pipe(\r\n take(1),\r\n tap(response => {\r\n if (response.Error) { throw Error(response.ErrorMessage); }\r\n })\r\n )\r\n }\r\n // #endregion Menu: Usuário\r\n\r\n // #region Menu: Estabelecimentos\r\n public defineDefaultEstabelecimento(estabID: string, usuarioID: string, isDefault: boolean): Observable<RetError> {\r\n const params = new HttpParams()\r\n .set('estabID', estabID)\r\n .set('isDefault', isDefault)\r\n\r\n const url = `${this._BASE_URL}/InfraEstabelecimento/DefineDefaultEstab`;\r\n\r\n return this._httpClient\r\n .post<RetError>(url, null, { 'params': params, 'headers': this._HTTP_HEADERS })\r\n .pipe(\r\n take(1),\r\n tap(response => {\r\n if (response.Error) {\r\n throw Error(response.ErrorMessage);\r\n }\r\n })\r\n )\r\n }\r\n // #endregion Menu: Estabelecimentos\r\n\r\n // #endregion UPDATE\r\n\r\n // #region DELETE\r\n // [...]\r\n // #endregion DELETE\r\n\r\n // #endregion ==========> SERVICES <==========\r\n\r\n\r\n // #region ==========> UTILITIES <==========\r\n private _menuFooterImg: Usuario_IMG | null = null;\r\n\r\n public getMenuFooterImg(): Usuario_IMG | null {\r\n const cachedFooterImg = JSON.parse(localStorage.getItem('menuFooterImg')!);\r\n\r\n if (cachedFooterImg) { return cachedFooterImg; }\r\n return this._menuFooterImg;\r\n }\r\n public setMenuFooterImg(value: Usuario_IMG): void {\r\n this._menuFooterImg = value;\r\n localStorage.setItem('menuFooterImg', JSON.stringify(value));\r\n }\r\n\r\n\r\n public saveImageToStorage(footerImgSrc: string, footerImgName: string): void {\r\n this.setMenuFooterImg({ USUARIOID: this._authStorageService.infraUsuarioId, FILENAME: footerImgName, FILE: footerImgSrc });\r\n }\r\n\r\n\r\n // #region NewImg Event\r\n\r\n // Implementação de lógica vista no link: https://hasangalakdinu.medium.com/how-to-call-a-function-in-another-component-angular-using-rxjs-3f2e85920705\r\n private _subject = new Subject<any>();\r\n\r\n public newUserImageEvent(value: any): void {\r\n this._subject.next(value);\r\n }\r\n\r\n public getNewUserImageEvent(): Observable<any> {\r\n return this._subject.asObservable();\r\n }\r\n\r\n // #endregion NewImg Event\r\n\r\n // #endregion ==========> UTILITIES <==========\r\n\r\n}\r\n","import { Component, EventEmitter, OnInit, Output, TemplateRef } from '@angular/core';\r\n\r\nimport { BsModalService } from 'ngx-bootstrap/modal';\r\n\r\nimport { InfraEstabelecimentoFavoritoDefault, MessageService } from 'ngx-sp-infra';\r\n//import { ProjectUtilservice } from 'src/app/project/utils/project-utils.service';\r\nimport { AuthStorageService } from '../../../../storage/auth-storage.service';\r\n\r\nimport { LibCustomMenuService } from '../../../../custom/custom-menu.service';\r\nimport { MenuServicesService } from '../../menu-services.service';\r\n\r\n\r\n@Component({\r\n selector: 'selecao-estabelecimentos-modal',\r\n templateUrl: './selecao-estabelecimentos-modal.component.html',\r\n styleUrls: ['./selecao-estabelecimentos-modal.component.scss'],\r\n})\r\nexport class SelecaoEstabelecimentosModalComponent implements OnInit {\r\n constructor(\r\n private _authStorageService: AuthStorageService,\r\n private _bsModalService: BsModalService,\r\n private _customMenuService: LibCustomMenuService,\r\n private _menuServicesService: MenuServicesService,\r\n private _messageService: MessageService,\r\n //private _projectUtilService: ProjectUtilservice\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.getEstabelecimentos(\"\");\r\n }\r\n\r\n // #region ==========> PROPERTIES <==========\r\n\r\n // #region PRIVATE\r\n // [...]\r\n // #endregion PRIVATE\r\n\r\n // #region PUBLIC\r\n @Output() public onClose = new EventEmitter<any>();\r\n @Output() public onSelected = new EventEmitter<any>();\r\n\r\n public $estabelecimentosList: InfraEstabelecimentoFavoritoDefault[] = [];\r\n\r\n public page: number = 1;\r\n public itemsPerPage: number = 10;\r\n\r\n public response_messages = {\r\n 'emptyMessage': 'Consulta não retornou registros...',\r\n 'totalMessage': 'Linhas encontradas.'\r\n };\r\n // #endregion PUBLIC\r\n\r\n // #endregion ==========> PROPERTIES <==========\r\n\r\n\r\n // #region ==========> FORM BUILDER <==========\r\n\r\n // #region DATA\r\n // [...]\r\n // #endregion DATA\r\n\r\n // #region VALIDATORS\r\n // [...]\r\n // #endregion VALIDATORS\r\n\r\n // #endregion ==========> FORM BUILDER <==========\r\n\r\n\r\n // #region ==========> SERVICES <==========\r\n\r\n // #region PREPARATION\r\n\r\n public refreshList(pesquisa: string): void {\r\n this.getEstabelecimentos(pesquisa);\r\n }\r\n\r\n private getEstabelecimentos(pesquisa: string = \"\"): void {\r\n this._menuServicesService.getEstabelecimentosModalList(this._authStorageService.infraUsuarioId, pesquisa).subscribe({\r\n next: response => {\r\n this.$estabelecimentosList = response.InfraEstabelecimentos;\r\n\r\n this.resetPagination(this.$estabelecimentosList);\r\n\r\n if (response.InfraEstabelecimentos.length == 0) {\r\n this._messageService.showAlertDanger(this.response_messages.emptyMessage);\r\n }\r\n },\r\n error: error => {\r\n //this._projectUtilService.showHttpError(error);\r\n this._messageService.showAlertDanger(error);\r\n throw new Error(error);\r\n\r\n this.$estabelecimentosList = [];\r\n }\r\n })\r\n }\r\n\r\n // #endregion PREPARATION\r\n\r\n // #region GET\r\n // [...]\r\n // #endregion GET\r\n\r\n // #region CREATE OR UPDATE\r\n\r\n /**\r\n * Atualiza o estado do Estabelecimento, informando se ele é Padrão ou não.\r\n * @param estabID ID do Estabelecimento a ser alterado\r\n * @param isDefault Informa se ele é Padrão ou não\r\n */\r\n public defineDefaultEstabelecimento(estabID: string, isDefault: boolean): void {\r\n this._menuServicesService.defineDefaultEstabelecimento(estabID, this._authStorageService.infraUsuarioId, isDefault).subscribe({\r\n next: () => {\r\n this.getEstabelecimentos(\"\");\r\n\r\n isDefault\r\n ? this._messageService.showAlertSuccess('Novo estabelecimento definido como padrão para o usuário')\r\n : this._messageService.showAlertSuccess('Estabelecimento padrão removido para o usuário');\r\n },\r\n error: error => {\r\n //this._projectUtilService.showHttpError(error);\r\n this._messageService.showAlertDanger(error);\r\n throw new Error(error);\r\n\r\n }\r\n })\r\n }\r\n\r\n // #endregion CREATE OR UPDATE\r\n\r\n // #region DELETE\r\n // [...]\r\n // #endregion DELETE\r\n\r\n // #endregion ==========> SERVICES <==========\r\n\r\n\r\n // #region ==========> UTILITIES <==========\r\n\r\n /**\r\n * Envia um sinal ao componente pai com o ID e Nome do Estabelecimento selecionado no Modal\r\n * @param estabID ID do Estabelecimento que será enviado\r\n * @param estabNome Nome do Estabelecimento que será enviado\r\n */\r\n public selectEstabelecimento(estabID: string, estabNome: string): void {\r\n\r\n // * Método customizado para emissão de evento ao trocar de estabelecimento\r\n this._customMenuService.emitEstabelecimentoEvent();\r\n\r\n this.onSelected.emit(estabID + \" - \" + estabNome);\r\n }\r\n\r\n\r\n /**\r\n * Realiza uma nova pesquisa no banco para atualizar a lista a cada 3 caracteres digitados\r\n * @param pesquisa Texto do input de pesquisa\r\n */\r\n public updateSearch(pesquisa: string): void {\r\n pesquisa.length % 3 == 0\r\n ? this.getEstabelecimentos(pesquisa)\r\n : null;\r\n }\r\n\r\n /**\r\n * Verifica se a string passada é alfanumérica.\r\n * @param str String que será verificada\r\n * @returns TRUE se for alfanumérica, caso contrário FALSE.\r\n */\r\n private isAlphanumeric(str: string) {\r\n var code, i, len;\r\n\r\n for (i = 0, len = str.length; i < len; i++) {\r\n code = str.charCodeAt(i);\r\n if (!(code > 47 && code < 58) && // (0-9)\r\n !(code > 64 && code < 91) && // (A-Z)\r\n !(code > 96 && code < 123)) { // (a-z)\r\n\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n /** Modifica a quantidade de itens a ser mostrada na lista.\r\n * @param event parâmetro de evento que irá selecionar a nova quantidade.\r\n */\r\n public onSelectChange(event: any) {\r\n this.itemsPerPage = parseInt(event.target.value, 10);\r\n this.page = 1;\r\n }\r\n\r\n /** Reseta a paginação da listagem.\r\n */\r\n public resetPagination(list: any[]): void {\r\n // Cálculo para encontrar o valor inicial do index da página atual\r\n const startIndex = (this.page - 1) * this.itemsPerPage;\r\n\r\n // Condição para resetar o valor da paginação\r\n if (list.length <= startIndex) {\r\n this.page = 1;\r\n }\r\n }\r\n // #endregion ==========> UTILITIES <==========\r\n\r\n\r\n // #region ==========> MODALS <==========\r\n\r\n /**\r\n * Função simples com o objetivo de abrir os modais no centro da tela.\r\n * @param template Template HTML do modal que será aberto.\r\n * @param modalID ID do modal que será aberto, para que possa ser referenciado depois.\r\n */\r\n public openModal(template: TemplateRef<any>, modalID: number) {\r\n if (modalID == 4) {\r\n this._bsModalService.show(template, {\r\n id: modalID,\r\n class: 'modal-dialog-centered modal-lg',\r\n ignoreBackdropClick: false,\r\n keyboard: false\r\n });\r\n } else {\r\n this._bsModalService.show(template, {\r\n id: modalID,\r\n class: 'modal-dialog-centered',\r\n ignoreBackdropClick: false,\r\n keyboard: false\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Função simples com o objetivo de fechar os modais que estiverem abertos (baseados pelo ID).\r\n * @param modalID ID do modal que será fechado.\r\n */\r\n public closeModal(modalID: number) {\r\n this._bsModalService.hide(modalID);\r\n }\r\n\r\n public closeSelf() {\r\n this.onClose.emit();\r\n }\r\n\r\n // #endregion ==========> MODALS <==========\r\n\r\n}\r\n","<div class=\"main-container\">\r\n <div class=\"modal-header modal-style modal-dialog-centered\">\r\n <h4 class=\"modal-title pull-left color-modal\" style=\"font-size: 20px; font-weight: bold;\"> Selecione um\r\n estabelecimento </h4>\r\n <button (click)=\"closeSelf()\" type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"modal-message\">\r\n <div class=\"search-and-filters d-flex flex-row align-items-center justify-content-between\">\r\n <div class=\"d-flex flex-row w-100\">\r\n <div class=\"input-group\">\r\n <span class=\"input-group-text px-2\" id=\"basic-addon1\"\r\n style=\"background-color: transparent; border-right: none;\">\r\n <lib-icon iconName=\"lupa\" iconColor=\"gray\"/>\r\n </span>\r\n <input type=\"text\" class=\"form-control border-start-0 ps-0\" id=\"pesquisaInput\" #pesquisa\r\n placeholder=\"Digite o Código\" (keyup.enter)=\"refreshList(pesquisa.value)\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"filters d-flex align-items-center justify-content-between ms-3\">\r\n <div class=\"search-buttons d-flex flex-row align-items-center my-0 mx-0\">\r\n <button id=\"clearFilterBtn\" class=\"btn btn-outline-primary ms-0 no-hover-btn me-2\"\r\n (click)=\"pesquisa.value = ''; refreshList(pesquisa.value)\"> Limpar </button>\r\n <button id=\"searchFilterBtn\" class=\"btn btn-primary me-0\" (click)=\"refreshList(pesquisa.value)\"> Pesquisar\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"table-list w-100 mt-3\" *ngIf=\"$estabelecimentosList; else loading\">\r\n <table class=\"table table-bordered table-hover mb-0\">\r\n <thead class=\"fs-6\">\r\n <tr>\r\n <th scope=\"col\" class=\"col-11 align-middle th\">Estabelecimento <span\r\n class=\"text-primary fst-italic\">(duplo-clique para selecionar)</span></th>\r\n <th scope=\"col\" class=\"col-1 align-middle text-center th\">Ações</th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody *ngIf=\"$estabelecimentosList.length > 0; else emptyList\">\r\n <tr\r\n *ngFor=\"let estabelecimento of $estabelecimentosList | paginate: { itemsPerPage: itemsPerPage, currentPage: page }\"\r\n (dblclick)=\"selectEstabelecimento(estabelecimento.ID, estabelecimento.NOMEEXIBICAO)\" role=\"button\">\r\n <td><span class=\"row-name\"> {{ estabelecimento.CODIGO }} - {{ estabelecimento.NOMEEXIBICAO }} </span>\r\n <span class=\"subname\"> {{ estabelecimento.IS_MATRIZ ? \"Matriz \" : null }} CNPJ: {{ estabelecimento.CNPJ\r\n }} </span></td>\r\n <td class=\"text-center align-middle\">\r\n <div class=\"action-icons d-flex flex-row align-items-center justify-content-around\">\r\n <div class=\"form-check form-switch\">\r\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" id=\"flexSwitchCheckChecked\"\r\n tooltip=\"Estabelecimento padrão\" [checked]=\"estabelecimento.IS_DEFAULT\"\r\n style=\"transform: translateY(3px); height: 1rem; width: 28px;\" #isDefaultRow\r\n (click)=\"estabelecimento.IS_DEFAULT = !estabelecimento.IS_DEFAULT; defineDefaultEstabelecimento(estabelecimento.ID, estabelecimento.IS_DEFAULT)\">\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n\r\n <!-- #region EMPTY LIST CELL -->\r\n <ng-template #emptyList>\r\n <tbody>\r\n <tr>\r\n <td colspan=\"2\" class=\"align-middle\"><span class=\"row-name fw-light fst-italic text-center\"> {{\r\n response_messages.emptyMessage }} </span></td>\r\n </tr>\r\n </tbody>\r\n </ng-template>\r\n <!-- #endregion EMPTY LIST CELL -->\r\n </table>\r\n\r\n <!-- #region PAGINATION -->\r\n <div class=\"d-flex justify-content-end mt-2\" *ngIf=\"$estabelecimentosList.length > 0\">\r\n <div class=\"d-flex align-items-center\">\r\n <label class=\"me-2\" style=\"white-space: nowrap;\">Itens por página</label>\r\n <select class=\"form-select select-search\" (change)=\"onSelectChange($event)\">\r\n <option class=\"selected\" value=\"10\" selected>10</option>\r\n <option value=\"25\">25</option>\r\n <option value=\"50\">50</option>\r\n </select>\r\n </div>\r\n\r\n <pagination-controls class=\"sp-pagination mt-3\" (pageChange)=\"page = $event\"\r\n previousLabel=\"« \" nextLabel=\" »\" [maxSize]=\"5\">\r\n </pagination-controls>\r\n </div>\r\n <!-- #endregion PAGINATION -->\r\n \r\n </div>\r\n\r\n <!-- <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n <span style=\"color: #6C757D\"> Registros {{$estabelecimentosList.length}} de {{$estabelecimentosList.length}} </span>\r\n <nav aria-label=\"...\">\r\n <ul class=\"pagination mb-0\">\r\n <li class=\"page-item disabled\"> <a class=\"page-link\" href=\"#\" tabindex=\"-1\">Anterior</a> </li>\r\n <li class=\"page-item active\"> <a class=\"page-link\" href=\"#\">1</a> </li>\r\n <li class=\"page-item\"> <a class=\"page-link\" href=\"#\">2</a> </li>\r\n <li class=\"page-item\"> <a class=\"page-link\" href=\"#\">3</a> </li>\r\n <li class=\"page-item\"> <a class=\"page-link\" href=\"#\">Próximo</a> </li>\r\n </ul>\r\n </nav>\r\n </div> -->\r\n\r\n\r\n <ng-template #loading>\r\n <lib-spinner></lib-spinner>\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>","import { Component, ContentChild, EventEmitter, Input, OnInit, Output, TemplateRef } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { IMenuItemStructure } from '../../model/imenu-item-structure.model';\r\n\r\n@Component({\r\n selector: 'app-dynamic-menu',\r\n templateUrl: './dynamic-menu.component.html',\r\n styleUrls: ['./dynamic-menu.component.scss'],\r\n})\r\n\r\nexport class DynamicMenuComponent implements OnInit {\r\n\r\n @Output() selectTemplate: EventEmitter<any> = new EventEmitter;\r\n\r\n @Input() submenuRef!: HTMLDivElement;\r\n\r\n @Input() recebeParam!: Function;\r\n\r\n @Input() titleSubmenu = \"\";\r\n\r\n @Input() submenuList?: IMenuItemStructure[] = [];\r\n\r\n menuList: IMenuItemStructure[] = [];\r\n\r\n menuStatic: IMenuItemStructure[] = [];\r\n\r\n selectedMenuItem: number[] = [];\r\n\r\n selectedItem: number = -1;\r\n\r\n @ContentChild(TemplateRef) desiredContent?: TemplateRef<any>;\r\n\r\n constructor(public router: Router,\r\n\r\n ) { }\r\n\r\n ngOnInit(): void { }\r\n\r\n onClickedOutside(e: Event, ref: HTMLDivElement) {\r\n ref.classList.remove(\"opened-sub\");\r\n this.submenuList = [];\r\n this.indicateSelectedMenuItem();\r\n }\r\n\r\n indicateSelectedMenuItem() {\r\n if (this.selectedMenuItem.length) {\r\n this.selectedItem = this.selectedMenuItem[0];\r\n }\r\n }\r\n\r\n changeStar(ref: HTMLButtonElement, id: IMenuItemStructure | undefined) {\r\n ref.classList.toggle(\"star\");\r\n ref.classList.toggle(\"yellow-star\");\r\n }\r\n\r\n public getExternalUrl(url: string) {\r\n return `https://siscandesv6.sispro.com.br/SisproErpCloud/${url}`;\r\n }\r\n\r\n}\r\n","<div #submenu class=\"header-submenu\">\r\n <h1 class=\"titulo pb-3 pt-4\">{{ titleSubmenu }}</h1>\r\n <div class=\"itens-list\">\r\n <ul style=\"width: 100%\">\r\n \r\n <li *ngFor=\"let itemList of submenuList; let i = index\" [id]=\"itemList!.id\" \r\n class=\"d-flex justify-content-between align-items-center\"\r\n [class]=\"i == 0 ? 'mt-1' : ''\">\r\n \r\n <a *ngIf=\"!itemList.isExternal; else externalMenu\"\r\n [routerLink]=\"itemList!.route != null ? ['/' + itemList!.route] : null\" \r\n (click)=\"recebeParam($event, submenuRef)\">\r\n <span>{{ itemList!.label }}</span>\r\n </a>\r\n \r\n <ng-template #externalMenu>\r\n <a [href]=\"getExternalUrl(itemList.route)\"\r\n target=\"_blank\" \r\n (click)=\"recebeParam($event, submenuRef)\">\r\n <span>{{ itemList!.label }}</span>\r\n </a>\r\n </ng-template>\r\n\r\n <!-- <button class=\"star favoritos\" #star (click)=\"changeStar(star, itemList)\"></button> -->\r\n </li>\r\n\r\n </ul>\r\n </div>\r\n</div>","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-notif-submenu',\r\n templateUrl: './notif-submenu.component.html',\r\n styleUrls: ['./notif-submenu.component.scss'],\r\n})\r\nexport class NotifSubmenuComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n\r\n }\r\n}\r\n","<div class=\"header-submenu\">\r\n <h1 class=\"titulo pb-3 pt-4\">Notificações</h1>\r\n</div>\r\n<div class=\"body-notif\">\r\n <div class=\"new-notif\">\r\n <div class=\"session-header p-2\">\r\n <p class=\"session-h-item\">Novas (2)</p><p>Marcar todas como Lidas</p>\r\n </div>\r\n <div class=\"scroll\">\r\n <div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"read-notif\">\r\n <div class=\"session-header p-2\">\r\n <p class=\"session-h-item\">Lidas</p>\r\n </div>\r\n <div class=\"scroll-second\">\r\n <div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has\r\n Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n <div class=\"session mb-3 pb-3\">\r\n <div class=\"session-start mt-3 ms-3\">\r\n <img src=\"assets/icons/file-text.svg\" alt=\"\"><p>Contratos</p>\r\n </div>\r\n <div class=\"m-4\">\r\n <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has </p>\r\n </div>\r\n <div class=\"item-end ms-4 mx-4\">\r\n <button>Marcar como lida</button>\r\n <p>2h atrás</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, ContentChild, OnInit, TemplateRef, ViewChild } from '@angular/core';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { BsModalService } from 'ngx-bootstrap/modal';\r\nimport { MessageService } from 'ngx-sp-infra';\r\nimport { filter, Subject } from 'rxjs';\r\nimport { LibCustomMenuService } from './../../../custom/custom-menu.service';\r\n\r\n//import { environment } from '../../../environments/environments';\r\n//import { ProjectUtilservice } from 'src/app/project/utils/project-utils.service';\r\nimport { AuthService } from '../../../auth.service';\r\nimport { MenuConfigService } from '../../../custom/menu-config.service';\r\nimport { AuthStorageService } from '../../../storage/auth-storage.service';\r\nimport { MenuServicesService } from '../menu-services.service';\r\nimport { IMenuItemStructure } from '../model/imenu-item-structure.model';\r\nimport { ISubmenuItemStructure } from '../model/isubmenu-item-structure.model';\r\nimport { Usuario_IMG } from '../model/usuario-img';\r\n\r\n@Component({\r\n selector: 'app-menu-lateral',\r\n templateUrl: './menu-lateral.component.html',\r\n styleUrls: ['./menu-lateral.component.scss'],\r\n})\r\nexport class MenuLateralComponent implements OnInit {\r\n constructor(\r\n public _customMenuService: LibCustomMenuService,\r\n private _authStorageService: AuthStorageService,\r\n private _bsModalService: BsModalService,\r\n private _menuServices: MenuServicesService,\r\n private _messageService: MessageService,\r\n //private _projectUtilService: ProjectUtilservice,\r\n private _router: Router,\r\n private _authService: AuthService\r\n ) {\r\n // Implementação que verifica eventos acionados na classe de service.\r\n this._menuServices.getNewUserImageEvent().subscribe(() => { this.getMenuUserImg(); })\r\n }\r\n\r\n public ngOnInit(): void {\r\n\r\n // Inscreva-se no evento NavigationEnd para receber notificações quando a rota mudar, serve para atualizar a seleção do menu corretamente\r\n this._router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe((event: any) => {\r\n this._customMenuService.menuItems = this._customMenuService.menuConfig.updateRouteSelection(this._router.url, this._customMenuService.menuItems)\r\n });\r\n\r\n if (!this._customMenuService.menuDynamic) {\r\n this._customMenuService.menuConfig.setMenuStatic(true);\r\n this._customMenuService.menuItems = this._customMenuService.menuConfig.initializeMenu(this._router.url);\r\n\r\n // Método com customizações para inicialização do Menu Estático\r\n this._customMenuService.menuStaticOnInit();\r\n }\r\n else {\r\n // Método com customizações para inicialização do Menu Dinâmico\r\n this._customMenuService.menuDynamicOnInit();\r\n }\r\n\r\n this.nomeEstabelecimento = this._authStorageService.infraEstabNome;\r\n this.footerUserName = this._authStorageService.userName;\r\n\r\n this.checkForCachedImage();\r\n\r\n this.getUserEmail();\r\n }\r\n\r\n // #region ==========> PROPERTIES <==========\r\n\r\n // #region PRIVATE\r\n\r\n // ERICK: vou manter este por enquanto para quando for necessário esta funcionalidade eu consiga refazê-las sem muito problema\r\n @ViewChild(\"notif_menu\") private notif_template?: TemplateRef<any>;\r\n\r\n // #region PUBLIC\r\n\r\n @ViewChild('menuLink') public menuLink?: HTMLAnchorElement;\r\n @ContentChild(TemplateRef) public desiredContent?: TemplateRef<any>;\r\n\r\n public readonly MODAL_ESTABELECIMENTO: number = 1;\r\n\r\n public nomeEstabelecimento: string = 'Estabelecimento padrão';\r\n public titleSubmenu: string = \"\";\r\n public submenuList: (ISubmenuItemStructure | undefined)[] = [];\r\n\r\n public messageIfClicked = new Subject<boolean>();\r\n\r\n /** Esta variável é usada na abertura do submenu e do submenu secundário para \r\n * que a função onClickedOutside() que está na segunda div principal do HTML do\r\n * componente não seja ativada, pois se ela for ativada ela irá fechar o menu\r\n * lateral, e quando vamos do submenu para o submenu secundário não queremos\r\n * fechar o menu lateral, e quando vamos do submenu secundário para o submenu\r\n * também não queremos fechar o menu lateral;\r\n */\r\n public closeMenu: boolean = true;\r\n\r\n /** Utilizada como a fonte da imagem de perfil do usuário logado no sistema. */\r\n public footerUserImgSrc: string = \"\";\r\n\r\n /** Emai do usuário logado para ser exibido no popover */\r\n public footerUserEmail: string = \"\";\r\n\r\n /** Nome do usuário logado para ser exibido no rodapé do menu. */\r\n public footerUserName: string = \"Usuário\";\r\n\r\n public isPopoverVisible: boolean = false;\r\n public showBalloon: boolean = false;\r\n\r\n\r\n\r\n // propriedades iniciadas quando passar o CustomMenuService\r\n\r\n public menuDynamic: boolean = false;\r\n public menuConfig: MenuConfigService = new MenuConfigService;\r\n\r\n // #endregion PUBLIC\r\n\r\n // #endregion ==========> PROPERTIES <==========\r\n\r\n // #region ==========> SERVICES <==========\r\n\r\n // #region GET\r\n private getEstabelecimentoSession(estabID: string): void {\r\n this._menuServices.getEstabelecimentoSession(estabID).subscribe({\r\n next: response => {\r\n this.nomeEstabelecimento = response.InfraEstabNome;\r\n this._authStorageService.infraEmpresaId = response.InfraEmpresaId;\r\n this._authStorageService.infraEmpresaNome = response.InfraEmpresaNome;\r\n },\r\n error: error => {\r\n //this._projectUtilService.showHttpError(error); \r\n this._messageService.showAlertDanger(error);\r\n throw new Error(error);\r\n }\r\n })\r\n }\r\n\r\n private getMenuUserImg(): void {\r\n this._menuServices.getImagemMenu().subscribe({\r\n next: response => { this.footerUserImgSrc = response.InfraUsuarioImg.Imagem; },\r\n error: error => {\r\n //this._projectUtilService.showHttpError(error);\r\n this._messageService.showAlertDanger(error);\r\n throw new Error(error);\r\n }\r\n })\r\n }\r\n\r\n public getUserEmail(): void {\r\n this._menuServices.getUsuarioEmail().subscribe({\r\n next: response => { this.footerUserEmail = response.Email; },\r\n error: error => {\r\n //this._projectUtilService.showHttpError(error);\r\n this._messageService.showAlertDanger(error);\r\n throw new Error(error);\r\n }\r\n })\r\n }\r\n // #endregion GET\r\n\r\n // #region UPDATE\r\n public updateLastLogEstabelecimento(estab: string): void {\r\n this._menuServices.updateLastLogEstabID(estab.split(\" - \")[0]).subscribe({\r\n next: () => {\r\n this._messageService.showAlertSuccess('Estabelecimento alterado com sucesso!');\r\n\r\n this.getEstabelecimentoSession(estab.split(\" - \")[0]);\r\n }\r\n })\r\n\r\n this._authStorageService.infraEstabId = estab.split(\" - \")[0];\r\n this._authStorageService.infraEstabNome = estab.split(\" - \")[1];\r\n }\r\n // #endregion UPDATE\r\n\r\n // #endregion ==========> SERVICES <==========\r\n\r\n // #region ==========> UTILITIES <==========\r\n\r\n public togglePopover() { this.showBalloon = !this.showBalloon; }\r\n\r\n public dropdownWasOpened(value: boolean): void { this.messageIfClicked.next(value); }\r\n\r\n public openExpansibleMenu(ref: HTMLDivElement): void {\r\n ref.classList.toggle(\"closed\");\r\n ref.classList.toggle(\"col\");\r\n document.querySelector(\".sidebar-control\")?.classList.toggle(\"col\");\r\n\r\n // Método com customizações para inicialização do Menu Estático\r\n this._customMenuService.menuopenExpansibleMenu(ref);\r\n }\r\n\r\n public openSubmenu(menu: IMenuItemStructure, ref: HTMLDivElement, desiredMenu: TemplateRef<any>): void {\r\n\r\n if (menu.children && menu.children.length > 0) {\r\n this.titleSubmenu = menu.label\r\n this.desiredContent = desiredMenu;\r\n ref.classList.remove(\"opened-notif-sub\");\r\n\r\n if (this.submenuList === menu.children) {\r\n this.closeMenu = false;\r\n }\r\n else if (!ref.classList.contains(\"opened-sub\")) { ref.classList.toggle(\"opened-sub\"); }\r\n this.submenuList = menu.children;\r\n }\r\n\r\n else if (!menu.children || (menu.children && menu.children.length == 0)) {\r\n this.submenuList = [];\r\n ref.classList.toggle(\"selectedItem\");\r\n this.onClickedOutside(new Event(\"\"), ref);\r\n }\r\n }\r\n\r\n // public onClickedOutside(e: Event, ref: HTMLDivElement): void {\r\n // ref.classList.remove(\"opened-sub\");\r\n // this.submenuList = [];\r\n // }\r\n\r\n public onClickedOutside(e: Event, ref: HTMLDivElement): void {\r\n if (ref) {\r\n ref.classList.remove(\"opened-sub\");\r\n this.submenuList = [];\r\n } else {\r\n console.warn('ref is undefined or null');\r\n }\r\n }\r\n\r\n // #region MENU FOOTER USER IMAGE\r\n private validateCachedImg(footerImg: Usuario_IMG | null): boolean {\r\n let usuarioId: string = this._authStorageService.infraUsuarioId;\r\n\r\n if (!footerImg || footerImg == null) { return true; }\r\n\r\n if (usuarioId != footerImg.USUARIOID) { return true; }\r\n\r\n this.footerUserImgSrc = footerImg.FILE;\r\n return false;\r\n }\r\n\r\n private checkForCachedImage(): void {\r\n const isAPIRequestNeeded = this.validateCachedImg(this._menuServices.getMenuFooterImg());\r\n if (isAPIRequestNeeded) { this.getMenuUserImg(); }\r\n }\r\n // #endregion MENU FOOTER USER IMAGE\r\n\r\n public logout(): void {\r\n this._authService.logout();\r\n }\r\n\r\n public getExternalUrl(url: string) {\r\n return `https://siscandesv6.sispro.com.br/SisproErpCloud/${url}`;\r\n }\r\n\r\n // #endregion ==========> UTILITIES <==========\r\n\r\n // #region ==========> MODALS <==========\r\n\r\n /** Função simples com o objetivo de abrir os modais no centro da tela.\r\n * @param template Template HTML do modal que será aberto.\r\n * @param modalID ID do modal que será aberto, para que possa ser referenciado depois.\r\n */\r\n openModal(template: TemplateRef<any>, modalID: number) {\r\n this._bsModalService.show(template, {\r\n class: 'modal-dialog-centered modal-lg',\r\n ignoreBackdropClick: false,\r\n keyboard: false,\r\n id: modalID\r\n });\r\n }\r\n\r\n /** Função simples com o objetivo de fechar os modais que estiverem abertos (baseados pelo ID).\r\n * @param modalID ID do modal que será fechado.\r\n */\r\n closeModal(modalID: number) {\r\n this._bsModalService.hide(modalID);\r\n }\r\n\r\n // #endregion ==========> MODALS <==========\r\n\r\n}\r\n","<!-- #region MAIN CONTENT -->\r\n<div class=\"main col-12\">\r\n\r\n <div style=\"height: 100vh; z-index: 3;\" class=\"sidebar-control position-relative d-flex flex-row\" \r\n (clickOutside)=\"closeMenu == true ? onClickedOutside($event, submenu_ref) : closeMenu = true\">\r\n <div class=\"sidebar {{_customMenuService.themeColor}} closed\" #sidebar>\r\n <div class=\"menu-header\">\r\n <ul>\r\n <li class=\"mb-3\">\r\n <div class=\"logo-hamburguer\">\r\n <img src=\"assets/icons/logotipo-sispro.svg\" alt=\"logo-sispro\" class=\"logo-sispro\" title=\"logo\" width=\"136px\" height=\"48px\">\r\n <button class=\"button-hamburguer\" (click)=\"openExpansibleMenu(sidebar)\">\r\n <img src=\"assets/icons/menu.svg\" alt=\"menu hamburguer\">\r\n </button>\r\n </div>\r\n </li>\r\n\r\n <!-- #region MÓDULOS -->\r\n <li class=\"mb-3\" style=\"margin-left: 8px; margin-right: 8px\">\r\n <div class=\"btn-group\">\r\n <button (click)=\"dropdownWasOpened(true)\" type=\"button\" class=\"dropdown-button\" data-bs-toggle=\"dropdown\"\r\n aria-expanded=\"false\" data-bs-auto-close=\"outside\">\r\n\r\n <ng-container>\r\n <img *ngIf=\"_customMenuService.moduleImg != ''; else moduleSVG\" [src]=\"_customMenuService.moduleImg\" alt=\"\">\r\n <span class=\"ps-2\"> {{ this._customMenuService.moduleName }} <lib-icon iconName=\"seta-direita\" iconColor=\"white\" /> </span>\r\n\r\n <ng-template #moduleSVG>\r\n <lib-icon iconColor=\"white\" [iconName]=\"_customMenuService.moduleSvg\"/>\r\n </ng-template>\r\n </ng-container>\r\n\r\n </button>\r\n <ul class=\"dropdown-menu\" #dropdown_ref>\r\n <app-primary-dropdown [buttonWasClicked]=\"messageIfClicked\"></app-primary-dropdown>\r\n </ul>\r\n </div>\r\n </li>\r\n <!-- #endregion MÓDULOS -->\r\n\r\n <!-- #region ESTABELECIMENTOS -->\r\n <li class=\"mx-3\" style=\"margin-bottom: 16px;\">\r\n <div class=\"icon-estabelecimento\">\r\n <button class=\"row justify-content-between bg-transparent border-0\"\r\n (click)=\"openModal(modalEstabelecimento, MODAL_ESTABELECIMENTO)\"\r\n [tooltip]=\"!sidebar.classList.contains('closed') ? '' : nomeEstabelecimento\" placement=\"right\">\r\n\r\n <lib-icon class=\"col-1\" iconName=\"predio\" iconColor=\"white\" />\r\n <span *ngIf=\"!sidebar.classList.contains('closed')\" class=\"col-9 ps-2 glb-text-width-160 text-start text-truncate\"> {{ nomeEstabelecimento }} </span>\r\n <lib-icon *ngIf=\"!sidebar.classList.contains('closed')\" class=\"col-1\" iconName=\"seta-direita\" iconColor=\"white\" />\r\n </button>\r\n </div>\r\n </li>\r\n <!-- #endregion ESTABELECIMENTOS -->\r\n\r\n </ul>\r\n\r\n </div>\r\n\r\n <!-- #region MENUS DE NAVEGAÇÃO -->\r\n <div class=\"main-menu\">\r\n <div class=\"scroll\">\r\n <div class=\"list-menu px-2 pb-1\">\r\n\r\n <!-- #region MENU DINÂMICO -->\r\n <div class=\"dynamic-menu\">\r\n <ul #dynamic_menu_items *ngIf=\"_customMenuService.menuItems; else isLoading\">\r\n\r\n <li *ngFor=\"let menuItem of _customMenuService.menuItems; let i = index\" \r\n class=\"p-1 rounded\" \r\n (click)=\"openSubmenu(menuItem, submenu_ref, dynamic_menu)\" \r\n [class.selectedItem]=\"menuItem.isSelected\">\r\n\r\n <a *ngIf=\"!menuItem.isExternal; else externalMenu\"\r\n [routerLink]=\"menuItem.route != '' ? menuItem.route : null\" \r\n [id]=\"'item' + menuItem.id\" \r\n [tooltip]=\"!sidebar.classList.contains('closed') ? '' : menuItem.label\" \r\n placement=\"left\" class=\"w-100 d-flex align-items-center button-icons text-decoration-none p-1 glb-cursor-pointer\" \r\n [class]=\"sidebar.classList.contains('closed') ? 'justify-content-center' : 'justify-content-between'\">\r\n\r\n <div class=\"container\">\r\n <lib-icon *ngIf=\"!menuItem.icon.includes('assets/icons'); else iconImg\" [iconName]=\"menuItem.icon\" iconColor=\"white\"/>\r\n <span class=\"span-main\">{{ menuItem.label }}</span>\r\n <ng-template #iconImg>\r\n <img [src]=\"menuItem.icon\" [alt]=\"'icone: ' + menuItem.label\">\r\n </ng-template>\r\n </div>\r\n <lib-icon *ngIf=\"(menuItem.children && menuItem.children.length > 0) && !sidebar.classList.contains('closed')\" \r\n iconName=\"seta-direita\" iconColor=\"white\"/>\r\n </a>\r\n \r\n <ng-template #externalMenu>\r\n <a [href]=\"getExternalUrl(menuItem.route)\"\r\n target=\"_blank\" \r\n [id]=\"'item' + menuItem.id\" \r\n [tooltip]=\"!sidebar.classList.contains('closed') ? '' : menuItem.label\" \r\n placement=\"left\" class=\"w-100 d-flex align-items-center button-icons text-decoration-none p-1 glb-cursor-pointer\" \r\n [class]=\"sidebar.classList.contains('closed') ? 'justify-content-center' : 'justify-content-between'\">\r\n\r\n <div class=\"container\">\r\n <lib-icon *ngIf=\"!menuItem.icon.includes('assets/icons'); else iconImgExternal\" [iconName]=\"menuItem.icon\" iconColor=\"white\"/>\r\n <span class=\"span-main\">{{ menuItem.label }}</span>\r\n <ng-template #iconImgExternal>\r\n <img [src]=\"menuItem.icon\" [alt]=\"'icone: ' + menuItem.label\">\r\n </ng-template>\r\n </div>\r\n <lib-icon *ngIf=\"(menuItem.children && menuItem.children.length > 0) && !sidebar.classList.contains('closed')\" \r\n iconName=\"seta-direita\" iconColor=\"white\"/>\r\n </a>\r\n </ng-template>\r\n </li>\r\n\r\n </ul>\r\n </div>\r\n\r\n <ng-template #isLoading>\r\n <li class=\"spinner-border spinner-border-sm mt-2\" role=\"status\" aria-hidden=\"true\"></li>\r\n </ng-template>\r\n <!-- #endregion MENU DINÂMICO -->\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <!-- #endregion MENUS DE NAVEGAÇÃO -->\r\n\r\n <!-- #region FOOTER -->\r\n <div class=\"footer-menu\" (mouseenter)=\"showBalloon = true\" (mouseleave)=\"showBalloon = false\"\r\n [popover]=\"popoverContent\" placement=\"right bottom\" [outsideClick]=\"true\" containerClass=\"width: 200px\" >\r\n <div class=\"footer-components ps-1 pt-2\" [class.open]=\"showBalloon\">\r\n <button type=\"button\" class=\"btn btn-primary\">\r\n <img *ngIf=\"footerUserImgSrc; else noUserImg\" class=\"photo-profile ms-1\"\r\n [src]=\"['data:image/jpeg;base64,' + footerUserImgSrc]\" alt=\"foto-perfil\">\r\n <ng-template #noUserImg>\r\n <lib-icon iconName=\"contraparte\" iconColor=\"white\"/>\r\n </ng-template>\r\n <span class=\"glb-text-width-120 w-auto fw-bold text-start text-truncate ms-1 me-1\">\r\n {{ footerUserName }}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <ng-template #popoverContent>\r\n <div class=\"footer-menu\" style=\"width: 1000px;\">\r\n <div class=\"d-flex align-items-center\"> \r\n <img *ngIf=\"footerUserImgSrc; else noUserImg\" class=\"photo-profile\"\r\n [src]=\"['data:image/jpeg;base64,' + footerUserImgSrc]\" alt=\"foto-perfil\"> \r\n <ng-template #noUserImg>\r\n <lib-icon iconName=\"contraparte\" iconColor=\"white\"/>\r\n </ng-template>\r\n <div class=\"d-flex flex-column ms-1\"> \r\n <div [tooltip]=\"footerUserName\" class=\"dynamic-container\" style=\"white-space: nowrap; flex-grow: 1;max-width: 200px; font-size: 16px;\">{{footerUserName}}</div>\r\n <div [tooltip]=\"footerUserEmail\" class=\"dynamic-container\" style=\"white-space: nowrap; font-size: 12px; flex-grow: 1;max-width: 200px;\">{{footerUserEmail}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <hr class=\"mb-2 mt-2\">\r\n <div routerLink=\"meu-perfil\" style=\"cursor: pointer;\" (click)=\"togglePopover(); $event.stopPropagation()\">\r\n <lib-icon [iconSize]=\"'small'\" iconName=\"contraparte\"/> Meu Perfil\r\n </div>\r\n <div class=\"mt-2\" (click)=\"logout()\" style=\"cursor: pointer;\">\r\n <lib-icon [iconSize]=\"'small'\" iconName=\"logout\"/> Sair\r\n </div>\r\n </ng-template>\r\n <!-- #endregion FOOTER -->\r\n\r\n </div>\r\n\r\n <div class=\"submenu\" #submenu_ref>\r\n <ng-template [ngIf]=\"desiredContent !== null\">\r\n <ng-content *ngTemplateOutlet=\"desiredContent!; context: {$implicit: submenuList}\"></ng-content>\r\n </ng-template>\r\n </div>\r\n </div>\r\n \r\n <div class=\"main-content col d-flex flex-column align-content-between\" id=\"body-content\">\r\n <div class=\"content\" style=\"position: relative;\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n <div app-footer></div>\r\n </div>\r\n\r\n</div>\r\n<!-- #endregion MAIN CONTENT -->\r\n\r\n<!-- #region TEMPLATES -->\r\n<!-- tem que perguntar pro Erick -->\r\n<!-- [submenuRef]=\"submenu_ref\" -->\r\n<ng-template #dynamic_menu let-data>\r\n <app-dynamic-menu \r\n [submenuList]=\"data\"\r\n [titleSubmenu]=\"titleSubmenu\"\r\n [submenuRef]=\"submenu_ref\"\r\n [recebeParam]=\"onClickedOutside.bind(this)\">\r\n </app-dynamic-menu>\r\n</ng-template>\r\n\r\n<ng-template #notif_menu>\r\n <app-notif-submenu></app-notif-submenu>\r\n</ng-template>\r\n\r\n<!-- #region MODAL SELECAO ESTABELECIMENTO -->\r\n<ng-template #modalEstabelecimento>\r\n <selecao-estabelecimentos-modal (onClose)=\"closeModal(MODAL_ESTABELECIMENTO)\"\r\n (onSelected)=\"closeModal(MODAL_ESTABELECIMENTO); updateLastLogEstabelecimento($event);\"></selecao-estabelecimentos-modal>\r\n</ng-template>\r\n<!-- #endregion MODAL SELECAO ESTABELECIMENTO -->\r\n\r\n<!-- #endregion TEMPLATES -->\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\nimport { FormUtils, MessageService } from 'ngx-sp-infra';\r\nimport { AuthService } from '../../auth.service';\r\nimport { ServerService } from '../../server/server.service';\r\nimport { AuthStorageService } from '../../storage/auth-storage.service';\r\n\r\n@Component({\r\n\tselector: 'app-nova-senha',\r\n\ttemplateUrl: './nova-senha.component.html',\r\n\tstyleUrls: ['./nova-senha.component.scss'],\r\n\tpreserveWhitespaces: true,\r\n})\r\nexport class NovaSenhaComponent implements OnInit {\r\n\r\n\tconstructor(\r\n\t\tprivate _formBuilder: FormBuilder,\r\n\t\tprivate _messageService: MessageService,\r\n\t\tprivate _serverService: ServerService,\r\n\t\tprivate _authService: AuthService,\r\n\t\tprivate _authStorageService: AuthStorageService,\r\n\t\tprivate _title: Title,\r\n\t\tprivate _router: Router,\r\n\t\tprivate _route: ActivatedRoute\r\n\t) { }\r\n\r\n\tngOnInit(): void {\r\n\r\n\t\tthis._title.setTitle(\"Nova Senha\");\r\n\r\n\t\tthis.createForm();\r\n\r\n\t\tthis.getParmsFromRoute();\r\n\r\n\t\tthis.form.get('password')?.disable();\r\n\t\tthis.form.get('confirmPassword')?.disable();\r\n\r\n\t\tthis.form.get('code')?.setValue('');\r\n\r\n\t\tthis.form.get('code')?.valueChanges.subscribe(value => {\r\n\t\t\tif (value && value.length === 6) {\r\n\t\t\t\tthis.form.get('password')?.enable();\r\n\t\t\t\tthis.form.get('confirmPassword')?.enable();\r\n\t\t\t} else {\r\n\t\t\t\tthis.form.get('password')?.disable();\r\n\t\t\t\tthis.form.get('confirmPassword')?.disable();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// #region ==========> PROPERTIES <==========\r\n\r\n\t// #region PRIVATE\r\n\tprivate domain: string | null = \"\";\r\n\tprivate user: string | null = \"\";\r\n\tprivate createPassword: boolean = false;\r\n\r\n\tpublic esqueceuSenhaText: string = \"Enviamos um código para o seu e-mail.<br>Insira-o abaixo para redefinir sua senha.\"\r\n\tpublic primeiroAcessoText: string = \"Este é o seu primeiro acesso. Por favor,<br>Insira abaixo o código enviado pare seu<br>e-mail para definir sua senha.\"\r\n\tpublic senhaExpiradaText: string = \"Sua senha expirou e precisa ser atualizada.<br>Enviamos um código para o seu e-mail.<br>Insira-o abaixo para definir sua senha.\"\r\n\r\n\tpublic cadeadoImg = 'assets/imgs/Property1-cadeado.png';\r\n\tpublic maoImg = 'assets/imgs/Property1-mao.png';\r\n\tpublic calendarioImg = 'assets/imgs/Property1-calendariofino.png';\r\n\r\n\t// #region PRIVATE\r\n\r\n\t// #region PUBLIC\r\n\r\n\t// #region ==========> FORM BUILDER <==========\r\n\tpublic form: FormGroup = new FormGroup({});\r\n\r\n\t// Propriedade necessário para que a classe static FormUtils possa ser utilizada no Html\r\n\tpublic get FormUtils(): typeof FormUtils {\r\n\t\treturn FormUtils;\r\n\t}\r\n\r\n\tpublic passwordLabel: string = \"\";\r\n\r\n\tpublic statusSenha: number = 0;\r\n\r\n\t// #region FORM DATA\r\n\r\n\t// Variáveis específicas para funcionalidades padrões dos formulários\r\n\tpublic get code(): string | null {\r\n\t\treturn this.form.get('code')?.value;\r\n\t}\r\n\r\n\tpublic get password(): string {\r\n\t\treturn this.form.get('password')?.value;\r\n\t}\r\n\r\n\tpublic get confirmPassword(): string {\r\n\t\treturn this.form.get('confirmPassword')?.value;\r\n\t}\r\n\r\n\t// #endregion FORM DATA\r\n\r\n\t// #region FORM VALIDATORS\r\n\r\n\t// #region PUBLIC\r\n\r\n\t// Método para configuração dos campos de edição do formulário\r\n\tprivate createForm(): void {\r\n\r\n\t\tthis.form = this._formBuilder.group({\r\n\t\t\tcode: ['', [Validators.required, Validators.maxLength(6)]],\r\n\t\t\tpassword: ['', [Validators.required, Validators.maxLength(100)]],\r\n\t\t\tconfirmPassword: ['', [Validators.required, Validators.maxLength(100)]]\r\n\t\t});\r\n\r\n\t\tthis.form.get('code')?.setValue('');\r\n\t\tthis.form.get('password')?.setValue('');\r\n\t\tthis.form.get('confirmPassword')?.setValue('');\r\n\t}\r\n\r\n\t// #endregion FORM VALIDATORS\r\n\r\n\t// #endregion ==========> FORM BUILDER <==========\r\n\r\n\t// #region ==========> SERVICE METHODS <==========\r\n\r\n\r\n\t// #region GET\r\n\r\n\t/**\r\n\t * Puxa o nome do servidor salvo na configuração da máquina\r\n\t */\r\n\tpublic getServer(): void {\r\n\r\n\t\tif (this.form.valid) {\r\n\t\t\tthis._serverService.getServer().subscribe({\r\n\t\t\t\tnext: response => {\r\n\t\t\t\t},\r\n\t\t\t\terror: (error) => {\r\n\t\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\t\tthrow new Error(error)\r\n\t\t\t\t},\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tFormUtils.validateFields(this.form);\r\n\t\t}\r\n\t}\r\n\t// #endregion GET\r\n\r\n\t// #region POST\r\n\r\n\t// Envia requisição para recuperar de senha\r\n\tpublic sendPassword(): void {\r\n\r\n\t\tif (this.form.valid) {\r\n\t\t\tthis._serverService.getServer().subscribe({\r\n\t\t\t\tnext: response => {\r\n\t\t\t\t\tthis.updatePassword();\r\n\t\t\t\t},\r\n\t\t\t\terror: (error) => {\r\n\t\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\t},\r\n\t\t\t})\r\n\r\n\t\t} else {\r\n\t\t\tFormUtils.validateFields(this.form);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Recuperar senha\r\n\tpublic updatePassword(): void {\r\n\r\n\t\tif (this.createPassword) {\r\n\t\t\tthis._authService.createPassword(this.domain!, this.user!, this.form.value).subscribe({\r\n\t\t\t\tnext: (response) => {\r\n\t\t\t\t\tthis._messageService.showAlertSuccess('Você definiu sua senha com sucesso. Preencha suas novas credenciais para acessar o sistema.');\r\n\r\n\t\t\t\t\tthis.cancelar();\r\n\t\t\t\t},\r\n\t\t\t\terror: (error) => {\r\n\t\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\t\tthrow new Error(error)\r\n\t\t\t\t},\r\n\t\t\t});\r\n\r\n\t\t} else {\r\n\t\t\tthis._authService.recoverPassword(this.domain!, this.user!, this.form.value).subscribe({\r\n\t\t\t\tnext: (response) => {\r\n\t\t\t\t\tthis._messageService.showAlertSuccess('Você redefiniu sua senha com sucesso. Preencha suas novas credenciais para acessar o sistema.');\r\n\r\n\t\t\t\t\tthis.cancelar();\r\n\t\t\t\t},\r\n\t\t\t\terror: (error) => {\r\n\t\t\t\t\t//this._projectUtilservice.showHttpError(error);\r\n\t\t\t\t\tthis._messageService.showAlertDanger(error);\r\n\t\t\t\t\tthrow new Error(error)\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// #endregion POST\r\n\r\n\t// #region UTILIDADES\r\n\tprivate getParmsFromRoute(): void {\r\n\r\n\t\tif (this._route.snapshot.paramMap.get('param') != null) {\r\n\t\t\tlet param: string = atob(this._route.snapshot.paramMap.get('param')!);\r\n\r\n\t\t\tvar params = param.split('$');\r\n\r\n\t\t\tlet numero: number = +params[params.length - 1].slice(-1)\r\n\t\t\tthis.statusSenha = numero;\r\n\r\n\t\t\tthis.createPassword = (params[0] == 'true' ? true : false);\r\n\t\t\tthis.domain = params[1];\r\n\t\t\tthis.user = params[2];\r\n\t\t\tthis.passwordLabel = (this.createPassword ? \"Escolha sua nova senha\" : \"Digite uma nova Senha\");\r\n\r\n\t\t\tif (params[3] != null) {\r\n\t\t\t\tthis.form.get('code')?.setValue(params[3]);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\tthis.createPassword = false;\r\n\t\t\tthis.domain = \"\";\r\n\t\t\tthis.user = \"\";\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// Retorno para o login\r\n\tpublic cancelar(): void {\r\n\t\tthis._authStorageService.logout();\r\n\r\n\t\tthis._router.navigate([\"/auth/login\"]);\r\n\t}\r\n\r\n\t// #endregion UTILIDADES\r\n\r\n\t// #endregion ==========> SERVICE METHODS <==========\r\n\r\n\t// #endregion ==========> MODALS <==========\r\n\r\n}\r\n","<body>\r\n\t<div id=\"main-container\">\r\n\t\t<!-- #region MAIN CONTENT -->\r\n\t\t<div class=\"glb-main-container password-container\">\r\n\t\t\t<div class=\"password-info-container\">\r\n\t\t\t\t<div class=\"img mb-3\">\r\n\t\t\t\t\t<img [src]=\"statusSenha == 2 ? calendarioImg : statusSenha == 1 ? maoImg : statusSenha == 3 ? cadeadoImg : '' \" width=\"125.69\" height=\"122\">\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"text\">\r\n\t\t\t\t\t<h4>{{statusSenha == 2 ? 'Senha expirada' : statusSenha == 1 ? 'Primeiro acesso' : statusSenha == 3 ? 'Esqueceu sua senha?' : ''}}</h4>\r\n\t\t\t\t\t<p [innerHTML]=\"statusSenha == 2 ? senhaExpiradaText : statusSenha == 1 ? primeiroAcessoText : statusSenha == 3 ? esqueceuSenhaText : '' \"></p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<form [formGroup]=\"form\">\r\n\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t<div class=\"col-12 mb-3\">\r\n\t\t\t\t\t\t<label for=\"inputCode\" class=\"form-label\"> Código de validação <span class=\"text-danger\">*</span></label>\r\n\t\t\t\t\t\t<input type=\"text\" placeholder=\"Insira seu código aqui...\" id=\"inputCode\" class=\"form-control\" formControlName=\"code\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('code'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('code')\" label=\"Código de validação\"></app-field-error-message>\t\t\t\t\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\r\n\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t<div class=\"col-12 mb-3\">\r\n\t\t\t\t\t\t<label for=\"inputPassword\" class=\"form-label\"> Digite uma nova Senha <span class=\"text-danger\">*</span></label>\r\n\t\t\t\t\t\t<input type=\"password\" placeholder=\"Digite sua nova senha...\" id=\"inputPassword\" class=\"form-control\" formControlName=\"password\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('password'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('password')\" label=\"{{ passwordLabel }}\"></app-field-error-message>\t\t\t\t\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t\r\n\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t<div class=\"col-12 mb-3\">\r\n\t\t\t\t\t\t<label for=\"inputConfirmPassword\" class=\"form-label\"> Confirme sua nova Senha <span class=\"text-danger\">*</span></label>\r\n\t\t\t\t\t\t<input type=\"password\" placeholder=\"Digite a senha novamente...\" id=\"inputConfirmPassword\" class=\"form-control\" formControlName=\"confirmPassword\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('confirmPassword'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('confirmPassword')\" label=\"Confirme sua Senha\"></app-field-error-message>\t\t\t\t\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\r\n\t\t\t\t\t<div class=\"btns\">\r\n\t\t\t\t\t\t<button type=\"button\" class=\"btn btn-primary modal-button\" (click)=\"sendPassword()\">\r\n\t\t\t\t\t\t\t<span> Redefinir senha </span>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t<button type=\"button\" class=\"btn modal-button cancelar-btn\" (click)=\"cancelar()\">\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<span><span class=\"icon\"><lib-icon iconName=\"p-seta-esquerda\" [iconSize]=\"20\"/></span>Voltar para a tela de login</span>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t</form>\r\n\t\t</div>\r\n\t\t<!-- #endregion MAIN CONTENT -->\r\n\t</div>\r\n\t</body>\r\n\t","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { RouterLink, RouterOutlet } from '@angular/router';\r\nimport { PopoverModule } from 'ngx-bootstrap/popover';\r\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\r\nimport { NgxPaginationModule } from 'ngx-pagination';\r\nimport { InfraModule } from 'ngx-sp-infra';\r\nimport { LoginComponent } from '../lib/components/login/login.component';\r\nimport { PrimaryDropdownComponent } from '../lib/components/menu-lateral/dropdown/primary-dropdown/primary-dropdown.component';\r\nimport { SecondaryDropdownComponent } from '../lib/components/menu-lateral/dropdown/secondary-dropdown/secondary-dropdown.component';\r\nimport { MenuLateralComponent } from '../lib/components/menu-lateral/menu/menu-lateral.component';\r\nimport { SelecaoEstabelecimentosModalComponent } from '../lib/components/menu-lateral/menu/selecao-estabelecimentos-modal/selecao-estabelecimentos-modal.component';\r\nimport { DynamicMenuComponent } from '../lib/components/menu-lateral/submenus/dynamic-menu/dynamic-menu.component';\r\nimport { NotifSubmenuComponent } from '../lib/components/menu-lateral/submenus/notif-submenu/notif-submenu.component';\r\nimport { NovaSenhaComponent } from '../lib/components/nova-senha/nova-senhacomponent';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n LoginComponent,\r\n NovaSenhaComponent,\r\n PrimaryDropdownComponent,\r\n SecondaryDropdownComponent,\r\n SelecaoEstabelecimentosModalComponent,\r\n MenuLateralComponent,\r\n DynamicMenuComponent,\r\n NotifSubmenuComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n InfraModule,\r\n NgxPaginationModule,\r\n PopoverModule,\r\n TooltipModule,\r\n CommonModule,\r\n RouterLink,\r\n RouterOutlet\r\n ],\r\n exports: [\r\n LoginComponent,\r\n NovaSenhaComponent,\r\n PrimaryDropdownComponent,\r\n SecondaryDropdownComponent,\r\n SelecaoEstabelecimentosModalComponent,\r\n MenuLateralComponent,\r\n DynamicMenuComponent,\r\n NotifSubmenuComponent\r\n ]\r\n})\r\nexport class AuthModule { }","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { merge, Observable, of, tap } from 'rxjs';\r\n\r\nimport { IEstabelecimento } from '../model/iestabelecimento.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ListEstabService {\r\n private storage: Storage;\r\n\r\n public cacheName: string = \"\";\r\n\r\n public readonly menuKey = `${this.cacheName}_ListaEstabs`;\r\n\r\n baseUrl = \"assets/jsons/lista-estabs.json\";\r\n\r\n constructor(private http: HttpClient) {\r\n this.storage = window.localStorage;\r\n }\r\n\r\n getList(): Observable<IEstabelecimento[]> {\r\n let iMenu: IEstabelecimento[] | null = this.get();\r\n let httpCall: Observable<IEstabelecimento[]> = this.http.get<IEstabelecimento[]>(this.baseUrl).pipe(\r\n tap((iMenuFromServer: IEstabelecimento[]) => {\r\n this.set(iMenuFromServer);\r\n })\r\n );\r\n\r\n // Caso o menu já esteja gravado no local, é retornado ele no observable e logo em seguida\r\n // é realizada a chamada HTTP para buscar o mais novo menu.\r\n if (iMenu) {\r\n let obs: Observable<IEstabelecimento[]> = of(iMenu!);\r\n let obsMerged: Observable<IEstabelecimento[]> = merge(obs, httpCall);\r\n\r\n return obsMerged;\r\n }\r\n\r\n return httpCall;\r\n }\r\n\r\n set(value: IEstabelecimento[]): void {\r\n let iMenuJson = JSON.stringify(value);\r\n this.storage.setItem(this.menuKey, iMenuJson);\r\n }\r\n\r\n get(): IEstabelecimento[] | null {\r\n let possibleIMenus: string | null = this.storage.getItem(this.menuKey);\r\n\r\n if (possibleIMenus) {\r\n let iMenus: IEstabelecimento[] = JSON.parse(possibleIMenus);\r\n\r\n return iMenus;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n remove(): void {\r\n this.storage.removeItem(this.menuKey);\r\n }\r\n\r\n public getCacheName(cacheName: string): void {\r\n //passando propriedades do produto para a service\r\n this.cacheName = cacheName;\r\n }\r\n\r\n\r\n}\r\n","export class IMenu {\r\n ID!: number;\r\n UNICOID!: number;\r\n LABEL: string = \"\";\r\n DESCRICAO: string = \"\";\r\n URL: string = \"\";\r\n CLASS_ICON: string = \"\";\r\n IS_EXIBEMENU!: boolean;\r\n URL_DASHBOARD: string = \"\";\r\n TAG: string = \"\";\r\n FK!: number;\r\n STRUCT_LIST: [] | [{\r\n ID: number;\r\n UNICOID: number;\r\n LABEL: string;\r\n DESCRICAO: string;\r\n URL: string;\r\n CLASS_ICON: string;\r\n IS_EXIBEMENU: boolean;\r\n URL_DASHBOARD: string;\r\n TAG: string;\r\n FK: number;\r\n STRUCT_LIST: [] | [{\r\n ID: number;\r\n UNICOID: number;\r\n LABEL: string;\r\n DESCRICAO: string;\r\n URL: string;\r\n CLASS_ICON: string;\r\n IS_EXIBEMENU: boolean;\r\n URL_DASHBOARD: string;\r\n TAG: string;\r\n FK: number;\r\n }]\r\n }] = []\r\n}","export class InfraUsuarioImg {\r\n Tenant_Id: number = 0;\r\n Id: number = 0;\r\n Imagem: string = \"\";\r\n FileName: string = \"\";\r\n DataCriacao: Date = new Date();\r\n Is_Active: boolean = false;\r\n UsuarioId: string = \"\";\r\n}\r\n","export class CustomPropriedadesLogin {\r\n loginTitle!: string;\r\n loginSubtitle!: string;\r\n loginBackground!: string;\r\n loginLogotipo!: string;\r\n loginAltLogotipo!: string;\r\n loginPageTitle!: string;\r\n loginDesenvDomain!: string;\r\n loginDesenvUser!: string;\r\n loginDesenvPassword!: string;\r\n}","import { Injectable } from '@angular/core';\r\nimport { Router, RouterStateSnapshot, ActivatedRouteSnapshot, Route, UrlTree } from '@angular/router';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { AuthStorageService } from '../storage/auth-storage.service';\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class AuthGuard {\r\n\r\n constructor(\r\n private router: Router,\r\n private authStorageService: AuthStorageService\r\n ) { }\r\n\r\n IsUserAuth(): Observable<boolean | UrlTree>\r\n {\r\n\r\n return this.authStorageService.isLoggedInSub\r\n .pipe(\r\n map((isLoggedIn: boolean) => {\r\n\r\n if (!isLoggedIn || this.authStorageService.isExternalLogin){ \r\n let login: UrlTree = this.router.parseUrl(\"/auth/login\");\r\n \r\n return login;\r\n }\r\n\r\n return true;\r\n })\r\n\r\n );\r\n\r\n }\r\n\r\n canActivate(_route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree\r\n {\r\n return this.IsUserAuth();\r\n }\r\n\r\n canLoad(_route: Route): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree\r\n {\r\n return this.IsUserAuth();\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router, RouterStateSnapshot, ActivatedRouteSnapshot, Route, UrlTree } from '@angular/router';\r\n\r\nimport { Observable, lastValueFrom, of } from 'rxjs';\r\nimport { switchMap, take } from 'rxjs/operators';\r\n\r\nimport { ServerService } from '../server/server.service';\r\nimport { AuthStorageService } from '../storage/auth-storage.service';\r\nimport { AuthService } from '../auth.service';\r\n\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class ExternaLoginlGuard {\r\n\r\n constructor(\r\n private router: Router,\r\n private authService: AuthService,\r\n private authStorageService: AuthStorageService,\r\n\t\tprivate serverService: ServerService\r\n ) { }\r\n\r\n canActivate(_route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree\r\n {\r\n let param: string = atob(_route.paramMap.get('param')!);\r\n\r\n return this.IsUserAuth(param);\r\n }\r\n\r\n private navigateToError(): UrlTree {\r\n this.authStorageService.isExternalLogin = true;\r\n\r\n let login: UrlTree = this.router.parseUrl(\"/error-404\");\r\n\r\n return login;\r\n }\r\n\r\n private IsUserAuth(param: string): Observable<boolean | UrlTree>\r\n {\r\n return this.authStorageService.isLoggedInSub\r\n .pipe(\r\n take(1),\r\n switchMap((isLoggedIn: boolean) => {\r\n // Split dos parâmetros para o login externo\r\n var params = param.split('$');\r\n \r\n let domain = params[0];\r\n let user = params[1];\r\n let password = params[2];\r\n\r\n if (isLoggedIn && !this.authStorageService.isExternalLogin && this.authStorageService.dominio.toLowerCase() == domain.toLowerCase())\r\n {\r\n return of(true);\r\n };\r\n\r\n // antes alteração - se precisar voltar\r\n return this.logOnExternal(domain, user, password);\r\n })\r\n );\r\n\r\n }\r\n\r\n // Executa o Login Externo\r\n private async logOnExternal(domain: string, user: string, password: string): Promise<boolean | UrlTree> {\r\n const retConfig: boolean = await this.handleGetServer();\r\n\r\n if (!retConfig) {\r\n return this.navigateToError();\r\n }\r\n\r\n try {\r\n\r\n const error: boolean = await lastValueFrom(\r\n this.authService.loginExternal(domain, user, password)\r\n );\r\n\r\n if (error) {\r\n return this.navigateToError();\r\n }\r\n\r\n return true;\r\n } catch (error) {\r\n return this.navigateToError();\r\n }\r\n\r\n }\r\n\r\n // Retorna os parâmetros de configuração.\r\n private getServer(): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n\r\n this.serverService.getServer().subscribe({\r\n next: response => {\r\n resolve(true);\r\n },\r\n error: error => {\r\n reject(error);\r\n }\r\n\r\n });\r\n });\r\n\r\n }\r\n\r\n // Handle para busca dos parâmetros de configuração.\r\n private async handleGetServer(): Promise<boolean> {\r\n\r\n try\r\n {\r\n const response = await this.getServer();\r\n \r\n return true;\r\n } catch (error) {\r\n return false;\r\n }\r\n\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Route, Router, UrlSegment, UrlTree } from '@angular/router';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { AuthStorageService } from '../storage/auth-storage.service';\r\n\r\n/**\r\n * Protege a página de login de ser carregada quando o usuário já está logado,\r\n * redirecionando ele para a página home da aplicação.\r\n */\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class LoginGuard {\r\n\r\n constructor(\r\n private router: Router,\r\n private authStorageService: AuthStorageService\r\n ) { }\r\n\r\n /**\r\n * Verifica se pode carregar a tela de login caso o usuário não esteja logado e \r\n * a rota seja de login.\r\n * \r\n * @param route Rota atual\r\n * @param segments Segmentos.\r\n * @returns \r\n */\r\n canLoad(_route: Route, _segments: UrlSegment[]): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> {\r\n\r\n if (_route.path === \"auth/login\" && this.authStorageService.isLoggedInSub.value && !this.authStorageService.isExternalLogin) {\r\n return this.router.createUrlTree([\"/home\"]);\r\n }\r\n \r\n return true;\r\n }\r\n\r\n}\r\n","import { HttpEvent, HttpHandler, HttpHeaders, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { EnvironmentService } from './../environments/environments.service';\r\n\r\nimport { Observable, from, lastValueFrom } from 'rxjs';\r\n//import { environment } from '../environments/environments';\r\n\r\nimport { CheckUrlAndMethodService } from 'ngx-sp-infra';\r\nimport { AuthStorageService } from '../storage/auth-storage.service';\r\n\r\n/**\r\n * \\brief Intercepta uma chamada HTTP para inserir o usuário logado no header em conjunto\r\n * com o login para uso da API.\r\n *\r\n * Depende do serviço de autenticação.\r\n */\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class AuthAplicInterceptor implements HttpInterceptor {\r\n\r\n constructor(\r\n private authCheckService: CheckUrlAndMethodService,\r\n private _environmentService: EnvironmentService,\r\n private token: AuthStorageService\r\n ) { }\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n // convert promise to observable using 'from' operator\r\n return from(this.handle(req, next))\r\n }\r\n\r\n async handle(req: HttpRequest<any>, next: HttpHandler) {\r\n let changedReq: HttpRequest<any> = req;\r\n\r\n if (this.authCheckService.needsAuthRequest(req.url, req.method, this._environmentService.needsAuthAplic)) {\r\n // Verifica se o Token precisa ser renovado\r\n await this.token.renewToken();\r\n\r\n // Adiciona as autenticações necessárias ao servidor.\r\n let headers: HttpHeaders = req.headers.set(\r\n 'Authorization',\r\n `Bearer ${this.token.authToken}`\r\n );\r\n\r\n changedReq = req.clone({ headers: headers });\r\n }\r\n\r\n return await lastValueFrom(next.handle(changedReq));\r\n }\r\n\r\n /* >>> Comentado por Molina - 19/10/2023 - Lógica anterior\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n let changedReq: HttpRequest<any> = req;\r\n\r\n if (this.authCheckService.needsAuthRequest(req.url, req.method, environment.needsAuthAplic)) {\r\n\r\n // Adiciona as autenticações necessárias ao servidor.\r\n let headers: HttpHeaders = req.headers.set(\r\n 'Authorization',\r\n `Bearer ${ this.token.authToken }`\r\n );\r\n\r\n changedReq = req.clone({ headers: headers });\r\n }\r\n\r\n return next.handle(changedReq);\r\n }\r\n */\r\n\r\n}\r\n","import { HttpEvent, HttpHandler, HttpHeaders, HttpInterceptor, HttpRequest } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { EnvironmentService } from './../environments/environments.service';\r\n\r\nimport { Observable } from \"rxjs\";\r\n//import { environment } from \"../environments/environments\";\r\n\r\nimport { CheckUrlAndMethodService } from \"ngx-sp-infra\";\r\n\r\n/**\r\n * \\brief Intercepta uma chamada HTTP para inserir a autenticação da Sispro.\r\n */\r\n@Injectable(\r\n { providedIn: 'root' }\r\n)\r\nexport class AuthInfraInterceptor implements HttpInterceptor {\r\n\r\n constructor(\r\n private authCheckService: CheckUrlAndMethodService,\r\n private _environmentService: EnvironmentService\r\n ) { }\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n let changedReq: HttpRequest<any> = req;\r\n\r\n if (this.authCheckService.needsAuthRequest(req.url, req.method, this._environmentService.needsAuthInfra)) {\r\n // Adiciona as autenticações necessárias ao servidor. Autenticação básica.\r\n let headers: HttpHeaders = req.headers.set(\r\n \"Authorization\",\r\n `Basic ${btoa(`${ localStorage.getItem('configServerUser') }:${ localStorage.getItem('configServerPassword') }`) }\r\n `);\r\n\r\n changedReq = req.clone({ headers: headers });\r\n }\r\n\r\n return next.handle(changedReq);\r\n }\r\n\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.LibCustomStorageService","take","tap","i2","i3.AuthStorageService","i4.LibCustomLoginService","map","i1","i4.AuthService","i5.ServerService","i6.EnvironmentService","i7.AuthStorageService","i8.LibCustomLoginService","i10","i12","i1.MenuConfigService","i2.AuthStorageService","i3","i1.LibCustomMenuService","i4.SecondaryDropdownComponent","i1.AuthStorageService","i3.LibCustomMenuService","i4.MenuServicesService","i6","i7","i9","i7.AuthService","i8","i11.PrimaryDropdownComponent","i12.SelecaoEstabelecimentosModalComponent","i13.DynamicMenuComponent","i14.NotifSubmenuComponent","i3.ServerService","i5.AuthStorageService","i2.AuthService","i4.ServerService","i2.EnvironmentService"],"mappings":"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"}
|