MOBILE-3739 chat: Implement on leave guard

main
Pau Ferrer Ocaña 2021-05-17 11:52:44 +02:00
parent 2f8333d516
commit 8e20e05afc
4 changed files with 24 additions and 3 deletions

View File

@ -430,6 +430,7 @@
"addon.mod_book.toc": "book",
"addon.mod_chat.beep": "chat",
"addon.mod_chat.chatreport": "chat",
"addon.mod_chat.confirmloss": "local_moodlemobileapp",
"addon.mod_chat.currentusers": "chat",
"addon.mod_chat.enterchat": "chat",
"addon.mod_chat.entermessage": "chat",

View File

@ -22,6 +22,7 @@ import { AddonModChatSessionMessagesPage } from './pages/session-messages/sessio
import { CoreScreen } from '@services/screen';
import { conditionalRoutes } from '@/app/app-routing.module';
import { AddonModChatSessionsPage } from './pages/sessions/sessions';
import { CanLeaveGuard } from '@guards/can-leave';
const commonRoutes: Routes = [
{
@ -31,6 +32,7 @@ const commonRoutes: Routes = [
{
path: ':courseId/:cmId/chat',
component: AddonModChatChatPage,
canDeactivate: [CanLeaveGuard],
},
];

View File

@ -1,6 +1,7 @@
{
"beep": "Beep",
"chatreport": "Chat sessions",
"confirmloss": "Are you sure? Chat history can be lost.",
"currentusers": "Current users",
"enterchat": "Click here to enter the chat now",
"entermessage": "Enter your message",
@ -25,4 +26,4 @@
"showincompletesessions": "Show incomplete sessions",
"talk": "Talk",
"viewreport": "View past chat sessions"
}
}

View File

@ -15,13 +15,14 @@
import { Component, ViewChild, OnInit, OnDestroy } from '@angular/core';
import { CoreAnimations } from '@components/animations';
import { CoreSendMessageFormComponent } from '@components/send-message-form/send-message-form';
import { CanLeave } from '@guards/can-leave';
import { IonContent } from '@ionic/angular';
import { CoreApp } from '@services/app';
import { CoreNavigator } from '@services/navigator';
import { CoreSites } from '@services/sites';
import { CoreDomUtils } from '@services/utils/dom';
import { CoreUtils } from '@services/utils/utils';
import { Network, NgZone } from '@singletons';
import { Network, NgZone, Translate } from '@singletons';
import { CoreEventObserver, CoreEvents } from '@singletons/events';
import { Subscription } from 'rxjs';
import { AddonModChatUsersModalComponent, AddonModChatUsersModalResult } from '../../components/users-modal/users-modal';
@ -37,7 +38,7 @@ import { AddonModChatFormattedMessage, AddonModChatHelper } from '../../services
animations: [CoreAnimations.SLIDE_IN_OUT],
styleUrls: ['chat.scss', '../../../../messages/pages/discussion/discussion.scss'],
})
export class AddonModChatChatPage implements OnInit, OnDestroy {
export class AddonModChatChatPage implements OnInit, OnDestroy, CanLeave {
@ViewChild(IonContent) content?: IonContent;
@ViewChild(CoreSendMessageFormComponent) sendMessageForm?: CoreSendMessageFormComponent;
@ -381,6 +382,22 @@ export class AddonModChatChatPage implements OnInit, OnDestroy {
// });
}
/**
* Check if we can leave the page or not.
*
* @return Resolved with true if we can leave it, rejected if not.
*/
async canLeave(): Promise<boolean> {
if (! this.messages.some((message) => !message.special)) {
return true;
}
// Modified, confirm user wants to go back.
await CoreDomUtils.showConfirm(Translate.instant('addon.mod_chat.confirmloss'));
return true;
}
/**
* @inheritdoc
*/