diff --git a/src/core/features/course/pages/contents/contents.ts b/src/core/features/course/pages/contents/contents.ts index d0fea2104..c67cabec1 100644 --- a/src/core/features/course/pages/contents/contents.ts +++ b/src/core/features/course/pages/contents/contents.ts @@ -97,9 +97,9 @@ export class CoreCourseContentsPage implements OnInit, OnDestroy { } this.course = course; - this.sectionId = CoreNavigator.instance.getRouteParam('sectionId'); - this.sectionNumber = CoreNavigator.instance.getRouteParam('sectionNumber'); - this.moduleId = CoreNavigator.instance.getRouteParam('moduleId'); + this.sectionId = CoreNavigator.instance.getRouteNumberParam('sectionId'); + this.sectionNumber = CoreNavigator.instance.getRouteNumberParam('sectionNumber'); + this.moduleId = CoreNavigator.instance.getRouteNumberParam('moduleId'); this.displayEnableDownload = !CoreSites.instance.getCurrentSite()?.isOfflineDisabled() && CoreCourseFormatDelegate.instance.displayEnableDownload(this.course); diff --git a/src/core/features/course/pages/index/index.ts b/src/core/features/course/pages/index/index.ts index 3d1c8b93f..27f0a6b42 100644 --- a/src/core/features/course/pages/index/index.ts +++ b/src/core/features/course/pages/index/index.ts @@ -88,8 +88,8 @@ export class CoreCourseIndexPage implements OnInit, OnDestroy { this.contentsTab.page = CoreTextUtils.instance.concatenatePaths(this.currentPagePath, this.contentsTab.page); this.contentsTab.pageParams = { course: this.course, - sectionId: CoreNavigator.instance.getRouteParam('sectionId'), - sectionNumber: CoreNavigator.instance.getRouteParam('sectionNumber'), + sectionId: CoreNavigator.instance.getRouteNumberParam('sectionId'), + sectionNumber: CoreNavigator.instance.getRouteNumberParam('sectionNumber'), }; if (module) { diff --git a/src/core/features/course/pages/list-mod-type/list-mod-type.ts b/src/core/features/course/pages/list-mod-type/list-mod-type.ts index 13661b8a3..319b75b38 100644 --- a/src/core/features/course/pages/list-mod-type/list-mod-type.ts +++ b/src/core/features/course/pages/list-mod-type/list-mod-type.ts @@ -47,7 +47,7 @@ export class CoreCourseListModTypePage implements OnInit { */ async ngOnInit(): Promise { this.title = CoreNavigator.instance.getRouteParam('title') || ''; - this.courseId = CoreNavigator.instance.getRouteParam('courseId'); + this.courseId = CoreNavigator.instance.getRouteNumberParam('courseId'); this.modName = CoreNavigator.instance.getRouteParam('modName'); this.downloadEnabled = !CoreSites.instance.getCurrentSite()?.isOfflineDisabled(); diff --git a/src/core/features/course/pages/unsupported-module/unsupported-module.ts b/src/core/features/course/pages/unsupported-module/unsupported-module.ts index b52fbc313..92c489dc4 100644 --- a/src/core/features/course/pages/unsupported-module/unsupported-module.ts +++ b/src/core/features/course/pages/unsupported-module/unsupported-module.ts @@ -36,7 +36,7 @@ export class CoreCourseUnsupportedModulePage implements OnInit { */ ngOnInit(): void { this.module = CoreNavigator.instance.getRouteParam('module'); - this.courseId = CoreNavigator.instance.getRouteParam('courseId'); + this.courseId = CoreNavigator.instance.getRouteNumberParam('courseId'); } /** diff --git a/src/core/features/courses/pages/course-preview/course-preview.ts b/src/core/features/courses/pages/course-preview/course-preview.ts index 855d05326..c5893a08d 100644 --- a/src/core/features/courses/pages/course-preview/course-preview.ts +++ b/src/core/features/courses/pages/course-preview/course-preview.ts @@ -97,7 +97,7 @@ export class CoreCoursesCoursePreviewPage implements OnInit, OnDestroy { */ async ngOnInit(): Promise { this.course = CoreNavigator.instance.getRouteParam('course'); - this.avoidOpenCourse = !!CoreNavigator.instance.getRouteParam('avoidOpenCourse'); + this.avoidOpenCourse = !!CoreNavigator.instance.getRouteBooleanParam('avoidOpenCourse'); if (!this.course) { CoreNavigator.instance.back(); diff --git a/src/core/services/navigator.ts b/src/core/services/navigator.ts index aced30e4e..86af33ebe 100644 --- a/src/core/services/navigator.ts +++ b/src/core/services/navigator.ts @@ -210,11 +210,35 @@ export class CoreNavigatorService { // Remove the parameter from our map if it's in there. delete this.storedParams[value]; - // @todo: Convert strings to number/boolean if needed? All number & boolean params are converted to string. - return storedParam ?? value; } + /** + * Get a number route param. + * Angular router automatically converts numbers to string, this function automatically converts it back to number. + * + * @param name Name of the parameter. + * @return Value of the parameter, undefined if not found. + */ + getRouteNumberParam(name: string): number | undefined { + const value = this.getRouteParam(name); + + return value !== undefined ? Number(value) : value; + } + + /** + * Get a boolean route param. + * Angular router automatically converts booleans to string, this function automatically converts it back to boolean. + * + * @param name Name of the parameter. + * @return Value of the parameter, undefined if not found. + */ + getRouteBooleanParam(name: string): boolean | undefined { + const value = this.getRouteParam(name); + + return value !== undefined ? Boolean(value) : value; + } + /** * Navigate back. *