Skip to content
Snippets Groups Projects
degree-planner.component.ts 3.95 KiB
Newer Older
jvanboxtel@wisc.edu's avatar
jvanboxtel@wisc.edu committed
import { tap } from 'rxjs/operators';
// Libraries
import { OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { select } from '@ngrx/store';
import { Component } from '@angular/core';
jvanboxtel@wisc.edu's avatar
jvanboxtel@wisc.edu committed
import {
  MatSelectChange,
  MatExpansionPanelState,
  MatExpansionPanel,
} from '@angular/material';
jvanboxtel@wisc.edu's avatar
jvanboxtel@wisc.edu committed
import { MatDialog } from '@angular/material';
import { Store } from '@ngrx/store';
import { MediaMatcher } from '@angular/cdk/layout';
Isaac Evavold's avatar
Isaac Evavold committed
import { GlobalState } from '@app/core/state';
import { DegreePlan } from '@app/core/models/degree-plan';
import { Year } from '@app/core/models/year';

// Selectors
import {
  getAllDegreePlans,
  getVisibleRoadmapId,
  firstActiveTermCode,
  getAllVisibleTermsByYear,
  getVisibleDegreePlan,
Isaac Evavold's avatar
Isaac Evavold committed
  hasLoadedDegreePlan,
jvanboxtel@wisc.edu's avatar
jvanboxtel@wisc.edu committed
} from '@app/degree-planner/store/selectors';
Scott Berg's avatar
Scott Berg committed
import {
  SwitchPlan,
  MakePlanPrimary,
} from '@app/degree-planner/store/actions/plan.actions';
jvanboxtel@wisc.edu's avatar
jvanboxtel@wisc.edu committed

jvanboxtel@wisc.edu's avatar
jvanboxtel@wisc.edu committed
import { ModifyPlanDialogComponent } from './dialogs/modify-plan-dialog/modify-plan-dialog.component';
jvanboxtel@wisc.edu's avatar
jvanboxtel@wisc.edu committed
import { ToggleAcademicYear } from './store/actions/ui.actions';
jvanboxtel@wisc.edu's avatar
jvanboxtel@wisc.edu committed
@Component({
  selector: 'cse-degree-planner',
  templateUrl: './degree-planner.component.html',
  styleUrls: ['./degree-planner.component.scss'],
jvanboxtel@wisc.edu's avatar
jvanboxtel@wisc.edu committed
})
export class DegreePlannerComponent implements OnInit {
  public termsByAcademicYear: Object;
  public mobileView: MediaQueryList;
  public coursesData$: any;
Isaac Evavold's avatar
Isaac Evavold committed
  public hasLoadedDegreePlan$: Observable<boolean>;
  public visibleRoadmapId$: Observable<number | undefined>;
  public visibleDegreePlan$: Observable<DegreePlan | undefined>;
  public allDegreePlans$: Observable<DegreePlan[]>;
  public firstActiveTermCode$: Observable<string | undefined>;
  public termsByYear$: Observable<Year[]>;
  constructor(
    private store: Store<GlobalState>,
    public mediaMatcher: MediaMatcher,
jvanboxtel@wisc.edu's avatar
jvanboxtel@wisc.edu committed
    public dialog: MatDialog,
  ) {
    this.mobileView = mediaMatcher.matchMedia('(max-width: 900px)');
  }
Isaac Evavold's avatar
Isaac Evavold committed
    this.hasLoadedDegreePlan$ = this.store.pipe(select(hasLoadedDegreePlan));
    this.visibleRoadmapId$ = this.store.pipe(select(getVisibleRoadmapId));
    this.visibleDegreePlan$ = this.store.pipe(select(getVisibleDegreePlan));
    this.allDegreePlans$ = this.store.pipe(select(getAllDegreePlans));
    this.firstActiveTermCode$ = this.store.pipe(select(firstActiveTermCode));
    this.termsByYear$ = this.store.pipe(select(getAllVisibleTermsByYear));
  }
jvanboxtel@wisc.edu's avatar
jvanboxtel@wisc.edu committed
  public handleAcademicYearToggle(year: Year): void {
    // this.store.dispatch(
    // new ToggleAcademicYear({ year: year.twoDigitYearCode.toString() }),
    // );
  }

  public handleDegreePlanChange(event: MatSelectChange): void {
    if (typeof event.value === 'number') {
Isaac Evavold's avatar
Isaac Evavold committed
      this.store.dispatch(new SwitchPlan({ newVisibleRoadmapId: event.value }));
jvanboxtel@wisc.edu's avatar
jvanboxtel@wisc.edu committed
  public onCreatePlanClick() {
    // TODO
    console.log('onCreatePlanClick');
    const data = {};
    this.dialog.open(ModifyPlanDialogComponent, { data });
  }

  public onRenamePlanClick() {
    // TODO
    console.log('onRenamePlanClick');
jvanboxtel@wisc.edu's avatar
jvanboxtel@wisc.edu committed
    const data = {};
    this.dialog.open(ModifyPlanDialogComponent, { data });
  }

  public onMakePrimayClick() {
Scott Berg's avatar
Scott Berg committed
    // TODO open confirm dialog
    this.store.dispatch(new MakePlanPrimary());
jvanboxtel@wisc.edu's avatar
jvanboxtel@wisc.edu committed
  }

  public onDeletePlanClick() {
    // TODO
    // open confirm dialog
    console.log('onDeletePlanClick');
  }

  public onPrintPlanClick() {
    // TODO
    console.log('onPrintPlanClick');
  }

  public onSharePlanClick() {
    // TODO
    console.log('onSharePlanClick');
  }

  public getTermDropZone() {
    const termCodes = ['favoriteCourse-dropZone'];
    for (const yearCode in this.termsByAcademicYear) {
      if (this.termsByAcademicYear[yearCode]) {
        const year = this.termsByAcademicYear[yearCode];
        for (const termKey in year.terms) {
          if (year.terms[termKey]) {
            const term = year.terms[termKey];
            termCodes.push('term-' + term.termCode);
          }
        }
      }
    }
    // console.log(termCodes);
jvanboxtel@wisc.edu's avatar
jvanboxtel@wisc.edu committed
}