Merge pull request #1539 from dpalou/MOBILE-2575

MOBILE-2575 course: Allow selecting another tab in course
main
Juan Leyva 2018-09-28 11:53:54 +02:00 committed by GitHub
commit c11a155fe4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 2 deletions

View File

@ -62,6 +62,7 @@ export class CoreCourseSectionPage implements OnDestroy {
protected module: any;
protected completionObserver;
protected courseStatusObserver;
protected firstTabName: string;
protected isDestroyed = false;
constructor(navParams: NavParams, private courseProvider: CoreCourseProvider, private domUtils: CoreDomUtilsProvider,
@ -74,6 +75,7 @@ export class CoreCourseSectionPage implements OnDestroy {
this.sectionId = navParams.get('sectionId');
this.sectionNumber = navParams.get('sectionNumber');
this.module = navParams.get('module');
this.firstTabName = navParams.get('selectedTab');
// Get the title to display. We dont't have sections yet.
this.title = courseFormatDelegate.getCourseTitle(this.course);
@ -228,13 +230,28 @@ export class CoreCourseSectionPage implements OnDestroy {
// Load the course handlers.
promises.push(this.courseOptionsDelegate.getHandlersToDisplay(this.injector, this.course, refresh, false)
.then((handlers) => {
let tabToLoad;
// Add the courseId to the handler component data.
handlers.forEach((handler) => {
handlers.forEach((handler, index) => {
handler.data.componentData = handler.data.componentData || {};
handler.data.componentData.courseId = this.course.id;
// Check if this handler should be the first selected tab.
if (this.firstTabName && handler.name == this.firstTabName) {
tabToLoad = index + 1;
}
});
this.courseHandlers = handlers;
// Select the tab if needed.
this.firstTabName = undefined;
if (tabToLoad) {
setTimeout(() => {
this.tabsComponent.selectTab(tabToLoad);
});
}
}));
return Promise.all(promises).catch((error) => {

View File

@ -109,6 +109,12 @@ export interface CoreCourseOptionsHandlerToDisplay {
*/
data: CoreCourseOptionsHandlerData;
/**
* Name of the handler, or name and sub context (AddonMessages, AddonMessages:blockContact, ...).
* @type {string}
*/
name: string;
/**
* The highest priority is displayed first.
* @type {number}
@ -277,7 +283,8 @@ export class CoreCourseOptionsDelegate extends CoreDelegate {
handlersToDisplay.push({
data: data,
priority: handler.priority,
prefetch: handler.prefetch && handler.prefetch.bind(handler)
prefetch: handler.prefetch && handler.prefetch.bind(handler),
name: handler.name
});
}).catch((err) => {
this.logger.error('Error getting data for handler', handler.name, err);