From 51760bbfebbf84f47a7c73c72ec7f491cd1af226 Mon Sep 17 00:00:00 2001 From: pnogal <paulina.nogal@wisc.edu> Date: Tue, 12 Feb 2019 12:29:28 -0600 Subject: [PATCH] Create AddAcademicYear action --- .../sidenav-menu-item.component.html | 1 + .../sidenav-menu-item.component.ts | 17 +++++++--- .../store/actions/addAcademicYear.actions.ts | 9 ++++++ src/app/degree-planner/store/reducer.ts | 31 +++++++++++++++++++ 4 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 src/app/degree-planner/store/actions/addAcademicYear.actions.ts diff --git a/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.html b/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.html index 2a92def..f016068 100644 --- a/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.html +++ b/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.html @@ -32,6 +32,7 @@ <button mat-button class="sidenav-link-btn"><i class="material-icons">print</i>Print</button> <button mat-button class="sidenav-link-btn"><i class="material-icons">email</i> Share Plan</button> <button mat-button class="sidenav-link-btn"><i class="material-icons">add_box</i> Add Degree Plan</button> + <button mat-button class="sidenav-link-btn" (click)="addAcademicYear()"><i class="material-icons">add_box</i> Add Academic Year</button> </div> </mat-expansion-panel> </div> \ No newline at end of file diff --git a/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.ts b/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.ts index 32afc44..de404e6 100644 --- a/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.ts +++ b/src/app/degree-planner/sidenav-menu-item/sidenav-menu-item.component.ts @@ -1,12 +1,21 @@ -import { Component, OnInit } from '@angular/core'; +// Libraries +import { Component } from '@angular/core'; +import { Store } from '@ngrx/store'; + +// State management +import { GlobalState } from '@app/core/state'; +import { AddAcademicYearRequest } from '@app/degree-planner/store/actions/addAcademicYear.actions'; @Component({ selector: 'cse-sidenav-menu-item', templateUrl: './sidenav-menu-item.component.html', styleUrls: ['./sidenav-menu-item.component.scss'], }) -export class SidenavMenuItemComponent implements OnInit { - constructor() {} - ngOnInit() {} +export class SidenavMenuItemComponent { + constructor(private store: Store<GlobalState>) {} + + public addAcademicYear() { + this.store.dispatch(new AddAcademicYearRequest()); + } } diff --git a/src/app/degree-planner/store/actions/addAcademicYear.actions.ts b/src/app/degree-planner/store/actions/addAcademicYear.actions.ts new file mode 100644 index 0000000..aa3398e --- /dev/null +++ b/src/app/degree-planner/store/actions/addAcademicYear.actions.ts @@ -0,0 +1,9 @@ +import { Action } from '@ngrx/store'; + +export enum AddAcademicYearActionTypes { + AddAcademicYearRequest = '[AcademicYear] Add Academic Year Request', +} + +export class AddAcademicYearRequest implements Action { + public readonly type = AddAcademicYearActionTypes.AddAcademicYearRequest; +} diff --git a/src/app/degree-planner/store/reducer.ts b/src/app/degree-planner/store/reducer.ts index 3f3beb6..39f3209 100644 --- a/src/app/degree-planner/store/reducer.ts +++ b/src/app/degree-planner/store/reducer.ts @@ -23,6 +23,10 @@ import { WriteNoteSuccess, DeleteNoteSuccess, } from '@app/degree-planner/store/actions/note.actions'; +import { + AddAcademicYearActionTypes, + AddAcademicYearRequest, + } from '@app/degree-planner/store/actions/addAcademicYear.actions'; import { SavedForLaterCourse } from '@app/core/models/saved-for-later-course'; import { DegreePlan } from '@app/core/models/degree-plan'; @@ -36,6 +40,7 @@ type SupportedActions = | AddCourseSuccess | RemoveSaveForLaterSuccess | AddSaveForLaterSuccess + | AddAcademicYearRequest | MakePlanPrimary | MakePlanPrimarySuccess | MakePlanPrimaryFailure; @@ -64,6 +69,32 @@ export function degreePlannerReducer( return { ...state, ...action.payload }; } + /** + * The `AddAcademicYearRequest` action is triggered after `addAcademicYear()` + * function runs. A new academic year container with three terms will be created. + */ + case AddAcademicYearActionTypes.AddAcademicYearRequest: { + const originalTerms = state.visibleTerms.map( term => { + return parseInt(term.termCode.substr(0, 3), 10); + }); + + const newAcademicYearCode = Math.max(...originalTerms) + 1; + + const newVisibleTerms = [ + ...state.visibleTerms, + { termCode: `${newAcademicYearCode}2`, + courses: [] + }, + { termCode: `${newAcademicYearCode}4`, + courses: [] + }, + { termCode: `${newAcademicYearCode}6`, + courses: [] + } + ]; + return { ...state, visibleTerms: newVisibleTerms }; + } + /** * The `WriteNoteResponse` action is dispatched by the `Note.write$` effect * upon a successful response from the `updateNote` or `createNote` API -- GitLab