@cuemath/leap 2.8.21 → 2.8.22

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 +12 -0
  2. package/dist/assets/images/images.js.map +1 -1
  3. package/dist/constants/urls.js +5 -0
  4. package/dist/constants/urls.js.map +1 -0
  5. package/dist/features/chapters/chapter/chapter.js +45 -43
  6. package/dist/features/chapters/chapter/chapter.js.map +1 -1
  7. package/dist/features/chapters/chapter/comps/core-lessons/core-lessons.js +23 -21
  8. package/dist/features/chapters/chapter/comps/core-lessons/core-lessons.js.map +1 -1
  9. package/dist/features/milestone/constants.js +53 -18
  10. package/dist/features/milestone/constants.js.map +1 -1
  11. package/dist/features/milestone/create/comps/chapters-selection-step/chapters-selection-step-styled.js +16 -4
  12. package/dist/features/milestone/create/comps/chapters-selection-step/chapters-selection-step-styled.js.map +1 -1
  13. package/dist/features/milestone/create/milestone-create-constants.js.map +1 -1
  14. package/dist/features/milestone/create/milestone-create-container.js +56 -47
  15. package/dist/features/milestone/create/milestone-create-container.js.map +1 -1
  16. package/dist/features/milestone/create/milestone-create-helpers.js +132 -113
  17. package/dist/features/milestone/create/milestone-create-helpers.js.map +1 -1
  18. package/dist/features/milestone/create/milestone-create-hooks.js +92 -90
  19. package/dist/features/milestone/create/milestone-create-hooks.js.map +1 -1
  20. package/dist/features/milestone/create/milestone-create-styled.js +34 -20
  21. package/dist/features/milestone/create/milestone-create-styled.js.map +1 -1
  22. package/dist/features/milestone/create/milestone-create.js +72 -53
  23. package/dist/features/milestone/create/milestone-create.js.map +1 -1
  24. package/dist/features/milestone/create/submit-modal/use-submit-milestone.js +53 -46
  25. package/dist/features/milestone/create/submit-modal/use-submit-milestone.js.map +1 -1
  26. package/dist/features/milestone/create/utils/index.js.map +1 -1
  27. package/dist/features/milestone/drafts/create/draft-create-container.js +54 -0
  28. package/dist/features/milestone/drafts/create/draft-create-container.js.map +1 -0
  29. package/dist/features/milestone/drafts/edit/draft-edit-container.js +77 -0
  30. package/dist/features/milestone/drafts/edit/draft-edit-container.js.map +1 -0
  31. package/dist/features/milestone/drafts/edit/draft-edit-helpers.js +69 -0
  32. package/dist/features/milestone/drafts/edit/draft-edit-helpers.js.map +1 -0
  33. package/dist/features/milestone/{edit/goal-drafts → drafts/goal-edit}/goal-draft-edit-container.js +24 -22
  34. package/dist/features/milestone/drafts/goal-edit/goal-draft-edit-container.js.map +1 -0
  35. package/dist/features/milestone/drafts/review/draft-review-container.js +76 -0
  36. package/dist/features/milestone/drafts/review/draft-review-container.js.map +1 -0
  37. package/dist/features/milestone/edit/comps/delete-milestone/add-remove-nudge.js +48 -0
  38. package/dist/features/milestone/edit/comps/delete-milestone/add-remove-nudge.js.map +1 -0
  39. package/dist/features/milestone/edit/comps/delete-milestone/styled.js +11 -8
  40. package/dist/features/milestone/edit/comps/delete-milestone/styled.js.map +1 -1
  41. package/dist/features/milestone/edit/comps/edit-milestone-modal/edit-milestone-modal-styled.js +23 -0
  42. package/dist/features/milestone/edit/comps/edit-milestone-modal/edit-milestone-modal-styled.js.map +1 -0
  43. package/dist/features/milestone/edit/comps/edit-milestone-modal/edit-milestone.js +79 -82
  44. package/dist/features/milestone/edit/comps/edit-milestone-modal/edit-milestone.js.map +1 -1
  45. package/dist/features/milestone/edit/comps/edit-milestone-modal/index.js +136 -112
  46. package/dist/features/milestone/edit/comps/edit-milestone-modal/index.js.map +1 -1
  47. package/dist/features/milestone/edit/comps/edit-milestone-modal/share-screen.js +68 -0
  48. package/dist/features/milestone/edit/comps/edit-milestone-modal/share-screen.js.map +1 -0
  49. package/dist/features/milestone/edit/goal-edit-helpers.js +6 -5
  50. package/dist/features/milestone/edit/goal-edit-helpers.js.map +1 -1
  51. package/dist/features/milestone/edit/milestone-edit-helpers.js +17 -16
  52. package/dist/features/milestone/edit/milestone-edit-helpers.js.map +1 -1
  53. package/dist/features/milestone/help-modals/index.js +22 -0
  54. package/dist/features/milestone/help-modals/index.js.map +1 -0
  55. package/dist/features/milestone/help-modals/milestone-lesson.js +17 -0
  56. package/dist/features/milestone/help-modals/milestone-lesson.js.map +1 -0
  57. package/dist/features/milestone/help-modals/milestone-list.js +17 -0
  58. package/dist/features/milestone/help-modals/milestone-list.js.map +1 -0
  59. package/dist/features/milestone/help-modals/utils.js +20 -0
  60. package/dist/features/milestone/help-modals/utils.js.map +1 -0
  61. package/dist/features/milestone/intro-modal/index.js +24 -0
  62. package/dist/features/milestone/intro-modal/index.js.map +1 -0
  63. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-list.js +48 -46
  64. package/dist/features/milestone/milestone-list-container/milestone-list/milestone-list.js.map +1 -1
  65. package/dist/features/milestone/milestone-list-container/milestone-list-container.js +60 -58
  66. package/dist/features/milestone/milestone-list-container/milestone-list-container.js.map +1 -1
  67. package/dist/features/milestone/outcome/comps/past-milestone/past-milestone-container.js +41 -39
  68. package/dist/features/milestone/outcome/comps/past-milestone/past-milestone-container.js.map +1 -1
  69. package/dist/features/notifications/api/notification.js +13 -0
  70. package/dist/features/notifications/api/notification.js.map +1 -0
  71. package/dist/features/notifications/use-student-journey.js +20 -0
  72. package/dist/features/notifications/use-student-journey.js.map +1 -0
  73. package/dist/features/sheets/constants/lessons.js +28 -0
  74. package/dist/features/sheets/constants/lessons.js.map +1 -0
  75. package/dist/features/ui/modals/info-modal/index.js +117 -0
  76. package/dist/features/ui/modals/info-modal/index.js.map +1 -0
  77. package/dist/index.d.ts +125 -7
  78. package/dist/index.js +258 -244
  79. package/dist/index.js.map +1 -1
  80. package/dist/static/goal_creation_helper.d45e4d58.png +0 -0
  81. package/dist/static/help_banner1.ddb0ef0f.png +0 -0
  82. package/dist/static/help_banner2.40979ed0.png +0 -0
  83. package/dist/static/help_banner3.532099c7.png +0 -0
  84. package/dist/static/help_banner4.90a6fd4d.png +0 -0
  85. package/dist/static/help_banner5.2a9efb39.png +0 -0
  86. package/dist/static/help_banner6.94fe9589.png +0 -0
  87. package/dist/static/milestone_intro_slide1.1537493e.png +0 -0
  88. package/dist/static/milestone_intro_slide2.b791c159.png +0 -0
  89. package/dist/static/milestone_intro_slide3.f7d63a11.png +0 -0
  90. package/dist/static/milestone_intro_slide4.f8da4e46.png +0 -0
  91. package/dist/static/milestone_intro_slide5.ea5d12d2.png +0 -0
  92. package/package.json +1 -1
  93. package/dist/features/milestone/edit/goal-drafts/goal-draft-edit-container.js.map +0 -1
  94. package/dist/features/milestone/edit/goal-drafts/goal-draft-edit-helpers.js +0 -17
  95. package/dist/features/milestone/edit/goal-drafts/goal-draft-edit-helpers.js.map +0 -1
@@ -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';\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
+ {"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,51 +1,51 @@
1
1
  import { COUNTRY_MAP as p } from "../../../constants/country.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";
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";
4
4
  import { GOAL_EDIT_FLOWS as G } from "./milestone-create-constants.js";
5
- const A = (n, t) => {
6
- t.forEach((e) => {
5
+ const A = (n, r) => {
6
+ r.forEach((e) => {
7
7
  n[e] = void 0;
8
8
  });
9
- }, F = (n, t, e, l, a = []) => {
10
- const { isLeafNode: s, next: i, reset: c } = n, u = { ...t };
9
+ }, E = (n, r, e, l, a = []) => {
10
+ const { isLeafNode: s, next: o, reset: c } = n, i = { ...r };
11
11
  if (s)
12
- return A(u, [...c, ...a]), u;
13
- if (i) {
12
+ return A(i, [...c, ...a]), i;
13
+ if (o) {
14
14
  let d = l, f;
15
- if (i.every((r) => {
15
+ if (o.every((t) => {
16
16
  var m;
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((_) => {
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((_) => {
19
19
  a.push(_);
20
- }) : e === (r == null ? void 0 : r.name) && (d = !0), f = r, !1) : !0;
20
+ }) : e === (t == null ? void 0 : t.name) && (d = !0), f = t, !1) : !0;
21
21
  }), f)
22
- return F(
22
+ return E(
23
23
  f,
24
- u,
24
+ i,
25
25
  e,
26
26
  d,
27
27
  a
28
28
  );
29
29
  }
30
- }, E = (n, t, e) => {
30
+ }, F = (n, r, e) => {
31
31
  const { isLeafNode: l, required: a, next: s } = n;
32
32
  if (l)
33
33
  return n;
34
- const i = a.every((c) => t[c] !== void 0);
34
+ const o = a.every((c) => r[c] !== void 0);
35
35
  if (G.includes(e)) {
36
36
  const c = a.every(
37
- (u) => t.reviewed[u] === !0
37
+ (i) => r.reviewed[i] === !0
38
38
  );
39
- if (!i || !c)
39
+ if (!o || !c)
40
40
  return {
41
41
  ...n,
42
42
  next: void 0
43
43
  };
44
44
  } else {
45
45
  const c = a.every(
46
- (u) => t.committed[u] === !0
46
+ (i) => r.committed[i] === !0
47
47
  );
48
- if (!i || !c)
48
+ if (!o || !c)
49
49
  return {
50
50
  ...n,
51
51
  next: void 0
@@ -53,104 +53,121 @@ const A = (n, t) => {
53
53
  }
54
54
  if (s) {
55
55
  let c;
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);
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);
60
60
  }
61
- }, L = (n) => n.academic_events.reduce((t, e) => {
61
+ }, x = (n) => n.academic_events.reduce((r, e) => {
62
62
  const { id: l, event_name: a, event_type: s } = e;
63
- return s === "SCHOOL_TEST" && t.push({
63
+ return s === "SCHOOL_TEST" && r.push({
64
64
  id: l,
65
65
  label: a
66
- }), t;
66
+ }), r;
67
67
  }, []), T = (n) => {
68
- const { currentGoalData: t, enrollmentType: e, currentCountryCode: l, grade: a, selectedCategory: s } = n, {
69
- blocked_countries: i,
68
+ const { currentGoalData: r, enrollmentType: e, currentCountryCode: l, grade: a, selectedCategory: s } = n, {
69
+ blocked_countries: o,
70
70
  available_countries: c,
71
- available_grades: u,
71
+ available_grades: i,
72
72
  goal_category: d,
73
73
  available_enrollment_types: f,
74
- blocked_enrollment_types: r
75
- } = t, o = y(
76
- r,
74
+ blocked_enrollment_types: t
75
+ } = r, u = y(
76
+ t,
77
77
  f,
78
78
  e
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(
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(
86
86
  ({
87
- code: r,
88
- name: o,
87
+ code: t,
88
+ name: u,
89
89
  default_in_countries: m,
90
90
  recommended_in_countries: _
91
91
  }) => ({
92
- id: r,
93
- label: o,
92
+ id: t,
93
+ label: u,
94
94
  isDefault: m.includes(e),
95
95
  isRecommended: _.includes(e)
96
96
  })
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({
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({
105
105
  id: e,
106
106
  label: e === "-1" ? "Pre-K" : "KG"
107
- }) : t.push({
107
+ }) : r.push({
108
108
  id: e,
109
109
  label: `Grade ${e}`
110
- }), t), []), R = (n, t) => {
110
+ }), r), []), P = (n, r) => {
111
111
  const { preference_config: e } = n, l = (a) => {
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);
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);
114
114
  };
115
115
  return e == null ? void 0 : e.filter(l).map(
116
- ({ preference_code: a, preference_name: s, preference_description: i }) => ({
116
+ ({ preference_code: a, preference_name: s, preference_description: o }) => ({
117
117
  id: a,
118
118
  label: s,
119
- description: i
119
+ description: o
120
120
  })
121
121
  );
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) => {
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) => {
124
124
  const {
125
125
  available_grades: d,
126
126
  goal_category: f,
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);
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);
131
131
  });
132
- return s.filter(i);
133
- }, q = (n, t, e, l, a) => {
132
+ return s.filter(o);
133
+ }, W = (n, r, e, l, a) => {
134
134
  if (e === "KG" || Number(e) < 7) return [];
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) => {
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) => {
137
137
  const {
138
138
  available_grades: f,
139
- goal_curriculum_standard: r,
140
- program_name: o,
139
+ goal_curriculum_standard: t,
140
+ program_name: u,
141
141
  program_code: m
142
142
  } = d;
143
- return f.some((C) => C === e) && r === t && u.push({
143
+ return f.some((C) => C === e) && t === r && i.push({
144
144
  id: m,
145
- label: o
146
- }), u;
145
+ label: u
146
+ }), i;
147
147
  }, []);
148
- }, O = (n) => {
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) => {
149
166
  var e;
150
167
  return (e = p.find((l) => l.country_code === n)) == null ? void 0 : e.region_code;
151
- }, M = (n, t, e, l) => {
168
+ }, j = (n, r, e, l) => {
152
169
  if (n && e) {
153
- const { country_code: s, place_id: i } = n;
170
+ const { country_code: s, place_id: o } = n;
154
171
  return {
155
172
  committed: {},
156
173
  reviewed: {},
@@ -158,26 +175,26 @@ const A = (n, t) => {
158
175
  schoolInfo: {
159
176
  countryCode: s,
160
177
  stateCode: "",
161
- id: i
178
+ id: o
162
179
  },
163
180
  region: s,
164
- board: t ?? void 0
181
+ board: r ?? void 0
165
182
  };
166
183
  }
167
- const a = l ? O(l) : void 0;
184
+ const a = l ? B(l) : void 0;
168
185
  return e ? {
169
186
  committed: {},
170
187
  reviewed: {},
171
188
  grade: e,
172
189
  region: a,
173
- board: t ?? void 0
190
+ board: r ?? void 0
174
191
  } : {
175
192
  committed: {},
176
193
  reviewed: {}
177
194
  };
178
- }, W = (n, t, e, l) => {
179
- if (t && l) {
180
- const { country_code: a, place_id: s } = t;
195
+ }, q = (n, r, e, l) => {
196
+ if (r && l) {
197
+ const { country_code: a, place_id: s } = r;
181
198
  return {
182
199
  ...n,
183
200
  grade: l,
@@ -190,48 +207,50 @@ const A = (n, t) => {
190
207
  };
191
208
  }
192
209
  return n;
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,
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,
198
215
  grade: e,
199
- currentCountryCode: i,
216
+ currentCountryCode: o,
200
217
  selectedCategory: d,
201
218
  enrollmentType: a
202
- }), { goal_curriculum_standard: m } = r, _ = h({
219
+ }), { goal_curriculum_standard: m } = t, _ = S({
203
220
  goalCurriculumStandard: m,
204
221
  referenceStandard: s
205
- }), g = r.course_stream === l;
206
- return u ? g && o && _ : g && o;
222
+ }), v = t.course_stream === l;
223
+ return i ? v && u && _ : v && u;
207
224
  });
208
- }, K = (n) => {
225
+ }, D = (n) => {
209
226
  var a, s;
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);
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);
214
231
  if (l)
215
232
  return l.id;
216
- if (t.length > 0)
217
- return (a = t[0]) == null ? void 0 : a.id;
233
+ if (r.length > 0)
234
+ return (a = r[0]) == null ? void 0 : a.id;
218
235
  if (e.length > 0)
219
236
  return (s = e[0]) == null ? void 0 : s.id;
220
237
  };
221
238
  export {
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
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
236
255
  };
237
256
  //# 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 {\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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"}
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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"}