From 060d83ef0daddcbf936041976203c223642bd1ca Mon Sep 17 00:00:00 2001 From: ievavold <ievavold@wisc.edu> Date: Mon, 11 Feb 2019 14:47:28 -0600 Subject: [PATCH] move course effects and actions separate files --- src/app/app.module.ts | 3 +- .../remove-course-confirm-dialog.component.ts | 2 +- .../favorites-container.component.ts | 2 +- .../store/actions/course.actions.ts | 88 ++++++++ .../store/actions/plan.actions.ts | 85 ------- .../store/effects/course.effects.ts | 213 ++++++++++++++++++ .../store/effects/plan.effects.ts | 173 +------------- src/app/degree-planner/store/reducer.ts | 15 +- .../term-container.component.ts | 2 +- 9 files changed, 316 insertions(+), 267 deletions(-) create mode 100644 src/app/degree-planner/store/actions/course.actions.ts create mode 100644 src/app/degree-planner/store/effects/course.effects.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index ec16922..006f8f0 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -15,6 +15,7 @@ import { SidenavService } from './core/service/sidenav.service'; import { degreePlannerReducer } from '@app/degree-planner/store/reducer'; import { DegreePlanEffects } from '@app/degree-planner/store/effects/plan.effects'; import { NoteEffects } from '@app/degree-planner/store/effects/note.effects'; +import { CourseEffects } from '@app/degree-planner/store/effects/course.effects'; import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { CourseDetailsDialogComponent } from './degree-planner/dialogs/course-details-dialog/course-details-dialog.component'; @@ -23,7 +24,7 @@ import { CourseDetailsDialogComponent } from './degree-planner/dialogs/course-de StoreModule.forRoot({ degreePlanner: degreePlannerReducer, }), - EffectsModule.forRoot([DegreePlanEffects, NoteEffects]), + EffectsModule.forRoot([DegreePlanEffects, NoteEffects, CourseEffects]), BrowserModule, BrowserAnimationsModule, HttpClientModule, diff --git a/src/app/degree-planner/dialogs/remove-course-confirm-dialog/remove-course-confirm-dialog.component.ts b/src/app/degree-planner/dialogs/remove-course-confirm-dialog/remove-course-confirm-dialog.component.ts index 2c7f120..0674693 100644 --- a/src/app/degree-planner/dialogs/remove-course-confirm-dialog/remove-course-confirm-dialog.component.ts +++ b/src/app/degree-planner/dialogs/remove-course-confirm-dialog/remove-course-confirm-dialog.component.ts @@ -7,7 +7,7 @@ import { SavedForLaterCourse } from '@app/core/models/saved-for-later-course'; import { DegreePlannerState } from '@app/degree-planner/store/state'; import { Store } from '@ngrx/store'; -import { RemoveCourseRequest } from '@app/degree-planner/store/actions/plan.actions'; +import { RemoveCourseRequest } from '@app/degree-planner/store/actions/course.actions'; @Component({ selector: 'cse-remove-course-confirm-dialog', diff --git a/src/app/degree-planner/favorites-container/favorites-container.component.ts b/src/app/degree-planner/favorites-container/favorites-container.component.ts index 766eac9..fc688d9 100644 --- a/src/app/degree-planner/favorites-container/favorites-container.component.ts +++ b/src/app/degree-planner/favorites-container/favorites-container.component.ts @@ -11,7 +11,7 @@ import { DegreePlannerState } from '@app/degree-planner/store/state'; import { AddSavedForLaterRequest, RemoveCourseRequest, -} from '@app/degree-planner/store/actions/plan.actions'; +} from '@app/degree-planner/store/actions/course.actions'; // Selectors import { getDropZones } from '@app/degree-planner/store/selectors'; diff --git a/src/app/degree-planner/store/actions/course.actions.ts b/src/app/degree-planner/store/actions/course.actions.ts new file mode 100644 index 0000000..683ba30 --- /dev/null +++ b/src/app/degree-planner/store/actions/course.actions.ts @@ -0,0 +1,88 @@ +import { Action } from '@ngrx/store'; +import { Course } from '@app/core/models/course'; + +export enum CourseActionTypes { + AddCourseRequest = '[Course] Add Course Request', + AddCourseResponse = '[Course] Add Course Response', + + RemoveCourseRequest = '[Course] Remove Course Request', + RemoveCourseResponse = '[Course] Remove Course Response', + + ChangeCourseTermRequest = '[Course] Change Course Term Request', + ChangeCourseTermResponse = '[Course] Change Course Term Response', + + AddSavedForLaterRequest = '[Course] Add Saved For Later Request', + AddSavedForLaterResponse = '[Course] Add Saved For Later Response', + + RemoveSavedForLaterRequest = '[Course] Remove Saved For Later Request', + RemoveSavedForLaterResponse = '[Course] Remove Saved For Later Response', + + MoveFromSavedToTermRequest = '[Course] Move Course From Saved to Term Request', + MoveFromSavedToTermResponse = '[Course] Move Course From Saved to Term Response', +} + +export class ChangeCourseTermRequest implements Action { + public readonly type = CourseActionTypes.ChangeCourseTermRequest; + constructor(public payload: { to: string; from: string; id: number }) {} +} + +export class ChangeCourseTermResponse implements Action { + public readonly type = CourseActionTypes.ChangeCourseTermResponse; + constructor(public payload: { to: string; from: string; id: number }) {} +} + +export class AddCourseRequest implements Action { + public readonly type = CourseActionTypes.AddCourseRequest; + constructor( + public payload: { subjectCode: string; courseId: string; termCode: string }, + ) {} +} + +export class AddCourseResponse implements Action { + public readonly type = CourseActionTypes.AddCourseResponse; + constructor(public payload: { course: Course }) {} +} + +export class RemoveCourseRequest implements Action { + public readonly type = CourseActionTypes.RemoveCourseRequest; + constructor(public payload: { recordId: number }) {} +} + +export class RemoveCourseResponse implements Action { + public readonly type = CourseActionTypes.RemoveCourseResponse; + constructor(public payload: { recordId: number }) {} +} + +export class AddSavedForLaterRequest implements Action { + public readonly type = CourseActionTypes.AddSavedForLaterRequest; + constructor( + public payload: { + subjectCode: string; + courseId: string; + title: string; + catalogNumber: string; + }, + ) {} +} + +export class AddSavedForLaterResponse implements Action { + public readonly type = CourseActionTypes.AddSavedForLaterResponse; + constructor( + public payload: { + subjectCode: string; + courseId: string; + title: string; + catalogNumber: string; + }, + ) {} +} + +export class RemoveSavedForLaterRequest implements Action { + public readonly type = CourseActionTypes.RemoveSavedForLaterRequest; + constructor(public payload: { subjectCode: string; courseId: string }) {} +} + +export class RemoveSavedForLaterResponse implements Action { + public readonly type = CourseActionTypes.RemoveSavedForLaterResponse; + constructor(public payload: { subjectCode: string; courseId: string }) {} +} diff --git a/src/app/degree-planner/store/actions/plan.actions.ts b/src/app/degree-planner/store/actions/plan.actions.ts index d414b3d..adf2f83 100644 --- a/src/app/degree-planner/store/actions/plan.actions.ts +++ b/src/app/degree-planner/store/actions/plan.actions.ts @@ -2,31 +2,12 @@ import { Action } from '@ngrx/store'; import { DegreePlan } from '@app/core/models/degree-plan'; import { PlannedTerm } from '@app/core/models/planned-term'; import { DegreePlannerState } from '@app/degree-planner/store/state'; -import { Course } from '@app/core/models/course'; export enum PlanActionTypes { InitialPlanLoadResponse = '[Plan] Initial Load Response', ChangeVisiblePlanRequest = '[Plan] Change Visible Request', ChangeVisiblePlanResponse = '[Plan] Change Visible Response', - - AddCourseRequest = '[Plan] Add Course Request', - AddCourseResponse = '[Plan] Add Course Response', - - RemoveCourseRequest = '[Plan] Remove Course Request', - RemoveCourseResponse = '[Plan] Remove Course Response', - - ChangeCourseTermRequest = '[Plan] Change Course Term Request', - ChangeCourseTermResponse = '[Plan] Change Course Term Response', - - AddSavedForLaterRequest = '[Plan] Add Saved For Later Request', - AddSavedForLaterResponse = '[Plan] Add Saved For Later Response', - - RemoveSavedForLaterRequest = '[Plan] Remove Saved For Later Request', - RemoveSavedForLaterResponse = '[Plan] Remove Saved For Later Response', - - MoveFromSavedToTermRequest = '[Plan] Move Course From Saved to Term Request', - MoveFromSavedToTermResponse = '[Plan] Move Course From Saved to Term Response', } export class InitialPlanLoadResponse implements Action { @@ -48,69 +29,3 @@ export class ChangeVisiblePlanResponse implements Action { }, ) {} } - -export class ChangeCourseTermRequest implements Action { - public readonly type = PlanActionTypes.ChangeCourseTermRequest; - constructor(public payload: { to: string; from: string; id: number }) {} -} - -export class ChangeCourseTermResponse implements Action { - public readonly type = PlanActionTypes.ChangeCourseTermResponse; - constructor(public payload: { to: string; from: string; id: number }) {} -} - -export class AddCourseRequest implements Action { - public readonly type = PlanActionTypes.AddCourseRequest; - constructor( - public payload: { subjectCode: string; courseId: string; termCode: string }, - ) {} -} - -export class AddCourseResponse implements Action { - public readonly type = PlanActionTypes.AddCourseResponse; - constructor(public payload: { course: Course }) {} -} - -export class RemoveCourseRequest implements Action { - public readonly type = PlanActionTypes.RemoveCourseRequest; - constructor(public payload: { recordId: number }) {} -} - -export class RemoveCourseResponse implements Action { - public readonly type = PlanActionTypes.RemoveCourseResponse; - constructor(public payload: { recordId: number }) {} -} - -export class AddSavedForLaterRequest implements Action { - public readonly type = PlanActionTypes.AddSavedForLaterRequest; - constructor( - public payload: { - subjectCode: string; - courseId: string; - title: string; - catalogNumber: string; - }, - ) {} -} - -export class AddSavedForLaterResponse implements Action { - public readonly type = PlanActionTypes.AddSavedForLaterResponse; - constructor( - public payload: { - subjectCode: string; - courseId: string; - title: string; - catalogNumber: string; - }, - ) {} -} - -export class RemoveSavedForLaterRequest implements Action { - public readonly type = PlanActionTypes.RemoveSavedForLaterRequest; - constructor(public payload: { subjectCode: string; courseId: string }) {} -} - -export class RemoveSavedForLaterResponse implements Action { - public readonly type = PlanActionTypes.RemoveSavedForLaterResponse; - constructor(public payload: { subjectCode: string; courseId: string }) {} -} diff --git a/src/app/degree-planner/store/effects/course.effects.ts b/src/app/degree-planner/store/effects/course.effects.ts new file mode 100644 index 0000000..3105a0a --- /dev/null +++ b/src/app/degree-planner/store/effects/course.effects.ts @@ -0,0 +1,213 @@ +// Libraries +import { Injectable } from '@angular/core'; +import { Actions, Effect, ofType } from '@ngrx/effects'; +import { map, flatMap, withLatestFrom, filter } from 'rxjs/operators'; +import { GlobalState } from '@app/core/state'; +import { Store } from '@ngrx/store'; + +// Services +import { DegreePlannerApiService } from '@app/degree-planner/services/api.service'; +import { getDegreePlannerState } from '@app/degree-planner/store/selectors'; + +// Actions +import { + CourseActionTypes, + ChangeCourseTermResponse, + AddCourseResponse, + RemoveCourseResponse, + RemoveSavedForLaterResponse, + AddSavedForLaterResponse, + AddCourseRequest, + RemoveCourseRequest, +} from '@app/degree-planner/store/actions/course.actions'; + +// Models +import { DegreePlan } from '@app/core/models/degree-plan'; +import { Course, SubjectMapping, CourseBase } from '@app/core/models/course'; +import { SavedForLaterCourse } from '@app/core/models/saved-for-later-course'; + +@Injectable() +export class CourseEffects { + constructor( + private actions$: Actions, + private api: DegreePlannerApiService, + private store$: Store<GlobalState>, + ) {} + + @Effect() + MoveCourseBetweenTerms$ = this.actions$.pipe( + ofType<any>(CourseActionTypes.ChangeCourseTermRequest), + + withLatestFrom(this.store$.select(getDegreePlannerState)), + filter(([_, state]) => typeof state.visibleDegreePlan !== undefined), + + // Get term data for the degree plan specified by the roadmap ID. + flatMap(([action, state]) => { + // TODO error handle the API calls + return this.api + .updateCourseTerm( + (state.visibleDegreePlan as DegreePlan).roadmapId, + action.payload.id, + action.payload.to, + ) + .pipe( + map(response => { + return { + response, + action, + }; + }), + ); + }), + + // // Wrap data in an Action for dispatch + map(({ response, action }) => { + if (response === 1) { + return new ChangeCourseTermResponse({ + id: action.payload.id, + from: action.payload.from, + to: action.payload.to, + }); + } + return; + }), + ); + + @Effect() + AddCourse$ = this.actions$.pipe( + ofType<AddCourseRequest>(CourseActionTypes.AddCourseRequest), + + withLatestFrom(this.store$.select(getDegreePlannerState)), + filter(([_, state]) => state.visibleDegreePlan !== undefined), + + // Get term data for the degree plan specified by the roadmap ID. + flatMap(([action, state]) => { + // TODO error handle the API calls + const roadmapId = (state.visibleDegreePlan as DegreePlan).roadmapId; + const { subjectCode, termCode, courseId } = action.payload; + + const addCourse$ = this.api.addCourse( + roadmapId, + subjectCode, + courseId, + termCode, + ); + + const courseBaseToCourse$ = addCourse$.pipe( + map<CourseBase, Course>(courseBase => ({ + ...courseBase, + subject: state.subjects[courseBase.subjectCode], + })), + ); + + const toSuccessAction$ = courseBaseToCourse$.pipe( + map(course => new AddCourseResponse({ course })), + ); + + return toSuccessAction$; + }), + ); + + @Effect() + RemoveCourse$ = this.actions$.pipe( + ofType<RemoveCourseRequest>(CourseActionTypes.RemoveCourseRequest), + + withLatestFrom(this.store$.select(getDegreePlannerState)), + filter(([_, state]) => state.visibleDegreePlan !== undefined), + + // Get term data for the degree plan specified by the roadmap ID. + flatMap(([action, state]) => { + const roadmapId = (state.visibleDegreePlan as DegreePlan).roadmapId; + const recordId = action.payload.recordId; + + const removeCourse$ = this.api.removeCourse(roadmapId, recordId); + + const toSuccessAction$ = removeCourse$.pipe( + map(() => new RemoveCourseResponse({ recordId })), + ); + + return toSuccessAction$; + }), + ); + + @Effect() + RemoveSavedForLater$ = this.actions$.pipe( + ofType<any>(CourseActionTypes.RemoveSavedForLaterRequest), + + withLatestFrom(this.store$.select(getDegreePlannerState)), + filter(([_, state]) => state.visibleDegreePlan !== undefined), + + // Get term data for the degree plan specified by the roadmap ID. + flatMap(([action, state]) => { + // TODO error handle the API calls + return this.api + .removeSavedForLater( + action.payload.subjectCode, + action.payload.courseId, + ) + .pipe( + map(response => { + return { + response, + action, + }; + }), + ); + }), + + // // Wrap data in an Action for dispatch + map(({ response, action }) => { + if (response === null) { + const { courseId, subjectCode } = action.payload; + return new RemoveSavedForLaterResponse({ courseId, subjectCode }); + // TODO Update UI and remove saved response + } + return; + }), + ); + + @Effect() + SaveForLater$ = this.actions$.pipe( + ofType<any>(CourseActionTypes.AddSavedForLaterRequest), + + withLatestFrom(this.store$.select(getDegreePlannerState)), + filter(([_, state]) => state.visibleDegreePlan !== undefined), + + // Get term data for the degree plan specified by the roadmap ID. + flatMap(([action, state]) => { + // TODO error handle the API calls + return this.api + .saveForLater(action.payload.subjectCode, action.payload.courseId) + .pipe( + map(response => { + return { + response, + action, + }; + }), + ); + }), + + // // // Wrap data in an Action for dispatch + map(({ response, action }) => { + if (response === null) { + return new AddSavedForLaterResponse(action.payload); + } + // return; + return; + }), + ); + + private loadSavedForLaterCourses(subjects: SubjectMapping) { + return this.api.getSavedForLaterCourses().pipe( + map(courseBases => { + return courseBases.map<SavedForLaterCourse>(base => { + return { + ...base, + subject: subjects[base.subjectCode] as string, + }; + }); + }), + ); + } +} diff --git a/src/app/degree-planner/store/effects/plan.effects.ts b/src/app/degree-planner/store/effects/plan.effects.ts index 17f9e3f..a58e72c 100644 --- a/src/app/degree-planner/store/effects/plan.effects.ts +++ b/src/app/degree-planner/store/effects/plan.effects.ts @@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'; import { ROOT_EFFECTS_INIT, Actions, Effect, ofType } from '@ngrx/effects'; import { Observable, forkJoin, of } from 'rxjs'; -import { map, flatMap, withLatestFrom, filter } from 'rxjs/operators'; +import { map, flatMap, withLatestFrom } from 'rxjs/operators'; import { GlobalState } from '@app/core/state'; import { Store } from '@ngrx/store'; @@ -16,13 +16,6 @@ import { ChangeVisiblePlanRequest, ChangeVisiblePlanResponse, PlanActionTypes, - ChangeCourseTermResponse, - AddCourseResponse, - RemoveCourseResponse, - RemoveSavedForLaterResponse, - AddSavedForLaterResponse, - AddCourseRequest, - RemoveCourseRequest, } from '@app/degree-planner/store/actions/plan.actions'; // Models @@ -107,170 +100,6 @@ export class DegreePlanEffects { map(payload => new ChangeVisiblePlanResponse(payload)), ); - @Effect() - MoveCourseBetweenTerms$ = this.actions$.pipe( - ofType<any>(PlanActionTypes.ChangeCourseTermRequest), - - withLatestFrom(this.store$.select(getDegreePlannerState)), - filter(([_, state]) => typeof state.visibleDegreePlan !== undefined), - - // Get term data for the degree plan specified by the roadmap ID. - flatMap(([action, state]) => { - // TODO error handle the API calls - return this.api - .updateCourseTerm( - (state.visibleDegreePlan as DegreePlan).roadmapId, - action.payload.id, - action.payload.to, - ) - .pipe( - map(response => { - return { - response, - action, - }; - }), - ); - }), - - // // Wrap data in an Action for dispatch - map(({ response, action }) => { - if (response === 1) { - return new ChangeCourseTermResponse({ - id: action.payload.id, - from: action.payload.from, - to: action.payload.to, - }); - } - return; - }), - ); - - @Effect() - AddCourse$ = this.actions$.pipe( - ofType<AddCourseRequest>(PlanActionTypes.AddCourseRequest), - - withLatestFrom(this.store$.select(getDegreePlannerState)), - filter(([_, state]) => state.visibleDegreePlan !== undefined), - - // Get term data for the degree plan specified by the roadmap ID. - flatMap(([action, state]) => { - // TODO error handle the API calls - const roadmapId = (state.visibleDegreePlan as DegreePlan).roadmapId; - const { subjectCode, termCode, courseId } = action.payload; - - const addCourse$ = this.api.addCourse( - roadmapId, - subjectCode, - courseId, - termCode, - ); - - const courseBaseToCourse$ = addCourse$.pipe( - map<CourseBase, Course>(courseBase => ({ - ...courseBase, - subject: state.subjects[courseBase.subjectCode], - })), - ); - - const toSuccessAction$ = courseBaseToCourse$.pipe( - map(course => new AddCourseResponse({ course })), - ); - - return toSuccessAction$; - }), - ); - - @Effect() - RemoveCourse$ = this.actions$.pipe( - ofType<RemoveCourseRequest>(PlanActionTypes.RemoveCourseRequest), - - withLatestFrom(this.store$.select(getDegreePlannerState)), - filter(([_, state]) => state.visibleDegreePlan !== undefined), - - // Get term data for the degree plan specified by the roadmap ID. - flatMap(([action, state]) => { - const roadmapId = (state.visibleDegreePlan as DegreePlan).roadmapId; - const recordId = action.payload.recordId; - - const removeCourse$ = this.api.removeCourse(roadmapId, recordId); - - const toSuccessAction$ = removeCourse$.pipe( - map(() => new RemoveCourseResponse({ recordId })), - ); - - return toSuccessAction$; - }), - ); - - @Effect() - RemoveSavedForLater$ = this.actions$.pipe( - ofType<any>(PlanActionTypes.RemoveSavedForLaterRequest), - - withLatestFrom(this.store$.select(getDegreePlannerState)), - filter(([_, state]) => state.visibleDegreePlan !== undefined), - - // Get term data for the degree plan specified by the roadmap ID. - flatMap(([action, state]) => { - // TODO error handle the API calls - return this.api - .removeSavedForLater( - action.payload.subjectCode, - action.payload.courseId, - ) - .pipe( - map(response => { - return { - response, - action, - }; - }), - ); - }), - - // // Wrap data in an Action for dispatch - map(({ response, action }) => { - if (response === null) { - const { courseId, subjectCode } = action.payload; - return new RemoveSavedForLaterResponse({ courseId, subjectCode }); - // TODO Update UI and remove saved response - } - return; - }), - ); - - @Effect() - SaveForLater$ = this.actions$.pipe( - ofType<any>(PlanActionTypes.AddSavedForLaterRequest), - - withLatestFrom(this.store$.select(getDegreePlannerState)), - filter(([_, state]) => state.visibleDegreePlan !== undefined), - - // Get term data for the degree plan specified by the roadmap ID. - flatMap(([action, state]) => { - // TODO error handle the API calls - return this.api - .saveForLater(action.payload.subjectCode, action.payload.courseId) - .pipe( - map(response => { - return { - response, - action, - }; - }), - ); - }), - - // // // Wrap data in an Action for dispatch - map(({ response, action }) => { - if (response === null) { - return new AddSavedForLaterResponse(action.payload); - } - // return; - return; - }), - ); - private loadSavedForLaterCourses(subjects: SubjectMapping) { return this.api.getSavedForLaterCourses().pipe( map(courseBases => { diff --git a/src/app/degree-planner/store/reducer.ts b/src/app/degree-planner/store/reducer.ts index a89bf68..e52c70a 100644 --- a/src/app/degree-planner/store/reducer.ts +++ b/src/app/degree-planner/store/reducer.ts @@ -6,12 +6,15 @@ import { PlanActionTypes, InitialPlanLoadResponse, ChangeVisiblePlanResponse, +} from '@app/degree-planner/store/actions/plan.actions'; +import { + CourseActionTypes, RemoveCourseResponse, ChangeCourseTermResponse, AddCourseResponse, RemoveSavedForLaterResponse, AddSavedForLaterResponse, -} from '@app/degree-planner/store/actions/plan.actions'; +} from '@app/degree-planner/store/actions/course.actions'; import { NoteActionTypes, WriteNoteResponse, @@ -123,7 +126,7 @@ export function degreePlannerReducer( } } - case PlanActionTypes.ChangeCourseTermResponse: { + case CourseActionTypes.ChangeCourseTermResponse: { const { to, from, id } = action.payload; const t = state.visibleTerms.find(term => term.termCode === from); @@ -153,7 +156,7 @@ export function degreePlannerReducer( return state; } - case PlanActionTypes.AddCourseResponse: { + case CourseActionTypes.AddCourseResponse: { const { course } = action.payload; const newVisibleTerms = state.visibleTerms.map(term => { @@ -169,7 +172,7 @@ export function degreePlannerReducer( // return state; } - case PlanActionTypes.RemoveCourseResponse: { + case CourseActionTypes.RemoveCourseResponse: { const { recordId: id } = action.payload; // Create new visibleTerms array @@ -183,7 +186,7 @@ export function degreePlannerReducer( return { ...state, visibleTerms: newVisibleTerms }; } - case PlanActionTypes.RemoveSavedForLaterResponse: { + case CourseActionTypes.RemoveSavedForLaterResponse: { const { courseId, subjectCode } = action.payload; // // Create new saved for later array @@ -195,7 +198,7 @@ export function degreePlannerReducer( return { ...state, savedForLaterCourses: newSavedForLater }; } - case PlanActionTypes.AddSavedForLaterResponse: { + case CourseActionTypes.AddSavedForLaterResponse: { const newSavedForLater: SavedForLaterCourse[] = [ ...state.savedForLaterCourses, { diff --git a/src/app/degree-planner/term-container/term-container.component.ts b/src/app/degree-planner/term-container/term-container.component.ts index fcb2eea..622a506 100644 --- a/src/app/degree-planner/term-container/term-container.component.ts +++ b/src/app/degree-planner/term-container/term-container.component.ts @@ -16,7 +16,7 @@ import { ChangeCourseTermRequest, AddCourseRequest, RemoveSavedForLaterRequest, -} from '@app/degree-planner/store/actions/plan.actions'; +} from '@app/degree-planner/store/actions/course.actions'; // Selectors import { -- GitLab