Skip to content
Snippets Groups Projects
degree-planner-data.service.ts 1.77 KiB
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;
	termCodes: any;
Scott Berg's avatar
Scott Berg committed
	dropZones: String[];

	constructor(private dataService: DataService) { }

	getDegreePlanDataById(planId: number) {
		// this.dataService.test().subscribe(() => {});
		this.degreePlannerData = this.dataService.getDegreePlannerCourseData(planId).pipe(
			map(courses => courses.sort((a, b) => Number(a.termCode) - Number(b.termCode))),
			mergeAll(),
			share()
		this.degreePlannerData.pipe(
			map(course => course.termCode),
			distinct(),
			toArray()
Scott Berg's avatar
Scott Berg committed
		).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$;
	}

		return this.termCodes;
	getAllNotes(): Observable<Note[]> {
		return this.dataService.getAllNotes(this.planId);
	}

	getPlanId(): number {
		return this.planId;