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 { CoreComponentsRegistry } from '@singletons/components-registry';
 | 
			
		||||
import { CoreDom } from '@singletons/dom';
 | 
			
		||||
import { CoreEventObserver } from '@singletons/events';
 | 
			
		||||
import { CoreEventObserver, CoreEvents } from '@singletons/events';
 | 
			
		||||
import { CoreMath } from '@singletons/math';
 | 
			
		||||
import { Subscription } from 'rxjs';
 | 
			
		||||
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.
 | 
			
		||||
 *
 | 
			
		||||
@ -151,6 +166,27 @@ export class CoreCollapsibleHeaderDirective implements OnInit, OnChanges, OnDest
 | 
			
		||||
        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.
 | 
			
		||||
     */
 | 
			
		||||
@ -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.classList.toggle('collapsible-header-page-is-collapsed', !enable);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@ -523,9 +559,9 @@ export class CoreCollapsibleHeaderDirective implements OnInit, OnChanges, OnDest
 | 
			
		||||
                ? 0
 | 
			
		||||
                : CoreMath.clamp(contentScroll.scrollTop / scrollingHeight, 0, 1);
 | 
			
		||||
 | 
			
		||||
            this.setCollapsed(progress === 1);
 | 
			
		||||
            page.style.setProperty('--collapsible-header-progress', `${progress}`);
 | 
			
		||||
            page.classList.toggle('collapsible-header-page-is-frozen', frozen);
 | 
			
		||||
            page.classList.toggle('collapsible-header-page-is-collapsed', progress === 1);
 | 
			
		||||
 | 
			
		||||
            Object
 | 
			
		||||
                .entries(progress > .5 ? collapsedFontStyles : expandedFontStyles)
 | 
			
		||||
@ -547,8 +583,8 @@ export class CoreCollapsibleHeaderDirective implements OnInit, OnChanges, OnDest
 | 
			
		||||
                const scrollTop = contentScroll.scrollTop;
 | 
			
		||||
                const collapse = progress > 0.5;
 | 
			
		||||
 | 
			
		||||
                this.setCollapsed(collapse);
 | 
			
		||||
                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) {
 | 
			
		||||
                    this.content?.scrollToPoint(null, this.scrollingHeight);
 | 
			
		||||
 | 
			
		||||
@ -34,6 +34,7 @@ import { CoreComponentsRegistry } from '@singletons/components-registry';
 | 
			
		||||
import { CoreDom } from '@singletons/dom';
 | 
			
		||||
import { CoreEventObserver, CoreEvents } from '@singletons/events';
 | 
			
		||||
import { CoreMainMenuProvider } from '@features/mainmenu/services/mainmenu';
 | 
			
		||||
import { COLLAPSIBLE_HEADER_UPDATED } from '@directives/collapsible-header';
 | 
			
		||||
 | 
			
		||||
const ANIMATION_DURATION = 200;
 | 
			
		||||
const USER_TOURS_BACK_BUTTON_PRIORITY = 100;
 | 
			
		||||
@ -71,6 +72,7 @@ export class CoreUserToursUserTourComponent implements AfterViewInit, OnDestroy
 | 
			
		||||
    private wrapperTransform = '';
 | 
			
		||||
    private wrapperElement = new CorePromisedValue<HTMLElement>();
 | 
			
		||||
    private backButtonListener?: (event: BackButtonEvent) => void;
 | 
			
		||||
    protected collapsibleHeaderListener?: CoreEventObserver;
 | 
			
		||||
    protected mainMenuListener?: CoreEventObserver;
 | 
			
		||||
    protected resizeListener?: CoreEventObserver;
 | 
			
		||||
    protected scrollListener?: EventListener;
 | 
			
		||||
@ -252,6 +254,8 @@ export class CoreUserToursUserTourComponent implements AfterViewInit, OnDestroy
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.collapsibleHeaderListener = this.collapsibleHeaderListener ??
 | 
			
		||||
            CoreEvents.on(COLLAPSIBLE_HEADER_UPDATED, () => this.calculateStyles());
 | 
			
		||||
        this.mainMenuListener = this.mainMenuListener ??
 | 
			
		||||
            CoreEvents.on(CoreMainMenuProvider.MAIN_MENU_VISIBILITY_UPDATED, () => this.calculateStyles());
 | 
			
		||||
        this.resizeListener = this.resizeListener ?? CoreDom.onWindowResize(() => this.calculateStyles());
 | 
			
		||||
@ -276,10 +280,12 @@ export class CoreUserToursUserTourComponent implements AfterViewInit, OnDestroy
 | 
			
		||||
 | 
			
		||||
        this.active = false;
 | 
			
		||||
 | 
			
		||||
        this.collapsibleHeaderListener?.off();
 | 
			
		||||
        this.mainMenuListener?.off();
 | 
			
		||||
        this.resizeListener?.off();
 | 
			
		||||
        this.backButtonListener && document.removeEventListener('ionBackButton', this.backButtonListener);
 | 
			
		||||
        this.backButtonListener = undefined;
 | 
			
		||||
        this.collapsibleHeaderListener = undefined;
 | 
			
		||||
        this.mainMenuListener = undefined;
 | 
			
		||||
        this.resizeListener = undefined;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user