From ee87dec81f16f9ba42df9d308a781d50eca7738e Mon Sep 17 00:00:00 2001 From: ievavold <ievavold@wisc.edu> Date: Mon, 6 May 2019 13:05:51 -0500 Subject: [PATCH] ROENROLL-1721 suppress overload modal on plan change --- src/app/core/models/planned-term.ts | 1 + .../store/effects/plan.effects.ts | 20 +++++-- src/app/degree-planner/store/reducer.ts | 52 +++++++++++++++---- .../term-container.component.ts | 5 +- 4 files changed, 65 insertions(+), 13 deletions(-) diff --git a/src/app/core/models/planned-term.ts b/src/app/core/models/planned-term.ts index f6a334e..bc5bad3 100644 --- a/src/app/core/models/planned-term.ts +++ b/src/app/core/models/planned-term.ts @@ -8,6 +8,7 @@ export type PlannedTermNote = | { isLoaded: false; text: string }; export interface PlannedTerm { + roadmapId: number; termCode: TermCode; era: PlannedTermEra; note?: PlannedTermNote; diff --git a/src/app/degree-planner/store/effects/plan.effects.ts b/src/app/degree-planner/store/effects/plan.effects.ts index 9948bf0..9d78e09 100644 --- a/src/app/degree-planner/store/effects/plan.effects.ts +++ b/src/app/degree-planner/store/effects/plan.effects.ts @@ -380,6 +380,7 @@ const toYearCode = (termCode: string) => { }; const buildTerm = ( + roadmapId: number, termCode: TermCode, notes: ReadonlyArray<Note>, courses: ReadonlyArray<{ @@ -410,6 +411,7 @@ const buildTerm = ( const era = pickTermEra(termCode, constants.activeTermCodes()); return { + roadmapId, termCode, era, note, @@ -456,9 +458,21 @@ const loadPlanYears = ( yearCode, isExpanded: utils.pickYearEra(yearCode, constants.activeTermCodes()) !== 'past', - fall: buildTerm(yearCode.fall, notes, courses, constants), - spring: buildTerm(yearCode.spring, notes, courses, constants), - summer: buildTerm(yearCode.summer, notes, courses, constants), + fall: buildTerm(roadmapId, yearCode.fall, notes, courses, constants), + spring: buildTerm( + roadmapId, + yearCode.spring, + notes, + courses, + constants, + ), + summer: buildTerm( + roadmapId, + yearCode.summer, + notes, + courses, + constants, + ), }; }); diff --git a/src/app/degree-planner/store/reducer.ts b/src/app/degree-planner/store/reducer.ts index d47f60d..e54d2d3 100644 --- a/src/app/degree-planner/store/reducer.ts +++ b/src/app/degree-planner/store/reducer.ts @@ -145,7 +145,11 @@ export function degreePlannerReducer( }), ); const nextYearCode = new YearCode(`${largestYearCode + 1}`); - const nextYear = emptyYear(nextYearCode, state.activeTermCodes); + const nextYear = emptyYear( + (state.visibleDegreePlan as DegreePlan).roadmapId, + nextYearCode, + state.activeTermCodes, + ); const visibleYears: YearMapping = { ...state.visibleYears, [nextYearCode.toString()]: nextYear, @@ -274,6 +278,7 @@ export function degreePlannerReducer( const visibleYears: YearMapping = { ...state.visibleYears, [yearCode.toString()]: createYearWithNote( + (state.visibleDegreePlan as DegreePlan).roadmapId, termCode, newNote, state.activeTermCodes, @@ -301,6 +306,7 @@ export function degreePlannerReducer( const visibleYears: YearMapping = { ...state.visibleYears, [yearCode.toString()]: createYearWithNote( + (state.visibleDegreePlan as DegreePlan).roadmapId, termCode, { isLoaded: true, text: updatedNote.note, id: updatedNote.id }, state.activeTermCodes, @@ -323,6 +329,7 @@ export function degreePlannerReducer( const visibleYears: YearMapping = { ...state.visibleYears, [yearCode.toString()]: createYearWithoutNote( + (state.visibleDegreePlan as DegreePlan).roadmapId, termCode, state.activeTermCodes, state.visibleYears[yearCode.toString()], @@ -393,6 +400,7 @@ export function degreePlannerReducer( if (course && course.id !== null) { course.classNumber = null; const fromYear = createYearWithoutCourse( + (state.visibleDegreePlan as DegreePlan).roadmapId, fromTermCode, course.id, state.activeTermCodes, @@ -400,6 +408,7 @@ export function degreePlannerReducer( ); const toYear = createYearWithCourse( + (state.visibleDegreePlan as DegreePlan).roadmapId, toTermCode, { ...course, termCode: toTermCode.toString() }, state.activeTermCodes, @@ -431,6 +440,7 @@ export function degreePlannerReducer( } as Course; const year: Year = createYearWithCourse( + (state.visibleDegreePlan as DegreePlan).roadmapId, termCode, course, state.activeTermCodes, @@ -452,6 +462,7 @@ export function degreePlannerReducer( const { yearCode } = termCode; const year: Year = createYearWithCourse( + (state.visibleDegreePlan as DegreePlan).roadmapId, termCode, course, state.activeTermCodes, @@ -472,6 +483,7 @@ export function degreePlannerReducer( const { yearCode } = fromTermCode; const year: Year = createYearWithoutCourse( + (state.visibleDegreePlan as DegreePlan).roadmapId, fromTermCode, recordId, state.activeTermCodes, @@ -621,23 +633,34 @@ export function degreePlannerReducer( } } -const emptyTerm = (termCode: TermCode, era: PlannedTermEra): PlannedTerm => { - return { termCode, era, plannedCourses: [], enrolledCourses: [] }; +const emptyTerm = ( + roadmapId: number, + termCode: TermCode, + era: PlannedTermEra, +): PlannedTerm => { + return { roadmapId, termCode, era, plannedCourses: [], enrolledCourses: [] }; }; const emptyYear = ( + roadmapId: number, yearCode: YearCode, activeTermCodes: ReadonlyArray<TermCode>, ): Year => { return { yearCode, isExpanded: utils.pickYearEra(yearCode, activeTermCodes) !== 'past', - fall: emptyTerm(yearCode.fall, pickTermEra(yearCode.fall, activeTermCodes)), + fall: emptyTerm( + roadmapId, + yearCode.fall, + pickTermEra(yearCode.fall, activeTermCodes), + ), spring: emptyTerm( + roadmapId, yearCode.spring, pickTermEra(yearCode.spring, activeTermCodes), ), summer: emptyTerm( + roadmapId, yearCode.summer, pickTermEra(yearCode.summer, activeTermCodes), ), @@ -645,28 +668,37 @@ const emptyYear = ( }; const generateYearForTermCode = ( + roadmapId: number, termCode: TermCode, activeTermCodes: ReadonlyArray<TermCode>, ): Year => { - return emptyYear(termCode.yearCode, activeTermCodes); + return emptyYear(roadmapId, termCode.yearCode, activeTermCodes); }; const createYearWithNote = ( + roadmapId: number, termCode: TermCode, note: PlannedTermNote | undefined, activeTermCodes: ReadonlyArray<TermCode>, - year = generateYearForTermCode(termCode, activeTermCodes), + year = generateYearForTermCode(roadmapId, termCode, activeTermCodes), ): Year => { const term = year[termCode.termName]; return { ...year, [termCode.termName]: { ...term, note } }; }; const createYearWithoutNote = ( + roadmapId: number, termCode: TermCode, activeTermCodes: ReadonlyArray<TermCode>, year?: Year, ) => { - return createYearWithNote(termCode, undefined, activeTermCodes, year); + return createYearWithNote( + roadmapId, + termCode, + undefined, + activeTermCodes, + year, + ); }; const findCourse = ( @@ -682,10 +714,11 @@ const findCourse = ( }; const createYearWithCourse = ( + roadmapId: number, termCode: TermCode, course: Course, activeTermCodes: ReadonlyArray<TermCode>, - year = generateYearForTermCode(termCode, activeTermCodes), + year = generateYearForTermCode(roadmapId, termCode, activeTermCodes), newIndex?: number, ): Year => { const term = year[termCode.termName]; @@ -698,10 +731,11 @@ const createYearWithCourse = ( }; const createYearWithoutCourse = ( + roadmapId: number, termCode: TermCode, recordId: number, activeTermCodes: ReadonlyArray<TermCode>, - year = generateYearForTermCode(termCode, activeTermCodes), + year = generateYearForTermCode(roadmapId, termCode, activeTermCodes), ): Year => { const term = year[termCode.termName]; const courses = term.plannedCourses.filter(course => course.id !== recordId); 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 b6483f6..84eea72 100644 --- a/src/app/degree-planner/term-container/term-container.component.ts +++ b/src/app/degree-planner/term-container/term-container.component.ts @@ -122,7 +122,10 @@ export class TermContainerComponent implements OnInit, OnDestroy { if (this.constants.isUndergrad()) { this.term$.pipe(pairwise()).subscribe(([prev, curr]) => { // Sanity check: don't compare two terms if they're different terms. - if (prev.termCode.equals(curr.termCode) === false) { + if ( + prev.roadmapId !== curr.roadmapId || + prev.termCode.equals(curr.termCode) === false + ) { return; } -- GitLab