Skip to content
Snippets Groups Projects
Commit d2c411ec authored by Isaac Evavold's avatar Isaac Evavold Committed by jvanboxtel@wisc.edu
Browse files

pass cutoff-term to 'academicYearState' pipe via parameter

parent 3acf6089
No related branches found
No related tags found
No related merge requests found
...@@ -25,12 +25,12 @@ ...@@ -25,12 +25,12 @@
</div> </div>
<div fxLayout="column" fxLayoutGap="20px" fxLayoutAlign="start stretch" style="margin: 24px"> <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"> <ng-container *ngFor="let year of termsByYear$ | async">
<mat-expansion-panel class="year-container"[expanded]="true"> <mat-expansion-panel class="year-container"[expanded]="true">
<mat-expansion-panel-header> <mat-expansion-panel-header>
<mat-panel-title> <mat-panel-title>
{{ year.twoDigitYearCode | academicYearState }} {{ year.twoDigitYearCode | academicYearState:cutoffTermCode }}
</mat-panel-title> </mat-panel-title>
</mat-expansion-panel-header> </mat-expansion-panel-header>
<div fxLayout="row" fxLayout.lt-md="column" fxLayoutGap="20px" fxLayoutAlign="start stretch" class="term-container-wrapper"> <div fxLayout="row" fxLayout.lt-md="column" fxLayoutGap="20px" fxLayoutAlign="start stretch" class="term-container-wrapper">
......
...@@ -14,65 +14,68 @@ import { Year } from '@app/core/models/year'; ...@@ -14,65 +14,68 @@ import { Year } from '@app/core/models/year';
// Selectors // Selectors
import { import {
getAllDegreePlans, getAllDegreePlans,
getVisibleRoadmapId, getVisibleRoadmapId,
getAllVisibleTermsByYear firstActiveTermCode,
getAllVisibleTermsByYear,
} from '@app/degree-planner/selectors'; } from '@app/degree-planner/selectors';
// Actions // Actions
import { ChangeVisiblePlanRequest } from '@app/degree-planner/actions/plan.actions'; import { ChangeVisiblePlanRequest } from '@app/degree-planner/actions/plan.actions';
@Component({ @Component({
selector: 'cse-degree-planner', selector: 'cse-degree-planner',
templateUrl: './degree-planner.component.html', templateUrl: './degree-planner.component.html',
styleUrls: ['./degree-planner.component.scss'] styleUrls: ['./degree-planner.component.scss'],
}) })
export class DegreePlannerComponent implements OnInit { export class DegreePlannerComponent implements OnInit {
public termsByAcademicYear: Object; public termsByAcademicYear: Object;
public mobileView: MediaQueryList; public mobileView: MediaQueryList;
public coursesData$: any; public coursesData$: any;
public visibleRoadmapId$: Observable<number | undefined>; public visibleRoadmapId$: Observable<number | undefined>;
public allDegreePlans$: Observable<DegreePlan[]>; public allDegreePlans$: Observable<DegreePlan[]>;
public termsByYear$: Observable<Year[]>; public firstActiveTermCode$: Observable<string | undefined>;
public termsByYear$: Observable<Year[]>;
constructor( constructor(
private store: Store<GlobalState>, private store: Store<GlobalState>,
public mediaMatcher: MediaMatcher public mediaMatcher: MediaMatcher,
) { ) {
this.mobileView = mediaMatcher.matchMedia('(max-width: 900px)'); this.mobileView = mediaMatcher.matchMedia('(max-width: 900px)');
} }
public ngOnInit() { public ngOnInit() {
this.visibleRoadmapId$ = this.store.pipe(select(getVisibleRoadmapId)); this.visibleRoadmapId$ = this.store.pipe(select(getVisibleRoadmapId));
this.allDegreePlans$ = this.store.pipe(select(getAllDegreePlans)); this.allDegreePlans$ = this.store.pipe(select(getAllDegreePlans));
this.termsByYear$ = this.store.pipe(select(getAllVisibleTermsByYear)); this.firstActiveTermCode$ = this.store.pipe(select(firstActiveTermCode));
} this.termsByYear$ = this.store.pipe(select(getAllVisibleTermsByYear));
}
public handleDegreePlanChange(event: MatSelectChange): void { public handleDegreePlanChange(event: MatSelectChange): void {
if (typeof event.value === 'number') { if (typeof event.value === 'number') {
this.store.dispatch( this.store.dispatch(
new ChangeVisiblePlanRequest({ newVisibleRoadmapId: event.value }) new ChangeVisiblePlanRequest({ newVisibleRoadmapId: event.value }),
); );
} }
} }
public getTermDropZone() { public getTermDropZone() {
const termCodes = ['favoriteCourse-dropZone']; const termCodes = ['favoriteCourse-dropZone'];
for (const yearCode in this.termsByAcademicYear) { for (const yearCode in this.termsByAcademicYear) {
if (this.termsByAcademicYear[yearCode]) { if (this.termsByAcademicYear[yearCode]) {
const year = this.termsByAcademicYear[yearCode]; const year = this.termsByAcademicYear[yearCode];
for (const termKey in year.terms) { for (const termKey in year.terms) {
if (year.terms[termKey]) { if (year.terms[termKey]) {
const term = year.terms[termKey]; const term = year.terms[termKey];
termCodes.push('term-' + term.termCode); termCodes.push('term-' + term.termCode);
} }
} }
} }
} }
// console.log(termCodes); // console.log(termCodes);
return termCodes; return termCodes;
} }
} }
...@@ -8,10 +8,7 @@ import { Store } from '@ngrx/store'; ...@@ -8,10 +8,7 @@ import { Store } from '@ngrx/store';
// Services // Services
import { DegreePlannerApiService } from '@app/degree-planner/services/api.service'; import { DegreePlannerApiService } from '@app/degree-planner/services/api.service';
import { import { getDegreePlannerState } from '@app/degree-planner/selectors';
getDegreePlannerState,
getVisibleRoadmapId,
} from '@app/degree-planner/selectors';
// Actions // Actions
import { import {
......
...@@ -17,6 +17,17 @@ export const getSavedForLaterCourses = createSelector( ...@@ -17,6 +17,17 @@ export const getSavedForLaterCourses = createSelector(
state => state.savedForLaterCourses, 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( export const getAllDegreePlans = createSelector(
getDegreePlannerState, getDegreePlannerState,
state => state.allDegreePlans, state => state.allDegreePlans,
......
import { Pipe, PipeTransform } from '@angular/core'; 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({ @Pipe({
name: 'academicYearState', name: 'academicYearState',
}) })
export class AcademicYearStatePipe implements PipeTransform { export class AcademicYearStatePipe implements PipeTransform {
terms: PlannedTerm[]; transform(year: string, cutoffTermCode: string): string {
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;
let century = 2000; let century = 2000;
if (termCode.substr(0, 1) === '0') { if (cutoffTermCode.substr(0, 1) === '0') {
century = 1900; century = 1900;
} }
const YYYY = century + Number(year); const YYYY = century + Number(year);
if (year < termCode.substr(1, 2)) { if (year < cutoffTermCode.substr(1, 2)) {
return 'Past: ' + (YYYY - 1) + '-' + YYYY; return 'Past: ' + (YYYY - 1) + '-' + YYYY;
} else if (year > termCode.substr(1, 2)) { } else if (year > cutoffTermCode.substr(1, 2)) {
return 'Future: ' + (YYYY - 1) + '-' + YYYY; return 'Future: ' + (YYYY - 1) + '-' + YYYY;
} else { } else {
return 'Current: ' + (YYYY - 1) + '-' + YYYY; return 'Current: ' + (YYYY - 1) + '-' + YYYY;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment