Skip to content

Commit 6b0fbbe

Browse files
committed
MOBILE-4081 forum: Display selectors if loading discussions fail
1 parent f230c16 commit 6b0fbbe

File tree

5 files changed

+41
-13
lines changed

5 files changed

+41
-13
lines changed

scripts/langindex.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -639,6 +639,8 @@
639639
"addon.mod_forum.erroremptysubject": "forum",
640640
"addon.mod_forum.errorgetforum": "local_moodlemobileapp",
641641
"addon.mod_forum.errorgetgroups": "local_moodlemobileapp",
642+
"addon.mod_forum.errorloadingsortingorder": "local_moodlemobileapp",
643+
"addon.mod_forum.errorloadingsortingorderdetails": "local_moodlemobileapp",
642644
"addon.mod_forum.errorposttoallgroups": "local_moodlemobileapp",
643645
"addon.mod_forum.favourites": "forum",
644646
"addon.mod_forum.favouriteupdated": "forum",

src/addons/mod/forum/classes/forum-discussions-source.ts

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export class AddonModForumDiscussionsSource extends CoreRoutedItemsManagerSource
4444
groupInfo?: CoreGroupInfo;
4545
allPartsPermissions?: AddonModForumCanAddDiscussion;
4646
canAddDiscussionToGroup = true;
47+
errorLoadingDiscussions = false;
4748

4849
constructor(courseId: number, cmId: number, discussionsPathPrefix: string) {
4950
super();
@@ -222,13 +223,27 @@ export class AddonModForumDiscussionsSource extends CoreRoutedItemsManagerSource
222223
throw new Error('Can\'t load discussions without a forum or selected sort order');
223224
}
224225

225-
const response = await AddonModForum.getDiscussions(this.forum.id, {
226-
cmId: this.forum.cmid,
227-
sortOrder: this.selectedSortOrder.value,
228-
page,
229-
groupId: this.groupId,
230-
});
231-
let discussions = response.discussions;
226+
let discussions: AddonModForumDiscussion[] = [];
227+
let canLoadMore = false;
228+
try {
229+
const response = await AddonModForum.getDiscussions(this.forum.id, {
230+
cmId: this.forum.cmid,
231+
sortOrder: this.selectedSortOrder.value,
232+
page,
233+
groupId: this.groupId,
234+
});
235+
236+
discussions = response.discussions;
237+
canLoadMore = response.canLoadMore;
238+
this.errorLoadingDiscussions = false;
239+
} catch (error) {
240+
if (page > 0 || CoreUtils.isWebServiceError(error)) {
241+
throw error;
242+
}
243+
244+
// Error loading first discussions, use an empty list.
245+
this.errorLoadingDiscussions = true;
246+
}
232247

233248
if (this.usesGroups) {
234249
discussions = await AddonModForum.formatDiscussionsGroups(this.forum.cmid, discussions);
@@ -254,7 +269,7 @@ export class AddonModForumDiscussionsSource extends CoreRoutedItemsManagerSource
254269
}
255270
}
256271

257-
return { discussions, canLoadMore: response.canLoadMore };
272+
return { discussions, canLoadMore };
258273
}
259274

260275
/**

src/addons/mod/forum/components/index/index.html

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,22 @@
5454
</ion-card>
5555

5656
<ng-container *ngIf="forum">
57-
<core-empty-box *ngIf="!discussions || !discussions.hasDiscussions" icon="far-comments"
58-
[message]="'addon.mod_forum.forumnodiscussionsyet' | translate">
59-
</core-empty-box>
60-
61-
<div *ngIf="discussions?.hasDiscussions && sortingAvailable && selectedSortOrder" class="ion-text-wrap">
57+
<div *ngIf="discussions && sortingAvailable && selectedSortOrder" class="ion-text-wrap">
6258
<core-combobox [modalOptions]="sortOrderSelectorModalOptions" listboxId="addon-mod-forum-sort-selector"
6359
[label]="('core.sort' | translate)" (onChange)="setSortOrder($event)" [selection]="selectedSortOrder.label | translate"
6460
interface="modal">
6561
</core-combobox>
6662
</div>
6763

64+
<core-empty-box *ngIf="!discussions || (!discussions.hasDiscussions && !errorLoadingDiscussions)" icon="far-comments"
65+
[message]="'addon.mod_forum.forumnodiscussionsyet' | translate">
66+
</core-empty-box>
67+
68+
<core-empty-box *ngIf="errorLoadingDiscussions" icon="fas-exclamation-triangle"
69+
[message]="'addon.mod_forum.errorloadingsortingorder' | translate">
70+
<p>{{ 'addon.mod_forum.errorloadingsortingorderdetails' | translate }}</p>
71+
</core-empty-box>
72+
6873
<ion-item *ngFor="let discussion of discussionsItems" class="addon-mod-forum-discussion" detail="true"
6974
[lines]="discussion.groupname && 'none'" [attr.aria-current]="discussions?.getItemAriaCurrent(discussion)"
7075
(click)="discussions?.select(discussion)" button>

src/addons/mod/forum/components/index/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,10 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom
152152
return !!(this.forum && this.canAddDiscussion && this.discussions?.getSource().canAddDiscussionToGroup);
153153
}
154154

155+
get errorLoadingDiscussions(): boolean {
156+
return !!this.discussions?.getSource().errorLoadingDiscussions;
157+
}
158+
155159
/**
156160
* Check whether a discussion is online.
157161
*

src/addons/mod/forum/lang.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
"erroremptysubject": "Post subject cannot be empty.",
2929
"errorgetforum": "Error getting forum data.",
3030
"errorgetgroups": "Error getting group settings.",
31+
"errorloadingsortingorder": "Forum not available in this sorting order",
32+
"errorloadingsortingorderdetails": "Try changing the sorting order or going online to view this forum.",
3133
"errorposttoallgroups": "Could not create new discussion in all groups.",
3234
"favourites": "Starred",
3335
"favouriteupdated": "Your star option has been updated.",

0 commit comments

Comments
 (0)