forked from CIT/Vmeda.Online
		
	MOBILE-3629 core: Add route options to getRouteParams on CoreNavigator
This commit is contained in:
		
							parent
							
								
									cbdcb8bd8f
								
							
						
					
					
						commit
						5aaf4acea5
					
				@ -164,9 +164,9 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView
 | 
			
		||||
 | 
			
		||||
        this.route.queryParams.subscribe(async (params) => {
 | 
			
		||||
            this.loaded = false;
 | 
			
		||||
            this.conversationId = CoreNavigator.getRouteNumberParam('conversationId', params) || undefined;
 | 
			
		||||
            this.userId = CoreNavigator.getRouteNumberParam('userId', params) || undefined;
 | 
			
		||||
            this.showKeyboard = CoreNavigator.getRouteBooleanParam('showKeyboard', params) || false;
 | 
			
		||||
            this.conversationId = CoreNavigator.getRouteNumberParam('conversationId', { params }) || undefined;
 | 
			
		||||
            this.userId = CoreNavigator.getRouteNumberParam('userId', { params }) || undefined;
 | 
			
		||||
            this.showKeyboard = CoreNavigator.getRouteBooleanParam('showKeyboard', { params }) || false;
 | 
			
		||||
 | 
			
		||||
            await this.fetchData();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -138,8 +138,8 @@ export class AddonMessagesDiscussions35Page implements OnInit, OnDestroy {
 | 
			
		||||
     */
 | 
			
		||||
    ngOnInit(): void {
 | 
			
		||||
        this.route.queryParams.subscribe(async (params) => {
 | 
			
		||||
            const discussionUserId = CoreNavigator.getRouteNumberParam('discussionUserId', params) ||
 | 
			
		||||
                CoreNavigator.getRouteNumberParam('userId', params) || undefined;
 | 
			
		||||
            const discussionUserId = CoreNavigator.getRouteNumberParam('discussionUserId', { params }) ||
 | 
			
		||||
                CoreNavigator.getRouteNumberParam('userId', { params }) || undefined;
 | 
			
		||||
 | 
			
		||||
            if (this.loaded && this.discussionUserId == discussionUserId) {
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
@ -273,9 +273,9 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
 | 
			
		||||
    ngOnInit(): void {
 | 
			
		||||
        this.route.queryParams.subscribe(async (params) => {
 | 
			
		||||
            // Conversation to load.
 | 
			
		||||
            this.conversationId = CoreNavigator.getRouteNumberParam('conversationId', params) || undefined;
 | 
			
		||||
            this.conversationId = CoreNavigator.getRouteNumberParam('conversationId', { params }) || undefined;
 | 
			
		||||
            if (!this.conversationId) {
 | 
			
		||||
                this.discussionUserId = CoreNavigator.getRouteNumberParam('discussionUserId', params) || undefined;
 | 
			
		||||
                this.discussionUserId = CoreNavigator.getRouteNumberParam('discussionUserId', { params }) || undefined;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (this.conversationId || this.discussionUserId) {
 | 
			
		||||
 | 
			
		||||
@ -58,7 +58,7 @@ export class AddonModAssignSubmissionReviewPage implements OnInit, CanLeave {
 | 
			
		||||
            this.moduleId = CoreNavigator.getRouteNumberParam('cmId')!;
 | 
			
		||||
            this.courseId = CoreNavigator.getRouteNumberParam('courseId')!;
 | 
			
		||||
            this.submitId = CoreNavigator.getRouteNumberParam('submitId') || 0;
 | 
			
		||||
            this.blindId = CoreNavigator.getRouteNumberParam('blindId', params);
 | 
			
		||||
            this.blindId = CoreNavigator.getRouteNumberParam('blindId', { params });
 | 
			
		||||
 | 
			
		||||
            this.fetchSubmission().finally(() => {
 | 
			
		||||
                this.loaded = true;
 | 
			
		||||
 | 
			
		||||
@ -16,11 +16,10 @@ import { AfterViewInit, Component, OnDestroy, ViewChild } from '@angular/core';
 | 
			
		||||
import { ActivatedRouteSnapshot } from '@angular/router';
 | 
			
		||||
import { CorePageItemsListManager } from '@classes/page-items-list-manager';
 | 
			
		||||
 | 
			
		||||
import { CoreSplitViewComponent, CoreSplitViewMode } from '@components/split-view/split-view';
 | 
			
		||||
import { CoreSplitViewComponent } from '@components/split-view/split-view';
 | 
			
		||||
import { CoreGrades } from '@features/grades/services/grades';
 | 
			
		||||
import { CoreGradesGradeOverviewWithCourseData, CoreGradesHelper } from '@features/grades/services/grades-helper';
 | 
			
		||||
import { IonRefresher } from '@ionic/angular';
 | 
			
		||||
import { CoreNavigator } from '@services/navigator';
 | 
			
		||||
import { CoreDomUtils } from '@services/utils/dom';
 | 
			
		||||
import { CoreUtils } from '@services/utils/utils';
 | 
			
		||||
 | 
			
		||||
@ -34,27 +33,13 @@ import { CoreUtils } from '@services/utils/utils';
 | 
			
		||||
export class CoreGradesCoursesPage implements OnDestroy, AfterViewInit {
 | 
			
		||||
 | 
			
		||||
    courses: CoreGradesCoursesManager = new CoreGradesCoursesManager(CoreGradesCoursesPage);
 | 
			
		||||
    splitViewMode?: CoreSplitViewMode;
 | 
			
		||||
 | 
			
		||||
    @ViewChild(CoreSplitViewComponent) splitView!: CoreSplitViewComponent;
 | 
			
		||||
 | 
			
		||||
    constructor() {
 | 
			
		||||
        const userId = CoreNavigator.getRouteNumberParam('userId');
 | 
			
		||||
        const courseId = CoreNavigator.getRouteNumberParam('courseId');
 | 
			
		||||
 | 
			
		||||
        // If courseId and userId is set, show only the content page.
 | 
			
		||||
        this.splitViewMode = courseId && userId ? undefined : CoreSplitViewMode.ContentOnly;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @inheritdoc
 | 
			
		||||
     */
 | 
			
		||||
    async ngAfterViewInit(): Promise<void> {
 | 
			
		||||
        if (this.splitViewMode) {
 | 
			
		||||
            // Won't be shown, do nothing.
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        await this.fetchInitialCourses();
 | 
			
		||||
 | 
			
		||||
        this.courses.start(this.splitView);
 | 
			
		||||
 | 
			
		||||
@ -52,10 +52,11 @@ export type CoreNavigationOptions = {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Options for CoreNavigatorService#getCurrentRoute method.
 | 
			
		||||
 * Route options to get route or params values.
 | 
			
		||||
 */
 | 
			
		||||
type GetCurrentRouteOptions = Partial<{
 | 
			
		||||
    parentRoute: ActivatedRoute;
 | 
			
		||||
export type CoreNavigatorCurrentRouteOptions = Partial<{
 | 
			
		||||
    params: Params; // Params to get the value from.
 | 
			
		||||
    route: ActivatedRoute; // Current Route.
 | 
			
		||||
    pageComponent: unknown;
 | 
			
		||||
}>;
 | 
			
		||||
 | 
			
		||||
@ -246,8 +247,8 @@ export class CoreNavigatorService {
 | 
			
		||||
    /**
 | 
			
		||||
     * Iterately get the params checking parent routes.
 | 
			
		||||
     *
 | 
			
		||||
     * @param route Current route.
 | 
			
		||||
     * @param name Name of the parameter.
 | 
			
		||||
     * @param route Current route.
 | 
			
		||||
     * @return Value of the parameter, undefined if not found.
 | 
			
		||||
     */
 | 
			
		||||
    protected getRouteSnapshotParam<T = unknown>(name: string, route?: ActivatedRoute): T | undefined {
 | 
			
		||||
@ -270,18 +271,21 @@ export class CoreNavigatorService {
 | 
			
		||||
     * unless there's a new navigation to the page.
 | 
			
		||||
     *
 | 
			
		||||
     * @param name Name of the parameter.
 | 
			
		||||
     * @param params Optional params to get the value from. If missing, it will autodetect.
 | 
			
		||||
     * @param routeOptions Optional routeOptions to get the params or route value from. If missing, it will autodetect.
 | 
			
		||||
     * @return Value of the parameter, undefined if not found.
 | 
			
		||||
     */
 | 
			
		||||
    getRouteParam<T = unknown>(name: string, params?: Params): T | undefined {
 | 
			
		||||
    getRouteParam<T = unknown>(name: string, routeOptions: CoreNavigatorCurrentRouteOptions = {}): T | undefined {
 | 
			
		||||
        let value: any;
 | 
			
		||||
 | 
			
		||||
        if (!params) {
 | 
			
		||||
            const route = this.getCurrentRoute();
 | 
			
		||||
        if (!routeOptions.params) {
 | 
			
		||||
            let route = this.getCurrentRoute();
 | 
			
		||||
            if (!route?.snapshot && routeOptions.route) {
 | 
			
		||||
                route = routeOptions.route;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            value = this.getRouteSnapshotParam(name, route);
 | 
			
		||||
        } else {
 | 
			
		||||
            value = params[name];
 | 
			
		||||
            value = routeOptions.params[name];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (typeof value == 'undefined') {
 | 
			
		||||
@ -309,11 +313,11 @@ export class CoreNavigatorService {
 | 
			
		||||
     * Angular router automatically converts numbers to string, this function automatically converts it back to number.
 | 
			
		||||
     *
 | 
			
		||||
     * @param name Name of the parameter.
 | 
			
		||||
     * @param params Optional params to get the value from. If missing, it will autodetect.
 | 
			
		||||
     * @param routeOptions Optional routeOptions to get the params or route value from. If missing, it will autodetect.
 | 
			
		||||
     * @return Value of the parameter, undefined if not found.
 | 
			
		||||
     */
 | 
			
		||||
    getRouteNumberParam(name: string, params?: Params): number | undefined {
 | 
			
		||||
        const value = this.getRouteParam<string>(name, params);
 | 
			
		||||
    getRouteNumberParam(name: string, routeOptions: CoreNavigatorCurrentRouteOptions = {}): number | undefined {
 | 
			
		||||
        const value = this.getRouteParam<string>(name, routeOptions);
 | 
			
		||||
 | 
			
		||||
        return value !== undefined ? Number(value) : value;
 | 
			
		||||
    }
 | 
			
		||||
@ -323,13 +327,25 @@ export class CoreNavigatorService {
 | 
			
		||||
     * Angular router automatically converts booleans to string, this function automatically converts it back to boolean.
 | 
			
		||||
     *
 | 
			
		||||
     * @param name Name of the parameter.
 | 
			
		||||
     * @param params Optional params to get the value from. If missing, it will autodetect.
 | 
			
		||||
     * @param routeOptions Optional routeOptions to get the params or route value from. If missing, it will autodetect.
 | 
			
		||||
     * @return Value of the parameter, undefined if not found.
 | 
			
		||||
     */
 | 
			
		||||
    getRouteBooleanParam(name: string, params?: Params): boolean | undefined {
 | 
			
		||||
        const value = this.getRouteParam<string>(name, params);
 | 
			
		||||
    getRouteBooleanParam(name: string, routeOptions: CoreNavigatorCurrentRouteOptions = {}): boolean | undefined {
 | 
			
		||||
        const value = this.getRouteParam<string>(name, routeOptions);
 | 
			
		||||
 | 
			
		||||
        return value !== undefined ? Boolean(value) : value;
 | 
			
		||||
        if (typeof value == 'undefined') {
 | 
			
		||||
            return value;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (CoreUtils.isTrueOrOne(value)) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (CoreUtils.isFalseOrZero(value)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return Boolean(value);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@ -345,25 +361,25 @@ export class CoreNavigatorService {
 | 
			
		||||
     * Get current activated route.
 | 
			
		||||
     *
 | 
			
		||||
     * @param options
 | 
			
		||||
     *     - parent: Parent route, if this isn't provided the current active route will be used.
 | 
			
		||||
     *     - route: Parent route, if this isn't provided the current active route will be used.
 | 
			
		||||
     *     - pageComponent: Page component of the route to find, if this isn't provided the deepest route in the hierarchy
 | 
			
		||||
     *                      will be returned.
 | 
			
		||||
     * @return Current activated route.
 | 
			
		||||
     */
 | 
			
		||||
    getCurrentRoute(): ActivatedRoute;
 | 
			
		||||
    getCurrentRoute(options: GetCurrentRouteOptions): ActivatedRoute | null;
 | 
			
		||||
    getCurrentRoute({ parentRoute, pageComponent }: GetCurrentRouteOptions = {}): ActivatedRoute | null {
 | 
			
		||||
        parentRoute = parentRoute ?? Router.routerState.root;
 | 
			
		||||
    getCurrentRoute(options: CoreNavigatorCurrentRouteOptions): ActivatedRoute | null;
 | 
			
		||||
    getCurrentRoute({ route, pageComponent }: CoreNavigatorCurrentRouteOptions = {}): ActivatedRoute | null {
 | 
			
		||||
        route = route ?? Router.routerState.root;
 | 
			
		||||
 | 
			
		||||
        if (pageComponent && parentRoute.component === pageComponent) {
 | 
			
		||||
            return parentRoute;
 | 
			
		||||
        if (pageComponent && route.component === pageComponent) {
 | 
			
		||||
            return route;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (parentRoute.firstChild) {
 | 
			
		||||
            return this.getCurrentRoute({ parentRoute: parentRoute.firstChild, pageComponent });
 | 
			
		||||
        if (route.firstChild) {
 | 
			
		||||
            return this.getCurrentRoute({ route: route.firstChild, pageComponent });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return pageComponent ? null : parentRoute;
 | 
			
		||||
        return pageComponent ? null : route;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user