@cuemath/leap 2.8.22 → 2.8.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/assets/images/images.js +0 -12
  2. package/dist/assets/images/images.js.map +1 -1
  3. package/dist/features/chapters/chapter/chapter.js +43 -45
  4. package/dist/features/chapters/chapter/chapter.js.map +1 -1
  5. package/dist/features/chapters/chapter/comps/core-lessons/core-lessons.js +21 -23
  6. package/dist/features/chapters/chapter/comps/core-lessons/core-lessons.js.map +1 -1
  7. package/dist/features/milestone/constants.js +18 -53
  8. package/dist/features/milestone/constants.js.map +1 -1
  9. package/dist/features/milestone/create/comps/chapters-selection-step/chapters-selection-step-styled.js +4 -16
  10. package/dist/features/milestone/create/comps/chapters-selection-step/chapters-selection-step-styled.js.map +1 -1
  11. package/dist/features/milestone/create/milestone-create-constants.js.map +1 -1
  12. package/dist/features/milestone/create/milestone-create-container.js +47 -56
  13. package/dist/features/milestone/create/milestone-create-container.js.map +1 -1
  14. package/dist/features/milestone/create/milestone-create-helpers.js +113 -132
  15. package/dist/features/milestone/create/milestone-create-helpers.js.map +1 -1
  16. package/dist/features/milestone/create/milestone-create-hooks.js +90 -92
  17. package/dist/features/milestone/create/milestone-create-hooks.js.map +1 -1
  18. package/dist/features/milestone/create/milestone-create-styled.js +20 -34
  19. package/dist/features/milestone/create/milestone-create-styled.js.map +1 -1
  20. package/dist/features/milestone/create/milestone-create.js +53 -72
  21. package/dist/features/milestone/create/milestone-create.js.map +1 -1
  22. package/dist/features/milestone/create/submit-modal/use-submit-milestone.js +46 -53
  23. package/dist/features/milestone/create/submit-modal/use-submit-milestone.js.map +1 -1
  24. package/dist/features/milestone/create/utils/index.js.map +1 -1
  25. package/dist/features/milestone/edit/comps/delete-milestone/styled.js +8 -11
  26. package/dist/features/milestone/edit/comps/delete-milestone/styled.js.map +1 -1
  27. package/dist/features/milestone/edit/comps/edit-milestone-modal/edit-milestone.js +82 -79
  28. package/dist/features/milestone/edit/comps/edit-milestone-modal/edit-milestone.js.map +1 -1
  29. package/dist/features/milestone/edit/comps/edit-milestone-modal/index.js +112 -136
  30. package/dist/features/milestone/edit/comps/edit-milestone-modal/index.js.map +1 -1
  31. package/dist/features/milestone/{drafts/goal-edit → edit/goal-drafts}/goal-draft-edit-container.js +22 -24
  32. package/dist/features/milestone/edit/goal-drafts/goal-draft-edit-container.js.map +1 -0
  33. package/dist/features/milestone/edit/goal-drafts/goal-draft-edit-helpers.js +17 -0
  34. package/dist/features/milestone/edit/goal-drafts/goal-draft-edit-helpers.js.map +1 -0
  35. package/dist/features/milestone/edit/goal-edit-helpers.js +5 -6
  36. package/dist/features/milestone/edit/goal-edit-helpers.js.map +1 -1
  37. package/dist/features/milestone/edit/milestone-edit-helpers.js +16 -17
  38. package/dist/features/milestone/edit/milestone-edit-helpers.js.map +1 -1
  39. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-list.js +46 -48
  40. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-list.js.map +1 -1
  41. package/dist/features/milestone/milestone-list-container/milestone-list-container.js +58 -60
  42. package/dist/features/milestone/milestone-list-container/milestone-list-container.js.map +1 -1
  43. package/dist/features/milestone/outcome/comps/past-milestone/past-milestone-container.js +39 -41
  44. package/dist/features/milestone/outcome/comps/past-milestone/past-milestone-container.js.map +1 -1
  45. package/dist/index.d.ts +7 -125
  46. package/dist/index.js +244 -258
  47. package/dist/index.js.map +1 -1
  48. package/package.json +1 -1
  49. package/dist/constants/urls.js +0 -5
  50. package/dist/constants/urls.js.map +0 -1
  51. package/dist/features/milestone/drafts/create/draft-create-container.js +0 -54
  52. package/dist/features/milestone/drafts/create/draft-create-container.js.map +0 -1
  53. package/dist/features/milestone/drafts/edit/draft-edit-container.js +0 -77
  54. package/dist/features/milestone/drafts/edit/draft-edit-container.js.map +0 -1
  55. package/dist/features/milestone/drafts/edit/draft-edit-helpers.js +0 -69
  56. package/dist/features/milestone/drafts/edit/draft-edit-helpers.js.map +0 -1
  57. package/dist/features/milestone/drafts/goal-edit/goal-draft-edit-container.js.map +0 -1
  58. package/dist/features/milestone/drafts/review/draft-review-container.js +0 -76
  59. package/dist/features/milestone/drafts/review/draft-review-container.js.map +0 -1
  60. package/dist/features/milestone/edit/comps/delete-milestone/add-remove-nudge.js +0 -48
  61. package/dist/features/milestone/edit/comps/delete-milestone/add-remove-nudge.js.map +0 -1
  62. package/dist/features/milestone/edit/comps/edit-milestone-modal/edit-milestone-modal-styled.js +0 -23
  63. package/dist/features/milestone/edit/comps/edit-milestone-modal/edit-milestone-modal-styled.js.map +0 -1
  64. package/dist/features/milestone/edit/comps/edit-milestone-modal/share-screen.js +0 -68
  65. package/dist/features/milestone/edit/comps/edit-milestone-modal/share-screen.js.map +0 -1
  66. package/dist/features/milestone/help-modals/index.js +0 -22
  67. package/dist/features/milestone/help-modals/index.js.map +0 -1
  68. package/dist/features/milestone/help-modals/milestone-lesson.js +0 -17
  69. package/dist/features/milestone/help-modals/milestone-lesson.js.map +0 -1
  70. package/dist/features/milestone/help-modals/milestone-list.js +0 -17
  71. package/dist/features/milestone/help-modals/milestone-list.js.map +0 -1
  72. package/dist/features/milestone/help-modals/utils.js +0 -20
  73. package/dist/features/milestone/help-modals/utils.js.map +0 -1
  74. package/dist/features/milestone/intro-modal/index.js +0 -24
  75. package/dist/features/milestone/intro-modal/index.js.map +0 -1
  76. package/dist/features/notifications/api/notification.js +0 -13
  77. package/dist/features/notifications/api/notification.js.map +0 -1
  78. package/dist/features/notifications/use-student-journey.js +0 -20
  79. package/dist/features/notifications/use-student-journey.js.map +0 -1
  80. package/dist/features/sheets/constants/lessons.js +0 -28
  81. package/dist/features/sheets/constants/lessons.js.map +0 -1
  82. package/dist/features/ui/modals/info-modal/index.js +0 -117
  83. package/dist/features/ui/modals/info-modal/index.js.map +0 -1
  84. package/dist/static/goal_creation_helper.d45e4d58.png +0 -0
  85. package/dist/static/help_banner1.ddb0ef0f.png +0 -0
  86. package/dist/static/help_banner2.40979ed0.png +0 -0
  87. package/dist/static/help_banner3.532099c7.png +0 -0
  88. package/dist/static/help_banner4.90a6fd4d.png +0 -0
  89. package/dist/static/help_banner5.2a9efb39.png +0 -0
  90. package/dist/static/help_banner6.94fe9589.png +0 -0
  91. package/dist/static/milestone_intro_slide1.1537493e.png +0 -0
  92. package/dist/static/milestone_intro_slide2.b791c159.png +0 -0
  93. package/dist/static/milestone_intro_slide3.f7d63a11.png +0 -0
  94. package/dist/static/milestone_intro_slide4.f8da4e46.png +0 -0
  95. package/dist/static/milestone_intro_slide5.ea5d12d2.png +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"milestone-create-container.js","sources":["../../../../src/features/milestone/create/milestone-create-container.tsx"],"sourcesContent":["import type { IMileStoneCreateContainerProps } from './milestone-create-types';\n\nimport { titleCase } from 'humanize-plus';\nimport { memo, useEffect } from 'react';\n\nimport AppLoader from '../../ui/loader/app-loader/app-loader';\nimport { useGetMileStoneConfig } from './api/milestone-config';\nimport MilestoneCreate from './milestone-create';\nimport { useMilestoneInfoTransitionsControl } from './milestone-create-hooks';\n\nconst MilestoneCreateContainer: React.FC<IMileStoneCreateContainerProps> = memo(\n ({\n studentName,\n studentId,\n height,\n minHeight,\n formData,\n onChapterExitWarning,\n onFormDataChange: handleFormDataChange,\n onPreSubmit: handlePreSubmit,\n onExit: handleExit,\n userType,\n board,\n schoolData,\n grade,\n isFirstMilestoneCreated,\n currentCountryCode,\n isGoalCreation,\n courseStream,\n classRatio,\n enrollmentType,\n }) => {\n const { get: getConfig, data: configData } = useGetMileStoneConfig();\n\n useEffect(() => {\n getConfig('', undefined);\n }, [getConfig]);\n\n const { journeysToInclude, isProcessing } = useMilestoneInfoTransitionsControl(\n userType,\n studentId,\n );\n\n if (isProcessing) return <AppLoader height=\"100%\" />;\n\n return configData ? (\n <MilestoneCreate\n flow=\"CREATE\"\n board={board}\n schoolData={schoolData}\n studentId={studentId}\n studentName={titleCase(studentName)}\n height={height}\n minHeight={minHeight}\n formData={formData}\n config={configData}\n currentCountryCode={currentCountryCode}\n onFormDataChange={handleFormDataChange}\n onChapterExitWarning={onChapterExitWarning}\n onPreSubmit={handlePreSubmit}\n onExit={handleExit}\n userType={userType}\n grade={grade}\n journeysToInclude={journeysToInclude}\n isFirstMilestoneCreated={isFirstMilestoneCreated}\n isGoalCreation={isGoalCreation}\n courseStream={courseStream}\n classRatio={classRatio}\n enrollmentType={enrollmentType}\n />\n ) : null;\n },\n);\n\nexport default MilestoneCreateContainer;\n"],"names":["MilestoneCreateContainer","memo","studentName","studentId","height","minHeight","formData","onChapterExitWarning","handleFormDataChange","handlePreSubmit","handleExit","userType","board","schoolData","grade","isFirstMilestoneCreated","currentCountryCode","isGoalCreation","courseStream","classRatio","enrollmentType","getConfig","configData","useGetMileStoneConfig","useEffect","journeysToInclude","isProcessing","useMilestoneInfoTransitionsControl","jsx","AppLoader","MilestoneCreate","titleCase","MilestoneCreateContainer$1"],"mappings":";;;;;;;AAUA,MAAMA,IAAqEC;AAAA,EACzE,CAAC;AAAA,IACC,aAAAC;AAAA,IACA,WAAAC;AAAA,IACA,QAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,kBAAkBC;AAAA,IAClB,aAAaC;AAAA,IACb,QAAQC;AAAA,IACR,UAAAC;AAAA,IACA,OAAAC;AAAA,IACA,YAAAC;AAAA,IACA,OAAAC;AAAA,IACA,yBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,YAAAC;AAAA,IACA,gBAAAC;AAAA,EAAA,MACI;AACJ,UAAM,EAAE,KAAKC,GAAW,MAAMC,EAAA,IAAeC;AAE7C,IAAAC,EAAU,MAAM;AACd,MAAAH,EAAU,IAAI,MAAS;AAAA,IAAA,GACtB,CAACA,CAAS,CAAC;AAER,UAAA,EAAE,mBAAAI,GAAmB,cAAAC,EAAA,IAAiBC;AAAA,MAC1ChB;AAAA,MACAR;AAAA,IAAA;AAGF,WAAIuB,IAAsB,gBAAAE,EAAAC,GAAA,EAAU,QAAO,OAAO,CAAA,IAE3CP,IACL,gBAAAM;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAAlB;AAAA,QACA,YAAAC;AAAA,QACA,WAAAV;AAAA,QACA,aAAa4B,YAAU7B,CAAW;AAAA,QAClC,QAAAE;AAAA,QACA,WAAAC;AAAA,QACA,UAAAC;AAAA,QACA,QAAQgB;AAAA,QACR,oBAAAN;AAAA,QACA,kBAAkBR;AAAA,QAClB,sBAAAD;AAAA,QACA,aAAaE;AAAA,QACb,QAAQC;AAAA,QACR,UAAAC;AAAA,QACA,OAAAG;AAAA,QACA,mBAAAW;AAAA,QACA,yBAAAV;AAAA,QACA,gBAAAE;AAAA,QACA,cAAAC;AAAA,QACA,YAAAC;AAAA,QACA,gBAAAC;AAAA,MAAA;AAAA,IAEA,IAAA;AAAA,EACN;AACF,GAEAY,IAAehC;"}
1
+ {"version":3,"file":"milestone-create-container.js","sources":["../../../../src/features/milestone/create/milestone-create-container.tsx"],"sourcesContent":["import type { IMileStoneCreateContainerProps } from './milestone-create-types';\n\nimport { titleCase } from 'humanize-plus';\nimport { memo, useEffect } from 'react';\n\nimport AppLoader from '../../ui/loader/app-loader/app-loader';\nimport { useGetMileStoneConfig } from './api/milestone-config';\nimport MilestoneCreate from './milestone-create';\n\nconst MilestoneCreateContainer: React.FC<IMileStoneCreateContainerProps> = memo(\n ({\n studentName,\n studentId,\n height,\n minHeight,\n formData,\n onChapterExitWarning,\n onFormDataChange: handleFormDataChange,\n onPreSubmit: handlePreSubmit,\n onExit: handleExit,\n userType,\n board,\n schoolData,\n grade,\n currentCountryCode,\n isGoalCreation,\n courseStream,\n classRatio,\n enrollmentType,\n }) => {\n const { get: getConfig, data: configData, isProcessing } = useGetMileStoneConfig();\n\n useEffect(() => {\n getConfig('', undefined);\n }, [getConfig]);\n\n if (isProcessing) return <AppLoader height=\"100%\" />;\n\n return configData ? (\n <MilestoneCreate\n flow=\"CREATE\"\n board={board}\n schoolData={schoolData}\n studentId={studentId}\n studentName={titleCase(studentName)}\n height={height}\n minHeight={minHeight}\n formData={formData}\n config={configData}\n currentCountryCode={currentCountryCode}\n onFormDataChange={handleFormDataChange}\n onChapterExitWarning={onChapterExitWarning}\n onPreSubmit={handlePreSubmit}\n onExit={handleExit}\n userType={userType}\n grade={grade}\n isGoalCreation={isGoalCreation}\n courseStream={courseStream}\n classRatio={classRatio}\n enrollmentType={enrollmentType}\n />\n ) : null;\n },\n);\n\nexport default MilestoneCreateContainer;\n"],"names":["MilestoneCreateContainer","memo","studentName","studentId","height","minHeight","formData","onChapterExitWarning","handleFormDataChange","handlePreSubmit","handleExit","userType","board","schoolData","grade","currentCountryCode","isGoalCreation","courseStream","classRatio","enrollmentType","getConfig","configData","isProcessing","useGetMileStoneConfig","useEffect","jsx","AppLoader","MilestoneCreate","titleCase","MilestoneCreateContainer$1"],"mappings":";;;;;;AASA,MAAMA,IAAqEC;AAAA,EACzE,CAAC;AAAA,IACC,aAAAC;AAAA,IACA,WAAAC;AAAA,IACA,QAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,kBAAkBC;AAAA,IAClB,aAAaC;AAAA,IACb,QAAQC;AAAA,IACR,UAAAC;AAAA,IACA,OAAAC;AAAA,IACA,YAAAC;AAAA,IACA,OAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,YAAAC;AAAA,IACA,gBAAAC;AAAA,EAAA,MACI;AACJ,UAAM,EAAE,KAAKC,GAAW,MAAMC,GAAY,cAAAC,EAAA,IAAiBC;AAM3D,WAJAC,EAAU,MAAM;AACd,MAAAJ,EAAU,IAAI,MAAS;AAAA,IAAA,GACtB,CAACA,CAAS,CAAC,GAEVE,IAAsB,gBAAAG,EAAAC,GAAA,EAAU,QAAO,OAAO,CAAA,IAE3CL,IACL,gBAAAI;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAAf;AAAA,QACA,YAAAC;AAAA,QACA,WAAAV;AAAA,QACA,aAAayB,YAAU1B,CAAW;AAAA,QAClC,QAAAE;AAAA,QACA,WAAAC;AAAA,QACA,UAAAC;AAAA,QACA,QAAQe;AAAA,QACR,oBAAAN;AAAA,QACA,kBAAkBP;AAAA,QAClB,sBAAAD;AAAA,QACA,aAAaE;AAAA,QACb,QAAQC;AAAA,QACR,UAAAC;AAAA,QACA,OAAAG;AAAA,QACA,gBAAAE;AAAA,QACA,cAAAC;AAAA,QACA,YAAAC;AAAA,QACA,gBAAAC;AAAA,MAAA;AAAA,IAEA,IAAA;AAAA,EACN;AACF,GAEAU,IAAe7B;"}
@@ -1,51 +1,51 @@
1
1
  import { COUNTRY_MAP as p } from "../../../constants/country.js";
2
- import { getStudentEnrollmentSupported as y, getIfGoalCurriculumStandardIsAccessible as S } from "./comps/chapters-selection-step/utils.js";
3
- import { checkEnrollmentAvailable as b, getTestTypeBasedCategory as h } from "./comps/test-type-step/test-type-utils.js";
2
+ import { getStudentEnrollmentSupported as y, getIfGoalCurriculumStandardIsAccessible as h } from "./comps/chapters-selection-step/utils.js";
3
+ import { checkEnrollmentAvailable as b, getTestTypeBasedCategory as S } from "./comps/test-type-step/test-type-utils.js";
4
4
  import { GOAL_EDIT_FLOWS as G } from "./milestone-create-constants.js";
5
- const A = (n, r) => {
6
- r.forEach((e) => {
5
+ const A = (n, t) => {
6
+ t.forEach((e) => {
7
7
  n[e] = void 0;
8
8
  });
9
- }, E = (n, r, e, l, a = []) => {
10
- const { isLeafNode: s, next: o, reset: c } = n, i = { ...r };
9
+ }, F = (n, t, e, l, a = []) => {
10
+ const { isLeafNode: s, next: i, reset: c } = n, u = { ...t };
11
11
  if (s)
12
- return A(i, [...c, ...a]), i;
13
- if (o) {
12
+ return A(u, [...c, ...a]), u;
13
+ if (i) {
14
14
  let d = l, f;
15
- if (o.every((t) => {
15
+ if (i.every((r) => {
16
16
  var m;
17
- let u = !1;
18
- return t.when !== void 0 ? u = t.when.every(([_, v]) => i[_] === v) : u = !0, u ? (d ? (m = t == null ? void 0 : t.reset) == null || m.forEach((_) => {
17
+ let o = !1;
18
+ return r.when !== void 0 ? o = r.when.every(([_, g]) => u[_] === g) : o = !0, o ? (d ? (m = r == null ? void 0 : r.reset) == null || m.forEach((_) => {
19
19
  a.push(_);
20
- }) : e === (t == null ? void 0 : t.name) && (d = !0), f = t, !1) : !0;
20
+ }) : e === (r == null ? void 0 : r.name) && (d = !0), f = r, !1) : !0;
21
21
  }), f)
22
- return E(
22
+ return F(
23
23
  f,
24
- i,
24
+ u,
25
25
  e,
26
26
  d,
27
27
  a
28
28
  );
29
29
  }
30
- }, F = (n, r, e) => {
30
+ }, E = (n, t, e) => {
31
31
  const { isLeafNode: l, required: a, next: s } = n;
32
32
  if (l)
33
33
  return n;
34
- const o = a.every((c) => r[c] !== void 0);
34
+ const i = a.every((c) => t[c] !== void 0);
35
35
  if (G.includes(e)) {
36
36
  const c = a.every(
37
- (i) => r.reviewed[i] === !0
37
+ (u) => t.reviewed[u] === !0
38
38
  );
39
- if (!o || !c)
39
+ if (!i || !c)
40
40
  return {
41
41
  ...n,
42
42
  next: void 0
43
43
  };
44
44
  } else {
45
45
  const c = a.every(
46
- (i) => r.committed[i] === !0
46
+ (u) => t.committed[u] === !0
47
47
  );
48
- if (!o || !c)
48
+ if (!i || !c)
49
49
  return {
50
50
  ...n,
51
51
  next: void 0
@@ -53,121 +53,104 @@ const A = (n, r) => {
53
53
  }
54
54
  if (s) {
55
55
  let c;
56
- if (s.every((i) => i.when === void 0 || i.when.every(
57
- ([f, t]) => r[f] === t
58
- ) ? (c = i, !1) : !0), c)
59
- return F(c, r, e);
56
+ if (s.every((u) => u.when === void 0 || u.when.every(
57
+ ([f, r]) => t[f] === r
58
+ ) ? (c = u, !1) : !0), c)
59
+ return E(c, t, e);
60
60
  }
61
- }, x = (n) => n.academic_events.reduce((r, e) => {
61
+ }, L = (n) => n.academic_events.reduce((t, e) => {
62
62
  const { id: l, event_name: a, event_type: s } = e;
63
- return s === "SCHOOL_TEST" && r.push({
63
+ return s === "SCHOOL_TEST" && t.push({
64
64
  id: l,
65
65
  label: a
66
- }), r;
66
+ }), t;
67
67
  }, []), T = (n) => {
68
- const { currentGoalData: r, enrollmentType: e, currentCountryCode: l, grade: a, selectedCategory: s } = n, {
69
- blocked_countries: o,
68
+ const { currentGoalData: t, enrollmentType: e, currentCountryCode: l, grade: a, selectedCategory: s } = n, {
69
+ blocked_countries: i,
70
70
  available_countries: c,
71
- available_grades: i,
71
+ available_grades: u,
72
72
  goal_category: d,
73
73
  available_enrollment_types: f,
74
- blocked_enrollment_types: t
75
- } = r, u = y(
76
- t,
74
+ blocked_enrollment_types: r
75
+ } = t, o = y(
76
+ r,
77
77
  f,
78
78
  e
79
- ), m = o.some(
80
- (g) => g === l
81
- ), _ = c.length > 0 ? c.some((g) => g === l) : !0, v = i.some((g) => g === a);
82
- return u && !m && _ && v && s === d;
83
- }, L = (n, { grade: r, countryCode: e, goalCategory: l, courseStream: a, classRatio: s, enrollmentType: o }) => {
84
- const { goal_curriculum_map: c, curriculum_standards: i } = n, d = c.filter((t) => t.course_stream === a), f = (t) => d.some((u) => u.goal_category !== l || s && u.available_class_ratios.length > 0 && !u.available_class_ratios.includes(s) || u.goal_curriculum_standard && u.goal_curriculum_standard !== t.code || l === "SCHOOL_SUCCESS" && !u.goal_curriculum_standard || u.available_countries.length > 0 && !u.available_countries.includes(e) || u.available_countries.length === 0 && u.blocked_countries.includes(e) || !u.available_grades.includes(r) ? !1 : b(u, o));
85
- return i.filter(f).map(
79
+ ), m = i.some(
80
+ (v) => v === l
81
+ ), _ = c.length > 0 ? c.some((v) => v === l) : !0, g = u.some((v) => v === a);
82
+ return o && !m && _ && g && s === d;
83
+ }, N = (n, { grade: t, countryCode: e, goalCategory: l, courseStream: a, classRatio: s, enrollmentType: i }) => {
84
+ const { goal_curriculum_map: c, curriculum_standards: u } = n, d = c.filter((r) => r.course_stream === a), f = (r) => d.some((o) => o.goal_category !== l || s && o.available_class_ratios.length > 0 && !o.available_class_ratios.includes(s) || o.goal_curriculum_standard && o.goal_curriculum_standard !== r.code || l === "SCHOOL_SUCCESS" && !o.goal_curriculum_standard || o.available_countries.length > 0 && !o.available_countries.includes(e) || o.available_countries.length === 0 && o.blocked_countries.includes(e) || !o.available_grades.includes(t) ? !1 : b(o, i));
85
+ return u.filter(f).map(
86
86
  ({
87
- code: t,
88
- name: u,
87
+ code: r,
88
+ name: o,
89
89
  default_in_countries: m,
90
90
  recommended_in_countries: _
91
91
  }) => ({
92
- id: t,
93
- label: u,
92
+ id: r,
93
+ label: o,
94
94
  isDefault: m.includes(e),
95
95
  isRecommended: _.includes(e)
96
96
  })
97
- ).sort((t, u) => t.label.toUpperCase() > u.label.toUpperCase() ? 1 : -1);
98
- }, U = (n, r) => {
99
- const { goal_curriculum_map: e } = n, { grade: l, countryCode: a, goalCategory: s, curriculumStandard: o, courseStream: c, enrollmentType: i } = r, d = e.filter((t) => t.course_stream === c), f = (t) => t.goal_category !== s || o && t.goal_curriculum_standard !== o || t.available_countries.length > 0 && !t.available_countries.includes(a) || t.available_countries.length === 0 && t.blocked_countries.includes(a) || !t.available_grades.includes(l) ? !1 : b(t, i);
100
- return d == null ? void 0 : d.filter(f).map(({ goal_code: t, goal_name: u }) => ({
101
- id: t,
102
- label: u
103
- })).sort((t, u) => t.label.toUpperCase() > u.label.toUpperCase() ? 1 : -1);
104
- }, O = (n) => n.grades.reduce((r, e) => (e === "-1" || e === "0" ? r.push({
97
+ ).sort((r, o) => r.label.toUpperCase() > o.label.toUpperCase() ? 1 : -1);
98
+ }, P = (n, t) => {
99
+ const { goal_curriculum_map: e } = n, { grade: l, countryCode: a, goalCategory: s, curriculumStandard: i, courseStream: c, enrollmentType: u } = t, d = e.filter((r) => r.course_stream === c), f = (r) => r.goal_category !== s || i && r.goal_curriculum_standard !== i || r.available_countries.length > 0 && !r.available_countries.includes(a) || r.available_countries.length === 0 && r.blocked_countries.includes(a) || !r.available_grades.includes(l) ? !1 : b(r, u);
100
+ return d == null ? void 0 : d.filter(f).map(({ goal_code: r, goal_name: o }) => ({
101
+ id: r,
102
+ label: o
103
+ })).sort((r, o) => r.label.toUpperCase() > o.label.toUpperCase() ? 1 : -1);
104
+ }, B = (n) => n.grades.reduce((t, e) => (e === "-1" || e === "0" ? t.push({
105
105
  id: e,
106
106
  label: e === "-1" ? "Pre-K" : "KG"
107
- }) : r.push({
107
+ }) : t.push({
108
108
  id: e,
109
109
  label: `Grade ${e}`
110
- }), r), []), P = (n, r) => {
110
+ }), t), []), R = (n, t) => {
111
111
  const { preference_config: e } = n, l = (a) => {
112
- const { grade: s, courseStream: o, preferenceCategory: c } = r;
113
- return !(a.course_stream !== o || a.preference_category !== c || a.preference_grades.length > 0 && !a.preference_grades.includes(s) || !a.is_live);
112
+ const { grade: s, courseStream: i, preferenceCategory: c } = t;
113
+ return !(a.course_stream !== i || a.preference_category !== c || a.preference_grades.length > 0 && !a.preference_grades.includes(s) || !a.is_live);
114
114
  };
115
115
  return e == null ? void 0 : e.filter(l).map(
116
- ({ preference_code: a, preference_name: s, preference_description: o }) => ({
116
+ ({ preference_code: a, preference_name: s, preference_description: i }) => ({
117
117
  id: a,
118
118
  label: s,
119
- description: o
119
+ description: i
120
120
  })
121
121
  );
122
- }, R = (n, r, e, l) => {
123
- const { goal_curriculum_map: a } = n, s = O(n), o = ({ id: c }) => a.filter((i) => i.course_stream === e).some((i) => {
122
+ }, U = (n, t, e, l) => {
123
+ const { goal_curriculum_map: a } = n, s = B(n), i = ({ id: c }) => a.filter((u) => u.course_stream === e).some((u) => {
124
124
  const {
125
125
  available_grades: d,
126
126
  goal_category: f,
127
- available_enrollment_types: t,
128
- blocked_enrollment_types: u
129
- } = i;
130
- return t.length > 0 && !t.includes(l) || t.length === 0 && u.includes(l) ? !1 : f === r && d.includes(c);
127
+ available_enrollment_types: r,
128
+ blocked_enrollment_types: o
129
+ } = u;
130
+ return r.length > 0 && !r.includes(l) || r.length === 0 && o.includes(l) ? !1 : f === t && d.includes(c);
131
131
  });
132
- return s.filter(o);
133
- }, W = (n, r, e, l, a) => {
132
+ return s.filter(i);
133
+ }, q = (n, t, e, l, a) => {
134
134
  if (e === "KG" || Number(e) < 7) return [];
135
- const { goal_curriculum_map: s } = n, o = (i) => i.course_stream !== l ? !1 : b(i, a);
136
- return s.filter(o).reduce((i, d) => {
135
+ const { goal_curriculum_map: s } = n, i = (u) => u.course_stream !== l ? !1 : b(u, a);
136
+ return s.filter(i).reduce((u, d) => {
137
137
  const {
138
138
  available_grades: f,
139
- goal_curriculum_standard: t,
140
- program_name: u,
139
+ goal_curriculum_standard: r,
140
+ program_name: o,
141
141
  program_code: m
142
142
  } = d;
143
- return f.some((C) => C === e) && t === r && i.push({
143
+ return f.some((C) => C === e) && r === t && u.push({
144
144
  id: m,
145
- label: u
146
- }), i;
145
+ label: o
146
+ }), u;
147
147
  }, []);
148
- }, K = ({
149
- grade: n,
150
- schoolRegion: r
151
- }, e) => {
152
- let l;
153
- return { events: e.filter(
154
- ({
155
- id: s,
156
- event_code: o,
157
- event_type: c,
158
- available_in_countries: i,
159
- available_grade_and_syllabus_map: d
160
- }) => {
161
- const f = Object.keys(d ?? {});
162
- return o === "UNKNOWN" && (l = s), i.length && r && !i.includes(r) || n && !f.includes(n) ? !1 : c === "STANDARDISED_TEST" && o !== "UNKNOWN";
163
- }
164
- ), unknownTestEventId: l };
165
- }, B = (n) => {
148
+ }, O = (n) => {
166
149
  var e;
167
150
  return (e = p.find((l) => l.country_code === n)) == null ? void 0 : e.region_code;
168
- }, j = (n, r, e, l) => {
151
+ }, M = (n, t, e, l) => {
169
152
  if (n && e) {
170
- const { country_code: s, place_id: o } = n;
153
+ const { country_code: s, place_id: i } = n;
171
154
  return {
172
155
  committed: {},
173
156
  reviewed: {},
@@ -175,26 +158,26 @@ const A = (n, r) => {
175
158
  schoolInfo: {
176
159
  countryCode: s,
177
160
  stateCode: "",
178
- id: o
161
+ id: i
179
162
  },
180
163
  region: s,
181
- board: r ?? void 0
164
+ board: t ?? void 0
182
165
  };
183
166
  }
184
- const a = l ? B(l) : void 0;
167
+ const a = l ? O(l) : void 0;
185
168
  return e ? {
186
169
  committed: {},
187
170
  reviewed: {},
188
171
  grade: e,
189
172
  region: a,
190
- board: r ?? void 0
173
+ board: t ?? void 0
191
174
  } : {
192
175
  committed: {},
193
176
  reviewed: {}
194
177
  };
195
- }, q = (n, r, e, l) => {
196
- if (r && l) {
197
- const { country_code: a, place_id: s } = r;
178
+ }, W = (n, t, e, l) => {
179
+ if (t && l) {
180
+ const { country_code: a, place_id: s } = t;
198
181
  return {
199
182
  ...n,
200
183
  grade: l,
@@ -207,50 +190,48 @@ const A = (n, r) => {
207
190
  };
208
191
  }
209
192
  return n;
210
- }, M = (n, r, e, l, a, s, o) => {
211
- const { goal_curriculum_map: c } = n, i = r === "no-test", d = h(r);
212
- return c.find((t) => {
213
- const u = T({
214
- currentGoalData: t,
193
+ }, j = (n, t, e, l, a, s, i) => {
194
+ const { goal_curriculum_map: c } = n, u = t === "no-test", d = S(t);
195
+ return c.find((r) => {
196
+ const o = T({
197
+ currentGoalData: r,
215
198
  grade: e,
216
- currentCountryCode: o,
199
+ currentCountryCode: i,
217
200
  selectedCategory: d,
218
201
  enrollmentType: a
219
- }), { goal_curriculum_standard: m } = t, _ = S({
202
+ }), { goal_curriculum_standard: m } = r, _ = h({
220
203
  goalCurriculumStandard: m,
221
204
  referenceStandard: s
222
- }), v = t.course_stream === l;
223
- return i ? v && u && _ : v && u;
205
+ }), g = r.course_stream === l;
206
+ return u ? g && o && _ : g && o;
224
207
  });
225
- }, D = (n) => {
208
+ }, K = (n) => {
226
209
  var a, s;
227
- let r = [], e = [];
228
- for (const o of n)
229
- o.title === "recommended" ? r = o.data : o.title === "others" && (e = o.data);
230
- const l = r.find((o) => o.isDefault && o.isRecommended);
210
+ let t = [], e = [];
211
+ for (const i of n)
212
+ i.title === "recommended" ? t = i.data : i.title === "others" && (e = i.data);
213
+ const l = t.find((i) => i.isDefault && i.isRecommended);
231
214
  if (l)
232
215
  return l.id;
233
- if (r.length > 0)
234
- return (a = r[0]) == null ? void 0 : a.id;
216
+ if (t.length > 0)
217
+ return (a = t[0]) == null ? void 0 : a.id;
235
218
  if (e.length > 0)
236
219
  return (s = e[0]) == null ? void 0 : s.id;
237
220
  };
238
221
  export {
239
- M as appendPrimaryGoalCategoryToFormState,
240
- q as appendSchoolDataToFormState,
241
- E as clearNextFields,
242
- T as computeCanIncludeCurrentGoal,
243
- K as findValidAcademicEventsForClass,
244
- j as generateFormStateWithPrefilledSchoolData,
245
- F as getCurrenStep,
246
- L as getCurriculumStandardsFromConfig,
247
- D as getDefaultBoard,
248
- U as getGoalsFromConfig,
249
- R as getGradesBasedOnGoalAvailability,
250
- O as getGradesFromConfig,
251
- W as getMajorsFromConfigBasedOnBoardAndGrade,
252
- P as getPreferencesFromConfig,
253
- B as getRegionCodeBasedOnCountryCode,
254
- x as getSchoolTestsFromConfig
222
+ j as appendPrimaryGoalCategoryToFormState,
223
+ W as appendSchoolDataToFormState,
224
+ F as clearNextFields,
225
+ M as generateFormStateWithPrefilledSchoolData,
226
+ E as getCurrenStep,
227
+ N as getCurriculumStandardsFromConfig,
228
+ K as getDefaultBoard,
229
+ P as getGoalsFromConfig,
230
+ U as getGradesBasedOnGoalAvailability,
231
+ B as getGradesFromConfig,
232
+ q as getMajorsFromConfigBasedOnBoardAndGrade,
233
+ R as getPreferencesFromConfig,
234
+ O as getRegionCodeBasedOnCountryCode,
235
+ L as getSchoolTestsFromConfig
255
236
  };
256
237
  //# sourceMappingURL=milestone-create-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"milestone-create-helpers.js","sources":["../../../../src/features/milestone/create/milestone-create-helpers.ts"],"sourcesContent":["import type IStudentSchool from '../../../types/models/school';\nimport type { ISectionOption } from '../../ui/section-list/section-list-types';\nimport type { TTestType } from '../types';\nimport type {\n ICurriculumStandards,\n IFormStep,\n IGoalCurriculumMap,\n IMileStoneFormFields,\n IMilestoneConfig,\n IMilestoneFormData,\n IPreferencesCurriculumMap,\n TCourseStream,\n TCurriculumStandardOption,\n TEnrollmentTypes,\n TFormStepNames,\n TGoalCategory,\n TMilestoneFormFlow,\n TPreferenceCategory,\n} from './milestone-create-types';\n\nimport { COUNTRY_MAP } from '../../../constants/country';\nimport { convertToTitleCase } from '../../../helpers/label-text';\nimport {\n getIfGoalCurriculumStandardIsAccessible,\n getStudentEnrollmentSupported,\n} from './comps/chapters-selection-step/utils';\nimport {\n checkEnrollmentAvailable,\n getTestTypeBasedCategory,\n} from './comps/test-type-step/test-type-utils';\nimport { CHAPTERS_STEP, GOAL_EDIT_FLOWS } from './milestone-create-constants';\n\ninterface IGetCurrenStep {\n (\n formStep: IFormStep,\n milestoneFormData: IMilestoneFormData,\n flow: TMilestoneFormFlow,\n ): IFormStep | undefined;\n}\n\ninterface IClearNextFields {\n (\n formStep: IFormStep,\n milestoneFormData: IMilestoneFormData,\n currentStepName: TFormStepNames | undefined,\n shouldStartClearing: boolean,\n fieldsToClear: (keyof IMileStoneFormFields)[],\n ): IMilestoneFormData | undefined;\n}\n\n/**\n * Impure method that Removes specified fields from an object.\n *\n * @param obj The object from which fields are to be removed.\n * @param fieldsList An array of field names to be removed.\n */\nconst clearFields = (obj: Record<string, unknown>, fieldsList: string[]) => {\n fieldsList.forEach(field => {\n obj[field] = undefined;\n });\n};\n\nconst clearNextFields: IClearNextFields = (\n formStep,\n milestoneFormData,\n currentStepName,\n startClearing,\n fieldsToClear = [],\n) => {\n const { isLeafNode, next, reset } = formStep;\n const updatedFormData = { ...milestoneFormData };\n\n if (isLeafNode) {\n clearFields(updatedFormData, [...reset, ...fieldsToClear]);\n\n return updatedFormData;\n }\n\n if (next) {\n let shouldStartClearing = startClearing;\n let nextStep: IFormStep | undefined;\n\n next.every(step => {\n let conditionFulfilled = false;\n\n if (step.when !== undefined) {\n conditionFulfilled = step.when.every(([field, value]) => updatedFormData[field] === value);\n } else conditionFulfilled = true;\n\n if (conditionFulfilled) {\n if (shouldStartClearing) {\n step?.reset?.forEach(field => {\n fieldsToClear.push(field);\n });\n } else if (currentStepName === step?.name) {\n shouldStartClearing = true;\n }\n\n nextStep = step;\n\n return false;\n }\n\n return true;\n });\n if (nextStep) {\n return clearNextFields(\n nextStep,\n updatedFormData,\n currentStepName,\n shouldStartClearing,\n fieldsToClear,\n );\n }\n }\n\n return undefined;\n};\n\nconst getCurrenStep: IGetCurrenStep = (formStep, milestoneFormData, flow) => {\n const { isLeafNode, required, next } = formStep;\n\n if (isLeafNode) {\n return formStep;\n }\n\n const requiredFieldsFilled = required.every(field => milestoneFormData[field] !== undefined);\n\n if (GOAL_EDIT_FLOWS.includes(flow)) {\n const requiredFieldsReviewed = required.every(\n field => milestoneFormData.reviewed[field] === true,\n );\n\n if (!requiredFieldsFilled || !requiredFieldsReviewed) {\n return {\n ...formStep,\n next: undefined,\n };\n }\n } else {\n const requiredFieldsCommitted = required.every(\n field => milestoneFormData.committed[field] === true,\n );\n\n if (!requiredFieldsFilled || !requiredFieldsCommitted) {\n return {\n ...formStep,\n next: undefined,\n };\n }\n }\n\n if (next) {\n let nextStep: IFormStep | undefined;\n\n next.every(step => {\n if (step.when === undefined) {\n nextStep = step;\n\n return false;\n }\n\n const conditionFulfilled = step.when.every(\n ([field, value]) => milestoneFormData[field] === value,\n );\n\n if (conditionFulfilled) {\n nextStep = step;\n\n return false;\n }\n\n return true;\n });\n\n if (nextStep) {\n return getCurrenStep(nextStep, milestoneFormData, flow);\n }\n }\n\n return undefined;\n};\n\ntype TOptions = {\n id: string;\n label: string;\n description?: string;\n};\n\ninterface IGetSchoolTestsFromConfig {\n (config: IMilestoneConfig): TOptions[];\n}\n\nconst getSchoolTestsFromConfig: IGetSchoolTestsFromConfig = config => {\n return config.academic_events.reduce<TOptions[]>((acc, event) => {\n const { id, event_name: eventName, event_type: eventType } = event;\n\n if (eventType === 'SCHOOL_TEST') {\n acc.push({\n id,\n label: eventName,\n });\n }\n\n return acc;\n }, []);\n};\n\ninterface IGetCountriesFromConfig {\n (config: IMilestoneConfig): TOptions[];\n}\n\nconst getCountriesFromConfig: IGetCountriesFromConfig = config => {\n return config.boards\n .reduce<string[]>((acc, board) => acc.concat(board.available_countries), [])\n .sort()\n .reduce<TOptions[]>((acc, country) => {\n if (acc[acc.length - 1]?.id !== country) {\n const countryFullName = config.country_code_to_name_map[country];\n\n acc.push({\n id: country,\n label: countryFullName ? convertToTitleCase(countryFullName) : country,\n });\n }\n\n return acc;\n }, []);\n};\n\nconst computeCanIncludeCurrentGoal = (props: {\n currentGoalData: IGoalCurriculumMap;\n enrollmentType: TEnrollmentTypes;\n currentCountryCode?: string;\n grade?: string;\n selectedCategory?: string;\n}) => {\n const { currentGoalData, enrollmentType, currentCountryCode, grade, selectedCategory } = props;\n\n const {\n blocked_countries: blockedCountries,\n available_countries: availableCountries,\n available_grades: availableGrades,\n goal_category: goalCategory,\n available_enrollment_types: availableEnrollmentTypes,\n blocked_enrollment_types: blockedEnrollmentTypes,\n } = currentGoalData;\n\n const isStudentEnrollmentTypeSupported = getStudentEnrollmentSupported(\n blockedEnrollmentTypes,\n availableEnrollmentTypes,\n enrollmentType,\n );\n const isStudentRegionBlocked = blockedCountries.some(\n blockedCountry => blockedCountry === currentCountryCode,\n );\n const isStudentRegionAvailable =\n availableCountries.length > 0\n ? availableCountries.some(availableCountry => availableCountry === currentCountryCode)\n : true;\n\n const isCurrentGradeAvailable = availableGrades.some(gradeInfo => gradeInfo === grade);\n const isGoalCategoryAvailable = selectedCategory === goalCategory;\n\n return (\n isStudentEnrollmentTypeSupported &&\n !isStudentRegionBlocked &&\n isStudentRegionAvailable &&\n isCurrentGradeAvailable &&\n isGoalCategoryAvailable\n );\n};\n\ninterface IGetCurriculumStandardsFromConfig {\n (\n config: IMilestoneConfig,\n options: {\n grade: string;\n countryCode: string;\n goalCategory: TGoalCategory;\n courseStream: TCourseStream;\n enrollmentType: TEnrollmentTypes;\n classRatio?: number;\n },\n ): TCurriculumStandardOption[];\n}\n\nconst getCurriculumStandardsFromConfig: IGetCurriculumStandardsFromConfig = (\n config,\n { grade, countryCode, goalCategory, courseStream, classRatio, enrollmentType },\n) => {\n const { goal_curriculum_map: goals, curriculum_standards: curriculumStandards } = config;\n // check if atleast one goal present for the curriculum standard\n\n const filteredGoalCurriculumMap = goals.filter(item => item.course_stream === courseStream);\n\n const hasGoalForCurriculumStandards = (standard: ICurriculumStandards) =>\n filteredGoalCurriculumMap.some(goal => {\n // check goal category\n if (goal.goal_category !== goalCategory) return false;\n\n if (\n classRatio &&\n goal.available_class_ratios.length > 0 &&\n !goal.available_class_ratios.includes(classRatio)\n )\n return false;\n\n // check goal curriculum standard\n // if goal_curriculum_standard is undefined then it's available for all standard\n if (goal.goal_curriculum_standard && goal.goal_curriculum_standard !== standard.code)\n return false;\n\n if (goalCategory === 'SCHOOL_SUCCESS' && !goal.goal_curriculum_standard) return false;\n\n // check country availability\n if (goal.available_countries.length > 0 && !goal.available_countries.includes(countryCode))\n return false;\n\n if (goal.available_countries.length === 0 && goal.blocked_countries.includes(countryCode))\n return false;\n\n // check grade availability\n if (!goal.available_grades.includes(grade)) return false;\n\n return checkEnrollmentAvailable(goal, enrollmentType);\n });\n\n return curriculumStandards\n .filter(hasGoalForCurriculumStandards)\n .map(\n ({\n code,\n name,\n default_in_countries: defaultInCountries,\n recommended_in_countries: recommendedInCountries,\n }) => ({\n id: code,\n label: name,\n isDefault: defaultInCountries.includes(countryCode),\n isRecommended: recommendedInCountries.includes(countryCode),\n }),\n )\n .sort((a, b) => (a.label.toUpperCase() > b.label.toUpperCase() ? 1 : -1));\n};\n\ninterface IGetGoalsFromConfig {\n (\n config: IMilestoneConfig,\n options: {\n grade: string;\n countryCode: string;\n goalCategory: TGoalCategory;\n curriculumStandard?: string;\n courseStream: TCourseStream;\n enrollmentType: TEnrollmentTypes;\n },\n ): TOptions[];\n}\n\nconst getGoalsFromConfig: IGetGoalsFromConfig = (config, options) => {\n const { goal_curriculum_map: goals } = config;\n const { grade, countryCode, goalCategory, curriculumStandard, courseStream, enrollmentType } =\n options;\n const filteredGoalCurriculumMap = goals.filter(item => item.course_stream === courseStream);\n\n const isEligibleGoal = (goal: IGoalCurriculumMap) => {\n if (goal.goal_category !== goalCategory) return false;\n\n if (curriculumStandard && goal.goal_curriculum_standard !== curriculumStandard) return false;\n\n if (goal.available_countries.length > 0 && !goal.available_countries.includes(countryCode))\n return false;\n\n if (goal.available_countries.length === 0 && goal.blocked_countries.includes(countryCode))\n return false;\n\n if (!goal.available_grades.includes(grade)) return false;\n\n return checkEnrollmentAvailable(goal, enrollmentType);\n };\n\n return filteredGoalCurriculumMap\n ?.filter(isEligibleGoal)\n .map(({ goal_code: id, goal_name: label }) => ({\n id,\n label,\n }))\n .sort((a, b) => (a.label.toUpperCase() > b.label.toUpperCase() ? 1 : -1));\n};\n\nconst getGradesFromConfig: IGetCountriesFromConfig = config => {\n return config.grades.reduce<TOptions[]>((acc, grade) => {\n if (grade === '-1' || grade === '0') {\n acc.push({\n id: grade,\n label: grade === '-1' ? `Pre-K` : `KG`,\n });\n } else {\n acc.push({\n id: grade,\n label: `Grade ${grade}`,\n });\n }\n\n return acc;\n }, []);\n};\n\ninterface IGetPreferencesFromConfig {\n (\n config: IMilestoneConfig,\n options: {\n grade: string;\n preferenceCategory: TPreferenceCategory;\n courseStream: TCourseStream;\n },\n ): TOptions[];\n}\n\nconst getPreferencesFromConfig: IGetPreferencesFromConfig = (config, options) => {\n const { preference_config: preferenceConfig } = config;\n\n const isEligiblePreferences = (preference: IPreferencesCurriculumMap) => {\n const { grade, courseStream, preferenceCategory } = options;\n\n if (preference.course_stream !== courseStream) return false;\n\n if (preference.preference_category !== preferenceCategory) return false;\n\n if (preference.preference_grades.length > 0 && !preference.preference_grades.includes(grade))\n return false;\n\n if (!preference.is_live) return false;\n\n return true;\n };\n\n return preferenceConfig\n ?.filter(isEligiblePreferences)\n .map(\n ({ preference_code: id, preference_name: label, preference_description: description }) => ({\n id,\n label,\n description,\n }),\n );\n};\n\ninterface IGetGradeBasedOnGoalAvailability {\n (\n config: IMilestoneConfig,\n selectedGoalCategory: string,\n courseStream: TCourseStream,\n enrollmentType: TEnrollmentTypes,\n ): TOptions[];\n}\n\n//* Grades where goals are available for selected goal category.\nconst getGradesBasedOnGoalAvailability: IGetGradeBasedOnGoalAvailability = (\n config,\n selectedGoalCategory,\n courseStream,\n enrollmentType,\n) => {\n const { goal_curriculum_map: goals } = config;\n\n const grades = getGradesFromConfig(config);\n\n const gradeAvailableGoals = ({ id }: TOptions) => {\n return goals\n .filter(item => item.course_stream === courseStream)\n .some((goalData: IGoalCurriculumMap) => {\n const {\n available_grades: availableGrades,\n goal_category: goalCategory,\n available_enrollment_types: availableEnrollmentTypes,\n blocked_enrollment_types: blockedEnrollmentTypes,\n } = goalData;\n\n // check enrollment type availability\n if (\n availableEnrollmentTypes.length > 0 &&\n !availableEnrollmentTypes.includes(enrollmentType)\n )\n return false;\n\n if (\n availableEnrollmentTypes.length === 0 &&\n blockedEnrollmentTypes.includes(enrollmentType)\n )\n return false;\n\n //* Check for grade availability only for selected goal category\n return goalCategory === selectedGoalCategory && availableGrades.includes(id);\n });\n };\n\n return grades.filter(gradeAvailableGoals);\n};\n\ninterface IGetMajorsFromConfigBasedOnBoardAndGrade {\n (\n config: IMilestoneConfig,\n boardCode: string,\n grade: string,\n courseStream: TCourseStream,\n enrollmentType: TEnrollmentTypes,\n ): TOptions[];\n}\n\nconst getMajorsFromConfigBasedOnBoardAndGrade: IGetMajorsFromConfigBasedOnBoardAndGrade = (\n config,\n boardCode,\n grade,\n courseStream,\n enrollmentType,\n) => {\n //* We have US courses for grade 7 & above\n if (grade === 'KG' || Number(grade) < 7) return [];\n\n const { goal_curriculum_map: goalCurriculumMap } = config;\n const filterOnCourseStreamAndEnrollmentType = (goalData: IGoalCurriculumMap) => {\n if (goalData.course_stream !== courseStream) return false;\n\n return checkEnrollmentAvailable(goalData, enrollmentType);\n };\n\n const majorsWithLabelId = goalCurriculumMap\n .filter(filterOnCourseStreamAndEnrollmentType)\n .reduce<TOptions[]>((acc, goalData) => {\n const {\n available_grades: availableGrades,\n goal_curriculum_standard: goalCurriculumStandard,\n program_name: programName,\n program_code: programCode,\n } = goalData;\n\n const isGradeAvailable = availableGrades.some(availableGrade => availableGrade === grade);\n const isBoardAvailable = goalCurriculumStandard === boardCode;\n\n if (isGradeAvailable && isBoardAvailable) {\n acc.push({\n id: programCode,\n label: programName,\n });\n }\n\n return acc;\n }, []);\n\n return majorsWithLabelId;\n};\n\ninterface IGetCountryAndStateFromGeoCode {\n (geoCode: google.maps.GeocoderResult): {\n countryCode: string;\n stateCode?: string;\n };\n}\n\nconst getCountryAndStateFromGeoCode: IGetCountryAndStateFromGeoCode = geoCode => {\n const { address_components: addressComponents } = geoCode;\n\n const country = addressComponents.find(addressComponent =>\n addressComponent.types.includes('country'),\n );\n\n const state = addressComponents.find(addressComponent =>\n addressComponent.types.includes('administrative_area_level_1'),\n );\n\n return {\n countryCode: country?.short_name ?? '',\n stateCode: state?.short_name,\n };\n};\n\nconst computeCurrentStepIndex = (currentStep: TFormStepNames | undefined): number => {\n if (currentStep && CHAPTERS_STEP.includes(currentStep)) return 2;\n\n return 1;\n};\n\nconst findValidAcademicEventsForClass = (\n {\n grade,\n schoolRegion,\n }: {\n grade: string | undefined;\n schoolRegion: string | undefined;\n },\n academicEvents: IMilestoneConfig['academic_events'],\n) => {\n let unknownTestEventId;\n const events = academicEvents.filter(\n ({\n id,\n event_code: eventCode,\n event_type: eventType,\n available_in_countries: availableCountries,\n available_grade_and_syllabus_map: availableInGradeSyllabusMap,\n }) => {\n const availableGrades = Object.keys(availableInGradeSyllabusMap ?? {});\n\n if (eventCode === 'UNKNOWN') {\n unknownTestEventId = id;\n }\n\n if (availableCountries.length && schoolRegion && !availableCountries.includes(schoolRegion)) {\n return false;\n }\n\n if (grade && !availableGrades.includes(grade)) {\n return false;\n }\n\n return eventType === 'STANDARDISED_TEST' && eventCode !== 'UNKNOWN';\n },\n );\n\n return { events, unknownTestEventId };\n};\n\nconst getRegionCodeBasedOnCountryCode = (countryCode: string) => {\n const regionCode = COUNTRY_MAP.find(countryInfo => countryInfo.country_code === countryCode)\n ?.region_code;\n\n return regionCode;\n};\n\nconst generateFormStateWithPrefilledSchoolData = (\n schoolData: IStudentSchool | undefined,\n board: string | undefined,\n grade: string | undefined,\n currentCountryCode: string | undefined,\n): IMilestoneFormData => {\n if (schoolData && grade) {\n const { country_code: countryCode, place_id: placeId } = schoolData;\n\n return {\n committed: {},\n reviewed: {},\n grade: grade,\n schoolInfo: {\n countryCode: countryCode,\n stateCode: '',\n id: placeId,\n },\n region: countryCode,\n board: board ?? undefined,\n };\n }\n\n const regionCode = currentCountryCode\n ? getRegionCodeBasedOnCountryCode(currentCountryCode)\n : undefined;\n\n if (grade) {\n return {\n committed: {},\n reviewed: {},\n grade: grade,\n region: regionCode,\n board: board ?? undefined,\n };\n }\n\n return {\n committed: {},\n reviewed: {},\n };\n};\n\nconst appendSchoolDataToFormState = (\n formData: IMilestoneFormData,\n schoolData: IStudentSchool | undefined,\n board: string | undefined,\n grade: string | undefined,\n): IMilestoneFormData => {\n if (schoolData && grade) {\n const { country_code: countryCode, place_id: placeId } = schoolData;\n\n return {\n ...formData,\n grade: grade,\n schoolInfo: {\n countryCode: countryCode,\n stateCode: '',\n id: placeId,\n },\n board: formData.board ?? board ?? undefined,\n };\n }\n\n return formData;\n};\n\nconst appendPrimaryGoalCategoryToFormState = (\n config: IMilestoneConfig,\n testType: TTestType,\n grade: string | undefined,\n courseStream: TCourseStream,\n enrollmentType: TEnrollmentTypes,\n board?: string | undefined,\n country?: string | undefined,\n) => {\n const { goal_curriculum_map: goalCurriculumMap } = config;\n const isSchoolSuccessCategory = testType === 'no-test';\n const selectedGoalCategory = getTestTypeBasedCategory(testType);\n\n //TODO: This needs to compensate the course selection for US curriculum grade 8 & above\n const primaryGoalCurriculum = goalCurriculumMap.find(goalInfo => {\n const isCurrentGoalAvailable = computeCanIncludeCurrentGoal({\n currentGoalData: goalInfo,\n grade,\n currentCountryCode: country,\n selectedCategory: selectedGoalCategory,\n enrollmentType,\n });\n const { goal_curriculum_standard: goalCurriculumStandard } = goalInfo;\n\n const currentBoardAvailable = getIfGoalCurriculumStandardIsAccessible({\n goalCurriculumStandard,\n referenceStandard: board,\n });\n\n const isSameCourse = goalInfo.course_stream === courseStream;\n\n if (isSchoolSuccessCategory) {\n return isSameCourse && isCurrentGoalAvailable && currentBoardAvailable;\n }\n\n return isSameCourse && isCurrentGoalAvailable;\n });\n\n return primaryGoalCurriculum;\n};\n\nconst getDefaultBoard = (data: ISectionOption<TCurriculumStandardOption>[]) => {\n let recommendedBoards: TCurriculumStandardOption[] = [];\n let otherBoards: TCurriculumStandardOption[] = [];\n\n // Iterate through the data categories\n for (const category of data) {\n if (category.title === 'recommended') {\n recommendedBoards = category.data;\n } else if (category.title === 'others') {\n otherBoards = category.data;\n }\n }\n\n // 1. Check if any recommended board has isDefault: true\n const defaultBoard = recommendedBoards.find(board => board.isDefault && board.isRecommended);\n\n if (defaultBoard) {\n return defaultBoard.id;\n }\n\n // 2. If no default, return the first recommended board\n if (recommendedBoards.length > 0) {\n return recommendedBoards[0]?.id;\n }\n\n // 3. If no recommended, return the first board from others\n if (otherBoards.length > 0) {\n return otherBoards[0]?.id;\n }\n\n // 4. Return null if no boards are found\n return undefined;\n};\n\nexport {\n appendSchoolDataToFormState,\n appendPrimaryGoalCategoryToFormState,\n clearNextFields,\n computeCurrentStepIndex,\n findValidAcademicEventsForClass,\n generateFormStateWithPrefilledSchoolData,\n getCountriesFromConfig,\n getCountryAndStateFromGeoCode,\n getCurrenStep,\n getGradesFromConfig,\n getCurriculumStandardsFromConfig,\n getGoalsFromConfig,\n getGradesBasedOnGoalAvailability,\n getMajorsFromConfigBasedOnBoardAndGrade,\n getSchoolTestsFromConfig,\n getRegionCodeBasedOnCountryCode,\n computeCanIncludeCurrentGoal,\n getDefaultBoard,\n getPreferencesFromConfig,\n};\n"],"names":["clearFields","obj","fieldsList","field","clearNextFields","formStep","milestoneFormData","currentStepName","startClearing","fieldsToClear","isLeafNode","next","reset","updatedFormData","shouldStartClearing","nextStep","step","conditionFulfilled","value","_a","getCurrenStep","flow","required","requiredFieldsFilled","GOAL_EDIT_FLOWS","requiredFieldsReviewed","requiredFieldsCommitted","getSchoolTestsFromConfig","config","acc","event","id","eventName","eventType","computeCanIncludeCurrentGoal","props","currentGoalData","enrollmentType","currentCountryCode","grade","selectedCategory","blockedCountries","availableCountries","availableGrades","goalCategory","availableEnrollmentTypes","blockedEnrollmentTypes","isStudentEnrollmentTypeSupported","getStudentEnrollmentSupported","isStudentRegionBlocked","blockedCountry","isStudentRegionAvailable","availableCountry","isCurrentGradeAvailable","gradeInfo","getCurriculumStandardsFromConfig","countryCode","courseStream","classRatio","goals","curriculumStandards","filteredGoalCurriculumMap","item","hasGoalForCurriculumStandards","standard","goal","checkEnrollmentAvailable","code","name","defaultInCountries","recommendedInCountries","a","b","getGoalsFromConfig","options","curriculumStandard","isEligibleGoal","label","getGradesFromConfig","getPreferencesFromConfig","preferenceConfig","isEligiblePreferences","preference","preferenceCategory","description","getGradesBasedOnGoalAvailability","selectedGoalCategory","grades","gradeAvailableGoals","goalData","getMajorsFromConfigBasedOnBoardAndGrade","boardCode","goalCurriculumMap","filterOnCourseStreamAndEnrollmentType","goalCurriculumStandard","programName","programCode","availableGrade","findValidAcademicEventsForClass","schoolRegion","academicEvents","unknownTestEventId","eventCode","availableInGradeSyllabusMap","getRegionCodeBasedOnCountryCode","COUNTRY_MAP","countryInfo","generateFormStateWithPrefilledSchoolData","schoolData","board","placeId","regionCode","appendSchoolDataToFormState","formData","appendPrimaryGoalCategoryToFormState","testType","country","isSchoolSuccessCategory","getTestTypeBasedCategory","goalInfo","isCurrentGoalAvailable","currentBoardAvailable","getIfGoalCurriculumStandardIsAccessible","isSameCourse","getDefaultBoard","data","recommendedBoards","otherBoards","category","defaultBoard","_b"],"mappings":"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"}
1
+ {"version":3,"file":"milestone-create-helpers.js","sources":["../../../../src/features/milestone/create/milestone-create-helpers.ts"],"sourcesContent":["import type IStudentSchool from '../../../types/models/school';\nimport type { ISectionOption } from '../../ui/section-list/section-list-types';\nimport type { TTestType } from '../types';\nimport type {\n ICurriculumStandards,\n IFormStep,\n IGoalCurriculumMap,\n IMileStoneFormFields,\n IMilestoneConfig,\n IMilestoneFormData,\n IPreferencesCurriculumMap,\n TCourseStream,\n TCurriculumStandardOption,\n TEnrollmentTypes,\n TFormStepNames,\n TGoalCategory,\n TMilestoneFormFlow,\n TPreferenceCategory,\n} from './milestone-create-types';\n\nimport { COUNTRY_MAP } from '../../../constants/country';\nimport {\n getIfGoalCurriculumStandardIsAccessible,\n getStudentEnrollmentSupported,\n} from './comps/chapters-selection-step/utils';\nimport {\n checkEnrollmentAvailable,\n getTestTypeBasedCategory,\n} from './comps/test-type-step/test-type-utils';\nimport { GOAL_EDIT_FLOWS } from './milestone-create-constants';\n\ninterface IGetCurrenStep {\n (\n formStep: IFormStep,\n milestoneFormData: IMilestoneFormData,\n flow: TMilestoneFormFlow,\n ): IFormStep | undefined;\n}\n\ninterface IClearNextFields {\n (\n formStep: IFormStep,\n milestoneFormData: IMilestoneFormData,\n currentStepName: TFormStepNames | undefined,\n shouldStartClearing: boolean,\n fieldsToClear: (keyof IMileStoneFormFields)[],\n ): IMilestoneFormData | undefined;\n}\n\n/**\n * Impure method that Removes specified fields from an object.\n *\n * @param obj The object from which fields are to be removed.\n * @param fieldsList An array of field names to be removed.\n */\nconst clearFields = (obj: Record<string, unknown>, fieldsList: string[]) => {\n fieldsList.forEach(field => {\n obj[field] = undefined;\n });\n};\n\nconst clearNextFields: IClearNextFields = (\n formStep,\n milestoneFormData,\n currentStepName,\n startClearing,\n fieldsToClear = [],\n) => {\n const { isLeafNode, next, reset } = formStep;\n const updatedFormData = { ...milestoneFormData };\n\n if (isLeafNode) {\n clearFields(updatedFormData, [...reset, ...fieldsToClear]);\n\n return updatedFormData;\n }\n\n if (next) {\n let shouldStartClearing = startClearing;\n let nextStep: IFormStep | undefined;\n\n next.every(step => {\n let conditionFulfilled = false;\n\n if (step.when !== undefined) {\n conditionFulfilled = step.when.every(([field, value]) => updatedFormData[field] === value);\n } else conditionFulfilled = true;\n\n if (conditionFulfilled) {\n if (shouldStartClearing) {\n step?.reset?.forEach(field => {\n fieldsToClear.push(field);\n });\n } else if (currentStepName === step?.name) {\n shouldStartClearing = true;\n }\n\n nextStep = step;\n\n return false;\n }\n\n return true;\n });\n if (nextStep) {\n return clearNextFields(\n nextStep,\n updatedFormData,\n currentStepName,\n shouldStartClearing,\n fieldsToClear,\n );\n }\n }\n\n return undefined;\n};\n\nconst getCurrenStep: IGetCurrenStep = (formStep, milestoneFormData, flow) => {\n const { isLeafNode, required, next } = formStep;\n\n if (isLeafNode) {\n return formStep;\n }\n\n const requiredFieldsFilled = required.every(field => milestoneFormData[field] !== undefined);\n\n if (GOAL_EDIT_FLOWS.includes(flow)) {\n const requiredFieldsReviewed = required.every(\n field => milestoneFormData.reviewed[field] === true,\n );\n\n if (!requiredFieldsFilled || !requiredFieldsReviewed) {\n return {\n ...formStep,\n next: undefined,\n };\n }\n } else {\n const requiredFieldsCommitted = required.every(\n field => milestoneFormData.committed[field] === true,\n );\n\n if (!requiredFieldsFilled || !requiredFieldsCommitted) {\n return {\n ...formStep,\n next: undefined,\n };\n }\n }\n\n if (next) {\n let nextStep: IFormStep | undefined;\n\n next.every(step => {\n if (step.when === undefined) {\n nextStep = step;\n\n return false;\n }\n\n const conditionFulfilled = step.when.every(\n ([field, value]) => milestoneFormData[field] === value,\n );\n\n if (conditionFulfilled) {\n nextStep = step;\n\n return false;\n }\n\n return true;\n });\n\n if (nextStep) {\n return getCurrenStep(nextStep, milestoneFormData, flow);\n }\n }\n\n return undefined;\n};\n\ntype TOptions = {\n id: string;\n label: string;\n description?: string;\n};\n\ninterface IGetSchoolTestsFromConfig {\n (config: IMilestoneConfig): TOptions[];\n}\n\nconst getSchoolTestsFromConfig: IGetSchoolTestsFromConfig = config => {\n return config.academic_events.reduce<TOptions[]>((acc, event) => {\n const { id, event_name: eventName, event_type: eventType } = event;\n\n if (eventType === 'SCHOOL_TEST') {\n acc.push({\n id,\n label: eventName,\n });\n }\n\n return acc;\n }, []);\n};\n\ninterface IGetCountriesFromConfig {\n (config: IMilestoneConfig): TOptions[];\n}\n\nconst computeCanIncludeCurrentGoal = (props: {\n currentGoalData: IGoalCurriculumMap;\n enrollmentType: TEnrollmentTypes;\n currentCountryCode?: string;\n grade?: string;\n selectedCategory?: string;\n}) => {\n const { currentGoalData, enrollmentType, currentCountryCode, grade, selectedCategory } = props;\n\n const {\n blocked_countries: blockedCountries,\n available_countries: availableCountries,\n available_grades: availableGrades,\n goal_category: goalCategory,\n available_enrollment_types: availableEnrollmentTypes,\n blocked_enrollment_types: blockedEnrollmentTypes,\n } = currentGoalData;\n\n const isStudentEnrollmentTypeSupported = getStudentEnrollmentSupported(\n blockedEnrollmentTypes,\n availableEnrollmentTypes,\n enrollmentType,\n );\n const isStudentRegionBlocked = blockedCountries.some(\n blockedCountry => blockedCountry === currentCountryCode,\n );\n const isStudentRegionAvailable =\n availableCountries.length > 0\n ? availableCountries.some(availableCountry => availableCountry === currentCountryCode)\n : true;\n\n const isCurrentGradeAvailable = availableGrades.some(gradeInfo => gradeInfo === grade);\n const isGoalCategoryAvailable = selectedCategory === goalCategory;\n\n return (\n isStudentEnrollmentTypeSupported &&\n !isStudentRegionBlocked &&\n isStudentRegionAvailable &&\n isCurrentGradeAvailable &&\n isGoalCategoryAvailable\n );\n};\n\ninterface IGetCurriculumStandardsFromConfig {\n (\n config: IMilestoneConfig,\n options: {\n grade: string;\n countryCode: string;\n goalCategory: TGoalCategory;\n courseStream: TCourseStream;\n enrollmentType: TEnrollmentTypes;\n classRatio?: number;\n },\n ): TCurriculumStandardOption[];\n}\n\nconst getCurriculumStandardsFromConfig: IGetCurriculumStandardsFromConfig = (\n config,\n { grade, countryCode, goalCategory, courseStream, classRatio, enrollmentType },\n) => {\n const { goal_curriculum_map: goals, curriculum_standards: curriculumStandards } = config;\n // check if atleast one goal present for the curriculum standard\n\n const filteredGoalCurriculumMap = goals.filter(item => item.course_stream === courseStream);\n\n const hasGoalForCurriculumStandards = (standard: ICurriculumStandards) =>\n filteredGoalCurriculumMap.some(goal => {\n // check goal category\n if (goal.goal_category !== goalCategory) return false;\n\n if (\n classRatio &&\n goal.available_class_ratios.length > 0 &&\n !goal.available_class_ratios.includes(classRatio)\n )\n return false;\n\n // check goal curriculum standard\n // if goal_curriculum_standard is undefined then it's available for all standard\n if (goal.goal_curriculum_standard && goal.goal_curriculum_standard !== standard.code)\n return false;\n\n if (goalCategory === 'SCHOOL_SUCCESS' && !goal.goal_curriculum_standard) return false;\n\n // check country availability\n if (goal.available_countries.length > 0 && !goal.available_countries.includes(countryCode))\n return false;\n\n if (goal.available_countries.length === 0 && goal.blocked_countries.includes(countryCode))\n return false;\n\n // check grade availability\n if (!goal.available_grades.includes(grade)) return false;\n\n return checkEnrollmentAvailable(goal, enrollmentType);\n });\n\n return curriculumStandards\n .filter(hasGoalForCurriculumStandards)\n .map(\n ({\n code,\n name,\n default_in_countries: defaultInCountries,\n recommended_in_countries: recommendedInCountries,\n }) => ({\n id: code,\n label: name,\n isDefault: defaultInCountries.includes(countryCode),\n isRecommended: recommendedInCountries.includes(countryCode),\n }),\n )\n .sort((a, b) => (a.label.toUpperCase() > b.label.toUpperCase() ? 1 : -1));\n};\n\ninterface IGetGoalsFromConfig {\n (\n config: IMilestoneConfig,\n options: {\n grade: string;\n countryCode: string;\n goalCategory: TGoalCategory;\n curriculumStandard?: string;\n courseStream: TCourseStream;\n enrollmentType: TEnrollmentTypes;\n },\n ): TOptions[];\n}\n\nconst getGoalsFromConfig: IGetGoalsFromConfig = (config, options) => {\n const { goal_curriculum_map: goals } = config;\n const { grade, countryCode, goalCategory, curriculumStandard, courseStream, enrollmentType } =\n options;\n const filteredGoalCurriculumMap = goals.filter(item => item.course_stream === courseStream);\n\n const isEligibleGoal = (goal: IGoalCurriculumMap) => {\n if (goal.goal_category !== goalCategory) return false;\n\n if (curriculumStandard && goal.goal_curriculum_standard !== curriculumStandard) return false;\n\n if (goal.available_countries.length > 0 && !goal.available_countries.includes(countryCode))\n return false;\n\n if (goal.available_countries.length === 0 && goal.blocked_countries.includes(countryCode))\n return false;\n\n if (!goal.available_grades.includes(grade)) return false;\n\n return checkEnrollmentAvailable(goal, enrollmentType);\n };\n\n return filteredGoalCurriculumMap\n ?.filter(isEligibleGoal)\n .map(({ goal_code: id, goal_name: label }) => ({\n id,\n label,\n }))\n .sort((a, b) => (a.label.toUpperCase() > b.label.toUpperCase() ? 1 : -1));\n};\n\nconst getGradesFromConfig: IGetCountriesFromConfig = config => {\n return config.grades.reduce<TOptions[]>((acc, grade) => {\n if (grade === '-1' || grade === '0') {\n acc.push({\n id: grade,\n label: grade === '-1' ? `Pre-K` : `KG`,\n });\n } else {\n acc.push({\n id: grade,\n label: `Grade ${grade}`,\n });\n }\n\n return acc;\n }, []);\n};\n\ninterface IGetPreferencesFromConfig {\n (\n config: IMilestoneConfig,\n options: {\n grade: string;\n preferenceCategory: TPreferenceCategory;\n courseStream: TCourseStream;\n },\n ): TOptions[];\n}\n\nconst getPreferencesFromConfig: IGetPreferencesFromConfig = (config, options) => {\n const { preference_config: preferenceConfig } = config;\n\n const isEligiblePreferences = (preference: IPreferencesCurriculumMap) => {\n const { grade, courseStream, preferenceCategory } = options;\n\n if (preference.course_stream !== courseStream) return false;\n\n if (preference.preference_category !== preferenceCategory) return false;\n\n if (preference.preference_grades.length > 0 && !preference.preference_grades.includes(grade))\n return false;\n\n if (!preference.is_live) return false;\n\n return true;\n };\n\n return preferenceConfig\n ?.filter(isEligiblePreferences)\n .map(\n ({ preference_code: id, preference_name: label, preference_description: description }) => ({\n id,\n label,\n description,\n }),\n );\n};\n\ninterface IGetGradeBasedOnGoalAvailability {\n (\n config: IMilestoneConfig,\n selectedGoalCategory: string,\n courseStream: TCourseStream,\n enrollmentType: TEnrollmentTypes,\n ): TOptions[];\n}\n\n//* Grades where goals are available for selected goal category.\nconst getGradesBasedOnGoalAvailability: IGetGradeBasedOnGoalAvailability = (\n config,\n selectedGoalCategory,\n courseStream,\n enrollmentType,\n) => {\n const { goal_curriculum_map: goals } = config;\n\n const grades = getGradesFromConfig(config);\n\n const gradeAvailableGoals = ({ id }: TOptions) => {\n return goals\n .filter(item => item.course_stream === courseStream)\n .some((goalData: IGoalCurriculumMap) => {\n const {\n available_grades: availableGrades,\n goal_category: goalCategory,\n available_enrollment_types: availableEnrollmentTypes,\n blocked_enrollment_types: blockedEnrollmentTypes,\n } = goalData;\n\n // check enrollment type availability\n if (\n availableEnrollmentTypes.length > 0 &&\n !availableEnrollmentTypes.includes(enrollmentType)\n )\n return false;\n\n if (\n availableEnrollmentTypes.length === 0 &&\n blockedEnrollmentTypes.includes(enrollmentType)\n )\n return false;\n\n //* Check for grade availability only for selected goal category\n return goalCategory === selectedGoalCategory && availableGrades.includes(id);\n });\n };\n\n return grades.filter(gradeAvailableGoals);\n};\n\ninterface IGetMajorsFromConfigBasedOnBoardAndGrade {\n (\n config: IMilestoneConfig,\n boardCode: string,\n grade: string,\n courseStream: TCourseStream,\n enrollmentType: TEnrollmentTypes,\n ): TOptions[];\n}\n\nconst getMajorsFromConfigBasedOnBoardAndGrade: IGetMajorsFromConfigBasedOnBoardAndGrade = (\n config,\n boardCode,\n grade,\n courseStream,\n enrollmentType,\n) => {\n //* We have US courses for grade 7 & above\n if (grade === 'KG' || Number(grade) < 7) return [];\n\n const { goal_curriculum_map: goalCurriculumMap } = config;\n const filterOnCourseStreamAndEnrollmentType = (goalData: IGoalCurriculumMap) => {\n if (goalData.course_stream !== courseStream) return false;\n\n return checkEnrollmentAvailable(goalData, enrollmentType);\n };\n\n const majorsWithLabelId = goalCurriculumMap\n .filter(filterOnCourseStreamAndEnrollmentType)\n .reduce<TOptions[]>((acc, goalData) => {\n const {\n available_grades: availableGrades,\n goal_curriculum_standard: goalCurriculumStandard,\n program_name: programName,\n program_code: programCode,\n } = goalData;\n\n const isGradeAvailable = availableGrades.some(availableGrade => availableGrade === grade);\n const isBoardAvailable = goalCurriculumStandard === boardCode;\n\n if (isGradeAvailable && isBoardAvailable) {\n acc.push({\n id: programCode,\n label: programName,\n });\n }\n\n return acc;\n }, []);\n\n return majorsWithLabelId;\n};\n\nconst getRegionCodeBasedOnCountryCode = (countryCode: string) => {\n const regionCode = COUNTRY_MAP.find(countryInfo => countryInfo.country_code === countryCode)\n ?.region_code;\n\n return regionCode;\n};\n\nconst generateFormStateWithPrefilledSchoolData = (\n schoolData: IStudentSchool | undefined,\n board: string | undefined,\n grade: string | undefined,\n currentCountryCode: string | undefined,\n): IMilestoneFormData => {\n if (schoolData && grade) {\n const { country_code: countryCode, place_id: placeId } = schoolData;\n\n return {\n committed: {},\n reviewed: {},\n grade: grade,\n schoolInfo: {\n countryCode: countryCode,\n stateCode: '',\n id: placeId,\n },\n region: countryCode,\n board: board ?? undefined,\n };\n }\n\n const regionCode = currentCountryCode\n ? getRegionCodeBasedOnCountryCode(currentCountryCode)\n : undefined;\n\n if (grade) {\n return {\n committed: {},\n reviewed: {},\n grade: grade,\n region: regionCode,\n board: board ?? undefined,\n };\n }\n\n return {\n committed: {},\n reviewed: {},\n };\n};\n\nconst appendSchoolDataToFormState = (\n formData: IMilestoneFormData,\n schoolData: IStudentSchool | undefined,\n board: string | undefined,\n grade: string | undefined,\n): IMilestoneFormData => {\n if (schoolData && grade) {\n const { country_code: countryCode, place_id: placeId } = schoolData;\n\n return {\n ...formData,\n grade: grade,\n schoolInfo: {\n countryCode: countryCode,\n stateCode: '',\n id: placeId,\n },\n board: formData.board ?? board ?? undefined,\n };\n }\n\n return formData;\n};\n\nconst appendPrimaryGoalCategoryToFormState = (\n config: IMilestoneConfig,\n testType: TTestType,\n grade: string | undefined,\n courseStream: TCourseStream,\n enrollmentType: TEnrollmentTypes,\n board?: string | undefined,\n country?: string | undefined,\n) => {\n const { goal_curriculum_map: goalCurriculumMap } = config;\n const isSchoolSuccessCategory = testType === 'no-test';\n const selectedGoalCategory = getTestTypeBasedCategory(testType);\n\n //TODO: This needs to compensate the course selection for US curriculum grade 8 & above\n const primaryGoalCurriculum = goalCurriculumMap.find(goalInfo => {\n const isCurrentGoalAvailable = computeCanIncludeCurrentGoal({\n currentGoalData: goalInfo,\n grade,\n currentCountryCode: country,\n selectedCategory: selectedGoalCategory,\n enrollmentType,\n });\n const { goal_curriculum_standard: goalCurriculumStandard } = goalInfo;\n\n const currentBoardAvailable = getIfGoalCurriculumStandardIsAccessible({\n goalCurriculumStandard,\n referenceStandard: board,\n });\n\n const isSameCourse = goalInfo.course_stream === courseStream;\n\n if (isSchoolSuccessCategory) {\n return isSameCourse && isCurrentGoalAvailable && currentBoardAvailable;\n }\n\n return isSameCourse && isCurrentGoalAvailable;\n });\n\n return primaryGoalCurriculum;\n};\n\nconst getDefaultBoard = (data: ISectionOption<TCurriculumStandardOption>[]) => {\n let recommendedBoards: TCurriculumStandardOption[] = [];\n let otherBoards: TCurriculumStandardOption[] = [];\n\n // Iterate through the data categories\n for (const category of data) {\n if (category.title === 'recommended') {\n recommendedBoards = category.data;\n } else if (category.title === 'others') {\n otherBoards = category.data;\n }\n }\n\n // 1. Check if any recommended board has isDefault: true\n const defaultBoard = recommendedBoards.find(board => board.isDefault && board.isRecommended);\n\n if (defaultBoard) {\n return defaultBoard.id;\n }\n\n // 2. If no default, return the first recommended board\n if (recommendedBoards.length > 0) {\n return recommendedBoards[0]?.id;\n }\n\n // 3. If no recommended, return the first board from others\n if (otherBoards.length > 0) {\n return otherBoards[0]?.id;\n }\n\n // 4. Return null if no boards are found\n return undefined;\n};\n\nexport {\n appendSchoolDataToFormState,\n appendPrimaryGoalCategoryToFormState,\n clearNextFields,\n generateFormStateWithPrefilledSchoolData,\n getCurrenStep,\n getGradesFromConfig,\n getCurriculumStandardsFromConfig,\n getGoalsFromConfig,\n getGradesBasedOnGoalAvailability,\n getMajorsFromConfigBasedOnBoardAndGrade,\n getSchoolTestsFromConfig,\n getRegionCodeBasedOnCountryCode,\n getDefaultBoard,\n getPreferencesFromConfig,\n};\n"],"names":["clearFields","obj","fieldsList","field","clearNextFields","formStep","milestoneFormData","currentStepName","startClearing","fieldsToClear","isLeafNode","next","reset","updatedFormData","shouldStartClearing","nextStep","step","conditionFulfilled","value","_a","getCurrenStep","flow","required","requiredFieldsFilled","GOAL_EDIT_FLOWS","requiredFieldsReviewed","requiredFieldsCommitted","getSchoolTestsFromConfig","config","acc","event","id","eventName","eventType","computeCanIncludeCurrentGoal","props","currentGoalData","enrollmentType","currentCountryCode","grade","selectedCategory","blockedCountries","availableCountries","availableGrades","goalCategory","availableEnrollmentTypes","blockedEnrollmentTypes","isStudentEnrollmentTypeSupported","getStudentEnrollmentSupported","isStudentRegionBlocked","blockedCountry","isStudentRegionAvailable","availableCountry","isCurrentGradeAvailable","gradeInfo","getCurriculumStandardsFromConfig","countryCode","courseStream","classRatio","goals","curriculumStandards","filteredGoalCurriculumMap","item","hasGoalForCurriculumStandards","standard","goal","checkEnrollmentAvailable","code","name","defaultInCountries","recommendedInCountries","a","b","getGoalsFromConfig","options","curriculumStandard","isEligibleGoal","label","getGradesFromConfig","getPreferencesFromConfig","preferenceConfig","isEligiblePreferences","preference","preferenceCategory","description","getGradesBasedOnGoalAvailability","selectedGoalCategory","grades","gradeAvailableGoals","goalData","getMajorsFromConfigBasedOnBoardAndGrade","boardCode","goalCurriculumMap","filterOnCourseStreamAndEnrollmentType","goalCurriculumStandard","programName","programCode","availableGrade","getRegionCodeBasedOnCountryCode","COUNTRY_MAP","countryInfo","generateFormStateWithPrefilledSchoolData","schoolData","board","placeId","regionCode","appendSchoolDataToFormState","formData","appendPrimaryGoalCategoryToFormState","testType","country","isSchoolSuccessCategory","getTestTypeBasedCategory","goalInfo","isCurrentGoalAvailable","currentBoardAvailable","getIfGoalCurriculumStandardIsAccessible","isSameCourse","getDefaultBoard","data","recommendedBoards","otherBoards","category","defaultBoard","_b"],"mappings":"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"}