Newer
Older
import { Course } from '@app/core/models/course';
import { Note } from './../models/note';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { groupBy, toArray, mergeMap, flatMap, tap, mergeAll, map, distinct, share } from 'rxjs/operators';
import { DataService } from '@app/core/data.service';
@Injectable({
providedIn: 'root'
})
export class DegreePlannerDataService {
degreePlannerData: Observable<any>;
coursesData$: any;
constructor(private dataService: DataService) { }
getDegreePlanDataById(planId: number) {
this.planId = planId;
// this.dataService.test().subscribe(() => {});
this.degreePlannerData = this.dataService.getDegreePlannerCourseData(planId).pipe(
map(courses => courses.sort((a, b) => Number(a.termCode) - Number(b.termCode))),
this.degreePlannerData.pipe(
map(course => course.termCode),
distinct(),
toArray()
).subscribe(termCodes => {
this.termCodes = termCodes;
this.dropZones = termCodes.map(termCode => `term-${termCode}`);
this.dropZones.push('saved-courses');
});
this.coursesData$ = this.degreePlannerData.pipe(
groupBy(course => course.termCode),
mergeMap(group$ => group$.pipe(toArray())),
map(course => {
return {
termCode: course[0].termCode,
year: course[0].termCode.substring(1, 3),
};
}),
groupBy(terms => terms.year),
mergeMap(group$ => group$.pipe(toArray())),
toArray(),
tap(x => console.log('new data', x))
);
return this.coursesData$;
}
getAllTerms() {
getAllNotes(): Observable<Note[]> {
return this.dataService.getAllNotes(this.planId);
}
getPlanId(): number {
return this.planId;