From d2c411ecf9d911658301fe571dca64d487f18b66 Mon Sep 17 00:00:00 2001
From: ievavold <ievavold@wisc.edu>
Date: Tue, 5 Feb 2019 10:06:56 -0600
Subject: [PATCH] pass cutoff-term to 'academicYearState' pipe via parameter

---
 .../degree-planner.component.html             |  4 +-
 .../degree-planner.component.ts               | 95 ++++++++++---------
 .../degree-planner/effects/plan.effects.ts    |  5 +-
 src/app/degree-planner/selectors.ts           | 11 +++
 .../shared/pipes/academic-year-state.pipe.ts  | 21 +---
 5 files changed, 67 insertions(+), 69 deletions(-)

diff --git a/src/app/degree-planner/degree-planner.component.html b/src/app/degree-planner/degree-planner.component.html
index c7587bd..fbb2212 100644
--- a/src/app/degree-planner/degree-planner.component.html
+++ b/src/app/degree-planner/degree-planner.component.html
@@ -25,12 +25,12 @@
 		</div>
 
 		<div fxLayout="column" fxLayoutGap="20px" fxLayoutAlign="start stretch" style="margin: 24px">
-			<mat-accordion multi="true">
+			<mat-accordion multi="true" *ngIf="(firstActiveTermCode$ | async) as cutoffTermCode">
 				<ng-container *ngFor="let year of termsByYear$ | async">
 					<mat-expansion-panel class="year-container"[expanded]="true">
 						<mat-expansion-panel-header>
 							<mat-panel-title>
-								{{ year.twoDigitYearCode | academicYearState }}
+								{{ year.twoDigitYearCode | academicYearState:cutoffTermCode }}
 							</mat-panel-title>
 						</mat-expansion-panel-header>
 						<div fxLayout="row" fxLayout.lt-md="column" fxLayoutGap="20px" fxLayoutAlign="start stretch" class="term-container-wrapper">
diff --git a/src/app/degree-planner/degree-planner.component.ts b/src/app/degree-planner/degree-planner.component.ts
index ea74db3..58d2f4d 100644
--- a/src/app/degree-planner/degree-planner.component.ts
+++ b/src/app/degree-planner/degree-planner.component.ts
@@ -14,65 +14,68 @@ import { Year } from '@app/core/models/year';
 
 // Selectors
 import {
-	getAllDegreePlans,
-	getVisibleRoadmapId,
-	getAllVisibleTermsByYear
+  getAllDegreePlans,
+  getVisibleRoadmapId,
+  firstActiveTermCode,
+  getAllVisibleTermsByYear,
 } from '@app/degree-planner/selectors';
 
 // Actions
 import { ChangeVisiblePlanRequest } from '@app/degree-planner/actions/plan.actions';
 
 @Component({
-	selector: 'cse-degree-planner',
-	templateUrl: './degree-planner.component.html',
-	styleUrls: ['./degree-planner.component.scss']
+  selector: 'cse-degree-planner',
+  templateUrl: './degree-planner.component.html',
+  styleUrls: ['./degree-planner.component.scss'],
 })
 export class DegreePlannerComponent implements OnInit {
-	public termsByAcademicYear: Object;
-	public mobileView: MediaQueryList;
-	public coursesData$: any;
+  public termsByAcademicYear: Object;
+  public mobileView: MediaQueryList;
+  public coursesData$: any;
 
-	public visibleRoadmapId$: Observable<number | undefined>;
-	public allDegreePlans$: Observable<DegreePlan[]>;
-	public termsByYear$: Observable<Year[]>;
+  public visibleRoadmapId$: Observable<number | undefined>;
+  public allDegreePlans$: Observable<DegreePlan[]>;
+  public firstActiveTermCode$: Observable<string | undefined>;
+  public termsByYear$: Observable<Year[]>;
 
-	constructor(
-		private store: Store<GlobalState>,
-		public mediaMatcher: MediaMatcher
-	) {
-		this.mobileView = mediaMatcher.matchMedia('(max-width: 900px)');
-	}
+  constructor(
+    private store: Store<GlobalState>,
+    public mediaMatcher: MediaMatcher,
+  ) {
+    this.mobileView = mediaMatcher.matchMedia('(max-width: 900px)');
+  }
 
-	public ngOnInit() {
-		this.visibleRoadmapId$ = this.store.pipe(select(getVisibleRoadmapId));
-		this.allDegreePlans$ = this.store.pipe(select(getAllDegreePlans));
-		this.termsByYear$ = this.store.pipe(select(getAllVisibleTermsByYear));
-	}
+  public ngOnInit() {
+    this.visibleRoadmapId$ = this.store.pipe(select(getVisibleRoadmapId));
+    this.allDegreePlans$ = this.store.pipe(select(getAllDegreePlans));
+    this.firstActiveTermCode$ = this.store.pipe(select(firstActiveTermCode));
+    this.termsByYear$ = this.store.pipe(select(getAllVisibleTermsByYear));
+  }
 
-	public handleDegreePlanChange(event: MatSelectChange): void {
-		if (typeof event.value === 'number') {
-			this.store.dispatch(
-				new ChangeVisiblePlanRequest({ newVisibleRoadmapId: event.value })
-			);
-		}
-	}
+  public handleDegreePlanChange(event: MatSelectChange): void {
+    if (typeof event.value === 'number') {
+      this.store.dispatch(
+        new ChangeVisiblePlanRequest({ newVisibleRoadmapId: event.value }),
+      );
+    }
+  }
 
-	public getTermDropZone() {
-		const termCodes = ['favoriteCourse-dropZone'];
+  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);
+    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);
 
-		return termCodes;
-	}
+    return termCodes;
+  }
 }
diff --git a/src/app/degree-planner/effects/plan.effects.ts b/src/app/degree-planner/effects/plan.effects.ts
index 23def49..c6561f5 100644
--- a/src/app/degree-planner/effects/plan.effects.ts
+++ b/src/app/degree-planner/effects/plan.effects.ts
@@ -8,10 +8,7 @@ import { Store } from '@ngrx/store';
 
 // Services
 import { DegreePlannerApiService } from '@app/degree-planner/services/api.service';
-import {
-  getDegreePlannerState,
-  getVisibleRoadmapId,
-} from '@app/degree-planner/selectors';
+import { getDegreePlannerState } from '@app/degree-planner/selectors';
 
 // Actions
 import {
diff --git a/src/app/degree-planner/selectors.ts b/src/app/degree-planner/selectors.ts
index bcfae85..b50e153 100644
--- a/src/app/degree-planner/selectors.ts
+++ b/src/app/degree-planner/selectors.ts
@@ -17,6 +17,17 @@ export const getSavedForLaterCourses = createSelector(
   state => state.savedForLaterCourses,
 );
 
+export const firstActiveTermCode = createSelector(
+  getDegreePlannerState,
+  state => {
+    if (state.activeTermCodes.length > 0) {
+      return state.activeTermCodes[0];
+    } else {
+      return undefined;
+    }
+  },
+);
+
 export const getAllDegreePlans = createSelector(
   getDegreePlannerState,
   state => state.allDegreePlans,
diff --git a/src/app/shared/pipes/academic-year-state.pipe.ts b/src/app/shared/pipes/academic-year-state.pipe.ts
index 142b1c9..cfb3f88 100644
--- a/src/app/shared/pipes/academic-year-state.pipe.ts
+++ b/src/app/shared/pipes/academic-year-state.pipe.ts
@@ -1,32 +1,19 @@
 import { Pipe, PipeTransform } from '@angular/core';
-import { GlobalState } from '@app/core/state';
-import { State, select } from '@ngrx/store';
-
-import { getAllVisibleTerms } from './../../degree-planner/selectors';
-import { PlannedTerm } from './../../core/models/planned-term';
 
 @Pipe({
   name: 'academicYearState',
 })
 export class AcademicYearStatePipe implements PipeTransform {
-  terms: PlannedTerm[];
-  constructor(private store: State<GlobalState>) {
-    this.store
-      .pipe(select(getAllVisibleTerms))
-      .subscribe(terms => (this.terms = terms));
-  }
-
-  transform(year: string): string {
-    const termCode = this.terms[0].termCode;
+  transform(year: string, cutoffTermCode: string): string {
     let century = 2000;
-    if (termCode.substr(0, 1) === '0') {
+    if (cutoffTermCode.substr(0, 1) === '0') {
       century = 1900;
     }
     const YYYY = century + Number(year);
 
-    if (year < termCode.substr(1, 2)) {
+    if (year < cutoffTermCode.substr(1, 2)) {
       return 'Past: ' + (YYYY - 1) + '-' + YYYY;
-    } else if (year > termCode.substr(1, 2)) {
+    } else if (year > cutoffTermCode.substr(1, 2)) {
       return 'Future: ' + (YYYY - 1) + '-' + YYYY;
     } else {
       return 'Current: ' + (YYYY - 1) + '-' + YYYY;
-- 
GitLab