MOBILE-2581 forum: Open new discussion after creating it

main
dpalou 2018-09-21 13:56:35 +02:00
parent 93421297fa
commit c2d53ba38c
2 changed files with 34 additions and 6 deletions

View File

@ -81,8 +81,10 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom
}, this.siteId);
// Listen for discussions added. When a discussion is added, we reload the data.
this.newDiscObserver = this.eventsProvider.on(AddonModForumProvider.NEW_DISCUSSION_EVENT, this.eventReceived.bind(this));
this.replyObserver = this.eventsProvider.on(AddonModForumProvider.REPLY_DISCUSSION_EVENT, this.eventReceived.bind(this));
this.newDiscObserver = this.eventsProvider.on(AddonModForumProvider.NEW_DISCUSSION_EVENT,
this.eventReceived.bind(this, true));
this.replyObserver = this.eventsProvider.on(AddonModForumProvider.REPLY_DISCUSSION_EVENT,
this.eventReceived.bind(this, false));
// Select the current opened discussion.
this.viewDiscObserver = this.eventsProvider.on(AddonModForumProvider.VIEW_DISCUSSION_EVENT, (data) => {
@ -389,11 +391,33 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom
/**
* Function called when we receive an event of new discussion or reply to discussion.
*
* @param {boolean} isNewDiscussion Whether it's a new discussion event.
* @param {any} data Event data.
*/
protected eventReceived(data: any): void {
protected eventReceived(isNewDiscussion: boolean, data: any): void {
if ((this.forum && this.forum.id === data.forumId) || data.cmId === this.module.id) {
this.showLoadingAndRefresh(false);
if (isNewDiscussion && this.splitviewCtrl.isOn()) {
// Discussion added, clear details page.
this.splitviewCtrl.emptyDetails();
}
this.showLoadingAndRefresh(false).finally(() => {
// If it's a new discussion in tablet mode, try to open it.
if (isNewDiscussion && this.splitviewCtrl.isOn()) {
if (data.discussionId) {
// Discussion sent to server, search it in the list of discussions.
const discussion = this.discussions.find((disc) => { return disc.discussion == data.discussionId; });
if (discussion) {
this.openDiscussion(discussion);
}
} else if (data.discTimecreated) {
// It's an offline discussion, open it.
this.openNewDiscussion(data.discTimecreated);
}
}
});
// Check completion since it could be configured to complete once the user adds a new discussion or replies.
this.courseProvider.checkModuleCompletion(this.courseId, this.module.completionstatus);
@ -430,6 +454,8 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom
timeCreated: timeCreated,
};
this.splitviewCtrl.push('AddonModForumNewDiscussionPage', params);
this.selectedDiscussion = 0;
}
/**

View File

@ -354,12 +354,14 @@ export class AddonModForumNewDiscussionPage implements OnDestroy {
* Convenience function to update or return to discussions depending on device.
*
* @param {number} [discussionId] Id of the new discussion.
* @param {number} [discTimecreated] The time created of the discussion (if offline).
*/
protected returnToDiscussions(discussionId?: number): void {
protected returnToDiscussions(discussionId?: number, discTimecreated?: number): void {
const data: any = {
forumId: this.forumId,
cmId: this.cmId,
discussionId: discussionId,
discTimecreated: discTimecreated
};
this.eventsProvider.trigger(AddonModForumProvider.NEW_DISCUSSION_EVENT, data, this.sitesProvider.getCurrentSiteId());
@ -467,7 +469,7 @@ export class AddonModForumNewDiscussionPage implements OnDestroy {
this.forumHelper.deleteNewDiscussionStoredFiles(this.forumId, discTimecreated);
}
this.returnToDiscussions(discussionId);
this.returnToDiscussions(discussionId, discTimecreated);
}).catch((message) => {
this.domUtils.showErrorModalDefault(message, 'addon.mod_forum.cannotcreatediscussion', true);
}).finally(() => {