MOBILE-3833 glossary: Fix index page
This commit is contained in:
		
							parent
							
								
									e628e039fc
								
							
						
					
					
						commit
						3cf8c1df74
					
				| @ -17,6 +17,7 @@ import { AfterViewInit, Component, OnDestroy, OnInit, Optional, ViewChild } from | ||||
| import { ActivatedRoute } from '@angular/router'; | ||||
| import { CoreListItemsManager } from '@classes/items-management/list-items-manager'; | ||||
| import { CoreRoutedItemsManagerSourcesTracker } from '@classes/items-management/routed-items-manager-sources-tracker'; | ||||
| import { CorePromisedValue } from '@classes/promised-value'; | ||||
| import { CoreSplitViewComponent } from '@components/split-view/split-view'; | ||||
| import { CoreCourseModuleMainActivityComponent } from '@features/course/classes/main-activity-component'; | ||||
| import { CoreCourseContentsPage } from '@features/course/pages/contents/contents'; | ||||
| @ -70,7 +71,7 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity | ||||
|     canAdd = false; | ||||
|     loadMoreError = false; | ||||
|     loadingMessage: string; | ||||
|     entries!: AddonModGlossaryEntriesManager; | ||||
|     promisedEntries: CorePromisedValue<AddonModGlossaryEntriesManager>; | ||||
|     hasOfflineRatings = false; | ||||
| 
 | ||||
|     protected syncEventName = AddonModGlossarySyncProvider.AUTO_SYNCED; | ||||
| @ -92,18 +93,23 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity | ||||
|         super('AddonModGlossaryIndexComponent', content, courseContentsPage); | ||||
| 
 | ||||
|         this.loadingMessage = Translate.instant('core.loading'); | ||||
|         this.promisedEntries = new CorePromisedValue(); | ||||
|     } | ||||
| 
 | ||||
|     get entries(): AddonModGlossaryEntriesManager | null { | ||||
|         return this.promisedEntries.value; | ||||
|     } | ||||
| 
 | ||||
|     get glossary(): AddonModGlossaryGlossary | undefined { | ||||
|         return this.entries.getSource().glossary; | ||||
|         return this.entries?.getSource().glossary; | ||||
|     } | ||||
| 
 | ||||
|     get isSearch(): boolean { | ||||
|         return this.entries.getSource().isSearch; | ||||
|         return this.entries?.getSource().isSearch ?? false; | ||||
|     } | ||||
| 
 | ||||
|     get hasSearched(): boolean { | ||||
|         return this.entries.getSource().hasSearched; | ||||
|         return this.entries?.getSource().hasSearched ?? false; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @ -118,10 +124,10 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity | ||||
|             [this.courseId, this.module.id, this.courseContentsPage ? `${AddonModGlossaryModuleHandlerService.PAGE_NAME}/` : ''], | ||||
|         ); | ||||
| 
 | ||||
|         this.entries = new AddonModGlossaryEntriesManager( | ||||
|         this.promisedEntries.resolve(new AddonModGlossaryEntriesManager( | ||||
|             source, | ||||
|             this.route.component, | ||||
|         ); | ||||
|         )); | ||||
| 
 | ||||
|         this.sourceUnsubscribe = source.addListener({ | ||||
|             onItemsUpdated: items => this.hasOffline = !!items.find(item => source.isOfflineEntry(item)), | ||||
| @ -156,13 +162,10 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity | ||||
|      * @inheritdoc | ||||
|      */ | ||||
|     async ngAfterViewInit(): Promise<void> { | ||||
|         const entries = await this.promisedEntries; | ||||
| 
 | ||||
|         await this.loadContent(false, true); | ||||
| 
 | ||||
|         if (!this.glossary) { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         await this.entries.start(this.splitView); | ||||
|         await entries.start(this.splitView); | ||||
| 
 | ||||
|         try { | ||||
|             CoreCourse.checkModuleCompletion(this.courseId, this.module.completiondata); | ||||
| @ -175,8 +178,10 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity | ||||
|      * @inheritdoc | ||||
|      */ | ||||
|     protected async fetchContent(refresh: boolean = false, sync: boolean = false, showErrors: boolean = false): Promise<void> { | ||||
|         const entries = await this.promisedEntries; | ||||
| 
 | ||||
|         try { | ||||
|             await this.entries.getSource().loadGlossary(); | ||||
|             await entries.getSource().loadGlossary(); | ||||
| 
 | ||||
|             if (!this.glossary) { | ||||
|                 return; | ||||
| @ -187,7 +192,7 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity | ||||
| 
 | ||||
|             this.dataRetrieved.emit(this.glossary); | ||||
| 
 | ||||
|             if (!this.entries.getSource().fetchMode) { | ||||
|             if (!entries.getSource().fetchMode) { | ||||
|                 this.switchMode('letter_all'); | ||||
|             } | ||||
| 
 | ||||
| @ -198,7 +203,7 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity | ||||
| 
 | ||||
|             const [hasOfflineRatings] = await Promise.all([ | ||||
|                 CoreRatingOffline.hasRatings('mod_glossary', 'entry', ContextLevel.MODULE, this.glossary.coursemodule), | ||||
|                 refresh ? this.entries.reload() : this.entries.load(), | ||||
|                 refresh ? entries.reload() : entries.load(), | ||||
|             ]); | ||||
| 
 | ||||
|             this.hasOfflineRatings = hasOfflineRatings; | ||||
| @ -211,7 +216,7 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity | ||||
|      * @inheritdoc | ||||
|      */ | ||||
|     protected async invalidateContent(): Promise<void> { | ||||
|         await this.entries.getSource().invalidateCache(); | ||||
|         await this.entries?.getSource().invalidateCache(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @ -250,7 +255,7 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity | ||||
|      * @param mode New mode. | ||||
|      */ | ||||
|     protected switchMode(mode: AddonModGlossaryFetchMode): void { | ||||
|         this.entries.getSource().switchMode(mode); | ||||
|         this.entries?.getSource().switchMode(mode); | ||||
| 
 | ||||
|         switch (mode) { | ||||
|             case 'author_all': | ||||
| @ -304,10 +309,12 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity | ||||
|      * @return Promise resolved when done. | ||||
|      */ | ||||
|     async loadMoreEntries(infiniteComplete?: () => void): Promise<void> { | ||||
|         const entries = await this.promisedEntries; | ||||
| 
 | ||||
|         try { | ||||
|             this.loadMoreError = false; | ||||
| 
 | ||||
|             await this.entries.load(); | ||||
|             await entries.load(); | ||||
|         } catch (error) { | ||||
|             this.loadMoreError = true; | ||||
|             CoreDomUtils.showErrorModalDefault(error, 'addon.mod_glossary.errorloadingentries', true); | ||||
| @ -326,7 +333,8 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         const previousMode = this.entries.getSource().fetchMode; | ||||
|         const entries = await this.promisedEntries; | ||||
|         const previousMode = entries.getSource().fetchMode; | ||||
|         const newMode = await CoreDomUtils.openPopover<AddonModGlossaryFetchMode>({ | ||||
|             component: AddonModGlossaryModePickerPopoverComponent, | ||||
|             componentProps: { | ||||
| @ -357,6 +365,10 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity | ||||
|      * Toggles between search and fetch mode. | ||||
|      */ | ||||
|     toggleSearch(): void { | ||||
|         if (!this.entries) { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         if (this.isSearch) { | ||||
|             const fetchMode = this.entries.getSource().fetchMode; | ||||
| 
 | ||||
| @ -393,7 +405,7 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity | ||||
|      * Opens new entry editor. | ||||
|      */ | ||||
|     openNewEntry(): void { | ||||
|         this.entries.select(AddonModGlossaryEntriesSource.NEW_ENTRY); | ||||
|         this.entries?.select(AddonModGlossaryEntriesSource.NEW_ENTRY); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @ -405,7 +417,7 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity | ||||
|         this.loadingMessage = Translate.instant('core.searching'); | ||||
|         this.loaded = false; | ||||
| 
 | ||||
|         this.entries.getSource().search(query); | ||||
|         this.entries?.getSource().search(query); | ||||
|         this.loadContent(); | ||||
|     } | ||||
| 
 | ||||
| @ -419,7 +431,7 @@ export class AddonModGlossaryIndexComponent extends CoreCourseModuleMainActivity | ||||
|         this.ratingOfflineObserver?.off(); | ||||
|         this.ratingSyncObserver?.off(); | ||||
|         this.sourceUnsubscribe?.call(null); | ||||
|         this.entries.destroy(); | ||||
|         this.entries?.destroy(); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user