Pārlūkot izejas kodu

Course Data Connected course list and details page

master
kj1352 pirms 5 gadiem
vecāks
revīzija
69da483c75
9 mainītis faili ar 300 papildinājumiem un 117 dzēšanām
  1. +2
    -2
      src/app/app-routing.module.ts
  2. +159
    -0
      src/app/services/demo.service.ts
  3. +8
    -4
      src/app/tabs/courses/course-details/course-details.component.html
  4. +38
    -0
      src/app/tabs/courses/course-details/course-details.component.scss
  5. +26
    -51
      src/app/tabs/courses/course-details/course-details.component.ts
  6. +28
    -52
      src/app/tabs/courses/courses.component.html
  7. +33
    -6
      src/app/tabs/courses/courses.component.ts
  8. +5
    -1
      src/app/tabs/home/home.component.ts
  9. +1
    -1
      src/app/tabs/tabs.component.ts

+ 2
- 2
src/app/app-routing.module.ts Parādīt failu

@@ -19,11 +19,11 @@ const routes: Routes = [
{ component: WelcomeComponent, path: 'welcome' },
{ component: TabsComponent, path: 'tabs' },
{ component: TabsComponent, path: 'tabs/:subpage' },
{ component: CourseDetailsComponent, path: 'course-details/:heading' },
{ component: CourseDetailsComponent, path: 'course-details' },
{ component: ChapterNotesComponent, path: 'chapter-notes/:heading' },
{ component: VideoChapterComponent, path: 'video-chapter/:heading' },
{ component: VideoNotesComponent, path: 'video-notes/:heading' },
{ component: QuizComponent, path: 'quiz/:heading' },
{ component: QuizComponent, path: 'quiz' },
{ component: CalendarComponent, path: 'calendar' },
{ component: AttendanceComponent, path: 'attendance'},
{ component: ForumPageComponent, path: 'forum'},


+ 159
- 0
src/app/services/demo.service.ts Parādīt failu

@@ -9,6 +9,165 @@ export class DemoService {
demoType: Observable<string>;
demoTypeObserver: Observer<string>;

courseData = [{
classLevel: '10',
courses: [{
id: '1',
name: 'Environmental Studies',
code: 'EVS',
teacher: {
name: 'Mr Kashinath Kashyap',
profile_image: 'https://pbs.twimg.com/profile_images/3478244961/01ebfc40ecc194a2abc81e82ab877af4.jpeg'
},
chapterList: [{
heading: 'Chapter 1',
isCompleted: false,
topics: [{
heading: 'Living Things',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'downloaded',
isCompleted: true,
type: 'video',
url: '/video-chapter',
param: 'Living Things'
}, {
heading: 'Living Things-1',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: true,
type: 'notes',
url: '/chapter-notes',
param: 'Living Things-1'
}, {
heading: 'Living Things-2',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: false,
type: 'quiz',
url: '/quiz',
param: 'Living Things-2'
}]
}, {
heading: 'Chapter 2',
isCompleted: true,
topics: [{
heading: 'Earth',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: true,
type: 'video',
url: '/video-chapter',
param: 'Earth'
}, {
heading: 'Earth-2',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: true,
type: 'quiz',
url: '/quiz',
param: 'Earth-2'
}]
}]
}, {
id: '2',
name: 'Mathematics',
code: 'MAT',
teacher: {
name: 'Mr Kashinath Kashyap',
profile_image: 'https://pbs.twimg.com/profile_images/3478244961/01ebfc40ecc194a2abc81e82ab877af4.jpeg'
},
chapterList: [{
heading: 'Geometry',
isCompleted: false,
topics: [{
heading: 'Theorems',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'downloaded',
isCompleted: true,
type: 'video',
url: '/video-chapter',
param: 'Theorems'
}, {
heading: 'Triangle',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: true,
type: 'notes',
url: '/chapter-notes',
param: 'Triangle'
}, {
heading: 'Quiz',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: false,
type: 'quiz',
url: '/quiz',
param: 'Geometry'
}]
}, {
heading: 'Algebra',
isCompleted: true,
topics: [{
heading: 'Graph',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: true,
type: 'video',
url: '/video-chapter',
param: 'Graph'
}, {
heading: 'Quiz',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: true,
type: 'quiz',
url: '/quiz',
param: 'Graph'
}]
}]
}]
}, {
classLevel: '8',
courses: [{
id: '1',
name: 'Environmental Studies',
code: 'EVS',
teacher: {
name: 'Mr Kashinath Kashyap',
profile_image: 'https://pbs.twimg.com/profile_images/3478244961/01ebfc40ecc194a2abc81e82ab877af4.jpeg'
},
chapterList: [{
heading: 'History',
isCompleted: false,
topics: [{
heading: 'World War 1',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'downloaded',
isCompleted: true,
type: 'video',
url: '/video-chapter',
param: 'World War 1'
}, {
heading: 'World War 2',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: true,
type: 'notes',
url: '/chapter-notes',
param: 'World War 3'
}, {
heading: 'Quiz',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: false,
type: 'quiz',
url: '/quiz',
param: 'History'
}]
}]
}]
}];

studentClassList = [{
date: moment(new Date()).format('MMM, DD 2020'),
classes: [{


+ 8
- 4
src/app/tabs/courses/course-details/course-details.component.html Parādīt failu

@@ -1,10 +1,10 @@
<div class="page">
<div class="page" *ngIf="chapterList">
<section class="upfold">
<button class="close-button" (click)="back()">
<svg-icon [applyClass]="true" class="icon" src="assets/custom-icons/close.svg"></svg-icon>
</button>

<h3> {{ heading }} </h3>
<h3> {{ classLevel }} Std, {{ heading }} </h3>
<p> Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Earum rerum itaque, autem voluptatibus, quia, consectetur quasi blanditiis.
</p>
@@ -13,7 +13,7 @@

<div class="progress-holder"> <span class="progress"></span> </div>

<header class="segment-header">
<header class="segment-header" [ngClass]="{'hide-grades' : demoType === 'Teacher'}">
<button (click)="selectedSegment='home'"
[ngClass]="{'active': selectedSegment === 'home' }"> Chapters </button>
<button (click)="selectedSegment='resources'"
@@ -26,7 +26,7 @@

<div class="segments-holder">
<ul class="chapter-list" *ngIf="selectedSegment === 'home'">
<section class="test-prompt">
<section class="test-prompt" *ngIf="demoType === 'Student'">
<section class="prompt">
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quidem ab vel reiciendis. Repudiandae nobis pariatur laboriosam, natus quidem quos architecto provident similique officiis vero at cum excepturi eius, eligendi aperiam.
@@ -79,6 +79,10 @@
</div>
</li>
</ul>
<div class="chapter-action-buttons" *ngIf="demoType === 'Teacher'">
<button> Add </button>
<button> Edit </button>
</div>
</li>

<div class="confirmation-popup" [ngClass]="{'active' : showDeletePopup }">


+ 38
- 0
src/app/tabs/courses/course-details/course-details.component.scss Parādīt failu

@@ -68,6 +68,16 @@
height: 50px;
box-shadow: 0px 0px 5px var(--black);

&.hide-grades {
button {
width: calc(100% / 3);

&:nth-child(3) {
display: none;
}
}
}

button {
font-size: 14px;
width: calc(100% / 4);
@@ -113,6 +123,30 @@
list-style: none;

.chapter {

.chapter-action-buttons {
display: none;
align-items: stretch;
width: 100%;
justify-content: space-around;
padding: 10px 0;

button {
width: 48%;
border-radius: 5px;
height: 35px;
font-size: 14px;
color: var(--light-grey);
border: 1px solid var(--light-grey);
background-color: transparent;

&:first-child {
border-color: var(--teal-green);
color: var(--teal-green);
}
}
}

&.completed {
.checkmark {
fill: var(--green);
@@ -120,6 +154,10 @@
}

&.active {
.chapter-action-buttons {
display: flex;
}

.container {
position: sticky;
position: -webkit-sticky;


+ 26
- 51
src/app/tabs/courses/course-details/course-details.component.ts Parādīt failu

@@ -2,6 +2,7 @@ import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Subscription } from 'rxjs';
import { Location } from '@angular/common';
import { DemoService } from '../../../services/demo.service';

@Component({
selector: 'app-course-details',
@@ -16,65 +17,39 @@ export class CourseDetailsComponent implements OnInit {
showDeletePopup: boolean = false;
isSubSegment: boolean = true;
selectedTopic: number;
classLevel: string;

chapterList = [{
heading: 'Chapter 1',
isCompleted: false,
topics: [{
heading: 'Living Things',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'downloaded',
isCompleted: true,
type: 'video',
url: '/video-chapter',
param: 'Living Things'
}, {
heading: 'Living Things-1',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: true,
type: 'notes',
url: '/chapter-notes',
param: 'Living Things-1'
}, {
heading: 'Living Things-2',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: false,
type: 'quiz',
url: '/quiz',
param: 'Living Things-2'
}]
}, {
heading: 'Chapter 2',
isCompleted: true,
topics: [{
heading: 'Earth',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: true,
type: 'video',
url: '/video-chapter',
param: 'Earth'
}, {
heading: 'Earth-2',
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
mediaState: 'none',
isCompleted: true,
type: 'quiz',
url: '/quiz',
param: 'Earth-2'
}]
}];
demoTypeSubscriber: Subscription;
demoType: string;

chapterList = [];

constructor(
private route: ActivatedRoute,
private location: Location
private location: Location,
private demoService: DemoService
) { }

ngOnInit(): void {
let classLevel: string, courseId: string;
this.routeSubscription = this.route.params.subscribe((params) => {
this.heading = params['heading'];
classLevel = params['classLevel'];
this.classLevel = classLevel;
courseId = params['courseId'];
});

this.demoTypeSubscriber = this.demoService.demoType.subscribe((type) => {
this.demoType = type;

let courseData = this.demoService.courseData;

let course = courseData.find((courseClass) => courseClass.classLevel === classLevel).courses.find((course) => course.id === courseId);

this.heading = course.name;

this.chapterList = course.chapterList;

console.log(this.chapterList);
});
}



+ 28
- 52
src/app/tabs/courses/courses.component.html Parādīt failu

@@ -1,52 +1,28 @@
<header> Main Courses: </header>
<ul>
<li>
<h2> ENG </h2>

<div class="details" [routerLink]="['/course-details/English']">
<h5> Chapter: 21 </h5>
<p> 50% complete </p>
<div class="progress-holder"> <span class="progress"></span> </div>
</div>
</li>

<li [routerLink]="['/course-details/Kannada']">
<h2> KAN </h2>

<div class="details">
<h5> Chapter: 21 </h5>
<p> 50% complete </p>
<div class="progress-holder"> <span class="progress"></span> </div>
</div>
</li>

<li [routerLink]="['/course-details/Biology']">
<h2> BIO </h2>

<div class="details">
<h5> Chapter: 21 </h5>
<p> 50% complete </p>
<div class="progress-holder"> <span class="progress"></span> </div>
</div>
</li>

<li [routerLink]="['/course-details/Physics']">
<h2> PHY </h2>

<div class="details">
<h5> Chapter: 21 </h5>
<p> 50% complete </p>
<div class="progress-holder"> <span class="progress"></span> </div>
</div>
</li>

<li [routerLink]="['/course-details/Chemistry']">
<h2> CHEM </h2>

<div class="details">
<h5> Chapter: 21 </h5>
<p> 50% complete </p>
<div class="progress-holder"> <span class="progress"></span> </div>
</div>
</li>
</ul>
<header> {{ demoType }} Courses: </header>
<section *ngIf="demoType === 'Teacher'">
<ul *ngFor="let class of classCourseList">
<li *ngFor="let course of class.courses">
<h2> {{ course.code }} </h2>

<div class="details" (click)="goToCourse(class.classLevel, course.id)">
<h5> Class: {{ class.classLevel }} <br> {{ course.chapterList.length }} chapters </h5>
<p> 50% complete </p>
<div class="progress-holder"> <span class="progress"></span> </div>
</div>
</li>
</ul>
</section>

<section *ngIf="demoType === 'Student'">
<ul *ngFor="let class of classCourseList">
<li *ngFor="let course of class.courses">
<h2> {{ course.code }} </h2>

<div class="details" (click)="goToCourse(class.classLevel, course.id)">
<h5> {{ course.chapterList.length }} chapters </h5>
<p> 50% complete </p>
<div class="progress-holder"> <span class="progress"></span> </div>
</div>
</li>
</ul>
</section>

+ 33
- 6
src/app/tabs/courses/courses.component.ts Parādīt failu

@@ -1,15 +1,42 @@
import { Component, OnInit } from '@angular/core';
import { DemoService } from '../../services/demo.service';
import { Subscription } from 'rxjs';
import { Router } from '@angular/router';

@Component({
selector: 'app-courses',
templateUrl: './courses.component.html',
styleUrls: ['./courses.component.scss']
selector: 'app-courses',
templateUrl: './courses.component.html',
styleUrls: ['./courses.component.scss']
})
export class CoursesComponent implements OnInit {
demoTypeSubscriber: Subscription;
demoType: string;
classCourseList = [];

constructor() { }
constructor(
private demoService: DemoService,
private router: Router
) { }

ngOnInit(): void {
}
ngOnInit(): void {
this.demoTypeSubscriber = this.demoService.demoType.subscribe((type) => {
this.demoType = type;
if (type === 'Student') {
this.classCourseList = this.demoService.courseData;
this.classCourseList = this.classCourseList.filter((courseClass) => {
return courseClass.level === '10';
})
} else {
this.classCourseList = this.demoService.courseData;
}
});
}

goToCourse(classLevel: string, courseId: string) {
this.router.navigate(['/course-details', {
classLevel: classLevel,
courseId: courseId
}])
}

}

+ 5
- 1
src/app/tabs/home/home.component.ts Parādīt failu

@@ -37,7 +37,7 @@ export class HomeComponent implements OnInit {
}

if (type === 'Teacher') {
this.classList = this.demoService.teacherClassList;
this.classList = this.demoService.teacherClassList;
}
});
}
@@ -58,4 +58,8 @@ export class HomeComponent implements OnInit {
}
}

ngOnDestroy() {
this.demoTypeSubscriber.unsubscribe();
}

}

+ 1
- 1
src/app/tabs/tabs.component.ts Parādīt failu

@@ -12,7 +12,7 @@ export class TabsComponent implements OnInit {
routeSubscription: Subscription;

constructor(
private route: ActivatedRoute
private route: ActivatedRoute,
) { }

ngOnInit(): void {