@cuemath/leap 3.1.3 → 3.1.5-beta-0.1

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.
@@ -1,7 +1,9 @@
1
1
  import { PLUGINS as t } from "../../node_modules/@cuemath/analytics-v2/dist/constants.js";
2
2
  var _ = /* @__PURE__ */ ((e) => (e.PAGE_VIEWED = "page_viewed", e.CUSTOM_TEST_SUBMITTED = "custom_test_submitted", e.HOMEWORK_COMPLETED = "homework_completed", e.ERROR_VIA_AUTO_LOGIN_FROM_CUEMATH_APP = "error_via_auto_login_from_cuemath_app", e.ACTIVITY_STARTED = "activity_started", e.ACTIVITY_TUTORIAL_SEEN = "activity_tutorial_seen", e.STREAK_ICON_CLICKED = "streak_icon_clicked", e.LEADERBOARD_BUTTON_CLICKED = "leaderboard_button_clicked", e.ONBOARDING_STEP_VIEWED = "onboarding_step_viewed", e.ONBOARDING_STEP_COMPLETED = "onboarding_step_completed", e.COACHMARK_DISMISSED = "coachmark_dismissed", e))(_ || {});
3
- const o = {
3
+ const i = {
4
4
  page_viewed: [t.MIXPANEL],
5
+ custom_test_submitted: [t.MIXPANEL],
6
+ homework_completed: [t.MIXPANEL],
5
7
  // circle on leap mixpanel events
6
8
  activity_started: [t.MIXPANEL],
7
9
  activity_tutorial_seen: [t.MIXPANEL],
@@ -13,6 +15,6 @@ const o = {
13
15
  };
14
16
  export {
15
17
  _ as PLATFORM_EVENTS_STUDENT,
16
- o as PLATFORM_WHITELIST_EVENTS_STUDENT
18
+ i as PLATFORM_WHITELIST_EVENTS_STUDENT
17
19
  };
18
20
  //# sourceMappingURL=platform-events-student.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform-events-student.js","sources":["../../../src/features/analytics-events/platform-events-student.ts"],"sourcesContent":["import { PLUGINS } from '@cuemath/analytics-v2/dist/constants';\n\n/**\n ** Global/Platform specific events that needs to be tracked goes here\n ** Naming convention needs to be snake_case\n */\nexport enum PLATFORM_EVENTS_STUDENT {\n PAGE_VIEWED = 'page_viewed',\n CUSTOM_TEST_SUBMITTED = 'custom_test_submitted',\n HOMEWORK_COMPLETED = 'homework_completed',\n ERROR_VIA_AUTO_LOGIN_FROM_CUEMATH_APP = 'error_via_auto_login_from_cuemath_app',\n\n // circle on leap mixpanel events\n ACTIVITY_STARTED = 'activity_started',\n ACTIVITY_TUTORIAL_SEEN = 'activity_tutorial_seen',\n STREAK_ICON_CLICKED = 'streak_icon_clicked',\n LEADERBOARD_BUTTON_CLICKED = 'leaderboard_button_clicked',\n ONBOARDING_STEP_VIEWED = 'onboarding_step_viewed',\n ONBOARDING_STEP_COMPLETED = 'onboarding_step_completed',\n COACHMARK_DISMISSED = 'coachmark_dismissed',\n}\n\n/**\n ** Events that need to be tracked at particular plugins\n ** Value will be array of strings.\n */\nexport const PLATFORM_WHITELIST_EVENTS_STUDENT = {\n [PLATFORM_EVENTS_STUDENT.PAGE_VIEWED]: [PLUGINS.MIXPANEL],\n\n // circle on leap mixpanel events\n [PLATFORM_EVENTS_STUDENT.ACTIVITY_STARTED]: [PLUGINS.MIXPANEL],\n [PLATFORM_EVENTS_STUDENT.ACTIVITY_TUTORIAL_SEEN]: [PLUGINS.MIXPANEL],\n [PLATFORM_EVENTS_STUDENT.STREAK_ICON_CLICKED]: [PLUGINS.MIXPANEL],\n [PLATFORM_EVENTS_STUDENT.LEADERBOARD_BUTTON_CLICKED]: [PLUGINS.MIXPANEL],\n [PLATFORM_EVENTS_STUDENT.ONBOARDING_STEP_VIEWED]: [PLUGINS.MIXPANEL],\n [PLATFORM_EVENTS_STUDENT.ONBOARDING_STEP_COMPLETED]: [PLUGINS.MIXPANEL],\n [PLATFORM_EVENTS_STUDENT.COACHMARK_DISMISSED]: [PLUGINS.MIXPANEL],\n};\n"],"names":["PLATFORM_EVENTS_STUDENT","PLATFORM_WHITELIST_EVENTS_STUDENT","PLUGINS"],"mappings":";AAMY,IAAAA,sBAAAA,OACVA,EAAA,cAAc,eACdA,EAAA,wBAAwB,yBACxBA,EAAA,qBAAqB,sBACrBA,EAAA,wCAAwC,yCAGxCA,EAAA,mBAAmB,oBACnBA,EAAA,yBAAyB,0BACzBA,EAAA,sBAAsB,uBACtBA,EAAA,6BAA6B,8BAC7BA,EAAA,yBAAyB,0BACzBA,EAAA,4BAA4B,6BAC5BA,EAAA,sBAAsB,uBAbZA,IAAAA,KAAA,CAAA,CAAA;AAoBL,MAAMC,IAAoC;AAAA,EAC9C,aAAsC,CAACC,EAAQ,QAAQ;AAAA;AAAA,EAGvD,kBAA2C,CAACA,EAAQ,QAAQ;AAAA,EAC5D,wBAAiD,CAACA,EAAQ,QAAQ;AAAA,EAClE,qBAA8C,CAACA,EAAQ,QAAQ;AAAA,EAC/D,4BAAqD,CAACA,EAAQ,QAAQ;AAAA,EACtE,wBAAiD,CAACA,EAAQ,QAAQ;AAAA,EAClE,2BAAoD,CAACA,EAAQ,QAAQ;AAAA,EACrE,qBAA8C,CAACA,EAAQ,QAAQ;AAClE;"}
1
+ {"version":3,"file":"platform-events-student.js","sources":["../../../src/features/analytics-events/platform-events-student.ts"],"sourcesContent":["import { PLUGINS } from '@cuemath/analytics-v2/dist/constants';\n\n/**\n ** Global/Platform specific events that needs to be tracked goes here\n ** Naming convention needs to be snake_case\n */\nexport enum PLATFORM_EVENTS_STUDENT {\n PAGE_VIEWED = 'page_viewed',\n CUSTOM_TEST_SUBMITTED = 'custom_test_submitted',\n HOMEWORK_COMPLETED = 'homework_completed',\n ERROR_VIA_AUTO_LOGIN_FROM_CUEMATH_APP = 'error_via_auto_login_from_cuemath_app',\n\n // circle on leap mixpanel events\n ACTIVITY_STARTED = 'activity_started',\n ACTIVITY_TUTORIAL_SEEN = 'activity_tutorial_seen',\n STREAK_ICON_CLICKED = 'streak_icon_clicked',\n LEADERBOARD_BUTTON_CLICKED = 'leaderboard_button_clicked',\n ONBOARDING_STEP_VIEWED = 'onboarding_step_viewed',\n ONBOARDING_STEP_COMPLETED = 'onboarding_step_completed',\n COACHMARK_DISMISSED = 'coachmark_dismissed',\n}\n\n/**\n ** Events that need to be tracked at particular plugins\n ** Value will be array of strings.\n */\nexport const PLATFORM_WHITELIST_EVENTS_STUDENT = {\n [PLATFORM_EVENTS_STUDENT.PAGE_VIEWED]: [PLUGINS.MIXPANEL],\n [PLATFORM_EVENTS_STUDENT.CUSTOM_TEST_SUBMITTED]: [PLUGINS.MIXPANEL],\n [PLATFORM_EVENTS_STUDENT.HOMEWORK_COMPLETED]: [PLUGINS.MIXPANEL],\n\n // circle on leap mixpanel events\n [PLATFORM_EVENTS_STUDENT.ACTIVITY_STARTED]: [PLUGINS.MIXPANEL],\n [PLATFORM_EVENTS_STUDENT.ACTIVITY_TUTORIAL_SEEN]: [PLUGINS.MIXPANEL],\n [PLATFORM_EVENTS_STUDENT.STREAK_ICON_CLICKED]: [PLUGINS.MIXPANEL],\n [PLATFORM_EVENTS_STUDENT.LEADERBOARD_BUTTON_CLICKED]: [PLUGINS.MIXPANEL],\n [PLATFORM_EVENTS_STUDENT.ONBOARDING_STEP_VIEWED]: [PLUGINS.MIXPANEL],\n [PLATFORM_EVENTS_STUDENT.ONBOARDING_STEP_COMPLETED]: [PLUGINS.MIXPANEL],\n [PLATFORM_EVENTS_STUDENT.COACHMARK_DISMISSED]: [PLUGINS.MIXPANEL],\n};\n"],"names":["PLATFORM_EVENTS_STUDENT","PLATFORM_WHITELIST_EVENTS_STUDENT","PLUGINS"],"mappings":";AAMY,IAAAA,sBAAAA,OACVA,EAAA,cAAc,eACdA,EAAA,wBAAwB,yBACxBA,EAAA,qBAAqB,sBACrBA,EAAA,wCAAwC,yCAGxCA,EAAA,mBAAmB,oBACnBA,EAAA,yBAAyB,0BACzBA,EAAA,sBAAsB,uBACtBA,EAAA,6BAA6B,8BAC7BA,EAAA,yBAAyB,0BACzBA,EAAA,4BAA4B,6BAC5BA,EAAA,sBAAsB,uBAbZA,IAAAA,KAAA,CAAA,CAAA;AAoBL,MAAMC,IAAoC;AAAA,EAC9C,aAAsC,CAACC,EAAQ,QAAQ;AAAA,EACvD,uBAAgD,CAACA,EAAQ,QAAQ;AAAA,EACjE,oBAA6C,CAACA,EAAQ,QAAQ;AAAA;AAAA,EAG9D,kBAA2C,CAACA,EAAQ,QAAQ;AAAA,EAC5D,wBAAiD,CAACA,EAAQ,QAAQ;AAAA,EAClE,qBAA8C,CAACA,EAAQ,QAAQ;AAAA,EAC/D,4BAAqD,CAACA,EAAQ,QAAQ;AAAA,EACtE,wBAAiD,CAACA,EAAQ,QAAQ;AAAA,EAClE,2BAAoD,CAACA,EAAQ,QAAQ;AAAA,EACrE,qBAA8C,CAACA,EAAQ,QAAQ;AAClE;"}
@@ -1,77 +1,78 @@
1
- import { jsxs as $, jsx as N } from "react/jsx-runtime";
2
- import { memo as q, useState as s, useMemo as f, useCallback as n } from "react";
1
+ import { jsxs as $, jsx as v } from "react/jsx-runtime";
2
+ import { memo as q, useState as s, useMemo as p, useCallback as n } from "react";
3
3
  import { EVENTS as z } from "../../../../communication/pub-sub/constants.js";
4
4
  import { useInClassActionDispatcher as B } from "../../../../communication/pub-sub/hooks.js";
5
5
  import G from "../../../../ui/context/context.js";
6
6
  import J from "../../../../ui/context/use-tracking-context.js";
7
7
  import { ONE_YEAR_TIMESTAMP_IN_SECONDS as K } from "../../../constants.js";
8
8
  import { invalidateMilestonesData as Q } from "../../../milestone-list-container/api/get-milestones.js";
9
- import X from "../delete-milestone/confirm-delete.js";
10
- import { useMilestonePatch as Z } from "./api/patch-milestone.js";
11
- import ee from "./edit-milestone.js";
12
- import { parse as te } from "../../../../../node_modules/date-fns/parse.js";
13
- const P = {
9
+ import { invalidatePastMilestoneCount as X } from "../../../milestone-list-container/api/get-past-milestone-count.js";
10
+ import Z from "../delete-milestone/confirm-delete.js";
11
+ import { useMilestonePatch as ee } from "./api/patch-milestone.js";
12
+ import te from "./edit-milestone.js";
13
+ import { parse as oe } from "../../../../../node_modules/date-fns/parse.js";
14
+ const y = {
14
15
  DELETE_CONFIRM: "delete_confirm",
15
16
  EDIT: "edit"
16
- }, oe = q(
17
+ }, se = q(
17
18
  ({
18
- milestoneName: v,
19
+ milestoneName: N,
19
20
  milestoneId: e,
20
- milestoneDueDate: p,
21
- studentId: u,
22
- isMilestoneChaptersListEditable: I,
23
- isMilestoneDateEditable: x,
21
+ milestoneDueDate: u,
22
+ studentId: i,
23
+ isMilestoneChaptersListEditable: x,
24
+ isMilestoneDateEditable: F,
24
25
  isClassOngoing: E,
25
- onDelete: F,
26
+ onDelete: I,
26
27
  analyticsProps: M,
27
28
  canDelete: O,
28
29
  milestoneState: w,
29
30
  studentClassroomId: A,
30
31
  courseStream: _
31
32
  }) => {
32
- const [D, L] = s("edit"), [t, R] = s(p), [i, h] = s(!1), [r, C] = s(!1), [c, l] = s(""), o = f(
33
+ const [D, L] = s("edit"), [t, R] = s(u), [r, h] = s(!1), [c, C] = s(!1), [l, m] = s(""), o = p(
33
34
  () => Math.floor((/* @__PURE__ */ new Date()).setHours(0, 0, 0, 0) / 1e3),
34
35
  []
35
- ), a = f(
36
+ ), a = p(
36
37
  () => o + K,
37
38
  [o]
38
- ), { dispatchInClassAction: T } = B({ studentClassroomId: A }), V = t !== p, g = n(() => {
39
- i && h(!1), r && C(!1);
40
- }, [i, r]), k = n(
41
- (m) => {
42
- if (m) {
39
+ ), { dispatchInClassAction: T } = B({ studentClassroomId: A }), V = t !== u, g = n(() => {
40
+ r && h(!1), c && C(!1);
41
+ }, [r, c]), k = n(
42
+ (d) => {
43
+ if (d) {
43
44
  C(!0);
44
45
  return;
45
46
  }
46
47
  Q({
47
48
  milestone_state_group: "LIVE",
48
49
  course_stream: _,
49
- student_id: u
50
- }), h(!0), T({
50
+ student_id: i
51
+ }), X(i), h(!0), T({
51
52
  eventName: z.MILESTONE_EDITED,
52
53
  eventPayload: {
53
54
  milestoneId: e
54
55
  }
55
56
  });
56
57
  },
57
- [T, e, u, _]
58
- ), { patch: S, isProcessing: b } = Z({
58
+ [T, e, i, _]
59
+ ), { patch: P, isProcessing: b } = ee({
59
60
  onComplete: k
60
61
  }), j = n(
61
- (m) => {
62
+ (d) => {
62
63
  g();
63
- const y = m.target.value;
64
- if (!y) return;
65
- const d = te(y, "yyyy-MM-dd", /* @__PURE__ */ new Date()).getTime() / 1e3;
66
- c && d >= o && d < a && l(""), R(d);
64
+ const S = d.target.value;
65
+ if (!S) return;
66
+ const f = oe(S, "yyyy-MM-dd", /* @__PURE__ */ new Date()).getTime() / 1e3;
67
+ l && f >= o && f < a && m(""), R(f);
67
68
  },
68
- [c, g, a, o]
69
+ [l, g, a, o]
69
70
  ), U = n(() => {
70
71
  if (t < o || t > a) {
71
- t < o ? l("Please enter a future date") : l("Please select a date within the next year");
72
+ t < o ? m("Please enter a future date") : m("Please select a date within the next year");
72
73
  return;
73
74
  }
74
- S(e, {
75
+ P(e, {
75
76
  milestone_date_ts: t
76
77
  });
77
78
  }, [
@@ -79,40 +80,40 @@ const P = {
79
80
  t,
80
81
  a,
81
82
  o,
82
- S
83
+ P
83
84
  ]), Y = () => {
84
- L(P.DELETE_CONFIRM);
85
- }, H = f(() => ({
85
+ L(y.DELETE_CONFIRM);
86
+ }, H = p(() => ({
86
87
  ...M,
87
88
  milestone_id: e,
88
89
  temporary_milestone_id: e,
89
90
  is_student_class_ongoing: E
90
91
  }), [M, E, e]), W = J(H);
91
92
  return /* @__PURE__ */ $(G.Provider, { value: W, children: [
92
- D === P.DELETE_CONFIRM && /* @__PURE__ */ N(X, { milestoneId: e, onDelete: F }),
93
- D === "edit" && /* @__PURE__ */ N(
94
- ee,
93
+ D === y.DELETE_CONFIRM && /* @__PURE__ */ v(Z, { milestoneId: e, onDelete: I }),
94
+ D === "edit" && /* @__PURE__ */ v(
95
+ te,
95
96
  {
96
- inputMilestoneName: v,
97
- areDateUpdatesDisabled: !x,
97
+ inputMilestoneName: N,
98
+ areDateUpdatesDisabled: !F,
98
99
  handleDateChange: j,
99
100
  inputMilestoneDate: t,
100
101
  anyFieldChanged: V,
101
102
  isProcessing: b,
102
- isDataPatched: i,
103
- isMilestoneChaptersListEditable: I,
103
+ isDataPatched: r,
104
+ isMilestoneChaptersListEditable: x,
104
105
  onSave: U,
105
- isPatchingFailed: r,
106
+ isPatchingFailed: c,
106
107
  onDeleteOptionClick: Y,
107
- errorMessage: c,
108
+ errorMessage: l,
108
109
  canDelete: O,
109
110
  milestoneState: w
110
111
  }
111
112
  )
112
113
  ] });
113
114
  }
114
- ), Ee = oe;
115
+ ), _e = se;
115
116
  export {
116
- Ee as default
117
+ _e as default
117
118
  };
118
119
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../src/features/milestone/edit/comps/edit-milestone-modal/index.tsx"],"sourcesContent":["import type { IEditMilestoneModalProps } from './edit-milestone-modal-types';\nimport type { ChangeEvent } from 'react';\n\nimport { parse } from 'date-fns';\nimport React, { memo, useCallback, useMemo, useState } from 'react';\n\nimport { EVENTS } from '../../../../communication/pub-sub/constants';\nimport { useInClassActionDispatcher } from '../../../../communication/pub-sub/hooks';\nimport UIContext from '../../../../ui/context/context';\nimport useTrackingContext from '../../../../ui/context/use-tracking-context';\nimport { ONE_YEAR_TIMESTAMP_IN_SECONDS } from '../../../constants';\nimport { invalidateMilestonesData } from '../../../milestone-list-container/api/get-milestones';\nimport ConfirmDelete from '../delete-milestone/confirm-delete';\nimport { useMilestonePatch } from './api/patch-milestone';\nimport EditMilestone from './edit-milestone';\n\nconst VIEWS = {\n DELETE_CONFIRM: 'delete_confirm',\n EDIT: 'edit',\n};\n\n// https://github.com/cuemath/package-leap/issues/409\nconst EditDeleteMilestone: React.FC<IEditMilestoneModalProps> = memo(\n ({\n milestoneName,\n milestoneId,\n milestoneDueDate,\n studentId,\n isMilestoneChaptersListEditable,\n isMilestoneDateEditable,\n isClassOngoing,\n onDelete,\n analyticsProps,\n canDelete,\n milestoneState,\n studentClassroomId,\n courseStream,\n }) => {\n const [view, setView] = useState<(typeof VIEWS)[keyof typeof VIEWS]>('edit');\n\n const [inputMilestoneDate, setMilestoneDate] = useState(milestoneDueDate);\n const [isDataPatched, setIsDataPatched] = useState(false);\n const [isPatchingFailed, setIsPatchingFailed] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const todayTimestampSeconds = useMemo(\n () => Math.floor(new Date().setHours(0, 0, 0, 0) / 1000),\n [],\n );\n const oneYearFutureTimestampSeconds = useMemo(\n () => todayTimestampSeconds + ONE_YEAR_TIMESTAMP_IN_SECONDS,\n [todayTimestampSeconds],\n );\n\n const { dispatchInClassAction } = useInClassActionDispatcher({ studentClassroomId });\n\n const anyFieldChanged = inputMilestoneDate !== milestoneDueDate;\n\n const handleClearState = useCallback(() => {\n if (isDataPatched) {\n setIsDataPatched(false);\n }\n\n if (isPatchingFailed) {\n setIsPatchingFailed(false);\n }\n }, [isDataPatched, isPatchingFailed]);\n\n const handleOnComplete = useCallback(\n (errorMsg: string | null) => {\n if (errorMsg) {\n setIsPatchingFailed(true);\n\n return;\n }\n\n invalidateMilestonesData({\n milestone_state_group: 'LIVE',\n course_stream: courseStream,\n student_id: studentId,\n });\n setIsDataPatched(true);\n dispatchInClassAction({\n eventName: EVENTS.MILESTONE_EDITED,\n eventPayload: {\n milestoneId,\n },\n });\n },\n [dispatchInClassAction, milestoneId, studentId, courseStream],\n );\n\n const { patch: updateMilestone, isProcessing } = useMilestonePatch({\n onComplete: handleOnComplete,\n });\n\n const handleDateChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n handleClearState();\n const value = e.target.value;\n\n if (!value) return;\n\n const timestampInSeconds = parse(value, 'yyyy-MM-dd', new Date()).getTime() / 1000;\n\n if (\n errorMessage &&\n timestampInSeconds >= todayTimestampSeconds &&\n timestampInSeconds < oneYearFutureTimestampSeconds\n ) {\n setErrorMessage('');\n }\n\n setMilestoneDate(timestampInSeconds);\n },\n [errorMessage, handleClearState, oneYearFutureTimestampSeconds, todayTimestampSeconds],\n );\n\n const onSave = useCallback(() => {\n if (\n inputMilestoneDate < todayTimestampSeconds ||\n inputMilestoneDate > oneYearFutureTimestampSeconds\n ) {\n if (inputMilestoneDate < todayTimestampSeconds) {\n setErrorMessage('Please enter a future date');\n } else {\n setErrorMessage('Please select a date within the next year');\n }\n\n return;\n }\n\n updateMilestone(milestoneId, {\n milestone_date_ts: inputMilestoneDate,\n });\n }, [\n milestoneId,\n inputMilestoneDate,\n oneYearFutureTimestampSeconds,\n todayTimestampSeconds,\n updateMilestone,\n ]);\n\n const onDeleteOptionClick = () => {\n setView(VIEWS.DELETE_CONFIRM);\n };\n\n const commonAnalytics = useMemo(() => {\n return {\n ...analyticsProps,\n milestone_id: milestoneId,\n temporary_milestone_id: milestoneId,\n is_student_class_ongoing: isClassOngoing,\n };\n }, [analyticsProps, isClassOngoing, milestoneId]);\n\n const analyticsContext = useTrackingContext(commonAnalytics);\n\n return (\n <UIContext.Provider value={analyticsContext}>\n {view === VIEWS.DELETE_CONFIRM && (\n <ConfirmDelete milestoneId={milestoneId} onDelete={onDelete} />\n )}\n\n {view === 'edit' && (\n <EditMilestone\n inputMilestoneName={milestoneName}\n areDateUpdatesDisabled={!isMilestoneDateEditable}\n handleDateChange={handleDateChange}\n inputMilestoneDate={inputMilestoneDate}\n anyFieldChanged={anyFieldChanged}\n isProcessing={isProcessing}\n isDataPatched={isDataPatched}\n isMilestoneChaptersListEditable={isMilestoneChaptersListEditable}\n onSave={onSave}\n isPatchingFailed={isPatchingFailed}\n onDeleteOptionClick={onDeleteOptionClick}\n errorMessage={errorMessage}\n canDelete={canDelete}\n milestoneState={milestoneState}\n />\n )}\n </UIContext.Provider>\n );\n },\n);\n\nexport default EditDeleteMilestone;\n"],"names":["VIEWS","EditDeleteMilestone","memo","milestoneName","milestoneId","milestoneDueDate","studentId","isMilestoneChaptersListEditable","isMilestoneDateEditable","isClassOngoing","onDelete","analyticsProps","canDelete","milestoneState","studentClassroomId","courseStream","view","setView","useState","inputMilestoneDate","setMilestoneDate","isDataPatched","setIsDataPatched","isPatchingFailed","setIsPatchingFailed","errorMessage","setErrorMessage","todayTimestampSeconds","useMemo","oneYearFutureTimestampSeconds","ONE_YEAR_TIMESTAMP_IN_SECONDS","dispatchInClassAction","useInClassActionDispatcher","anyFieldChanged","handleClearState","useCallback","handleOnComplete","errorMsg","invalidateMilestonesData","EVENTS","updateMilestone","isProcessing","useMilestonePatch","handleDateChange","e","value","timestampInSeconds","parse","onSave","onDeleteOptionClick","commonAnalytics","analyticsContext","useTrackingContext","jsxs","UIContext","jsx","ConfirmDelete","EditMilestone","EditDeleteMilestone$1"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../src/features/milestone/edit/comps/edit-milestone-modal/index.tsx"],"sourcesContent":["import type { IEditMilestoneModalProps } from './edit-milestone-modal-types';\nimport type { ChangeEvent } from 'react';\n\nimport { parse } from 'date-fns';\nimport React, { memo, useCallback, useMemo, useState } from 'react';\n\nimport { EVENTS } from '../../../../communication/pub-sub/constants';\nimport { useInClassActionDispatcher } from '../../../../communication/pub-sub/hooks';\nimport UIContext from '../../../../ui/context/context';\nimport useTrackingContext from '../../../../ui/context/use-tracking-context';\nimport { ONE_YEAR_TIMESTAMP_IN_SECONDS } from '../../../constants';\nimport { invalidateMilestonesData } from '../../../milestone-list-container/api/get-milestones';\nimport { invalidatePastMilestoneCount } from '../../../milestone-list-container/api/get-past-milestone-count';\nimport ConfirmDelete from '../delete-milestone/confirm-delete';\nimport { useMilestonePatch } from './api/patch-milestone';\nimport EditMilestone from './edit-milestone';\n\nconst VIEWS = {\n DELETE_CONFIRM: 'delete_confirm',\n EDIT: 'edit',\n};\n\n// https://github.com/cuemath/package-leap/issues/409\nconst EditDeleteMilestone: React.FC<IEditMilestoneModalProps> = memo(\n ({\n milestoneName,\n milestoneId,\n milestoneDueDate,\n studentId,\n isMilestoneChaptersListEditable,\n isMilestoneDateEditable,\n isClassOngoing,\n onDelete,\n analyticsProps,\n canDelete,\n milestoneState,\n studentClassroomId,\n courseStream,\n }) => {\n const [view, setView] = useState<(typeof VIEWS)[keyof typeof VIEWS]>('edit');\n\n const [inputMilestoneDate, setMilestoneDate] = useState(milestoneDueDate);\n const [isDataPatched, setIsDataPatched] = useState(false);\n const [isPatchingFailed, setIsPatchingFailed] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const todayTimestampSeconds = useMemo(\n () => Math.floor(new Date().setHours(0, 0, 0, 0) / 1000),\n [],\n );\n const oneYearFutureTimestampSeconds = useMemo(\n () => todayTimestampSeconds + ONE_YEAR_TIMESTAMP_IN_SECONDS,\n [todayTimestampSeconds],\n );\n\n const { dispatchInClassAction } = useInClassActionDispatcher({ studentClassroomId });\n\n const anyFieldChanged = inputMilestoneDate !== milestoneDueDate;\n\n const handleClearState = useCallback(() => {\n if (isDataPatched) {\n setIsDataPatched(false);\n }\n\n if (isPatchingFailed) {\n setIsPatchingFailed(false);\n }\n }, [isDataPatched, isPatchingFailed]);\n\n const handleOnComplete = useCallback(\n (errorMsg: string | null) => {\n if (errorMsg) {\n setIsPatchingFailed(true);\n\n return;\n }\n\n invalidateMilestonesData({\n milestone_state_group: 'LIVE',\n course_stream: courseStream,\n student_id: studentId,\n });\n invalidatePastMilestoneCount(studentId);\n setIsDataPatched(true);\n dispatchInClassAction({\n eventName: EVENTS.MILESTONE_EDITED,\n eventPayload: {\n milestoneId,\n },\n });\n },\n [dispatchInClassAction, milestoneId, studentId, courseStream],\n );\n\n const { patch: updateMilestone, isProcessing } = useMilestonePatch({\n onComplete: handleOnComplete,\n });\n\n const handleDateChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n handleClearState();\n const value = e.target.value;\n\n if (!value) return;\n\n const timestampInSeconds = parse(value, 'yyyy-MM-dd', new Date()).getTime() / 1000;\n\n if (\n errorMessage &&\n timestampInSeconds >= todayTimestampSeconds &&\n timestampInSeconds < oneYearFutureTimestampSeconds\n ) {\n setErrorMessage('');\n }\n\n setMilestoneDate(timestampInSeconds);\n },\n [errorMessage, handleClearState, oneYearFutureTimestampSeconds, todayTimestampSeconds],\n );\n\n const onSave = useCallback(() => {\n if (\n inputMilestoneDate < todayTimestampSeconds ||\n inputMilestoneDate > oneYearFutureTimestampSeconds\n ) {\n if (inputMilestoneDate < todayTimestampSeconds) {\n setErrorMessage('Please enter a future date');\n } else {\n setErrorMessage('Please select a date within the next year');\n }\n\n return;\n }\n\n updateMilestone(milestoneId, {\n milestone_date_ts: inputMilestoneDate,\n });\n }, [\n milestoneId,\n inputMilestoneDate,\n oneYearFutureTimestampSeconds,\n todayTimestampSeconds,\n updateMilestone,\n ]);\n\n const onDeleteOptionClick = () => {\n setView(VIEWS.DELETE_CONFIRM);\n };\n\n const commonAnalytics = useMemo(() => {\n return {\n ...analyticsProps,\n milestone_id: milestoneId,\n temporary_milestone_id: milestoneId,\n is_student_class_ongoing: isClassOngoing,\n };\n }, [analyticsProps, isClassOngoing, milestoneId]);\n\n const analyticsContext = useTrackingContext(commonAnalytics);\n\n return (\n <UIContext.Provider value={analyticsContext}>\n {view === VIEWS.DELETE_CONFIRM && (\n <ConfirmDelete milestoneId={milestoneId} onDelete={onDelete} />\n )}\n\n {view === 'edit' && (\n <EditMilestone\n inputMilestoneName={milestoneName}\n areDateUpdatesDisabled={!isMilestoneDateEditable}\n handleDateChange={handleDateChange}\n inputMilestoneDate={inputMilestoneDate}\n anyFieldChanged={anyFieldChanged}\n isProcessing={isProcessing}\n isDataPatched={isDataPatched}\n isMilestoneChaptersListEditable={isMilestoneChaptersListEditable}\n onSave={onSave}\n isPatchingFailed={isPatchingFailed}\n onDeleteOptionClick={onDeleteOptionClick}\n errorMessage={errorMessage}\n canDelete={canDelete}\n milestoneState={milestoneState}\n />\n )}\n </UIContext.Provider>\n );\n },\n);\n\nexport default EditDeleteMilestone;\n"],"names":["VIEWS","EditDeleteMilestone","memo","milestoneName","milestoneId","milestoneDueDate","studentId","isMilestoneChaptersListEditable","isMilestoneDateEditable","isClassOngoing","onDelete","analyticsProps","canDelete","milestoneState","studentClassroomId","courseStream","view","setView","useState","inputMilestoneDate","setMilestoneDate","isDataPatched","setIsDataPatched","isPatchingFailed","setIsPatchingFailed","errorMessage","setErrorMessage","todayTimestampSeconds","useMemo","oneYearFutureTimestampSeconds","ONE_YEAR_TIMESTAMP_IN_SECONDS","dispatchInClassAction","useInClassActionDispatcher","anyFieldChanged","handleClearState","useCallback","handleOnComplete","errorMsg","invalidateMilestonesData","invalidatePastMilestoneCount","EVENTS","updateMilestone","isProcessing","useMilestonePatch","handleDateChange","e","value","timestampInSeconds","parse","onSave","onDeleteOptionClick","commonAnalytics","analyticsContext","useTrackingContext","jsxs","UIContext","jsx","ConfirmDelete","EditMilestone","EditDeleteMilestone$1"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { createGetAPI as r } from "@cuemath/rest-api";
2
+ import { BASE_URL_V3 as i } from "../../../../constants/api.js";
3
+ import { stringify as n } from "../../../../helpers/query-string.js";
4
+ const { useGet: l, invalidate: _ } = r({
5
+ getURL: (t, u, e) => {
6
+ const { milestone_state_group: s, course_stream: o } = e;
7
+ return `${i}/user-milestones/users/${t}/course-streams/${o}/count?${n(
8
+ {
9
+ milestone_state_group: s
10
+ }
11
+ )}`;
12
+ }
13
+ });
14
+ export {
15
+ _ as invalidatePastMilestoneCount,
16
+ l as useGetPastMilestoneCount
17
+ };
18
+ //# sourceMappingURL=get-past-milestone-count.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-past-milestone-count.js","sources":["../../../../../src/features/milestone/milestone-list-container/api/get-past-milestone-count.ts"],"sourcesContent":["import type { TCourseStream } from '../../create/milestone-create-types';\n\nimport { createGetAPI } from '@cuemath/rest-api';\n\nimport { BASE_URL_V3 } from '../../../../constants/api';\nimport { stringify } from '../../../../helpers/query-string';\n\ntype TQuery = {\n milestone_state_group: 'ALL' | 'DRAFT' | 'STUDENT_ALL' | 'LIVE' | 'STUDENT_LIVE' | 'INACTIVE';\n course_stream: TCourseStream;\n};\n\nconst { useGet: useGetPastMilestoneCount, invalidate: invalidatePastMilestoneCount } = createGetAPI<\n {\n user_milestones_count: number;\n },\n void,\n TQuery\n>({\n getURL: (studentId, _, query) => {\n const { milestone_state_group, course_stream } = query;\n\n return `${BASE_URL_V3}/user-milestones/users/${studentId}/course-streams/${course_stream}/count?${stringify(\n {\n milestone_state_group,\n },\n )}`;\n },\n});\n\nexport { useGetPastMilestoneCount, invalidatePastMilestoneCount };\n"],"names":["useGetPastMilestoneCount","invalidatePastMilestoneCount","createGetAPI","studentId","_","query","milestone_state_group","course_stream","BASE_URL_V3","stringify"],"mappings":";;;AAYA,MAAM,EAAE,QAAQA,GAA0B,YAAYC,EAAA,IAAiCC,EAMrF;AAAA,EACA,QAAQ,CAACC,GAAWC,GAAGC,MAAU;AACzB,UAAA,EAAE,uBAAAC,GAAuB,eAAAC,EAAkB,IAAAF;AAEjD,WAAO,GAAGG,CAAW,0BAA0BL,CAAS,mBAAmBI,CAAa,UAAUE;AAAA,MAChG;AAAA,QACE,uBAAAH;AAAA,MACF;AAAA,IACD,CAAA;AAAA,EACH;AACF,CAAC;"}
@@ -1,157 +1,136 @@
1
- import { jsxs as t, Fragment as te, jsx as n } from "react/jsx-runtime";
2
- import ne, { memo as oe, useState as ie, useCallback as h } from "react";
3
- import re from "../../../hooks/use-lazy-ref.js";
4
- import u from "../../../ui/buttons/text-button/text-button.js";
5
- import c from "../../../ui/layout/flex-view.js";
6
- import se from "../../../ui/separator/separator.js";
7
- import C from "../../../ui/text/text.js";
8
- import ae from "./milestone-widget/milestone-widget.js";
9
- import { StyledDownIcon as le } from "./milestone-widget/milestone-widget-styled.js";
10
- import ce from "./no-active-milestone/no-active-milestone.js";
11
- import de from "../../../../node_modules/uuid/dist/esm-browser/v4.js";
12
- const Te = oe(
13
- ({ milestones: e, studentId: M, milestoneType: s, ...x }) => {
14
- const [a, N] = ie(!1), {
1
+ import { jsxs as r, Fragment as K, jsx as o } from "react/jsx-runtime";
2
+ import Q, { memo as Y, useCallback as p } from "react";
3
+ import Z from "../../../hooks/use-lazy-ref.js";
4
+ import h from "../../../ui/buttons/text-button/text-button.js";
5
+ import d from "../../../ui/layout/flex-view.js";
6
+ import ee from "../../../ui/separator/separator.js";
7
+ import te from "../../../ui/text/text.js";
8
+ import oe from "./milestone-widget/milestone-widget.js";
9
+ import ne from "./no-active-milestone/no-active-milestone.js";
10
+ import ie from "../../../../node_modules/uuid/dist/esm-browser/v4.js";
11
+ const ue = Y(
12
+ ({ milestones: e, studentId: u, milestoneType: s, ...A }) => {
13
+ const {
15
14
  canCreatePlan: m,
16
- isClassOngoing: T,
17
- isFiltersAdded: $,
18
- isStudentPresent: I,
19
- onAddChapter: v,
20
- onAddOutcome: i,
21
- onChapterClick: w,
22
- onCreatePlan: r,
23
- onDelete: E,
15
+ isClassOngoing: g,
16
+ isFiltersAdded: C,
17
+ isStudentPresent: M,
18
+ onAddChapter: T,
19
+ onAddOutcome: n,
20
+ onChapterClick: N,
21
+ onCreatePlan: i,
22
+ onDelete: v,
24
23
  onDraftPublish: R,
25
- onEdit: D,
26
- onExpandPastMilestones: f,
27
- onCreateMilestoneTest: P,
28
- onNodeAttempt: S,
29
- onNodeView: b,
30
- onNodeReview: k,
31
- onNodeReattempt: F,
32
- onNodeReset: B,
33
- onNodeUnassign: V,
34
- onAssignResources: j,
35
- onTestPreview: G,
36
- onTestReview: L,
37
- onTestStart: O,
24
+ onEdit: w,
25
+ onCreateMilestoneTest: x,
26
+ onNodeAttempt: b,
27
+ onNodeView: D,
28
+ onNodeReview: $,
29
+ onNodeReattempt: P,
30
+ onNodeReset: F,
31
+ onNodeUnassign: I,
32
+ onAssignResources: k,
33
+ onTestPreview: E,
34
+ onTestReview: S,
35
+ onTestStart: V,
38
36
  activeMilestoneId: _,
39
- activeTabId: y,
37
+ activeTabId: j,
40
38
  onWidgetTabSelection: z,
41
- studentName: p,
42
- teacherName: X,
43
- parentName: H,
44
- userType: d,
45
- courseStream: U,
46
- onNodeAssignAsHomework: W
47
- } = x, l = s === "ACTIVE", A = s === "DRAFT", g = re(de), q = h(() => {
48
- r == null || r(g);
49
- }, [r, g]), J = () => {
50
- !a && f && f(), N(!a);
51
- }, K = h(() => {
52
- i == null || i();
53
- }, [i]);
39
+ studentName: c,
40
+ teacherName: B,
41
+ parentName: G,
42
+ userType: a,
43
+ courseStream: y,
44
+ onNodeAssignAsHomework: H
45
+ } = A, l = s === "ACTIVE", L = s === "DRAFT", f = Z(ie), O = p(() => {
46
+ i == null || i(f);
47
+ }, [i, f]), W = p(() => {
48
+ n == null || n();
49
+ }, [n]);
54
50
  if (!e) return null;
55
- const Q = e.some(
56
- (o) => o.milestone_state === "ACTIVE"
57
- ), Y = e.some(
58
- (o) => o.milestone_state === "DRAFT"
51
+ const X = e.some(
52
+ (t) => t.milestone_state === "ACTIVE"
53
+ ), U = e.some(
54
+ (t) => t.milestone_state === "DRAFT"
59
55
  );
60
- return /* @__PURE__ */ t(te, { children: [
61
- l && !Q && /* @__PURE__ */ n(c, { $marginBottom: 40, children: /* @__PURE__ */ n(
62
- ce,
56
+ return /* @__PURE__ */ r(K, { children: [
57
+ l && !X && /* @__PURE__ */ o(d, { $marginBottom: 40, children: /* @__PURE__ */ o(
58
+ ne,
63
59
  {
64
60
  canCreatePlan: m,
65
- isDraftMilestonePresent: Y,
66
- isFiltersAdded: $,
67
- onCreatePlan: r,
68
- studentName: p,
69
- userType: d
61
+ isDraftMilestonePresent: U,
62
+ isFiltersAdded: C,
63
+ onCreatePlan: i,
64
+ studentName: c,
65
+ userType: a
70
66
  }
71
67
  ) }),
72
- l && /* @__PURE__ */ t(c, { $flexDirection: "row", $justifyContent: "space-between", $marginBottom: 16, children: [
73
- /* @__PURE__ */ t(C, { $renderAs: "ac4", children: [
68
+ l && /* @__PURE__ */ r(d, { $flexDirection: "row", $justifyContent: "space-between", $marginBottom: 16, children: [
69
+ /* @__PURE__ */ r(te, { $renderAs: "ac4", children: [
74
70
  "Goals (",
75
71
  e.length,
76
72
  ")"
77
73
  ] }),
78
- d === "TEACHER" && /* @__PURE__ */ t(c, { $flexDirection: "row", $flexGapX: 1, children: [
79
- /* @__PURE__ */ n(
80
- u,
74
+ a === "TEACHER" && /* @__PURE__ */ r(d, { $flexDirection: "row", $flexGapX: 1, children: [
75
+ /* @__PURE__ */ o(
76
+ h,
81
77
  {
82
78
  label: "Create Goal",
83
79
  size: "small",
84
- onClick: q,
80
+ onClick: O,
85
81
  disabled: !m
86
82
  }
87
83
  ),
88
- /* @__PURE__ */ n(u, { label: "Add Milestone", size: "small", onClick: K })
84
+ /* @__PURE__ */ o(h, { label: "Add Milestone", size: "small", onClick: W })
89
85
  ] })
90
86
  ] }),
91
- s === "INACTIVE" && !!e.length && /* @__PURE__ */ t(
92
- c,
93
- {
94
- $flexDirection: "row",
95
- $alignItems: "center",
96
- $justifyContent: "space-between",
97
- $marginBottomX: 1,
98
- children: [
99
- /* @__PURE__ */ t(C, { $renderAs: "ac4", children: [
100
- "PAST LEARNING PLANS & OUTCOMES (",
101
- e.length,
102
- ")"
103
- ] }),
104
- /* @__PURE__ */ n(le, { onClick: J, $expanded: a })
105
- ]
106
- }
107
- ),
108
- (A || l || a) && e.map((o, Z) => {
109
- const { id: ee } = o;
110
- return /* @__PURE__ */ t(ne.Fragment, { children: [
111
- /* @__PURE__ */ n(
112
- ae,
87
+ e.map((t, q) => {
88
+ const { id: J } = t;
89
+ return /* @__PURE__ */ r(Q.Fragment, { children: [
90
+ /* @__PURE__ */ o(
91
+ oe,
113
92
  {
114
- milestone: o,
115
- studentId: M,
116
- studentName: p,
117
- parentName: H,
118
- teacherName: X,
119
- userType: d,
120
- onAddOutcome: i,
121
- onChapterClick: w,
122
- isMilestoneActive: l || A,
93
+ milestone: t,
94
+ studentId: u,
95
+ studentName: c,
96
+ parentName: G,
97
+ teacherName: B,
98
+ userType: a,
99
+ onAddOutcome: n,
100
+ onChapterClick: N,
101
+ isMilestoneActive: l || L,
123
102
  milestoneType: s,
124
- onEdit: D,
125
- onCreateMilestoneTest: P,
126
- onAddChapter: v,
127
- onDelete: E,
103
+ onEdit: w,
104
+ onCreateMilestoneTest: x,
105
+ onAddChapter: T,
106
+ onDelete: v,
128
107
  onDraftPublish: R,
129
- isClassOngoing: T,
130
- isStudentPresent: I,
131
- onAssignResources: j,
132
- onNodeAttempt: S,
133
- onNodeView: b,
134
- onNodeReview: k,
135
- onNodeReattempt: F,
136
- onNodeReset: B,
137
- onNodeUnassign: V,
138
- onNodeAssignAsHomework: W,
139
- onTestPreview: G,
140
- onTestReview: L,
141
- onTestStart: O,
142
- courseStream: U,
108
+ isClassOngoing: g,
109
+ isStudentPresent: M,
110
+ onAssignResources: k,
111
+ onNodeAttempt: b,
112
+ onNodeView: D,
113
+ onNodeReview: $,
114
+ onNodeReattempt: P,
115
+ onNodeReset: F,
116
+ onNodeUnassign: I,
117
+ onNodeAssignAsHomework: H,
118
+ onTestPreview: E,
119
+ onTestReview: S,
120
+ onTestStart: V,
121
+ courseStream: y,
143
122
  activeMilestoneId: _,
144
- activeTabId: y,
123
+ activeTabId: j,
145
124
  onWidgetTabSelection: z
146
125
  }
147
126
  ),
148
- Z !== e.length - 1 && /* @__PURE__ */ n(se, { heightX: 2 })
149
- ] }, `milestone=${ee}`);
127
+ q !== e.length - 1 && /* @__PURE__ */ o(ee, { heightX: 2 })
128
+ ] }, `milestone=${J}`);
150
129
  })
151
130
  ] });
152
131
  }
153
132
  );
154
133
  export {
155
- Te as default
134
+ ue as default
156
135
  };
157
136
  //# sourceMappingURL=milestone-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"milestone-list.js","sources":["../../../../../src/features/milestone/milestone-list-container/milestone-list/milestone-list.tsx"],"sourcesContent":["import type { IMilestoneListProps } from './milestone-list-types';\n\nimport React, { memo, useCallback, useState } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport useLazyRef from '../../../hooks/use-lazy-ref';\nimport TextButton from '../../../ui/buttons/text-button/text-button';\nimport FlexView from '../../../ui/layout/flex-view';\nimport Separator from '../../../ui/separator/separator';\nimport Text from '../../../ui/text/text';\nimport MilestoneWidget from './milestone-widget/milestone-widget';\nimport { StyledDownIcon } from './milestone-widget/milestone-widget-styled';\nimport NoActiveMilestone from './no-active-milestone/no-active-milestone';\n\nconst MilestoneList: React.FC<IMilestoneListProps> = memo(\n ({ milestones, studentId, milestoneType, ...restMilestoneListProps }) => {\n const [expandInactiveMilestones, setExpandInactiveMilestones] = useState(false);\n const {\n canCreatePlan,\n isClassOngoing,\n isFiltersAdded,\n isStudentPresent,\n onAddChapter,\n onAddOutcome,\n onChapterClick,\n onCreatePlan,\n onDelete,\n onDraftPublish,\n onEdit,\n onExpandPastMilestones,\n onCreateMilestoneTest,\n onNodeAttempt,\n onNodeView,\n onNodeReview,\n onNodeReattempt,\n onNodeReset,\n onNodeUnassign,\n onAssignResources,\n onTestPreview,\n onTestReview,\n onTestStart,\n activeMilestoneId,\n activeTabId,\n onWidgetTabSelection,\n studentName,\n teacherName,\n parentName,\n userType,\n courseStream,\n onNodeAssignAsHomework,\n } = restMilestoneListProps;\n\n const isMilestoneActive = milestoneType === 'ACTIVE';\n const isDraftMilestone = milestoneType === 'DRAFT';\n const temporaryMilestoneId = useLazyRef(uuidv4);\n\n const handleCreatePlan = useCallback(() => {\n onCreatePlan?.(temporaryMilestoneId);\n }, [onCreatePlan, temporaryMilestoneId]);\n\n const toggleExpand = () => {\n if (!expandInactiveMilestones && onExpandPastMilestones) {\n onExpandPastMilestones();\n }\n setExpandInactiveMilestones(!expandInactiveMilestones);\n };\n\n const handleOnAddOutcome = useCallback(() => {\n onAddOutcome?.();\n }, [onAddOutcome]);\n\n if (!milestones) return null;\n\n const activeMilestonePresent = milestones.some(\n milestone => milestone.milestone_state === 'ACTIVE',\n );\n const draftMilestonePresent = milestones.some(\n milestone => milestone.milestone_state === 'DRAFT',\n );\n\n return (\n <>\n {isMilestoneActive && !activeMilestonePresent && (\n <FlexView $marginBottom={40}>\n <NoActiveMilestone\n canCreatePlan={canCreatePlan}\n isDraftMilestonePresent={draftMilestonePresent}\n isFiltersAdded={isFiltersAdded}\n onCreatePlan={onCreatePlan}\n studentName={studentName}\n userType={userType}\n />\n </FlexView>\n )}\n\n {isMilestoneActive && (\n <FlexView $flexDirection=\"row\" $justifyContent=\"space-between\" $marginBottom={16}>\n <Text $renderAs=\"ac4\">Goals ({milestones.length})</Text>\n\n {userType === 'TEACHER' && (\n <FlexView $flexDirection=\"row\" $flexGapX={1}>\n <TextButton\n label=\"Create Goal\"\n size=\"small\"\n onClick={handleCreatePlan}\n disabled={!canCreatePlan}\n />\n <TextButton label=\"Add Milestone\" size=\"small\" onClick={handleOnAddOutcome} />\n </FlexView>\n )}\n </FlexView>\n )}\n\n {milestoneType === 'INACTIVE' && Boolean(milestones.length) && (\n <FlexView\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $justifyContent=\"space-between\"\n $marginBottomX={1}\n >\n <Text $renderAs=\"ac4\">PAST LEARNING PLANS & OUTCOMES ({milestones.length})</Text>\n <StyledDownIcon onClick={toggleExpand} $expanded={expandInactiveMilestones} />\n </FlexView>\n )}\n\n {(isDraftMilestone || isMilestoneActive || expandInactiveMilestones) &&\n milestones.map((milestone, idx) => {\n const { id: milestoneId } = milestone;\n\n return (\n <React.Fragment key={`milestone=${milestoneId}`}>\n <MilestoneWidget\n milestone={milestone}\n studentId={studentId}\n studentName={studentName}\n parentName={parentName}\n teacherName={teacherName}\n userType={userType}\n onAddOutcome={onAddOutcome}\n onChapterClick={onChapterClick}\n isMilestoneActive={isMilestoneActive || isDraftMilestone}\n milestoneType={milestoneType}\n onEdit={onEdit}\n onCreateMilestoneTest={onCreateMilestoneTest}\n onAddChapter={onAddChapter}\n onDelete={onDelete}\n onDraftPublish={onDraftPublish}\n isClassOngoing={isClassOngoing}\n isStudentPresent={isStudentPresent}\n onAssignResources={onAssignResources}\n onNodeAttempt={onNodeAttempt}\n onNodeView={onNodeView}\n onNodeReview={onNodeReview}\n onNodeReattempt={onNodeReattempt}\n onNodeReset={onNodeReset}\n onNodeUnassign={onNodeUnassign}\n onNodeAssignAsHomework={onNodeAssignAsHomework}\n onTestPreview={onTestPreview}\n onTestReview={onTestReview}\n onTestStart={onTestStart}\n courseStream={courseStream}\n activeMilestoneId={activeMilestoneId}\n activeTabId={activeTabId}\n onWidgetTabSelection={onWidgetTabSelection}\n />\n {idx !== milestones.length - 1 && <Separator heightX={2} />}\n </React.Fragment>\n );\n })}\n </>\n );\n },\n);\n\nexport default MilestoneList;\n"],"names":["MilestoneList","memo","milestones","studentId","milestoneType","restMilestoneListProps","expandInactiveMilestones","setExpandInactiveMilestones","useState","canCreatePlan","isClassOngoing","isFiltersAdded","isStudentPresent","onAddChapter","onAddOutcome","onChapterClick","onCreatePlan","onDelete","onDraftPublish","onEdit","onExpandPastMilestones","onCreateMilestoneTest","onNodeAttempt","onNodeView","onNodeReview","onNodeReattempt","onNodeReset","onNodeUnassign","onAssignResources","onTestPreview","onTestReview","onTestStart","activeMilestoneId","activeTabId","onWidgetTabSelection","studentName","teacherName","parentName","userType","courseStream","onNodeAssignAsHomework","isMilestoneActive","isDraftMilestone","temporaryMilestoneId","useLazyRef","uuidv4","handleCreatePlan","useCallback","toggleExpand","handleOnAddOutcome","activeMilestonePresent","milestone","draftMilestonePresent","jsxs","Fragment","jsx","FlexView","NoActiveMilestone","Text","TextButton","StyledDownIcon","idx","milestoneId","React","MilestoneWidget","Separator"],"mappings":"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"}
1
+ {"version":3,"file":"milestone-list.js","sources":["../../../../../src/features/milestone/milestone-list-container/milestone-list/milestone-list.tsx"],"sourcesContent":["import type { IMilestoneListProps } from './milestone-list-types';\n\nimport React, { memo, useCallback } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport useLazyRef from '../../../hooks/use-lazy-ref';\nimport TextButton from '../../../ui/buttons/text-button/text-button';\nimport FlexView from '../../../ui/layout/flex-view';\nimport Separator from '../../../ui/separator/separator';\nimport Text from '../../../ui/text/text';\nimport MilestoneWidget from './milestone-widget/milestone-widget';\nimport NoActiveMilestone from './no-active-milestone/no-active-milestone';\n\nconst MilestoneList: React.FC<IMilestoneListProps> = memo(\n ({ milestones, studentId, milestoneType, ...restMilestoneListProps }) => {\n const {\n canCreatePlan,\n isClassOngoing,\n isFiltersAdded,\n isStudentPresent,\n onAddChapter,\n onAddOutcome,\n onChapterClick,\n onCreatePlan,\n onDelete,\n onDraftPublish,\n onEdit,\n onCreateMilestoneTest,\n onNodeAttempt,\n onNodeView,\n onNodeReview,\n onNodeReattempt,\n onNodeReset,\n onNodeUnassign,\n onAssignResources,\n onTestPreview,\n onTestReview,\n onTestStart,\n activeMilestoneId,\n activeTabId,\n onWidgetTabSelection,\n studentName,\n teacherName,\n parentName,\n userType,\n courseStream,\n onNodeAssignAsHomework,\n } = restMilestoneListProps;\n\n const isMilestoneActive = milestoneType === 'ACTIVE';\n const isDraftMilestone = milestoneType === 'DRAFT';\n const temporaryMilestoneId = useLazyRef(uuidv4);\n\n const handleCreatePlan = useCallback(() => {\n onCreatePlan?.(temporaryMilestoneId);\n }, [onCreatePlan, temporaryMilestoneId]);\n\n const handleOnAddOutcome = useCallback(() => {\n onAddOutcome?.();\n }, [onAddOutcome]);\n\n if (!milestones) return null;\n\n const activeMilestonePresent = milestones.some(\n milestone => milestone.milestone_state === 'ACTIVE',\n );\n const draftMilestonePresent = milestones.some(\n milestone => milestone.milestone_state === 'DRAFT',\n );\n\n return (\n <>\n {isMilestoneActive && !activeMilestonePresent && (\n <FlexView $marginBottom={40}>\n <NoActiveMilestone\n canCreatePlan={canCreatePlan}\n isDraftMilestonePresent={draftMilestonePresent}\n isFiltersAdded={isFiltersAdded}\n onCreatePlan={onCreatePlan}\n studentName={studentName}\n userType={userType}\n />\n </FlexView>\n )}\n\n {isMilestoneActive && (\n <FlexView $flexDirection=\"row\" $justifyContent=\"space-between\" $marginBottom={16}>\n <Text $renderAs=\"ac4\">Goals ({milestones.length})</Text>\n\n {userType === 'TEACHER' && (\n <FlexView $flexDirection=\"row\" $flexGapX={1}>\n <TextButton\n label=\"Create Goal\"\n size=\"small\"\n onClick={handleCreatePlan}\n disabled={!canCreatePlan}\n />\n <TextButton label=\"Add Milestone\" size=\"small\" onClick={handleOnAddOutcome} />\n </FlexView>\n )}\n </FlexView>\n )}\n\n {milestones.map((milestone, idx) => {\n const { id: milestoneId } = milestone;\n\n return (\n <React.Fragment key={`milestone=${milestoneId}`}>\n <MilestoneWidget\n milestone={milestone}\n studentId={studentId}\n studentName={studentName}\n parentName={parentName}\n teacherName={teacherName}\n userType={userType}\n onAddOutcome={onAddOutcome}\n onChapterClick={onChapterClick}\n isMilestoneActive={isMilestoneActive || isDraftMilestone}\n milestoneType={milestoneType}\n onEdit={onEdit}\n onCreateMilestoneTest={onCreateMilestoneTest}\n onAddChapter={onAddChapter}\n onDelete={onDelete}\n onDraftPublish={onDraftPublish}\n isClassOngoing={isClassOngoing}\n isStudentPresent={isStudentPresent}\n onAssignResources={onAssignResources}\n onNodeAttempt={onNodeAttempt}\n onNodeView={onNodeView}\n onNodeReview={onNodeReview}\n onNodeReattempt={onNodeReattempt}\n onNodeReset={onNodeReset}\n onNodeUnassign={onNodeUnassign}\n onNodeAssignAsHomework={onNodeAssignAsHomework}\n onTestPreview={onTestPreview}\n onTestReview={onTestReview}\n onTestStart={onTestStart}\n courseStream={courseStream}\n activeMilestoneId={activeMilestoneId}\n activeTabId={activeTabId}\n onWidgetTabSelection={onWidgetTabSelection}\n />\n {idx !== milestones.length - 1 && <Separator heightX={2} />}\n </React.Fragment>\n );\n })}\n </>\n );\n },\n);\n\nexport default MilestoneList;\n"],"names":["MilestoneList","memo","milestones","studentId","milestoneType","restMilestoneListProps","canCreatePlan","isClassOngoing","isFiltersAdded","isStudentPresent","onAddChapter","onAddOutcome","onChapterClick","onCreatePlan","onDelete","onDraftPublish","onEdit","onCreateMilestoneTest","onNodeAttempt","onNodeView","onNodeReview","onNodeReattempt","onNodeReset","onNodeUnassign","onAssignResources","onTestPreview","onTestReview","onTestStart","activeMilestoneId","activeTabId","onWidgetTabSelection","studentName","teacherName","parentName","userType","courseStream","onNodeAssignAsHomework","isMilestoneActive","isDraftMilestone","temporaryMilestoneId","useLazyRef","uuidv4","handleCreatePlan","useCallback","handleOnAddOutcome","activeMilestonePresent","milestone","draftMilestonePresent","jsxs","Fragment","jsx","FlexView","NoActiveMilestone","Text","TextButton","idx","milestoneId","React","MilestoneWidget","Separator"],"mappings":";;;;;;;;;;AAaA,MAAMA,KAA+CC;AAAA,EACnD,CAAC,EAAE,YAAAC,GAAY,WAAAC,GAAW,eAAAC,GAAe,GAAGC,QAA6B;AACjE,UAAA;AAAA,MACJ,eAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,kBAAAC;AAAA,MACA,cAAAC;AAAA,MACA,cAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,cAAAC;AAAA,MACA,UAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,QAAAC;AAAA,MACA,uBAAAC;AAAA,MACA,eAAAC;AAAA,MACA,YAAAC;AAAA,MACA,cAAAC;AAAA,MACA,iBAAAC;AAAA,MACA,aAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,mBAAAC;AAAA,MACA,eAAAC;AAAA,MACA,cAAAC;AAAA,MACA,aAAAC;AAAA,MACA,mBAAAC;AAAA,MACA,aAAAC;AAAA,MACA,sBAAAC;AAAA,MACA,aAAAC;AAAA,MACA,aAAAC;AAAA,MACA,YAAAC;AAAA,MACA,UAAAC;AAAA,MACA,cAAAC;AAAA,MACA,wBAAAC;AAAA,IACE,IAAA/B,GAEEgC,IAAoBjC,MAAkB,UACtCkC,IAAmBlC,MAAkB,SACrCmC,IAAuBC,EAAWC,EAAM,GAExCC,IAAmBC,EAAY,MAAM;AACzC,MAAA9B,KAAA,QAAAA,EAAe0B;AAAA,IAAoB,GAClC,CAAC1B,GAAc0B,CAAoB,CAAC,GAEjCK,IAAqBD,EAAY,MAAM;AAC5B,MAAAhC,KAAA,QAAAA;AAAA,IAAA,GACd,CAACA,CAAY,CAAC;AAEb,QAAA,CAACT,EAAmB,QAAA;AAExB,UAAM2C,IAAyB3C,EAAW;AAAA,MACxC,CAAA4C,MAAaA,EAAU,oBAAoB;AAAA,IAAA,GAEvCC,IAAwB7C,EAAW;AAAA,MACvC,CAAA4C,MAAaA,EAAU,oBAAoB;AAAA,IAAA;AAG7C,WAEK,gBAAAE,EAAAC,GAAA,EAAA,UAAA;AAAA,MAAAZ,KAAqB,CAACQ,KACpB,gBAAAK,EAAAC,GAAA,EAAS,eAAe,IACvB,UAAA,gBAAAD;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,eAAA9C;AAAA,UACA,yBAAyByC;AAAA,UACzB,gBAAAvC;AAAA,UACA,cAAAK;AAAA,UACA,aAAAkB;AAAA,UACA,UAAAG;AAAA,QAAA;AAAA,MAAA,GAEJ;AAAA,MAGDG,uBACEc,GAAS,EAAA,gBAAe,OAAM,iBAAgB,iBAAgB,eAAe,IAC5E,UAAA;AAAA,QAAC,gBAAAH,EAAAK,IAAA,EAAK,WAAU,OAAM,UAAA;AAAA,UAAA;AAAA,UAAQnD,EAAW;AAAA,UAAO;AAAA,QAAA,GAAC;AAAA,QAEhDgC,MAAa,aACZ,gBAAAc,EAACG,KAAS,gBAAe,OAAM,WAAW,GACxC,UAAA;AAAA,UAAA,gBAAAD;AAAA,YAACI;AAAA,YAAA;AAAA,cACC,OAAM;AAAA,cACN,MAAK;AAAA,cACL,SAASZ;AAAA,cACT,UAAU,CAACpC;AAAA,YAAA;AAAA,UACb;AAAA,4BACCgD,GAAW,EAAA,OAAM,iBAAgB,MAAK,SAAQ,SAASV,GAAoB;AAAA,QAAA,GAC9E;AAAA,MAAA,GAEJ;AAAA,MAGD1C,EAAW,IAAI,CAAC4C,GAAWS,MAAQ;AAC5B,cAAA,EAAE,IAAIC,EAAgB,IAAAV;AAG1B,eAAA,gBAAAE,EAACS,EAAM,UAAN,EACC,UAAA;AAAA,UAAA,gBAAAP;AAAA,YAACQ;AAAA,YAAA;AAAA,cACC,WAAAZ;AAAA,cACA,WAAA3C;AAAA,cACA,aAAA4B;AAAA,cACA,YAAAE;AAAA,cACA,aAAAD;AAAA,cACA,UAAAE;AAAA,cACA,cAAAvB;AAAA,cACA,gBAAAC;AAAA,cACA,mBAAmByB,KAAqBC;AAAA,cACxC,eAAAlC;AAAA,cACA,QAAAY;AAAA,cACA,uBAAAC;AAAA,cACA,cAAAP;AAAA,cACA,UAAAI;AAAA,cACA,gBAAAC;AAAA,cACA,gBAAAR;AAAA,cACA,kBAAAE;AAAA,cACA,mBAAAe;AAAA,cACA,eAAAN;AAAA,cACA,YAAAC;AAAA,cACA,cAAAC;AAAA,cACA,iBAAAC;AAAA,cACA,aAAAC;AAAA,cACA,gBAAAC;AAAA,cACA,wBAAAa;AAAA,cACA,eAAAX;AAAA,cACA,cAAAC;AAAA,cACA,aAAAC;AAAA,cACA,cAAAQ;AAAA,cACA,mBAAAP;AAAA,cACA,aAAAC;AAAA,cACA,sBAAAC;AAAA,YAAA;AAAA,UACF;AAAA,UACCyB,MAAQrD,EAAW,SAAS,KAAM,gBAAAgD,EAAAS,IAAA,EAAU,SAAS,GAAG;AAAA,QAnCtC,EAAA,GAAA,aAAaH,CAAW,EAoC7C;AAAA,MAAA,CAEH;AAAA,IACH,EAAA,CAAA;AAAA,EAEJ;AACF;"}