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