forked from EVOgeek/Vmeda.Online
		
	MOBILE-3784 calendar: Support opening any month with page params
This commit is contained in:
		
							parent
							
								
									1a1e03bdd4
								
							
						
					
					
						commit
						ee4e8f6b05
					
				| @ -257,27 +257,9 @@ export class AddonCalendarCalendarComponent implements OnInit, DoCheck, OnDestro | |||||||
|      * Go to current month. |      * Go to current month. | ||||||
|      */ |      */ | ||||||
|     async goToCurrentMonth(): Promise<void> { |     async goToCurrentMonth(): Promise<void> { | ||||||
|         const manager = this.manager; |         const currentMoment = moment(); | ||||||
|         const slides = this.slides; |  | ||||||
|         if (!manager || !slides) { |  | ||||||
|             return; |  | ||||||
|         } |  | ||||||
| 
 | 
 | ||||||
|         const currentMonth = { |         await this.viewMonth(currentMoment.month() + 1, currentMoment.year()); | ||||||
|             moment: moment(), |  | ||||||
|         }; |  | ||||||
|         this.loaded = false; |  | ||||||
| 
 |  | ||||||
|         try { |  | ||||||
|             // Make sure the day is loaded.
 |  | ||||||
|             await manager.getSource().loadItem(currentMonth); |  | ||||||
| 
 |  | ||||||
|             slides.slideToItem(currentMonth); |  | ||||||
|         } catch (error) { |  | ||||||
|             CoreDomUtils.showErrorModalDefault(error, 'addon.calendar.errorloadevents', true); |  | ||||||
|         } finally { |  | ||||||
|             this.loaded = true; |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
| @ -319,6 +301,39 @@ export class AddonCalendarCalendarComponent implements OnInit, DoCheck, OnDestro | |||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * View a certain month and year. | ||||||
|  |      * | ||||||
|  |      * @param month Month. | ||||||
|  |      * @param year Year. | ||||||
|  |      */ | ||||||
|  |     async viewMonth(month: number, year: number): Promise<void> { | ||||||
|  |         const manager = this.manager; | ||||||
|  |         const slides = this.slides; | ||||||
|  |         if (!manager || !slides) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         this.loaded = false; | ||||||
|  |         const item = { | ||||||
|  |             moment: moment({ | ||||||
|  |                 year, | ||||||
|  |                 month: month - 1, | ||||||
|  |             }), | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         try { | ||||||
|  |             // Make sure the day is loaded.
 | ||||||
|  |             await manager.getSource().loadItem(item); | ||||||
|  | 
 | ||||||
|  |             slides.slideToItem(item); | ||||||
|  |         } catch (error) { | ||||||
|  |             CoreDomUtils.showErrorModalDefault(error, 'addon.calendar.errorloadevents', true); | ||||||
|  |         } finally { | ||||||
|  |             this.loaded = true; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Component destroyed. |      * Component destroyed. | ||||||
|      */ |      */ | ||||||
|  | |||||||
| @ -173,6 +173,10 @@ export class AddonCalendarIndexPage implements OnInit, OnDestroy { | |||||||
|             this.filter.filtered = !!this.filter.courseId; |             this.filter.filtered = !!this.filter.courseId; | ||||||
| 
 | 
 | ||||||
|             this.fetchData(true, false); |             this.fetchData(true, false); | ||||||
|  | 
 | ||||||
|  |             if (this.year !== undefined && this.month !== undefined && this.calendarComponent) { | ||||||
|  |                 this.calendarComponent.viewMonth(this.month, this.year); | ||||||
|  |             } | ||||||
|         }); |         }); | ||||||
| 
 | 
 | ||||||
|         const deepLinkManager = new CoreMainMenuDeepLinkManager(); |         const deepLinkManager = new CoreMainMenuDeepLinkManager(); | ||||||
|  | |||||||
| @ -18,6 +18,7 @@ import { | |||||||
| import { CoreSwipeSlidesItemsManager } from '@classes/items-management/swipe-slides-items-manager'; | import { CoreSwipeSlidesItemsManager } from '@classes/items-management/swipe-slides-items-manager'; | ||||||
| import { IonContent, IonSlides } from '@ionic/angular'; | import { IonContent, IonSlides } from '@ionic/angular'; | ||||||
| import { CoreDomUtils, VerticalPoint } from '@services/utils/dom'; | import { CoreDomUtils, VerticalPoint } from '@services/utils/dom'; | ||||||
|  | import { CoreUtils } from '@services/utils/utils'; | ||||||
| import { CoreDom } from '@singletons/dom'; | import { CoreDom } from '@singletons/dom'; | ||||||
| import { CoreEventObserver } from '@singletons/events'; | import { CoreEventObserver } from '@singletons/events'; | ||||||
| import { CoreMath } from '@singletons/math'; | import { CoreMath } from '@singletons/math'; | ||||||
| @ -43,6 +44,7 @@ export class CoreSwipeSlidesComponent<Item = unknown> implements OnChanges, OnDe | |||||||
|     protected hostElement: HTMLElement; |     protected hostElement: HTMLElement; | ||||||
|     protected unsubscribe?: () => void; |     protected unsubscribe?: () => void; | ||||||
|     protected resizeListener: CoreEventObserver; |     protected resizeListener: CoreEventObserver; | ||||||
|  |     protected updateSlidesPromise?: Promise<void>; | ||||||
| 
 | 
 | ||||||
|     constructor( |     constructor( | ||||||
|         elementRef: ElementRef<HTMLElement>, |         elementRef: ElementRef<HTMLElement>, | ||||||
| @ -51,7 +53,7 @@ export class CoreSwipeSlidesComponent<Item = unknown> implements OnChanges, OnDe | |||||||
|         this.hostElement = elementRef.nativeElement; |         this.hostElement = elementRef.nativeElement; | ||||||
| 
 | 
 | ||||||
|         this.resizeListener = CoreDom.onWindowResize(() => { |         this.resizeListener = CoreDom.onWindowResize(() => { | ||||||
|             this.slides?.update(); |             this.updateSlidesComponent(); | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -118,7 +120,22 @@ export class CoreSwipeSlidesComponent<Item = unknown> implements OnChanges, OnDe | |||||||
|      * @param speed Animation speed. |      * @param speed Animation speed. | ||||||
|      * @param runCallbacks Whether to run callbacks. |      * @param runCallbacks Whether to run callbacks. | ||||||
|      */ |      */ | ||||||
|     slideToIndex(index: number, speed?: number, runCallbacks?: boolean): void { |     async slideToIndex(index: number, speed?: number, runCallbacks?: boolean): Promise<void> { | ||||||
|  |         // If slides are being updated, wait for the update to finish.
 | ||||||
|  |         await this.updateSlidesPromise; | ||||||
|  | 
 | ||||||
|  |         const slides = this.slides; | ||||||
|  |         if (!slides) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // Verify that the number of slides matches the number of items.
 | ||||||
|  |         const slidesLength = await slides.length(); | ||||||
|  |         if (slidesLength !== this.items.length) { | ||||||
|  |             // Number doesn't match, do a new update to try to match them.
 | ||||||
|  |             await this.updateSlidesComponent(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         this.slides?.slideTo(index, speed, runCallbacks); |         this.slides?.slideTo(index, speed, runCallbacks); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -132,7 +149,7 @@ export class CoreSwipeSlidesComponent<Item = unknown> implements OnChanges, OnDe | |||||||
|     slideToItem(item: Item, speed?: number, runCallbacks?: boolean): void { |     slideToItem(item: Item, speed?: number, runCallbacks?: boolean): void { | ||||||
|         const index = this.manager?.getSource().getItemIndex(item) ?? -1; |         const index = this.manager?.getSource().getItemIndex(item) ?? -1; | ||||||
|         if (index != -1) { |         if (index != -1) { | ||||||
|             this.slides?.slideTo(index, speed, runCallbacks); |             this.slideToIndex(index, speed, runCallbacks); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -158,10 +175,14 @@ export class CoreSwipeSlidesComponent<Item = unknown> implements OnChanges, OnDe | |||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * Called when items list has been updated. |      * Called when items list has been updated. | ||||||
|      * |  | ||||||
|      * @param items New items. |  | ||||||
|      */ |      */ | ||||||
|     protected onItemsUpdated(): void { |     protected async onItemsUpdated(): Promise<void> { | ||||||
|  |         // Wait for slides to be added in DOM.
 | ||||||
|  |         await CoreUtils.nextTick(); | ||||||
|  | 
 | ||||||
|  |         // Update the slides component so the slides list reflects the new items.
 | ||||||
|  |         await this.updateSlidesComponent(); | ||||||
|  | 
 | ||||||
|         const currentItem = this.manager?.getSelectedItem(); |         const currentItem = this.manager?.getSelectedItem(); | ||||||
| 
 | 
 | ||||||
|         if (!currentItem || !this.manager) { |         if (!currentItem || !this.manager) { | ||||||
| @ -249,6 +270,24 @@ export class CoreSwipeSlidesComponent<Item = unknown> implements OnChanges, OnDe | |||||||
|         }; |         }; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * Update slides component. | ||||||
|  |      */ | ||||||
|  |     protected async updateSlidesComponent(): Promise<void> { | ||||||
|  |         if (!this.slides) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         const promise = this.slides.update(); | ||||||
|  |         this.updateSlidesPromise = promise; | ||||||
|  | 
 | ||||||
|  |         await promise; | ||||||
|  | 
 | ||||||
|  |         if (this.updateSlidesPromise === promise) { | ||||||
|  |             delete this.updateSlidesPromise; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * @inheritdoc |      * @inheritdoc | ||||||
|      */ |      */ | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user