MOBILE-3642 course: Add main activity index template page

main
Pau Ferrer Ocaña 2021-03-04 10:34:06 +01:00
parent 6006fed4b5
commit d18faba0c3
35 changed files with 197 additions and 412 deletions

View File

@ -14,7 +14,7 @@
</ion-toolbar>
</ion-header>
<ion-content>
<ion-refresher slot="fixed" [disabled]="!assignComponent?.loaded" (ionRefresh)="assignComponent?.doRefresh($event)">
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event)">
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
</ion-refresher>

View File

@ -12,11 +12,9 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component, OnInit, ViewChild } from '@angular/core';
import { CoreCourseWSModule } from '@features/course/services/course';
import { CoreNavigator } from '@services/navigator';
import { Component, ViewChild } from '@angular/core';
import { CoreCourseModuleMainActivityPage } from '@features/course/classes/main-activity-page';
import { AddonModAssignIndexComponent } from '../../components/index/index';
import { AddonModAssignAssign } from '../../services/assign';
/**
* Page that displays an assign.
@ -25,44 +23,8 @@ import { AddonModAssignAssign } from '../../services/assign';
selector: 'page-addon-mod-assign-index',
templateUrl: 'index.html',
})
export class AddonModAssignIndexPage implements OnInit {
export class AddonModAssignIndexPage extends CoreCourseModuleMainActivityPage<AddonModAssignIndexComponent> {
@ViewChild(AddonModAssignIndexComponent) assignComponent?: AddonModAssignIndexComponent;
title?: string;
module?: CoreCourseWSModule;
courseId?: number;
/**
* Component being initialized.
*/
ngOnInit(): void {
this.module = CoreNavigator.getRouteParam('module');
this.courseId = CoreNavigator.getRouteNumberParam('courseId');
this.title = this.module?.name;
}
/**
* Update some data based on the assign instance.
*
* @param assign Assign instance.
*/
updateData(assign: AddonModAssignAssign): void {
this.title = assign.name || this.title;
}
/**
* User entered the page.
*/
ionViewDidEnter(): void {
this.assignComponent?.ionViewDidEnter();
}
/**
* User left the page.
*/
ionViewDidLeave(): void {
this.assignComponent?.ionViewDidLeave();
}
@ViewChild(AddonModAssignIndexComponent) activityComponent?: AddonModAssignIndexComponent;
}

View File

@ -14,15 +14,25 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CoreSharedModule } from '@/core/shared.module';
import { AddonModBookComponentsModule } from './components/components.module';
import { AddonModBookIndexPage } from './pages/index/index.page';
const routes: Routes = [
{
path: ':courseId/:cmId',
loadChildren: () => import('./pages/index/index.module').then( m => m.AddonModBookIndexPageModule),
component: AddonModBookIndexPage,
},
];
@NgModule({
imports: [RouterModule.forChild(routes)],
imports: [
RouterModule.forChild(routes),
CoreSharedModule,
AddonModBookComponentsModule,
],
declarations: [
AddonModBookIndexPage,
],
})
export class AddonModBookLazyModule {}

View File

@ -13,7 +13,7 @@
</ion-toolbar>
</ion-header>
<ion-content>
<ion-refresher slot="fixed" [disabled]="!bookComponent?.loaded" (ionRefresh)="bookComponent?.doRefresh($event)">
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event)">
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
</ion-refresher>

View File

@ -1,40 +0,0 @@
// (C) Copyright 2015 Moodle Pty Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CoreSharedModule } from '@/core/shared.module';
import { AddonModBookComponentsModule } from '../../components/components.module';
import { AddonModBookIndexPage } from './index';
const routes: Routes = [
{
path: '',
component: AddonModBookIndexPage,
},
];
@NgModule({
imports: [
RouterModule.forChild(routes),
CoreSharedModule,
AddonModBookComponentsModule,
],
declarations: [
AddonModBookIndexPage,
],
exports: [RouterModule],
})
export class AddonModBookIndexPageModule {}

View File

@ -13,10 +13,9 @@
// limitations under the License.
import { Component, OnInit, ViewChild } from '@angular/core';
import { CoreCourseWSModule } from '@features/course/services/course';
import { CoreCourseModuleMainActivityPage } from '@features/course/classes/main-activity-page';
import { CoreNavigator } from '@services/navigator';
import { AddonModBookIndexComponent } from '../../components/index/index';
import { AddonModBookBookWSData } from '../../services/book';
/**
* Page that displays a book.
@ -25,33 +24,18 @@ import { AddonModBookBookWSData } from '../../services/book';
selector: 'page-addon-mod-book-index',
templateUrl: 'index.html',
})
export class AddonModBookIndexPage implements OnInit {
export class AddonModBookIndexPage extends CoreCourseModuleMainActivityPage<AddonModBookIndexComponent> implements OnInit {
@ViewChild(AddonModBookIndexComponent) bookComponent?: AddonModBookIndexComponent;
@ViewChild(AddonModBookIndexComponent) activityComponent?: AddonModBookIndexComponent;
title?: string;
module?: CoreCourseWSModule;
courseId?: number;
chapterId?: number;
/**
* Component being initialized.
*/
ngOnInit(): void {
this.module = CoreNavigator.getRouteParam('module');
this.courseId = CoreNavigator.getRouteNumberParam('courseId');
super.ngOnInit();
this.chapterId = CoreNavigator.getRouteNumberParam('chapterId');
this.title = this.module?.name;
}
/**
* Update some data based on the book instance.
*
* @param book Book instance.
*/
updateData(book: AddonModBookBookWSData): void {
this.title = book.name || this.title;
}
}

View File

@ -20,7 +20,7 @@ import { CoreScreen } from '@services/screen';
import { CoreSharedModule } from '@/core/shared.module';
import { AddonModForumComponentsModule } from './components/components.module';
import { AddonModForumIndexPage } from './pages/index';
import { AddonModForumIndexPage } from './pages/index/index.page';
const mobileRoutes: Routes = [
{

View File

@ -4,7 +4,7 @@
<ion-back-button [attr.aria-label]="'core.back' | translate"></ion-back-button>
</ion-buttons>
<ion-title>
<core-format-text [text]="title" contextLevel="module" [contextInstanceId]="module?.id" [courseId]="courseId">
<core-format-text [text]="title" contextLevel="module" [contextInstanceId]="module.id" [courseId]="courseId">
</core-format-text>
</ion-title>
<ion-buttons slot="end">

View File

@ -0,0 +1,28 @@
// (C) Copyright 2015 Moodle Pty Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component, ViewChild } from '@angular/core';
import { CoreCourseModuleMainActivityPage } from '@features/course/classes/main-activity-page';
import { AddonModForumIndexComponent } from '../../components/index';
@Component({
selector: 'page-addon-mod-forum-index',
templateUrl: 'index.html',
})
export class AddonModForumIndexPage extends CoreCourseModuleMainActivityPage<AddonModForumIndexComponent> {
@ViewChild(AddonModForumIndexComponent) activityComponent?: AddonModForumIndexComponent;
}

View File

@ -15,7 +15,7 @@
import { Component, Input } from '@angular/core';
import { ModalController } from '@singletons';
import { AddonModLessonPlayerPage } from '../../pages/player/player';
import { AddonModLessonPlayerPage } from '../../pages/player/player.page';
/**
* Modal that renders the lesson menu and media file.

View File

@ -15,10 +15,15 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CoreSharedModule } from '@/core/shared.module';
import { AddonModLessonComponentsModule } from './components/components.module';
import { AddonModLessonIndexPage } from './pages/index/index.page';
const routes: Routes = [
{
path: ':courseId/:cmId',
loadChildren: () => import('./pages/index/index.module').then( m => m.AddonModLessonIndexPageModule),
component: AddonModLessonIndexPage,
},
{
path: 'player/:courseId/:lessonId',
@ -31,6 +36,13 @@ const routes: Routes = [
];
@NgModule({
imports: [RouterModule.forChild(routes)],
imports: [
RouterModule.forChild(routes),
CoreSharedModule,
AddonModLessonComponentsModule,
],
declarations: [
AddonModLessonIndexPage,
],
})
export class AddonModLessonLazyModule {}

View File

@ -13,11 +13,11 @@
</ion-toolbar>
</ion-header>
<ion-content>
<ion-refresher slot="fixed" [disabled]="!lessonComponent?.loaded" (ionRefresh)="lessonComponent?.doRefresh($event)">
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event)">
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
</ion-refresher>
<addon-mod-lesson-index [module]="module" [courseId]="courseId" [group]="group" [action]="action"
(dataRetrieved)="updateData($event)">
</addon-mod-lesson-index>
</ion-content>
</ion-content>

View File

@ -1,40 +0,0 @@
// (C) Copyright 2015 Moodle Pty Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CoreSharedModule } from '@/core/shared.module';
import { AddonModLessonComponentsModule } from '../../components/components.module';
import { AddonModLessonIndexPage } from './index';
const routes: Routes = [
{
path: '',
component: AddonModLessonIndexPage,
},
];
@NgModule({
imports: [
RouterModule.forChild(routes),
CoreSharedModule,
AddonModLessonComponentsModule,
],
declarations: [
AddonModLessonIndexPage,
],
exports: [RouterModule],
})
export class AddonModLessonIndexPageModule {}

View File

@ -13,11 +13,9 @@
// limitations under the License.
import { Component, OnInit, ViewChild } from '@angular/core';
import { CoreCourseWSModule } from '@features/course/services/course';
import { CoreCourseModuleMainActivityPage } from '@features/course/classes/main-activity-page';
import { CoreNavigator } from '@services/navigator';
import { AddonModLessonIndexComponent } from '../../components/index/index';
import { AddonModLessonLessonWSData } from '../../services/lesson';
/**
* Page that displays the lesson entry page.
@ -26,13 +24,10 @@ import { AddonModLessonLessonWSData } from '../../services/lesson';
selector: 'page-addon-mod-lesson-index',
templateUrl: 'index.html',
})
export class AddonModLessonIndexPage implements OnInit {
export class AddonModLessonIndexPage extends CoreCourseModuleMainActivityPage<AddonModLessonIndexComponent> implements OnInit {
@ViewChild(AddonModLessonIndexComponent) lessonComponent?: AddonModLessonIndexComponent;
@ViewChild(AddonModLessonIndexComponent) activityComponent?: AddonModLessonIndexComponent;
title?: string;
module?: CoreCourseWSModule;
courseId?: number;
group?: number; // The group to display.
action?: string; // The "action" to display first.
@ -40,34 +35,9 @@ export class AddonModLessonIndexPage implements OnInit {
* Component being initialized.
*/
ngOnInit(): void {
this.module = CoreNavigator.getRouteParam('module');
this.courseId = CoreNavigator.getRouteNumberParam('courseId');
super.ngOnInit();
this.group = CoreNavigator.getRouteNumberParam('group');
this.action = CoreNavigator.getRouteParam('action');
this.title = this.module?.name;
}
/**
* Update some data based on the lesson instance.
*
* @param lesson Lesson instance.
*/
updateData(lesson: AddonModLessonLessonWSData): void {
this.title = lesson.name || this.title;
}
/**
* User entered the page.
*/
ionViewDidEnter(): void {
this.lessonComponent?.ionViewDidEnter();
}
/**
* User left the page.
*/
ionViewDidLeave(): void {
this.lessonComponent?.ionViewDidLeave();
}
}

View File

@ -16,7 +16,7 @@ import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CoreSharedModule } from '@/core/shared.module';
import { AddonModLessonPlayerPage } from './player';
import { AddonModLessonPlayerPage } from './player.page';
import { CoreEditorComponentsModule } from '@features/editor/components/components.module';
import { CanLeaveGuard } from '@guards/can-leave';

View File

@ -16,7 +16,7 @@ import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CoreSharedModule } from '@/core/shared.module';
import { AddonModLessonUserRetakePage } from './user-retake';
import { AddonModLessonUserRetakePage } from './user-retake.page';
const routes: Routes = [
{

View File

@ -15,14 +15,25 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CoreSharedModule } from '@/core/shared.module';
import { AddonModPageComponentsModule } from './components/components.module';
import { AddonModPageIndexPage } from './pages/index/index.page';
const routes: Routes = [
{
path: ':courseId/:cmId',
loadChildren: () => import('./pages/index/index.module').then( m => m.AddonModPageIndexPageModule),
component: AddonModPageIndexPage,
},
];
@NgModule({
imports: [RouterModule.forChild(routes)],
imports: [
RouterModule.forChild(routes),
CoreSharedModule,
AddonModPageComponentsModule,
],
declarations: [
AddonModPageIndexPage,
],
})
export class AddonModPageLazyModule {}

View File

@ -13,7 +13,7 @@
</ion-toolbar>
</ion-header>
<ion-content>
<ion-refresher slot="fixed" [disabled]="!pageComponent?.loaded" (ionRefresh)="pageComponent?.doRefresh($event)">
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event)">
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
</ion-refresher>

View File

@ -1,40 +0,0 @@
// (C) Copyright 2015 Moodle Pty Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CoreSharedModule } from '@/core/shared.module';
import { AddonModPageComponentsModule } from '../../components/components.module';
import { AddonModPageIndexPage } from './index';
const routes: Routes = [
{
path: '',
component: AddonModPageIndexPage,
},
];
@NgModule({
imports: [
RouterModule.forChild(routes),
CoreSharedModule,
AddonModPageComponentsModule,
],
declarations: [
AddonModPageIndexPage,
],
exports: [RouterModule],
})
export class AddonModPageIndexPageModule {}

View File

@ -0,0 +1,30 @@
// (C) Copyright 2015 Moodle Pty Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component, ViewChild } from '@angular/core';
import { CoreCourseModuleMainActivityPage } from '@features/course/classes/main-activity-page';
import { AddonModPageIndexComponent } from '../../components/index/index';
/**
* Page that displays a page.
*/
@Component({
selector: 'page-addon-mod-page-index',
templateUrl: 'index.html',
})
export class AddonModPageIndexPage extends CoreCourseModuleMainActivityPage<AddonModPageIndexComponent> {
@ViewChild(AddonModPageIndexComponent) activityComponent?: AddonModPageIndexComponent;
}

View File

@ -1,54 +0,0 @@
// (C) Copyright 2015 Moodle Pty Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component, OnInit, ViewChild } from '@angular/core';
import { CoreCourseWSModule } from '@features/course/services/course';
import { CoreNavigator } from '@services/navigator';
import { AddonModPageIndexComponent } from '../../components/index/index';
import { AddonModPagePage } from '../../services/page';
/**
* Page that displays a page.
*/
@Component({
selector: 'page-addon-mod-page-index',
templateUrl: 'index.html',
})
export class AddonModPageIndexPage implements OnInit {
@ViewChild(AddonModPageIndexComponent) pageComponent?: AddonModPageIndexComponent;
title?: string;
module?: CoreCourseWSModule;
courseId?: number;
/**
* Component being initialized.
*/
ngOnInit(): void {
this.module = CoreNavigator.getRouteParam('module');
this.courseId = CoreNavigator.getRouteNumberParam('courseId');
this.title = this.module?.name;
}
/**
* Update some data based on the page instance.
*
* @param page Page instance.
*/
updateData(page: CoreCourseWSModule | AddonModPagePage): void {
this.title = 'name' in page ? page.name : this.title;
}
}

View File

@ -16,7 +16,7 @@ import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CoreSharedModule } from '@/core/shared.module';
import { AddonModQuizAttemptPage } from './attempt';
import { AddonModQuizAttemptPage } from './attempt.page';
const routes: Routes = [
{

View File

@ -14,7 +14,7 @@
</ion-toolbar>
</ion-header>
<ion-content>
<ion-refresher slot="fixed" [disabled]="!quizComponent?.loaded" (ionRefresh)="quizComponent?.doRefresh($event)">
<ion-refresher slot="fixed" [disabled]="!activityComponent?.loaded" (ionRefresh)="activityComponent?.doRefresh($event)">
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
</ion-refresher>

View File

@ -1,40 +0,0 @@
// (C) Copyright 2015 Moodle Pty Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CoreSharedModule } from '@/core/shared.module';
import { AddonModQuizComponentsModule } from '../../components/components.module';
import { AddonModQuizIndexPage } from './index';
const routes: Routes = [
{
path: '',
component: AddonModQuizIndexPage,
},
];
@NgModule({
imports: [
RouterModule.forChild(routes),
CoreSharedModule,
AddonModQuizComponentsModule,
],
declarations: [
AddonModQuizIndexPage,
],
exports: [RouterModule],
})
export class AddonModQuizIndexPageModule {}

View File

@ -0,0 +1,30 @@
// (C) Copyright 2015 Moodle Pty Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component, ViewChild } from '@angular/core';
import { CoreCourseModuleMainActivityPage } from '@features/course/classes/main-activity-page';
import { AddonModQuizIndexComponent } from '../../components/index/index';
/**
* Page that displays the quiz entry page.
*/
@Component({
selector: 'page-addon-mod-quiz-index',
templateUrl: 'index.html',
})
export class AddonModQuizIndexPage extends CoreCourseModuleMainActivityPage<AddonModQuizIndexComponent> {
@ViewChild(AddonModQuizIndexComponent) activityComponent?: AddonModQuizIndexComponent;
}

View File

@ -1,69 +0,0 @@
// (C) Copyright 2015 Moodle Pty Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component, OnInit, ViewChild } from '@angular/core';
import { CoreCourseWSModule } from '@features/course/services/course';
import { CoreNavigator } from '@services/navigator';
import { AddonModQuizIndexComponent } from '../../components/index';
import { AddonModQuizQuizWSData } from '../../services/quiz';
/**
* Page that displays the quiz entry page.
*/
@Component({
selector: 'page-addon-mod-quiz-index',
templateUrl: 'index.html',
})
export class AddonModQuizIndexPage implements OnInit {
@ViewChild(AddonModQuizIndexComponent) quizComponent?: AddonModQuizIndexComponent;
title?: string;
module?: CoreCourseWSModule;
courseId?: number;
/**
* Component being initialized.
*/
ngOnInit(): void {
this.module = CoreNavigator.getRouteParam('module');
this.courseId = CoreNavigator.getRouteNumberParam('courseId');
this.title = this.module?.name;
}
/**
* Update some data based on the quiz instance.
*
* @param quiz Quiz instance.
*/
updateData(quiz: AddonModQuizQuizWSData): void {
this.title = quiz.name || this.title;
}
/**
* User entered the page.
*/
ionViewDidEnter(): void {
this.quizComponent?.ionViewDidEnter();
}
/**
* User left the page.
*/
ionViewDidLeave(): void {
this.quizComponent?.ionViewDidLeave();
}
}

View File

@ -18,7 +18,7 @@ import { RouterModule, Routes } from '@angular/router';
import { CoreQuestionComponentsModule } from '@features/question/components/components.module';
import { CanLeaveGuard } from '@guards/can-leave';
import { AddonModQuizPlayerPage } from './player';
import { AddonModQuizPlayerPage } from './player.page';
const routes: Routes = [
{

View File

@ -17,7 +17,7 @@ import { RouterModule, Routes } from '@angular/router';
import { CoreSharedModule } from '@/core/shared.module';
import { CoreQuestionComponentsModule } from '@features/question/components/components.module';
import { AddonModQuizReviewPage } from './review';
import { AddonModQuizReviewPage } from './review.page';
const routes: Routes = [
{

View File

@ -15,10 +15,15 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CoreSharedModule } from '@/core/shared.module';
import { AddonModQuizComponentsModule } from './components/components.module';
import { AddonModQuizIndexPage } from './pages/index/index.page';
const routes: Routes = [
{
path: ':courseId/:cmId',
loadChildren: () => import('./pages/index/index.module').then( m => m.AddonModQuizIndexPageModule),
component: AddonModQuizIndexPage,
},
{
path: ':courseId/:cmId/player',
@ -35,6 +40,13 @@ const routes: Routes = [
];
@NgModule({
imports: [RouterModule.forChild(routes)],
imports: [
RouterModule.forChild(routes),
CoreSharedModule,
AddonModQuizComponentsModule,
],
declarations: [
AddonModQuizIndexPage,
],
})
export class AddonModQuizLazyModule {}

View File

@ -13,23 +13,28 @@
// limitations under the License.
import { Component, OnInit } from '@angular/core';
import { AddonModForumData } from '@addons/mod/forum/services/forum';
import { CoreCourseAnyModuleData } from '@features/course/services/course';
import { CoreNavigator } from '@services/navigator';
import { CoreCourseAnyModuleData } from '../services/course';
import { CoreCourseModuleMainResourceComponent } from './main-resource-component';
/**
/**
* Template class to easily create CoreCourseModuleMainComponent of resources (or activities without syncing).
*/
@Component({
selector: 'page-addon-mod-forum-index',
templateUrl: 'index.html',
template: '',
})
export class AddonModForumIndexPage implements OnInit {
export class CoreCourseModuleMainActivityPage<ActivityType extends CoreCourseModuleMainResourceComponent> implements OnInit {
activityComponent?: ActivityType;
title!: string;
module!: CoreCourseAnyModuleData;
courseId!: number;
/**
* @inheritdoc
* Component being initialized.
*/
ngOnInit(): void {
this.module = CoreNavigator.getRouteParam<CoreCourseAnyModuleData>('module')!;
@ -38,12 +43,26 @@ export class AddonModForumIndexPage implements OnInit {
}
/**
* Update some data based on the forum instance.
* Update some data based on the activity instance.
*
* @param forum Forum instance.
* @param activity Activity instance.
*/
updateData(forum: AddonModForumData): void {
this.title = forum.name || this.title;
updateData(activity: { name: string}): void {
this.title = activity.name || this.title;
}
/**
* User entered the page.
*/
ionViewDidEnter(): void {
this.activityComponent?.ionViewDidEnter();
}
/**
* User left the page.
*/
ionViewDidLeave(): void {
this.activityComponent?.ionViewDidLeave();
}
}