Skip to content
Snippets Groups Projects
Commit 3252ba66 authored by jvanboxtel@wisc.edu's avatar jvanboxtel@wisc.edu
Browse files

ROENROLL-1359

parent e49f7aae
No related branches found
No related tags found
No related merge requests found
import { PlannedTerm } from '@app/core/models/planned-term'; import { PlannedTerm } from '@app/core/models/planned-term';
export interface Year { export interface Year {
century: 0 | 1; century: 0 | 1;
twoDigitYearCode: number; twoDigitYearCode: number;
fall: PlannedTerm; fall: PlannedTerm;
spring: PlannedTerm; spring: PlannedTerm;
summer: PlannedTerm; summer: PlannedTerm;
expandedState: boolean;
} }
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
<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" *ngIf="(firstActiveTermCode$ | async) as cutoffTermCode"> <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]="year.expandedState" (opened)="handleAcademicYearToggle(year)" (closed)="handleAcademicYearToggle(year)">
<mat-expansion-panel-header> <mat-expansion-panel-header>
<mat-panel-title> <mat-panel-title>
{{ year.twoDigitYearCode | academicYearState:cutoffTermCode }} {{ year.twoDigitYearCode | academicYearState:cutoffTermCode }}
......
import { tap } from 'rxjs/operators';
// Libraries // Libraries
import { OnInit } from '@angular/core'; import { OnInit } from '@angular/core';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { select } from '@ngrx/store'; import { select } from '@ngrx/store';
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { MatSelectChange } from '@angular/material'; import {
MatSelectChange,
MatExpansionPanelState,
MatExpansionPanel,
} from '@angular/material';
import { MatDialog } from '@angular/material'; import { MatDialog } from '@angular/material';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import { MediaMatcher } from '@angular/cdk/layout'; import { MediaMatcher } from '@angular/cdk/layout';
...@@ -30,6 +35,7 @@ import { ...@@ -30,6 +35,7 @@ import {
} from '@app/degree-planner/store/actions/plan.actions'; } from '@app/degree-planner/store/actions/plan.actions';
import { ModifyPlanDialogComponent } from './dialogs/modify-plan-dialog/modify-plan-dialog.component'; import { ModifyPlanDialogComponent } from './dialogs/modify-plan-dialog/modify-plan-dialog.component';
import { ToggleAcademicYear } from './store/actions/ui.actions';
@Component({ @Component({
selector: 'cse-degree-planner', selector: 'cse-degree-planner',
...@@ -65,6 +71,12 @@ export class DegreePlannerComponent implements OnInit { ...@@ -65,6 +71,12 @@ export class DegreePlannerComponent implements OnInit {
this.termsByYear$ = this.store.pipe(select(getAllVisibleTermsByYear)); this.termsByYear$ = this.store.pipe(select(getAllVisibleTermsByYear));
} }
public handleAcademicYearToggle(year: Year): void {
// this.store.dispatch(
// new ToggleAcademicYear({ year: year.twoDigitYearCode.toString() }),
// );
}
public handleDegreePlanChange(event: MatSelectChange): void { public handleDegreePlanChange(event: MatSelectChange): void {
if (typeof event.value === 'number') { if (typeof event.value === 'number') {
this.store.dispatch(new SwitchPlan({ newVisibleRoadmapId: event.value })); this.store.dispatch(new SwitchPlan({ newVisibleRoadmapId: event.value }));
......
import { Action } from '@ngrx/store';
export enum UIActionTypes {
ToggleAcademicYear = '[UI] Toggle Academic Year',
}
export class ToggleAcademicYear implements Action {
public readonly type = UIActionTypes.ToggleAcademicYear;
constructor(public payload: { year: string }) {}
}
import { tap } from 'rxjs/operators';
// Libraries // Libraries
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { ROOT_EFFECTS_INIT, Actions, Effect, ofType } from '@ngrx/effects'; import { ROOT_EFFECTS_INIT, Actions, Effect, ofType } from '@ngrx/effects';
...@@ -81,6 +82,18 @@ export class DegreePlanEffects { ...@@ -81,6 +82,18 @@ export class DegreePlanEffects {
}); });
}), }),
map(payload => {
const allTerms = payload.visibleTerms.map(term => term.termCode);
const currentIndex = allTerms.indexOf(payload.activeTermCodes[0]);
const expandedTerms = allTerms.slice(currentIndex - allTerms.length);
const expandedYearsDups = expandedTerms.map(term => term.substr(1, 2));
const expandedYears = expandedYearsDups.filter(function(item, pos, self) {
return self.indexOf(item) === pos;
});
return { ...payload, expandedYears };
}),
map(payload => new InitialLoadSuccess(payload)), map(payload => new InitialLoadSuccess(payload)),
catchError(error => { catchError(error => {
...@@ -278,3 +291,7 @@ const pickPrimaryDegreePlan = (plans: DegreePlan[]): DegreePlan => { ...@@ -278,3 +291,7 @@ const pickPrimaryDegreePlan = (plans: DegreePlan[]): DegreePlan => {
const primary = plans.find(plan => plan.primary); const primary = plans.find(plan => plan.primary);
return primary ? primary : plans[0]; return primary ? primary : plans[0];
}; };
const checkExpanded = (activeTermCodes, visibleTerms) => {
console.log(visibleTerms);
};
import { UIActionTypes } from './actions/ui.actions';
import { import {
DegreePlannerState, DegreePlannerState,
INITIAL_DEGREE_PLANNER_STATE, INITIAL_DEGREE_PLANNER_STATE,
...@@ -29,6 +30,7 @@ import { ...@@ -29,6 +30,7 @@ import {
AddAcademicYearActionTypes, AddAcademicYearActionTypes,
AddAcademicYearRequest, AddAcademicYearRequest,
} from '@app/degree-planner/store/actions/addAcademicYear.actions'; } from '@app/degree-planner/store/actions/addAcademicYear.actions';
import { ToggleAcademicYear } from '@app/degree-planner/store/actions/ui.actions';
import { SavedForLaterCourse } from '@app/core/models/saved-for-later-course'; import { SavedForLaterCourse } from '@app/core/models/saved-for-later-course';
import { DegreePlan } from '@app/core/models/degree-plan'; import { DegreePlan } from '@app/core/models/degree-plan';
...@@ -47,7 +49,8 @@ type SupportedActions = ...@@ -47,7 +49,8 @@ type SupportedActions =
| MakePlanPrimarySuccess | MakePlanPrimarySuccess
| MakePlanPrimaryFailure | MakePlanPrimaryFailure
| ChangePlanNameSuccess | ChangePlanNameSuccess
| ChangePlanNameFailure; | ChangePlanNameFailure
| ToggleAcademicYear;
export function degreePlannerReducer( export function degreePlannerReducer(
state = INITIAL_DEGREE_PLANNER_STATE, state = INITIAL_DEGREE_PLANNER_STATE,
...@@ -93,6 +96,13 @@ export function degreePlannerReducer( ...@@ -93,6 +96,13 @@ export function degreePlannerReducer(
return { ...state, visibleTerms: newVisibleTerms }; return { ...state, visibleTerms: newVisibleTerms };
} }
/**
* The `ToggleAcademicYear` action toggles the expand/collapse UI state
*/
case UIActionTypes.ToggleAcademicYear: {
return { ...state };
}
/** /**
* The `WriteNoteResponse` action is dispatched by the `Note.write$` effect * The `WriteNoteResponse` action is dispatched by the `Note.write$` effect
* upon a successful response from the `updateNote` or `createNote` API * upon a successful response from the `updateNote` or `createNote` API
......
...@@ -76,6 +76,8 @@ export const getAllVisibleTermsByYear = createSelector( ...@@ -76,6 +76,8 @@ export const getAllVisibleTermsByYear = createSelector(
fall: getTermForCode(`${year}2`, state.visibleTerms), fall: getTermForCode(`${year}2`, state.visibleTerms),
spring: getTermForCode(`${year}4`, state.visibleTerms), spring: getTermForCode(`${year}4`, state.visibleTerms),
summer: getTermForCode(`${year}6`, state.visibleTerms), summer: getTermForCode(`${year}6`, state.visibleTerms),
expandedState:
state.expandedYears.indexOf(twoDigitYearCode.toString()) > -1,
}; };
}); });
}, },
......
...@@ -11,6 +11,7 @@ export interface DegreePlannerState { ...@@ -11,6 +11,7 @@ export interface DegreePlannerState {
activeTermCodes: string[]; activeTermCodes: string[];
allDegreePlans: DegreePlan[]; allDegreePlans: DegreePlan[];
subjects: SubjectMapping; subjects: SubjectMapping;
expandedYears: string[];
} }
export const INITIAL_DEGREE_PLANNER_STATE: DegreePlannerState = { export const INITIAL_DEGREE_PLANNER_STATE: DegreePlannerState = {
...@@ -20,4 +21,5 @@ export const INITIAL_DEGREE_PLANNER_STATE: DegreePlannerState = { ...@@ -20,4 +21,5 @@ export const INITIAL_DEGREE_PLANNER_STATE: DegreePlannerState = {
activeTermCodes: [], activeTermCodes: [],
allDegreePlans: [], allDegreePlans: [],
subjects: {}, subjects: {},
expandedYears: [],
}; };
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