forked from EVOgeek/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