forked from CIT/Vmeda.Online
		
	MOBILE-3320 forum: Fix offline discussions
This commit is contained in:
		
							parent
							
								
									18ac86d793
								
							
						
					
					
						commit
						fe1a24dd70
					
				@ -11,12 +11,12 @@
 | 
			
		||||
            [priority]="750" content="{{'addon.blog.blog' | translate}}" [iconAction]="'far-newspaper'" (action)="gotoBlog()">
 | 
			
		||||
        </core-context-menu-item>
 | 
			
		||||
        <core-context-menu-item
 | 
			
		||||
            *ngIf="discussions.onlineLoaded && discussions.loaded && !(hasOffline || hasOfflineRatings) && isOnline"
 | 
			
		||||
            *ngIf="discussions.loaded && !(hasOffline || hasOfflineRatings) && isOnline"
 | 
			
		||||
            [priority]="700" [content]="'addon.mod_forum.refreshdiscussions' | translate" [iconAction]="refreshIcon" [closeOnClick]="false"
 | 
			
		||||
            (action)="doRefresh(null, $event)">
 | 
			
		||||
        </core-context-menu-item>
 | 
			
		||||
        <core-context-menu-item
 | 
			
		||||
            *ngIf="discussions.onlineLoaded && discussions.loaded && (hasOffline || hasOfflineRatings) && isOnline"
 | 
			
		||||
            *ngIf="discussions.loaded && (hasOffline || hasOfflineRatings) && isOnline"
 | 
			
		||||
            [priority]="600" [content]="'core.settings.synchronizenow' | translate" [iconAction]="syncIcon" [closeOnClick]="false"
 | 
			
		||||
            (action)="doRefresh(null, $event, true)">
 | 
			
		||||
        </core-context-menu-item>
 | 
			
		||||
@ -39,11 +39,11 @@
 | 
			
		||||
 | 
			
		||||
<!-- Content. -->
 | 
			
		||||
<core-split-view>
 | 
			
		||||
    <ion-refresher slot="fixed" [disabled]="!discussions.onlineLoaded || !discussions.loaded" (ionRefresh)="doRefresh($event.target)">
 | 
			
		||||
    <ion-refresher slot="fixed" [disabled]="!discussions.loaded" (ionRefresh)="doRefresh($event.target)">
 | 
			
		||||
        <ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
 | 
			
		||||
    </ion-refresher>
 | 
			
		||||
 | 
			
		||||
    <core-loading [hideUntil]="discussions.onlineLoaded && discussions.loaded">
 | 
			
		||||
    <core-loading [hideUntil]="discussions.loaded">
 | 
			
		||||
        <!-- Activity info. -->
 | 
			
		||||
        <core-course-module-info *ngIf="showCompletion" [module]="module" [showManualCompletion]="true"
 | 
			
		||||
            (completionChanged)="onCompletionChange()">
 | 
			
		||||
@ -158,7 +158,7 @@
 | 
			
		||||
            </ion-item>
 | 
			
		||||
 | 
			
		||||
            <core-infinite-loading
 | 
			
		||||
                [enabled]="discussions.onlineLoaded && !discussions.completed" [error]="fetchMoreDiscussionsFailed"
 | 
			
		||||
                [enabled]="discussions.onlineLoaded && !discussions.completed" [error]="discussions.fetchFailed"
 | 
			
		||||
                (action)="fetchMoreDiscussions($event)">
 | 
			
		||||
            </core-infinite-loading>
 | 
			
		||||
        </ng-container>
 | 
			
		||||
 | 
			
		||||
@ -73,7 +73,6 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom
 | 
			
		||||
    moduleName = 'forum';
 | 
			
		||||
    descriptionNote?: string;
 | 
			
		||||
    forum?: AddonModForumData;
 | 
			
		||||
    fetchMoreDiscussionsFailed = false;
 | 
			
		||||
    discussions: AddonModForumDiscussionsManager;
 | 
			
		||||
    canAddDiscussion = false;
 | 
			
		||||
    addDiscussionText!: string;
 | 
			
		||||
@ -237,7 +236,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom
 | 
			
		||||
     * @param showErrors Wether to show errors to the user or hide them.
 | 
			
		||||
     */
 | 
			
		||||
    protected async fetchContent(refresh: boolean = false, sync: boolean = false, showErrors: boolean = false): Promise<void> {
 | 
			
		||||
        this.fetchMoreDiscussionsFailed = false;
 | 
			
		||||
        this.discussions.fetchFailed = false;
 | 
			
		||||
 | 
			
		||||
        const promises: Promise<void>[] = [];
 | 
			
		||||
 | 
			
		||||
@ -259,7 +258,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom
 | 
			
		||||
            if (refresh) {
 | 
			
		||||
                CoreDomUtils.showErrorModalDefault(error, 'addon.mod_forum.errorgetforum', true);
 | 
			
		||||
 | 
			
		||||
                this.fetchMoreDiscussionsFailed = true; // Set to prevent infinite calls with infinite-loading.
 | 
			
		||||
                this.discussions.fetchFailed = true; // Set to prevent infinite calls with infinite-loading.
 | 
			
		||||
            } else {
 | 
			
		||||
                // Get forum failed, retry without using cache since it might be a new activity.
 | 
			
		||||
                await this.refreshContent(sync);
 | 
			
		||||
@ -422,7 +421,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom
 | 
			
		||||
     */
 | 
			
		||||
    protected async fetchDiscussions(refresh: boolean): Promise<void> {
 | 
			
		||||
        const forum = this.forum!;
 | 
			
		||||
        this.fetchMoreDiscussionsFailed = false;
 | 
			
		||||
        this.discussions.fetchFailed = false;
 | 
			
		||||
 | 
			
		||||
        if (refresh) {
 | 
			
		||||
            this.page = 0;
 | 
			
		||||
@ -497,7 +496,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom
 | 
			
		||||
        } catch (error) {
 | 
			
		||||
            CoreDomUtils.showErrorModalDefault(error, 'addon.mod_forum.errorgetforum', true);
 | 
			
		||||
 | 
			
		||||
            this.fetchMoreDiscussionsFailed = true;
 | 
			
		||||
            this.discussions.fetchFailed = true;
 | 
			
		||||
        } finally {
 | 
			
		||||
            complete();
 | 
			
		||||
        }
 | 
			
		||||
@ -715,6 +714,7 @@ type DiscussionItem = AddonModForumDiscussion | AddonModForumOfflineDiscussion |
 | 
			
		||||
class AddonModForumDiscussionsManager extends CorePageItemsListManager<DiscussionItem> {
 | 
			
		||||
 | 
			
		||||
    onlineLoaded = false;
 | 
			
		||||
    fetchFailed = false;
 | 
			
		||||
 | 
			
		||||
    private discussionsPathPrefix: string;
 | 
			
		||||
    private component: AddonModForumIndexComponent;
 | 
			
		||||
@ -726,6 +726,10 @@ class AddonModForumDiscussionsManager extends CorePageItemsListManager<Discussio
 | 
			
		||||
        this.discussionsPathPrefix = discussionsPathPrefix;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get loaded(): boolean {
 | 
			
		||||
        return super.loaded && (this.onlineLoaded || this.fetchFailed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get onlineDiscussions(): AddonModForumDiscussion[] {
 | 
			
		||||
        return this.items.filter(discussion => this.isOnlineDiscussion(discussion)) as AddonModForumDiscussion[];
 | 
			
		||||
    }
 | 
			
		||||
@ -782,6 +786,7 @@ class AddonModForumDiscussionsManager extends CorePageItemsListManager<Discussio
 | 
			
		||||
        const otherDiscussions = this.items.filter(discussion => !this.isOnlineDiscussion(discussion));
 | 
			
		||||
 | 
			
		||||
        this.setItems(otherDiscussions.concat(onlineDiscussions), hasMoreItems);
 | 
			
		||||
        this.onlineLoaded = true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@ -795,15 +800,6 @@ class AddonModForumDiscussionsManager extends CorePageItemsListManager<Discussio
 | 
			
		||||
        this.setItems((offlineDiscussions as DiscussionItem[]).concat(otherDiscussions), this.hasMoreItems);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    setItems(discussions: DiscussionItem[], hasMoreItems: boolean = false): void {
 | 
			
		||||
        super.setItems(discussions, hasMoreItems);
 | 
			
		||||
 | 
			
		||||
        this.onlineLoaded = this.onlineLoaded || discussions.some(discussion => this.isOnlineDiscussion(discussion));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user