forked from EVOgeek/Vmeda.Online
		
	MOBILE-3833 usertours: Watch collapsible header
This commit is contained in:
		
							parent
							
								
									c644eeb1e1
								
							
						
					
					
						commit
						740b5332ce
					
				| @ -23,11 +23,26 @@ import { ScrollDetail } from '@ionic/core'; | |||||||
| import { CoreUtils } from '@services/utils/utils'; | import { CoreUtils } from '@services/utils/utils'; | ||||||
| import { CoreComponentsRegistry } from '@singletons/components-registry'; | import { CoreComponentsRegistry } from '@singletons/components-registry'; | ||||||
| import { CoreDom } from '@singletons/dom'; | import { CoreDom } from '@singletons/dom'; | ||||||
| import { CoreEventObserver } from '@singletons/events'; | import { CoreEventObserver, CoreEvents } from '@singletons/events'; | ||||||
| import { CoreMath } from '@singletons/math'; | import { CoreMath } from '@singletons/math'; | ||||||
| import { Subscription } from 'rxjs'; | import { Subscription } from 'rxjs'; | ||||||
| import { CoreFormatTextDirective } from './format-text'; | import { CoreFormatTextDirective } from './format-text'; | ||||||
| 
 | 
 | ||||||
|  | declare module '@singletons/events' { | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Augment CoreEventsData interface with events specific to this service. | ||||||
|  |      * | ||||||
|  |      * @see https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation
 | ||||||
|  |      */ | ||||||
|  |     export interface CoreEventsData { | ||||||
|  |         [COLLAPSIBLE_HEADER_UPDATED]: { collapsed: boolean }; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export const COLLAPSIBLE_HEADER_UPDATED = 'collapsible_header_updated'; | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * Directive to make <ion-header> collapsible. |  * Directive to make <ion-header> collapsible. | ||||||
|  * |  * | ||||||
| @ -151,6 +166,27 @@ export class CoreCollapsibleHeaderDirective implements OnInit, OnChanges, OnDest | |||||||
|         this.visiblePromise?.cancel(); |         this.visiblePromise?.cancel(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * Update collapsed status of the header. | ||||||
|  |      * | ||||||
|  |      * @param collapsed Whether header is collapsed or not. | ||||||
|  |      */ | ||||||
|  |     protected setCollapsed(collapsed: boolean): void { | ||||||
|  |         if (!this.page) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         const isCollapsed = this.page.classList.contains('collapsible-header-page-is-collapsed'); | ||||||
|  | 
 | ||||||
|  |         if (isCollapsed === collapsed) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         this.page.classList.toggle('collapsible-header-page-is-collapsed', collapsed); | ||||||
|  | 
 | ||||||
|  |         CoreEvents.trigger(COLLAPSIBLE_HEADER_UPDATED, { collapsed }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Listen to changing events. |      * Listen to changing events. | ||||||
|      */ |      */ | ||||||
| @ -458,8 +494,8 @@ export class CoreCollapsibleHeaderDirective implements OnInit, OnChanges, OnDest | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         this.setCollapsed(!enable); | ||||||
|         this.page.style.setProperty('--collapsible-header-progress', enable ? '0' : '1'); |         this.page.style.setProperty('--collapsible-header-progress', enable ? '0' : '1'); | ||||||
|         this.page.classList.toggle('collapsible-header-page-is-collapsed', !enable); |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
| @ -523,9 +559,9 @@ export class CoreCollapsibleHeaderDirective implements OnInit, OnChanges, OnDest | |||||||
|                 ? 0 |                 ? 0 | ||||||
|                 : CoreMath.clamp(contentScroll.scrollTop / scrollingHeight, 0, 1); |                 : CoreMath.clamp(contentScroll.scrollTop / scrollingHeight, 0, 1); | ||||||
| 
 | 
 | ||||||
|  |             this.setCollapsed(progress === 1); | ||||||
|             page.style.setProperty('--collapsible-header-progress', `${progress}`); |             page.style.setProperty('--collapsible-header-progress', `${progress}`); | ||||||
|             page.classList.toggle('collapsible-header-page-is-frozen', frozen); |             page.classList.toggle('collapsible-header-page-is-frozen', frozen); | ||||||
|             page.classList.toggle('collapsible-header-page-is-collapsed', progress === 1); |  | ||||||
| 
 | 
 | ||||||
|             Object |             Object | ||||||
|                 .entries(progress > .5 ? collapsedFontStyles : expandedFontStyles) |                 .entries(progress > .5 ? collapsedFontStyles : expandedFontStyles) | ||||||
| @ -547,8 +583,8 @@ export class CoreCollapsibleHeaderDirective implements OnInit, OnChanges, OnDest | |||||||
|                 const scrollTop = contentScroll.scrollTop; |                 const scrollTop = contentScroll.scrollTop; | ||||||
|                 const collapse = progress > 0.5; |                 const collapse = progress > 0.5; | ||||||
| 
 | 
 | ||||||
|  |                 this.setCollapsed(collapse); | ||||||
|                 page.style.setProperty('--collapsible-header-progress', collapse ? '1' : '0'); |                 page.style.setProperty('--collapsible-header-progress', collapse ? '1' : '0'); | ||||||
|                 page.classList.toggle('collapsible-header-page-is-collapsed', collapse); |  | ||||||
| 
 | 
 | ||||||
|                 if (collapse && this.scrollingHeight && this.scrollingHeight > 0 && scrollTop < this.scrollingHeight) { |                 if (collapse && this.scrollingHeight && this.scrollingHeight > 0 && scrollTop < this.scrollingHeight) { | ||||||
|                     this.content?.scrollToPoint(null, this.scrollingHeight); |                     this.content?.scrollToPoint(null, this.scrollingHeight); | ||||||
|  | |||||||
| @ -34,6 +34,7 @@ import { CoreComponentsRegistry } from '@singletons/components-registry'; | |||||||
| import { CoreDom } from '@singletons/dom'; | import { CoreDom } from '@singletons/dom'; | ||||||
| import { CoreEventObserver, CoreEvents } from '@singletons/events'; | import { CoreEventObserver, CoreEvents } from '@singletons/events'; | ||||||
| import { CoreMainMenuProvider } from '@features/mainmenu/services/mainmenu'; | import { CoreMainMenuProvider } from '@features/mainmenu/services/mainmenu'; | ||||||
|  | import { COLLAPSIBLE_HEADER_UPDATED } from '@directives/collapsible-header'; | ||||||
| 
 | 
 | ||||||
| const ANIMATION_DURATION = 200; | const ANIMATION_DURATION = 200; | ||||||
| const USER_TOURS_BACK_BUTTON_PRIORITY = 100; | const USER_TOURS_BACK_BUTTON_PRIORITY = 100; | ||||||
| @ -71,6 +72,7 @@ export class CoreUserToursUserTourComponent implements AfterViewInit, OnDestroy | |||||||
|     private wrapperTransform = ''; |     private wrapperTransform = ''; | ||||||
|     private wrapperElement = new CorePromisedValue<HTMLElement>(); |     private wrapperElement = new CorePromisedValue<HTMLElement>(); | ||||||
|     private backButtonListener?: (event: BackButtonEvent) => void; |     private backButtonListener?: (event: BackButtonEvent) => void; | ||||||
|  |     protected collapsibleHeaderListener?: CoreEventObserver; | ||||||
|     protected mainMenuListener?: CoreEventObserver; |     protected mainMenuListener?: CoreEventObserver; | ||||||
|     protected resizeListener?: CoreEventObserver; |     protected resizeListener?: CoreEventObserver; | ||||||
|     protected scrollListener?: EventListener; |     protected scrollListener?: EventListener; | ||||||
| @ -252,6 +254,8 @@ export class CoreUserToursUserTourComponent implements AfterViewInit, OnDestroy | |||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         this.collapsibleHeaderListener = this.collapsibleHeaderListener ?? | ||||||
|  |             CoreEvents.on(COLLAPSIBLE_HEADER_UPDATED, () => this.calculateStyles()); | ||||||
|         this.mainMenuListener = this.mainMenuListener ?? |         this.mainMenuListener = this.mainMenuListener ?? | ||||||
|             CoreEvents.on(CoreMainMenuProvider.MAIN_MENU_VISIBILITY_UPDATED, () => this.calculateStyles()); |             CoreEvents.on(CoreMainMenuProvider.MAIN_MENU_VISIBILITY_UPDATED, () => this.calculateStyles()); | ||||||
|         this.resizeListener = this.resizeListener ?? CoreDom.onWindowResize(() => this.calculateStyles()); |         this.resizeListener = this.resizeListener ?? CoreDom.onWindowResize(() => this.calculateStyles()); | ||||||
| @ -276,10 +280,12 @@ export class CoreUserToursUserTourComponent implements AfterViewInit, OnDestroy | |||||||
| 
 | 
 | ||||||
|         this.active = false; |         this.active = false; | ||||||
| 
 | 
 | ||||||
|  |         this.collapsibleHeaderListener?.off(); | ||||||
|         this.mainMenuListener?.off(); |         this.mainMenuListener?.off(); | ||||||
|         this.resizeListener?.off(); |         this.resizeListener?.off(); | ||||||
|         this.backButtonListener && document.removeEventListener('ionBackButton', this.backButtonListener); |         this.backButtonListener && document.removeEventListener('ionBackButton', this.backButtonListener); | ||||||
|         this.backButtonListener = undefined; |         this.backButtonListener = undefined; | ||||||
|  |         this.collapsibleHeaderListener = undefined; | ||||||
|         this.mainMenuListener = undefined; |         this.mainMenuListener = undefined; | ||||||
|         this.resizeListener = undefined; |         this.resizeListener = undefined; | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user