MOBILE-3814 module: Add prefetch status on module activity cards
This commit is contained in:
		
							parent
							
								
									a34736bc60
								
							
						
					
					
						commit
						b185c0fc45
					
				@ -17,6 +17,8 @@
 | 
			
		||||
                    </core-format-text>
 | 
			
		||||
                    <ion-icon name="fas-lock" *ngIf="module.visible === 0 || module.uservisible === false"
 | 
			
		||||
                        [attr.aria-label]="'core.restricted' | translate"></ion-icon>
 | 
			
		||||
                    <ion-icon [name]="prefetchStatusIcon" *ngIf="prefetchStatusIcon" color="success"
 | 
			
		||||
                        [attr.aria-label]="prefetchStatusText | translate"></ion-icon>
 | 
			
		||||
                </p>
 | 
			
		||||
 | 
			
		||||
                <div class="core-module-additional-info">
 | 
			
		||||
 | 
			
		||||
@ -13,6 +13,7 @@
 | 
			
		||||
 | 
			
		||||
        .core-module-title .item-heading ion-icon {
 | 
			
		||||
            @include margin-horizontal(8px, null);
 | 
			
		||||
            vertical-align: middle;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .core-module-buttons,
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,12 @@ import {
 | 
			
		||||
} from '@features/course/services/course-helper';
 | 
			
		||||
import { CoreCourse } from '@features/course/services/course';
 | 
			
		||||
import { CoreCourseModuleDelegate, CoreCourseModuleHandlerButton } from '@features/course/services/module-delegate';
 | 
			
		||||
import {
 | 
			
		||||
    CoreCourseModulePrefetchDelegate,
 | 
			
		||||
    CoreCourseModulePrefetchHandler,
 | 
			
		||||
} from '@features/course/services/module-prefetch-delegate';
 | 
			
		||||
import { CoreConstants } from '@/core/constants';
 | 
			
		||||
import { CoreEventObserver, CoreEvents } from '@singletons/events';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Component to display a module entry in a list of modules.
 | 
			
		||||
@ -47,11 +53,16 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy {
 | 
			
		||||
    hasInfo = false;
 | 
			
		||||
    showLegacyCompletion = false; // Whether to show module completion in the old format.
 | 
			
		||||
    showManualCompletion = false; // Whether to show manual completion when completion conditions are disabled.
 | 
			
		||||
    prefetchStatusIcon = ''; // Module prefetch status icon.
 | 
			
		||||
    prefetchStatusText = ''; // Module prefetch status text.
 | 
			
		||||
    protected prefetchHandler?: CoreCourseModulePrefetchHandler;
 | 
			
		||||
 | 
			
		||||
    protected moduleStatusObserver?: CoreEventObserver;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Component being initialized.
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    ngOnInit(): void {
 | 
			
		||||
    async ngOnInit(): Promise<void> {
 | 
			
		||||
        this.modNameTranslated = CoreCourse.translateModuleName(this.module.modname) || '';
 | 
			
		||||
        this.showLegacyCompletion = !CoreSites.getCurrentSite()?.isVersionGreaterEqualThan('3.11');
 | 
			
		||||
        this.checkShowManualCompletion();
 | 
			
		||||
@ -70,6 +81,60 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy {
 | 
			
		||||
            (this.module.visible !== 0 && this.module.isStealth) ||
 | 
			
		||||
            (this.module.availabilityinfo)
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        if (this.module.handlerData?.showDownloadButton) {
 | 
			
		||||
            const status = await CoreCourseModulePrefetchDelegate.getModuleStatus(this.module, this.module.course);
 | 
			
		||||
            this.updateModuleStatus(status);
 | 
			
		||||
 | 
			
		||||
            // Listen for changes on this module status, even if download isn't enabled.
 | 
			
		||||
            this.prefetchHandler = CoreCourseModulePrefetchDelegate.getPrefetchHandlerFor(this.module.modname);
 | 
			
		||||
            if (!this.prefetchHandler) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            this.moduleStatusObserver = CoreEvents.on(CoreEvents.PACKAGE_STATUS_CHANGED, (data) => {
 | 
			
		||||
                if (this.module.id != data.componentId || data.component != this.prefetchHandler?.component) {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                let status = data.status;
 | 
			
		||||
                if (this.prefetchHandler.determineStatus) {
 | 
			
		||||
                    // Call determineStatus to get the right status to display.
 | 
			
		||||
                    status = this.prefetchHandler.determineStatus(this.module, status, true);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Update the status.
 | 
			
		||||
                this.updateModuleStatus(status);
 | 
			
		||||
            }, CoreSites.getCurrentSiteId());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Show module status.
 | 
			
		||||
     *
 | 
			
		||||
     * @param prefetchstatus Module status.
 | 
			
		||||
     */
 | 
			
		||||
    protected updateModuleStatus(prefetchstatus: string): void {
 | 
			
		||||
        if (!prefetchstatus) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        switch (prefetchstatus) {
 | 
			
		||||
            case CoreConstants.OUTDATED:
 | 
			
		||||
                this.prefetchStatusIcon = CoreConstants.ICON_OUTDATED;
 | 
			
		||||
                this.prefetchStatusText = 'core.outdated';
 | 
			
		||||
                break;
 | 
			
		||||
            case CoreConstants.DOWNLOADED:
 | 
			
		||||
                this.prefetchStatusIcon = CoreConstants.ICON_DOWNLOADED;
 | 
			
		||||
                this.prefetchStatusText = 'core.downloaded';
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                this.prefetchStatusIcon = '';
 | 
			
		||||
                this.prefetchStatusText = '';
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.module.handlerData?.updateStatus?.(prefetchstatus);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@ -109,10 +174,11 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Component destroyed.
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    ngOnDestroy(): void {
 | 
			
		||||
        this.module.handlerData?.onDestroy?.();
 | 
			
		||||
        this.moduleStatusObserver?.off();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user