diff --git a/src/app/modals/session-expired-modal/session-expired-modal.module.ts b/src/app/modals/session-expired-modal/session-expired-modal.module.ts new file mode 100644 index 000000000..a3ae0ec15 --- /dev/null +++ b/src/app/modals/session-expired-modal/session-expired-modal.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { IonicModule } from '@ionic/angular'; +import { SessionExpiredModalPage } from './session-expired-modal.page'; + +@NgModule({ + declarations: [SessionExpiredModalPage], + imports: [CommonModule, IonicModule], + exports: [SessionExpiredModalPage], +}) +export class SessionExpiredModalPageModule {} diff --git a/src/app/modals/session-expired-modal/session-expired-modal.page.html b/src/app/modals/session-expired-modal/session-expired-modal.page.html new file mode 100644 index 000000000..5f49a1686 --- /dev/null +++ b/src/app/modals/session-expired-modal/session-expired-modal.page.html @@ -0,0 +1,8 @@ + +
+ +

Sessão expirada

+

{{ message }}

+ OK +
+
diff --git a/src/app/modals/session-expired-modal/session-expired-modal.page.scss b/src/app/modals/session-expired-modal/session-expired-modal.page.scss new file mode 100644 index 000000000..16e0c6505 --- /dev/null +++ b/src/app/modals/session-expired-modal/session-expired-modal.page.scss @@ -0,0 +1,39 @@ +.session-expired-content { + --background: transparent; +} + +.session-expired-inner { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + min-height: 100%; + max-width: 400px; + margin: 0 auto; + text-align: center; +} + +.session-expired-icon { + width: 48px; + height: 48px; + margin-bottom: 16px; +} + +.session-expired-title { + margin: 0 0 12px; + font-size: 1.25rem; + font-weight: 600; +} + +.session-expired-text { + margin: 0 0 24px; + line-height: 1.4; + font-size: 1rem; + color: var(--ion-color-medium-shade, #666); +} + +.session-expired-btn { + width: 100%; + max-width: 280px; + margin: 0; +} diff --git a/src/app/services/session-expired-modal.service.ts b/src/app/services/session-expired-modal.service.ts new file mode 100644 index 000000000..4586893fa --- /dev/null +++ b/src/app/services/session-expired-modal.service.ts @@ -0,0 +1,43 @@ +import { Injectable } from '@angular/core'; +import { ModalController } from '@ionic/angular'; +import { SessionExpiredModalPage } from 'src/app/modals/session-expired-modal/session-expired-modal.page'; + +@Injectable({ + providedIn: 'root', +}) +export class SessionExpiredModalService { + private open = false; + + constructor(private modalCtrl: ModalController) {} + + async present(message: string, onOk: () => void): Promise { + if (this.open) { + return; + } + this.open = true; + const modal = await this.modalCtrl.create({ + component: SessionExpiredModalPage, + componentProps: { + message, + onConfirm: () => { + this.open = false; + modal.dismiss(); + document.querySelectorAll('ion-modal').forEach((e: any) => e.remove()); + document.querySelectorAll('.popover-viewport').forEach((e: any) => e.remove()); + document.querySelectorAll('.loading-blocker').forEach((e: any) => e.remove()); + + onOk(); + }, + }, + backdropDismiss: true, + canDismiss: false, + keyboardClose: false, + showBackdrop: true, + cssClass: 'session-expired-modal-blocking keep-this', + }); + await modal.present(); + modal.onDidDismiss().then(() => { + this.open = false; + }); + } +}