// Libraries import { Component, Input, OnInit } from '@angular/core'; import { CdkDragDrop } from '@angular/cdk/drag-drop'; import { MatDialog } from '@angular/material'; // rsjx / ngrx import { Observable } from 'rxjs'; import { Store, select } from '@ngrx/store'; import { DegreePlannerState } from '@app/degree-planner/state'; import { ChangeCourseTermRequest } from '@app/degree-planner/actions/plan.actions'; // Selectors import { getDropZones, isActiveTerm } from '@app/degree-planner/selectors'; // Services import { DataService } from '../../core/data.service'; import { DegreePlannerDataService } from './../../core/service/degree-planner-data.service'; import { SidenavService } from './../../core/service/sidenav.service'; // Models import { PlannedTerm } from '@app/core/models/planned-term'; import { NotesDialogComponent, NotesDialogData } from '../dialogs/notes-dialog/notes-dialog.component'; @Component({ selector: 'cse-term-container', templateUrl: './term-container.component.html', styleUrls: ['./term-container.component.scss'] }) export class TermContainerComponent implements OnInit { @Input() term: PlannedTerm; public dropZones$: Observable<String[]>; public isActiveTerm$: Observable<Boolean>; constructor( private dataService: DataService, public degreePlannerDataSvc: DegreePlannerDataService, public dialog: MatDialog, private sidenavService: SidenavService, private store: Store<{ degreePlanner: DegreePlannerState }>, ) {} public ngOnInit() { this.dropZones$ = this.store.pipe(select(getDropZones)); this.isActiveTerm$ = this.store.pipe(select(isActiveTerm(this.term.termCode))); } // this.dropZones$ = this.store.pipe(select(getDropZones)); public openAddSidenav(): void { this.sidenavService.open(); } public openNotesDialog(): void { const termCode = this.term.termCode; const data: NotesDialogData = this.term.note ? { termCode, hasExistingNote: true, initialText: this.term.note.note } : { termCode, hasExistingNote: false }; this.dialog.open<any, NotesDialogData>(NotesDialogComponent, { data }); } public getTotalCredits(): number { return this.term.courses.reduce((sum, course) => { return sum + course.credits; }, 0); } drop(event: CdkDragDrop<string[]>) { const to = event.container.id.substr(5); const { termCode: from, id } = event.item.data; if (from === to) { return; } console.log(to); console.log(from); console.log(id); this.store.dispatch(new ChangeCourseTermRequest({ to, from, id })); // // Get the course JSON // const item = event.item.data; // console.log(event); // const newTermCode = event.container.id.substr(5, 4); // if ( // event.previousContainer.id === 'saved-courses' && // event.container.id !== 'saved-courses' // ) { // // If moving from favorites to term // container.data.push(item); // previousContainer.data.splice(previousIndex, 1); // this.dataService // .addCourse( // this.degreePlannerDataSvc.getPlanId(), // event.item.data.subjectCode, // event.item.data.courseId, // newTermCode // ) // .subscribe(data => { // const yearCode = newTermCode.substring(0, 3); // const termCode = newTermCode.substring(3); // }); // this.dataService // .removeFavoriteCourse( // event.item.data.subjectCode, // event.item.data.courseId // ) // .subscribe(); // } else if (event.previousContainer.id !== event.container.id) { // container.data.push(item); // previousContainer.data.splice(previousIndex, 1); // // Tell the API this course updated // this.dataService // .updateCourseTerm( // this.degreePlannerDataSvc.getPlanId(), // event.item.data.id, // newTermCode // ) // .subscribe(); // } // Do nothing on drop to same term } }