import { Component, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; import { Store, select } from '@ngrx/store'; import { SavedForLaterCourse } from '@app/core/models/saved-for-later-course'; import { GlobalState } from '@app/core/state'; import { getSavedForLaterCourses } from '@app/degree-planner/store/selectors'; import { Course } from '@app/core/models/course'; // rsjx / ngrx import { DegreePlannerState } from '@app/degree-planner/store/state'; import { AddSaveForLater, RemoveCourse, } from '@app/degree-planner/store/actions/course.actions'; // Selectors import { getDropZones } from '@app/degree-planner/store/selectors'; @Component({ selector: 'cse-favorites-container', templateUrl: './favorites-container.component.html', styleUrls: ['./favorites-container.component.scss'], }) export class SavedForLaterContainerComponent implements OnInit { public courses$: Observable<SavedForLaterCourse[]>; public dropZones$: Observable<String[]>; constructor(private store: Store<{ degreePlanner: DegreePlannerState }>) {} public ngOnInit() { this.dropZones$ = this.store.pipe(select(getDropZones)); this.courses$ = this.store.pipe(select(getSavedForLaterCourses)); } drop(event: any) { const newContainerId = event.container.id; const previousContainerId = event.previousContainer.id; const fromTerm = previousContainerId.indexOf('term-') === 0; const fromDifferentContainer = newContainerId !== previousContainerId; if (fromDifferentContainer && fromTerm) { const course = event.item.data as Course; this.store.dispatch( new AddSaveForLater({ courseId: course.courseId, subjectCode: course.subjectCode, title: course.title, catalogNumber: course.catalogNumber, }), ); this.store.dispatch( new RemoveCourse({ recordId: course.id as number, }), ); } } }