@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.
- package/dist/assets/images/images.js +0 -12
- package/dist/assets/images/images.js.map +1 -1
- package/dist/features/chapters/chapter/chapter.js +43 -45
- package/dist/features/chapters/chapter/chapter.js.map +1 -1
- package/dist/features/chapters/chapter/comps/core-lessons/core-lessons.js +21 -23
- package/dist/features/chapters/chapter/comps/core-lessons/core-lessons.js.map +1 -1
- package/dist/features/milestone/constants.js +18 -53
- package/dist/features/milestone/constants.js.map +1 -1
- package/dist/features/milestone/create/comps/chapters-selection-step/chapters-selection-step-styled.js +4 -16
- package/dist/features/milestone/create/comps/chapters-selection-step/chapters-selection-step-styled.js.map +1 -1
- package/dist/features/milestone/create/milestone-create-constants.js.map +1 -1
- package/dist/features/milestone/create/milestone-create-container.js +47 -56
- package/dist/features/milestone/create/milestone-create-container.js.map +1 -1
- package/dist/features/milestone/create/milestone-create-helpers.js +113 -132
- package/dist/features/milestone/create/milestone-create-helpers.js.map +1 -1
- package/dist/features/milestone/create/milestone-create-hooks.js +90 -92
- package/dist/features/milestone/create/milestone-create-hooks.js.map +1 -1
- package/dist/features/milestone/create/milestone-create-styled.js +20 -34
- package/dist/features/milestone/create/milestone-create-styled.js.map +1 -1
- package/dist/features/milestone/create/milestone-create.js +53 -72
- package/dist/features/milestone/create/milestone-create.js.map +1 -1
- package/dist/features/milestone/create/submit-modal/use-submit-milestone.js +46 -53
- package/dist/features/milestone/create/submit-modal/use-submit-milestone.js.map +1 -1
- package/dist/features/milestone/create/utils/index.js.map +1 -1
- package/dist/features/milestone/edit/comps/delete-milestone/styled.js +8 -11
- package/dist/features/milestone/edit/comps/delete-milestone/styled.js.map +1 -1
- package/dist/features/milestone/edit/comps/edit-milestone-modal/edit-milestone.js +82 -79
- package/dist/features/milestone/edit/comps/edit-milestone-modal/edit-milestone.js.map +1 -1
- package/dist/features/milestone/edit/comps/edit-milestone-modal/index.js +112 -136
- package/dist/features/milestone/edit/comps/edit-milestone-modal/index.js.map +1 -1
- package/dist/features/milestone/{drafts/goal-edit → edit/goal-drafts}/goal-draft-edit-container.js +22 -24
- package/dist/features/milestone/edit/goal-drafts/goal-draft-edit-container.js.map +1 -0
- package/dist/features/milestone/edit/goal-drafts/goal-draft-edit-helpers.js +17 -0
- package/dist/features/milestone/edit/goal-drafts/goal-draft-edit-helpers.js.map +1 -0
- package/dist/features/milestone/edit/goal-edit-helpers.js +5 -6
- package/dist/features/milestone/edit/goal-edit-helpers.js.map +1 -1
- package/dist/features/milestone/edit/milestone-edit-helpers.js +16 -17
- package/dist/features/milestone/edit/milestone-edit-helpers.js.map +1 -1
- package/dist/features/milestone/milestone-list-container/milestone-list/milestone-list.js +46 -48
- package/dist/features/milestone/milestone-list-container/milestone-list/milestone-list.js.map +1 -1
- package/dist/features/milestone/milestone-list-container/milestone-list-container.js +58 -60
- package/dist/features/milestone/milestone-list-container/milestone-list-container.js.map +1 -1
- package/dist/features/milestone/outcome/comps/past-milestone/past-milestone-container.js +39 -41
- package/dist/features/milestone/outcome/comps/past-milestone/past-milestone-container.js.map +1 -1
- package/dist/index.d.ts +7 -125
- package/dist/index.js +244 -258
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/constants/urls.js +0 -5
- package/dist/constants/urls.js.map +0 -1
- package/dist/features/milestone/drafts/create/draft-create-container.js +0 -54
- package/dist/features/milestone/drafts/create/draft-create-container.js.map +0 -1
- package/dist/features/milestone/drafts/edit/draft-edit-container.js +0 -77
- package/dist/features/milestone/drafts/edit/draft-edit-container.js.map +0 -1
- package/dist/features/milestone/drafts/edit/draft-edit-helpers.js +0 -69
- package/dist/features/milestone/drafts/edit/draft-edit-helpers.js.map +0 -1
- package/dist/features/milestone/drafts/goal-edit/goal-draft-edit-container.js.map +0 -1
- package/dist/features/milestone/drafts/review/draft-review-container.js +0 -76
- package/dist/features/milestone/drafts/review/draft-review-container.js.map +0 -1
- package/dist/features/milestone/edit/comps/delete-milestone/add-remove-nudge.js +0 -48
- package/dist/features/milestone/edit/comps/delete-milestone/add-remove-nudge.js.map +0 -1
- package/dist/features/milestone/edit/comps/edit-milestone-modal/edit-milestone-modal-styled.js +0 -23
- package/dist/features/milestone/edit/comps/edit-milestone-modal/edit-milestone-modal-styled.js.map +0 -1
- package/dist/features/milestone/edit/comps/edit-milestone-modal/share-screen.js +0 -68
- package/dist/features/milestone/edit/comps/edit-milestone-modal/share-screen.js.map +0 -1
- package/dist/features/milestone/help-modals/index.js +0 -22
- package/dist/features/milestone/help-modals/index.js.map +0 -1
- package/dist/features/milestone/help-modals/milestone-lesson.js +0 -17
- package/dist/features/milestone/help-modals/milestone-lesson.js.map +0 -1
- package/dist/features/milestone/help-modals/milestone-list.js +0 -17
- package/dist/features/milestone/help-modals/milestone-list.js.map +0 -1
- package/dist/features/milestone/help-modals/utils.js +0 -20
- package/dist/features/milestone/help-modals/utils.js.map +0 -1
- package/dist/features/milestone/intro-modal/index.js +0 -24
- package/dist/features/milestone/intro-modal/index.js.map +0 -1
- package/dist/features/notifications/api/notification.js +0 -13
- package/dist/features/notifications/api/notification.js.map +0 -1
- package/dist/features/notifications/use-student-journey.js +0 -20
- package/dist/features/notifications/use-student-journey.js.map +0 -1
- package/dist/features/sheets/constants/lessons.js +0 -28
- package/dist/features/sheets/constants/lessons.js.map +0 -1
- package/dist/features/ui/modals/info-modal/index.js +0 -117
- package/dist/features/ui/modals/info-modal/index.js.map +0 -1
- package/dist/static/goal_creation_helper.d45e4d58.png +0 -0
- package/dist/static/help_banner1.ddb0ef0f.png +0 -0
- package/dist/static/help_banner2.40979ed0.png +0 -0
- package/dist/static/help_banner3.532099c7.png +0 -0
- package/dist/static/help_banner4.90a6fd4d.png +0 -0
- package/dist/static/help_banner5.2a9efb39.png +0 -0
- package/dist/static/help_banner6.94fe9589.png +0 -0
- package/dist/static/milestone_intro_slide1.1537493e.png +0 -0
- package/dist/static/milestone_intro_slide2.b791c159.png +0 -0
- package/dist/static/milestone_intro_slide3.f7d63a11.png +0 -0
- package/dist/static/milestone_intro_slide4.f8da4e46.png +0 -0
- 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';\
|
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
|
3
|
-
import { checkEnrollmentAvailable as b, getTestTypeBasedCategory as
|
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,
|
6
|
-
|
5
|
+
const A = (n, t) => {
|
6
|
+
t.forEach((e) => {
|
7
7
|
n[e] = void 0;
|
8
8
|
});
|
9
|
-
},
|
10
|
-
const { isLeafNode: s, next:
|
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(
|
13
|
-
if (
|
12
|
+
return A(u, [...c, ...a]), u;
|
13
|
+
if (i) {
|
14
14
|
let d = l, f;
|
15
|
-
if (
|
15
|
+
if (i.every((r) => {
|
16
16
|
var m;
|
17
|
-
let
|
18
|
-
return
|
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 === (
|
20
|
+
}) : e === (r == null ? void 0 : r.name) && (d = !0), f = r, !1) : !0;
|
21
21
|
}), f)
|
22
|
-
return
|
22
|
+
return F(
|
23
23
|
f,
|
24
|
-
|
24
|
+
u,
|
25
25
|
e,
|
26
26
|
d,
|
27
27
|
a
|
28
28
|
);
|
29
29
|
}
|
30
|
-
},
|
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
|
34
|
+
const i = a.every((c) => t[c] !== void 0);
|
35
35
|
if (G.includes(e)) {
|
36
36
|
const c = a.every(
|
37
|
-
(
|
37
|
+
(u) => t.reviewed[u] === !0
|
38
38
|
);
|
39
|
-
if (!
|
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
|
-
(
|
46
|
+
(u) => t.committed[u] === !0
|
47
47
|
);
|
48
|
-
if (!
|
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((
|
57
|
-
([f,
|
58
|
-
) ? (c =
|
59
|
-
return
|
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
|
-
},
|
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" &&
|
63
|
+
return s === "SCHOOL_TEST" && t.push({
|
64
64
|
id: l,
|
65
65
|
label: a
|
66
|
-
}),
|
66
|
+
}), t;
|
67
67
|
}, []), T = (n) => {
|
68
|
-
const { currentGoalData:
|
69
|
-
blocked_countries:
|
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:
|
71
|
+
available_grades: u,
|
72
72
|
goal_category: d,
|
73
73
|
available_enrollment_types: f,
|
74
|
-
blocked_enrollment_types:
|
75
|
-
} =
|
76
|
-
|
74
|
+
blocked_enrollment_types: r
|
75
|
+
} = t, o = y(
|
76
|
+
r,
|
77
77
|
f,
|
78
78
|
e
|
79
|
-
), m =
|
80
|
-
(
|
81
|
-
), _ = c.length > 0 ? c.some((
|
82
|
-
return
|
83
|
-
},
|
84
|
-
const { goal_curriculum_map: c, curriculum_standards:
|
85
|
-
return
|
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:
|
88
|
-
name:
|
87
|
+
code: r,
|
88
|
+
name: o,
|
89
89
|
default_in_countries: m,
|
90
90
|
recommended_in_countries: _
|
91
91
|
}) => ({
|
92
|
-
id:
|
93
|
-
label:
|
92
|
+
id: r,
|
93
|
+
label: o,
|
94
94
|
isDefault: m.includes(e),
|
95
95
|
isRecommended: _.includes(e)
|
96
96
|
})
|
97
|
-
).sort((
|
98
|
-
},
|
99
|
-
const { goal_curriculum_map: e } = n, { grade: l, countryCode: a, goalCategory: s, curriculumStandard:
|
100
|
-
return d == null ? void 0 : d.filter(f).map(({ goal_code:
|
101
|
-
id:
|
102
|
-
label:
|
103
|
-
})).sort((
|
104
|
-
},
|
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
|
-
}) :
|
107
|
+
}) : t.push({
|
108
108
|
id: e,
|
109
109
|
label: `Grade ${e}`
|
110
|
-
}),
|
110
|
+
}), t), []), R = (n, t) => {
|
111
111
|
const { preference_config: e } = n, l = (a) => {
|
112
|
-
const { grade: s, courseStream:
|
113
|
-
return !(a.course_stream !==
|
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:
|
116
|
+
({ preference_code: a, preference_name: s, preference_description: i }) => ({
|
117
117
|
id: a,
|
118
118
|
label: s,
|
119
|
-
description:
|
119
|
+
description: i
|
120
120
|
})
|
121
121
|
);
|
122
|
-
},
|
123
|
-
const { goal_curriculum_map: a } = n, s =
|
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:
|
128
|
-
blocked_enrollment_types:
|
129
|
-
} =
|
130
|
-
return
|
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(
|
133
|
-
},
|
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,
|
136
|
-
return s.filter(
|
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:
|
140
|
-
program_name:
|
139
|
+
goal_curriculum_standard: r,
|
140
|
+
program_name: o,
|
141
141
|
program_code: m
|
142
142
|
} = d;
|
143
|
-
return f.some((C) => C === e) &&
|
143
|
+
return f.some((C) => C === e) && r === t && u.push({
|
144
144
|
id: m,
|
145
|
-
label:
|
146
|
-
}),
|
145
|
+
label: o
|
146
|
+
}), u;
|
147
147
|
}, []);
|
148
|
-
},
|
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
|
-
},
|
151
|
+
}, M = (n, t, e, l) => {
|
169
152
|
if (n && e) {
|
170
|
-
const { country_code: s, place_id:
|
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:
|
161
|
+
id: i
|
179
162
|
},
|
180
163
|
region: s,
|
181
|
-
board:
|
164
|
+
board: t ?? void 0
|
182
165
|
};
|
183
166
|
}
|
184
|
-
const a = l ?
|
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:
|
173
|
+
board: t ?? void 0
|
191
174
|
} : {
|
192
175
|
committed: {},
|
193
176
|
reviewed: {}
|
194
177
|
};
|
195
|
-
},
|
196
|
-
if (
|
197
|
-
const { country_code: a, place_id: s } =
|
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
|
-
},
|
211
|
-
const { goal_curriculum_map: c } = n,
|
212
|
-
return c.find((
|
213
|
-
const
|
214
|
-
currentGoalData:
|
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:
|
199
|
+
currentCountryCode: i,
|
217
200
|
selectedCategory: d,
|
218
201
|
enrollmentType: a
|
219
|
-
}), { goal_curriculum_standard: m } =
|
202
|
+
}), { goal_curriculum_standard: m } = r, _ = h({
|
220
203
|
goalCurriculumStandard: m,
|
221
204
|
referenceStandard: s
|
222
|
-
}),
|
223
|
-
return
|
205
|
+
}), g = r.course_stream === l;
|
206
|
+
return u ? g && o && _ : g && o;
|
224
207
|
});
|
225
|
-
},
|
208
|
+
}, K = (n) => {
|
226
209
|
var a, s;
|
227
|
-
let
|
228
|
-
for (const
|
229
|
-
|
230
|
-
const l =
|
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 (
|
234
|
-
return (a =
|
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
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
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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"}
|