@cuemath/leap 2.8.61-as11 → 2.8.61-as13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/assets/line-icons/icons/recap.js +3 -3
  2. package/dist/assets/line-icons/icons/recap.js.map +1 -1
  3. package/dist/assets/lottie/lottie.js +9 -1
  4. package/dist/assets/lottie/lottie.js.map +1 -1
  5. package/dist/features/chapters-v2/comps/node-card/student-actions/student-actions.js +78 -71
  6. package/dist/features/chapters-v2/comps/node-card/student-actions/student-actions.js.map +1 -1
  7. package/dist/features/chapters-v2/comps/node-card/teacher-actions/teacher-actions.js +82 -75
  8. package/dist/features/chapters-v2/comps/node-card/teacher-actions/teacher-actions.js.map +1 -1
  9. package/dist/features/chapters-v2/utils/node-card-utils.js +68 -46
  10. package/dist/features/chapters-v2/utils/node-card-utils.js.map +1 -1
  11. package/dist/features/homework/homework-card.js +146 -139
  12. package/dist/features/homework/homework-card.js.map +1 -1
  13. package/dist/features/homework/hw-card-list/hw-card-list.js +88 -85
  14. package/dist/features/homework/hw-card-list/hw-card-list.js.map +1 -1
  15. package/dist/index.d.ts +10 -0
  16. package/dist/index.js +381 -379
  17. package/dist/index.js.map +1 -1
  18. package/dist/static/competitive-arena.b9c40801.json +1 -0
  19. package/dist/static/learn.71b13323.json +1 -0
  20. package/dist/static/practice.158dd488.json +1 -0
  21. package/dist/static/project.eb665827.json +1 -0
  22. package/dist/static/puzzle.b298c7e4.json +1 -0
  23. package/dist/static/recap.0dd2c1e2.json +1 -0
  24. package/dist/static/test.803d6036.json +1 -0
  25. package/dist/static/video.b41451e2.json +1 -0
  26. package/package.json +1 -1
@@ -1,181 +1,188 @@
1
- import { jsxs as n, jsx as e } from "react/jsx-runtime";
2
- import { memo as ne, useRef as I, useState as oe, useLayoutEffect as ce, useCallback as y } from "react";
3
- import M from "../../assets/line-icons/icons/eye2.js";
4
- import ae from "../../assets/line-icons/icons/more-vertical.js";
5
- import se from "../../assets/line-icons/icons/redo.js";
6
- import le from "../chapters-v2/comps/node-card/node-card-tags.js";
7
- import { getNodeTypeBasedBgImage as de } from "../chapters-v2/utils/index.js";
8
- import { getNodeCardBasedIcon as ue } from "../chapters-v2/utils/node-card-utils.js";
1
+ import { jsxs as i, jsx as e } from "react/jsx-runtime";
2
+ import { memo as de, useState as B, useRef as I, useLayoutEffect as ue, useCallback as s } from "react";
3
+ import V from "../../assets/line-icons/icons/eye2.js";
4
+ import he from "../../assets/line-icons/icons/more-vertical.js";
5
+ import me from "../../assets/line-icons/icons/redo.js";
6
+ import fe from "../chapters-v2/comps/node-card/node-card-tags.js";
7
+ import { getNodeTypeBasedBgImage as pe } from "../chapters-v2/utils/index.js";
8
+ import { getNodeCardBasedIcon as $e } from "../chapters-v2/utils/node-card-utils.js";
9
9
  import j from "../ui/arrow-tooltip/arrow-tooltip.js";
10
- import he from "../ui/buttons/clickable/clickable.js";
10
+ import we from "../ui/buttons/clickable/clickable.js";
11
11
  import G from "../ui/hooks/use-context-menu-click-handler.js";
12
12
  import o from "../ui/layout/flex-view.js";
13
- import E from "../ui/text/text.js";
13
+ import be from "../ui/lottie-animation/lottie-animation.js";
14
+ import y from "../ui/text/text.js";
14
15
  import K from "./card-menu-options.js";
15
- import me from "./node-progress.js";
16
- import { CardContainer as fe, CardWrapper as pe, IconWrapper as $e, BannerImageWrapper as we, BannerImage as be, HeaderText as ge, SubHeaderText as Ce, MenuWrapper as ke, CardKebabMenuWrapper as _e, StyledMinus2Icon as Te } from "./styles.js";
17
- const Ie = ({
18
- header: x,
16
+ import ge from "./node-progress.js";
17
+ import { CardContainer as Ce, CardWrapper as ke, IconWrapper as _e, BannerImageWrapper as Te, BannerImage as Ee, HeaderText as Ie, SubHeaderText as ye, MenuWrapper as ve, CardKebabMenuWrapper as xe, StyledMinus2Icon as Re } from "./styles.js";
18
+ const Ae = ({
19
+ header: v,
19
20
  nodeData: r,
20
- subHeader: L,
21
- userType: z,
21
+ subHeader: z,
22
+ userType: P,
22
23
  userMilestoneId: t,
23
- onNodeUnassign: s,
24
- onNodeReattempt: l,
25
- onNodeView: m,
26
- onNodeReview: i,
27
- onNodeAttempt: f,
28
- renderAs: P,
29
- shouldOpenOnRight: F
24
+ onNodeUnassign: l,
25
+ onNodeReattempt: d,
26
+ onNodeView: f,
27
+ onNodeReview: n,
28
+ onNodeAttempt: p,
29
+ renderAs: F,
30
+ shouldOpenOnRight: Y
30
31
  }) => {
31
- const c = P === "homework", {
32
- node_type: d,
33
- state: Y,
34
- accuracy: q,
35
- due_date_ts: p,
36
- image_url: v,
37
- image_hue: H,
38
- card_header: J = "",
39
- permissions: Q,
40
- user_node_id: u,
41
- unlocked_on_ts: R,
42
- user_milestone_id: $
43
- } = r, Z = de(d), A = ue(d), w = I(null), b = I(null), a = I(null), { menuVisible: O, onMenuClick: U } = G(w), { menuVisible: D, onMenuClick: S } = G(b), [N, ee] = oe(!1), {
44
- can_start: W,
45
- can_resume: X,
46
- can_review: g,
47
- can_teacher_review: B,
48
- can_unassign: re,
49
- can_reset: C
50
- } = Q, k = z === "STUDENT";
51
- ce(() => {
52
- a.current && a.current.scrollHeight > a.current.clientHeight && ee(!0);
32
+ const c = F === "homework", {
33
+ node_type: u,
34
+ state: q,
35
+ accuracy: J,
36
+ due_date_ts: $,
37
+ image_url: x,
38
+ image_hue: R,
39
+ card_header: Q = "",
40
+ permissions: Z,
41
+ user_node_id: h,
42
+ unlocked_on_ts: A,
43
+ user_milestone_id: w
44
+ } = r, [U, H] = B(!1), D = pe(u), { icon: N, lottie: ee } = $e(u), b = I(null), g = I(null), a = I(null), { menuVisible: O, onMenuClick: re } = G(b), { menuVisible: te, onMenuClick: M } = G(g), [ne, ie] = B(!1), {
45
+ can_start: S,
46
+ can_resume: W,
47
+ can_review: C,
48
+ can_teacher_review: X,
49
+ can_unassign: oe,
50
+ can_reset: k
51
+ } = Z, _ = P === "STUDENT";
52
+ ue(() => {
53
+ a.current && a.current.scrollHeight > a.current.clientHeight && ie(!0);
53
54
  }, [a]);
54
- const _ = y(() => {
55
- if (W || X) {
56
- if (typeof f != "function")
55
+ const T = s(() => {
56
+ if (S || W) {
57
+ if (typeof p != "function")
57
58
  throw new Error("onNodeAttempt must be a function");
58
- f(r);
59
+ p(r);
59
60
  return;
60
61
  }
61
- if (C && !c) {
62
- S();
62
+ if (k && !c) {
63
+ M();
63
64
  return;
64
65
  }
65
- if (g) {
66
- if (typeof i != "function")
66
+ if (C) {
67
+ if (typeof n != "function")
67
68
  throw new Error("onReview must be a function");
68
- if (!u)
69
+ if (!h)
69
70
  throw new Error("user node id must be present to review the sheet");
70
- i(r, t);
71
+ n(r, t);
71
72
  return;
72
73
  }
73
74
  }, [
75
+ S,
74
76
  W,
75
- X,
76
- C,
77
+ k,
77
78
  c,
78
- g,
79
- f,
79
+ C,
80
+ p,
80
81
  r,
81
- S,
82
- i,
83
- u,
82
+ M,
83
+ n,
84
+ h,
84
85
  t
85
- ]), T = y(() => {
86
- if (B) {
87
- if (typeof i != "function")
86
+ ]), E = s(() => {
87
+ if (X) {
88
+ if (typeof n != "function")
88
89
  throw new Error("onNodeReview must be a function");
89
- if (!u)
90
+ if (!h)
90
91
  throw new Error("user node id must be present to review the sheet");
91
- i(r, t || $);
92
+ n(r, t || w);
92
93
  return;
93
94
  }
94
- if (typeof m != "function")
95
+ if (typeof f != "function")
95
96
  throw new Error("onNodeView must be a function");
96
- m(r, t || $);
97
+ f(r, t || w);
97
98
  }, [
98
- B,
99
+ X,
99
100
  t,
100
101
  r,
101
- i,
102
- $,
103
- m,
104
- u
105
- ]), h = y(
106
- (V) => {
107
- switch (V) {
102
+ n,
103
+ w,
104
+ f,
105
+ h
106
+ ]), m = s(
107
+ (L) => {
108
+ switch (L) {
108
109
  case "teacher-card-view":
109
- T();
110
+ E();
110
111
  return;
111
112
  case "student-card-click":
112
- _();
113
+ T();
113
114
  return;
114
115
  case "teacher-card-unassign":
115
- s == null || s(r, t);
116
+ l == null || l(r, t);
116
117
  return;
117
118
  case "student-card-reattempt":
118
- l == null || l(r, t);
119
+ d == null || d(r, t);
119
120
  return;
120
121
  default:
121
- throw new Error(`No callback function for ${V}`);
122
+ throw new Error(`No callback function for ${L}`);
122
123
  }
123
124
  },
124
- [r, l, s, _, T, t]
125
- ), te = [
125
+ [r, d, l, T, E, t]
126
+ ), ce = s(() => {
127
+ H(!0);
128
+ }, []), ae = s(() => {
129
+ H(!1);
130
+ }, []), se = [
126
131
  {
127
132
  id: "teacher-card-view",
128
133
  label: "View",
129
- icon: M,
134
+ icon: V,
130
135
  disabled: !1,
131
- onClick: h
136
+ onClick: m
132
137
  },
133
138
  {
134
139
  id: "teacher-card-unassign",
135
140
  label: "Unassign",
136
- icon: Te,
137
- disabled: c ? !1 : !re,
138
- onClick: h
141
+ icon: Re,
142
+ disabled: c ? !1 : !oe,
143
+ onClick: m
139
144
  }
140
- ], ie = [
145
+ ], le = [
141
146
  {
142
147
  id: "student-card-click",
143
148
  label: "Review",
144
- icon: M,
145
- disabled: !g,
146
- onClick: h
149
+ icon: V,
150
+ disabled: !C,
151
+ onClick: m
147
152
  },
148
153
  {
149
154
  id: "student-card-reattempt",
150
155
  label: "Reattempt",
151
- icon: se,
152
- disabled: !C,
153
- onClick: h
156
+ icon: me,
157
+ disabled: !k,
158
+ onClick: m
154
159
  }
155
160
  ];
156
- return /* @__PURE__ */ n(fe, { $position: "relative", $width: "fit-content", children: [
157
- /* @__PURE__ */ e(he, { onClick: k ? _ : T, label: "homework-card", children: /* @__PURE__ */ n(
161
+ return /* @__PURE__ */ i(Ce, { $position: "relative", $width: "fit-content", children: [
162
+ /* @__PURE__ */ e(we, { onClick: _ ? T : E, label: "homework-card", children: /* @__PURE__ */ i(
158
163
  o,
159
164
  {
160
- ref: b,
165
+ ref: g,
161
166
  $widthX: 12.38,
162
167
  $position: "relative",
163
- $background: `${H || "ORANGE"}_2`,
168
+ $background: `${R || "ORANGE"}_2`,
169
+ onMouseEnter: ce,
170
+ onMouseLeave: ae,
164
171
  children: [
165
- /* @__PURE__ */ n(
166
- pe,
172
+ /* @__PURE__ */ i(
173
+ ke,
167
174
  {
168
175
  $flexDirection: "row",
169
176
  $alignItems: "center",
170
177
  $width: "100%",
171
178
  $heightX: 3.5,
172
- $bgImage: Z,
179
+ $bgImage: D,
173
180
  $gutterX: 0.78125,
174
181
  $flexGap: 8.5,
175
182
  $position: "relative",
176
183
  children: [
177
184
  /* @__PURE__ */ e(
178
- $e,
185
+ _e,
179
186
  {
180
187
  $width: 31,
181
188
  $height: 31,
@@ -184,45 +191,45 @@ const Ie = ({
184
191
  $position: "relative",
185
192
  $alignItems: "center",
186
193
  $justifyContent: "center",
187
- children: A && /* @__PURE__ */ e(A, { width: 20, height: 20 })
194
+ children: U ? /* @__PURE__ */ e(be, { src: ee }) : /* @__PURE__ */ e(N, { width: 20, height: 20 })
188
195
  }
189
196
  ),
190
- d === "MASTERY" ? /* @__PURE__ */ n(o, { children: [
191
- /* @__PURE__ */ e(o, { $background: "BLACK_T_60", $width: "fit-content", $gutterX: 0.25, children: /* @__PURE__ */ e(E, { $color: "WHITE", $renderAs: "ac4-black", children: "Smart" }) }),
192
- /* @__PURE__ */ e(E, { $renderAs: "ac4-black", children: "Practice" })
193
- ] }) : /* @__PURE__ */ e(E, { $renderAs: "ac4-black", children: J }),
194
- !!v && /* @__PURE__ */ e(we, { children: /* @__PURE__ */ e(be, { src: v, alt: "Chapter image" }) })
197
+ u === "MASTERY" ? /* @__PURE__ */ i(o, { children: [
198
+ /* @__PURE__ */ e(o, { $background: "BLACK_T_60", $width: "fit-content", $gutterX: 0.25, children: /* @__PURE__ */ e(y, { $color: "WHITE", $renderAs: "ac4-black", children: "Smart" }) }),
199
+ /* @__PURE__ */ e(y, { $renderAs: "ac4-black", children: "Practice" })
200
+ ] }) : /* @__PURE__ */ e(y, { $renderAs: "ac4-black", children: Q }),
201
+ !!x && /* @__PURE__ */ e(Te, { children: /* @__PURE__ */ e(Ee, { src: x, alt: "Chapter image" }) })
195
202
  ]
196
203
  }
197
204
  ),
198
205
  /* @__PURE__ */ e(
199
- le,
206
+ fe,
200
207
  {
201
- nodeType: d,
202
- state: Y,
203
- accuracy: q,
204
- dueDateTs: p
208
+ nodeType: u,
209
+ state: q,
210
+ accuracy: J,
211
+ dueDateTs: $
205
212
  }
206
213
  ),
207
- p && R && /* @__PURE__ */ e(
208
- me,
214
+ $ && A && /* @__PURE__ */ e(
215
+ ge,
209
216
  {
210
- dueDate: p * 1e3,
211
- unlockedOn: R * 1e3,
212
- progressBg: `${H || "ORANGE"}_4`
217
+ dueDate: $ * 1e3,
218
+ unlockedOn: A * 1e3,
219
+ progressBg: `${R || "ORANGE"}_4`
213
220
  }
214
221
  ),
215
- /* @__PURE__ */ n(o, { $gutterX: 0.75, $gapX: 1, $flexRowGapX: 0.5, $background: "WHITE", children: [
222
+ /* @__PURE__ */ i(o, { $gutterX: 0.75, $gapX: 1, $flexRowGapX: 0.5, $background: "WHITE", children: [
216
223
  /* @__PURE__ */ e(
217
224
  j,
218
225
  {
219
226
  renderAs: "primary",
220
227
  position: "bottom",
221
- tooltipItem: x,
222
- hidden: !N,
228
+ tooltipItem: v,
229
+ hidden: !ne,
223
230
  parentWidth: "auto",
224
231
  zIndex: 2,
225
- children: /* @__PURE__ */ e(o, { $heightX: 2.5, children: /* @__PURE__ */ e(ge, { ref: a, $renderAs: "ab3", children: x }) })
232
+ children: /* @__PURE__ */ e(o, { $heightX: 2.5, children: /* @__PURE__ */ e(Ie, { ref: a, $renderAs: "ab3", children: v }) })
226
233
  }
227
234
  ),
228
235
  /* @__PURE__ */ e(
@@ -232,24 +239,24 @@ const Ie = ({
232
239
  $heightX: 1.25,
233
240
  $alignItems: "center",
234
241
  $justifyContent: "space-between",
235
- children: /* @__PURE__ */ e(Ce, { $renderAs: "ub3", $color: "BLACK_T_60", children: L })
242
+ children: /* @__PURE__ */ e(ye, { $renderAs: "ub3", $color: "BLACK_T_60", children: z })
236
243
  }
237
244
  )
238
245
  ] })
239
246
  ]
240
247
  }
241
248
  ) }),
242
- k && !c && /* @__PURE__ */ e(
249
+ _ && !c && /* @__PURE__ */ e(
243
250
  K,
244
251
  {
245
252
  $width: 200,
246
- options: ie,
247
- triggerRef: b,
248
- visible: D,
253
+ options: le,
254
+ triggerRef: g,
255
+ visible: te,
249
256
  shouldOpenOnRight: !1
250
257
  }
251
258
  ),
252
- !k && /* @__PURE__ */ n(ke, { $position: "absolute", $width: "fit-content", $borderRadiusX: 2, children: [
259
+ !_ && /* @__PURE__ */ i(ve, { $position: "absolute", $width: "fit-content", $borderRadiusX: 2, children: [
253
260
  /* @__PURE__ */ e(
254
261
  j,
255
262
  {
@@ -260,13 +267,13 @@ const Ie = ({
260
267
  parentWidth: "100%",
261
268
  hidden: !c || O,
262
269
  children: /* @__PURE__ */ e(
263
- _e,
270
+ xe,
264
271
  {
265
272
  $alignItems: "center",
266
273
  $justifyContent: "center",
267
- ref: w,
268
- onClick: U,
269
- children: /* @__PURE__ */ e(ae, { width: 16, height: 16 })
274
+ ref: b,
275
+ onClick: re,
276
+ children: /* @__PURE__ */ e(he, { width: 16, height: 16 })
270
277
  }
271
278
  )
272
279
  }
@@ -274,16 +281,16 @@ const Ie = ({
274
281
  /* @__PURE__ */ e(
275
282
  K,
276
283
  {
277
- options: te,
278
- triggerRef: w,
284
+ options: se,
285
+ triggerRef: b,
279
286
  visible: O,
280
- shouldOpenOnRight: F
287
+ shouldOpenOnRight: Y
281
288
  }
282
289
  )
283
290
  ] })
284
291
  ] });
285
- }, Ke = ne(Ie);
292
+ }, Je = de(Ae);
286
293
  export {
287
- Ke as default
294
+ Je as default
288
295
  };
289
296
  //# sourceMappingURL=homework-card.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"homework-card.js","sources":["../../../src/features/homework/homework-card.tsx"],"sourcesContent":["import type {\n INodeCardCallbacks,\n INodeDataProps,\n} from '../chapters-v2/comps/node-card/node-card-types';\nimport type { TUserTypes } from '../ui/types';\nimport type { IHomeworkData } from './hw-card-list/api/get-homeworks';\n\nimport { memo, useCallback, useLayoutEffect, useRef, useState } from 'react';\n\nimport Eye2Icon from '../../assets/line-icons/icons/eye2';\nimport MoreVerticalIcon from '../../assets/line-icons/icons/more-vertical';\nimport RedoIcon from '../../assets/line-icons/icons/redo';\nimport NodeCardTags from '../chapters-v2/comps/node-card/node-card-tags';\nimport { getNodeTypeBasedBgImage } from '../chapters-v2/utils';\nimport { getNodeCardBasedIcon } from '../chapters-v2/utils/node-card-utils';\nimport ArrowTooltip from '../ui/arrow-tooltip/arrow-tooltip';\nimport Clickable from '../ui/buttons/clickable/clickable';\nimport useContextMenuClickHandler from '../ui/hooks/use-context-menu-click-handler';\nimport FlexView from '../ui/layout/flex-view';\nimport Text from '../ui/text/text';\nimport CardMenuOptions from './card-menu-options';\nimport NodeProgress from './node-progress';\nimport * as Styled from './styles';\n\ninterface IHomeworkCardProps extends INodeCardCallbacks {\n header: string;\n nodeData: INodeDataProps | IHomeworkData;\n subHeader: string;\n userType: TUserTypes;\n userMilestoneId?: string;\n renderAs: 'homework' | 'milestone';\n shouldOpenOnRight: boolean;\n}\n\nconst HomeworkCard = ({\n header,\n nodeData,\n subHeader,\n userType,\n userMilestoneId,\n onNodeUnassign,\n onNodeReattempt,\n onNodeView,\n onNodeReview,\n onNodeAttempt,\n renderAs,\n shouldOpenOnRight,\n}: IHomeworkCardProps) => {\n const isHomeWork = renderAs === 'homework';\n const {\n node_type: nodeType,\n state,\n accuracy,\n due_date_ts: dueDateTs,\n image_url: imageUrl,\n image_hue: imageHue,\n card_header: cardHeader = '',\n permissions,\n user_node_id: userNodeId,\n unlocked_on_ts: unlockedOnTs,\n user_milestone_id: milestoneId,\n } = nodeData;\n const bgImage = getNodeTypeBasedBgImage(nodeType);\n const NodeCardIcon = getNodeCardBasedIcon(nodeType);\n const teacherContainerRef = useRef<HTMLDivElement>(null);\n const studentContainerRef = useRef<HTMLDivElement>(null);\n const titleTextRef = useRef<HTMLDivElement>(null);\n const { menuVisible: teacherMenuVisible, onMenuClick: onTeacherMenuClick } =\n useContextMenuClickHandler(teacherContainerRef);\n const { menuVisible: studentMenuVisible, onMenuClick: onStudentMenuClick } =\n useContextMenuClickHandler(studentContainerRef);\n const [showTitleTooltip, setShowTitleTooltip] = useState(false);\n\n const {\n can_start: canStart,\n can_resume: canResume,\n can_review: canReview,\n can_teacher_review: canTeacherReview,\n can_unassign: canUnassign,\n can_reset: canReset,\n } = permissions;\n const isStudent = userType === 'STUDENT';\n\n useLayoutEffect(() => {\n if (\n titleTextRef.current &&\n titleTextRef.current.scrollHeight > titleTextRef.current.clientHeight\n ) {\n setShowTitleTooltip(true);\n }\n }, [titleTextRef]);\n\n const onStudentView = useCallback(() => {\n if (canStart || canResume) {\n if (typeof onNodeAttempt !== 'function') {\n throw new Error('onNodeAttempt must be a function');\n }\n\n onNodeAttempt(nodeData);\n\n return;\n }\n\n if (canReset && !isHomeWork) {\n onStudentMenuClick();\n\n return;\n }\n\n if (canReview) {\n if (typeof onNodeReview !== 'function') {\n throw new Error('onReview must be a function');\n }\n\n if (!userNodeId) {\n throw new Error('user node id must be present to review the sheet');\n }\n onNodeReview(nodeData, userMilestoneId);\n\n return;\n }\n }, [\n canStart,\n canResume,\n canReset,\n isHomeWork,\n canReview,\n onNodeAttempt,\n nodeData,\n onStudentMenuClick,\n onNodeReview,\n userNodeId,\n userMilestoneId,\n ]);\n\n const onTeacherView = useCallback(() => {\n if (canTeacherReview) {\n if (typeof onNodeReview !== 'function') {\n throw new Error('onNodeReview must be a function');\n }\n\n if (!userNodeId) {\n throw new Error('user node id must be present to review the sheet');\n }\n\n onNodeReview(nodeData, userMilestoneId || milestoneId);\n\n return;\n }\n\n if (typeof onNodeView !== 'function') {\n throw new Error('onNodeView must be a function');\n }\n\n onNodeView(nodeData, userMilestoneId || milestoneId);\n }, [\n canTeacherReview,\n userMilestoneId,\n nodeData,\n onNodeReview,\n milestoneId,\n onNodeView,\n userNodeId,\n ]);\n\n const handleOnMenuOptionClick = useCallback(\n (optionId: string) => {\n switch (optionId) {\n case 'teacher-card-view':\n onTeacherView();\n\n return;\n case 'student-card-click':\n onStudentView();\n\n return;\n case 'teacher-card-unassign':\n onNodeUnassign?.(nodeData, userMilestoneId);\n\n return;\n case 'student-card-reattempt':\n onNodeReattempt?.(nodeData, userMilestoneId);\n\n return;\n default:\n throw new Error(`No callback function for ${optionId}`);\n }\n },\n [nodeData, onNodeReattempt, onNodeUnassign, onStudentView, onTeacherView, userMilestoneId],\n );\n\n const teacherOptions = [\n {\n id: 'teacher-card-view',\n label: 'View',\n icon: Eye2Icon,\n disabled: false,\n onClick: handleOnMenuOptionClick,\n },\n {\n id: 'teacher-card-unassign',\n label: 'Unassign',\n icon: Styled.StyledMinus2Icon,\n disabled: isHomeWork ? false : !canUnassign,\n onClick: handleOnMenuOptionClick,\n },\n ];\n\n const studentOptions = [\n {\n id: 'student-card-click',\n label: 'Review',\n icon: Eye2Icon,\n disabled: !canReview,\n onClick: handleOnMenuOptionClick,\n },\n {\n id: 'student-card-reattempt',\n label: 'Reattempt',\n icon: RedoIcon,\n disabled: !canReset,\n onClick: handleOnMenuOptionClick,\n },\n ];\n\n return (\n <Styled.CardContainer $position=\"relative\" $width=\"fit-content\">\n <Clickable onClick={isStudent ? onStudentView : onTeacherView} label=\"homework-card\">\n <FlexView\n ref={studentContainerRef}\n $widthX={12.38}\n $position=\"relative\"\n $background={`${imageHue || 'ORANGE'}_2`}\n >\n <Styled.CardWrapper\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $width=\"100%\"\n $heightX={3.5}\n $bgImage={bgImage}\n $gutterX={0.78125}\n $flexGap={8.5}\n $position=\"relative\"\n >\n <Styled.IconWrapper\n $width={31}\n $height={31}\n $borderRadiusX={2}\n $background=\"WHITE_1\"\n $position=\"relative\"\n $alignItems=\"center\"\n $justifyContent=\"center\"\n >\n {NodeCardIcon && <NodeCardIcon width={20} height={20} />}\n </Styled.IconWrapper>\n {nodeType === 'MASTERY' ? (\n <FlexView>\n <FlexView $background=\"BLACK_T_60\" $width=\"fit-content\" $gutterX={0.25}>\n <Text $color=\"WHITE\" $renderAs=\"ac4-black\">\n Smart\n </Text>\n </FlexView>\n <Text $renderAs=\"ac4-black\">Practice</Text>\n </FlexView>\n ) : (\n <Text $renderAs=\"ac4-black\">{cardHeader}</Text>\n )}\n\n {!!imageUrl && (\n <Styled.BannerImageWrapper>\n <Styled.BannerImage src={imageUrl} alt=\"Chapter image\" />\n </Styled.BannerImageWrapper>\n )}\n </Styled.CardWrapper>\n <NodeCardTags\n nodeType={nodeType}\n state={state}\n accuracy={accuracy}\n dueDateTs={dueDateTs}\n />\n {dueDateTs && unlockedOnTs && (\n <NodeProgress\n dueDate={dueDateTs * 1000}\n unlockedOn={unlockedOnTs * 1000}\n progressBg={`${imageHue || 'ORANGE'}_4`}\n />\n )}\n <FlexView $gutterX={0.75} $gapX={1} $flexRowGapX={0.5} $background=\"WHITE\">\n <ArrowTooltip\n renderAs=\"primary\"\n position=\"bottom\"\n tooltipItem={header}\n hidden={!showTitleTooltip}\n parentWidth=\"auto\"\n zIndex={2}\n >\n <FlexView $heightX={2.5}>\n <Styled.HeaderText ref={titleTextRef} $renderAs=\"ab3\">\n {header}\n </Styled.HeaderText>\n </FlexView>\n </ArrowTooltip>\n <FlexView\n $flexDirection=\"row\"\n $heightX={1.25}\n $alignItems=\"center\"\n $justifyContent=\"space-between\"\n >\n <Styled.SubHeaderText $renderAs=\"ub3\" $color=\"BLACK_T_60\">\n {subHeader}\n </Styled.SubHeaderText>\n </FlexView>\n </FlexView>\n </FlexView>\n </Clickable>\n {isStudent && !isHomeWork && (\n <CardMenuOptions\n $width={200}\n options={studentOptions}\n triggerRef={studentContainerRef}\n visible={studentMenuVisible}\n shouldOpenOnRight={false}\n />\n )}\n {!isStudent && (\n <Styled.MenuWrapper $position=\"absolute\" $width=\"fit-content\" $borderRadiusX={2}>\n <ArrowTooltip\n renderAs=\"primary\"\n tooltipItem=\"Review\"\n position=\"bottom\"\n zIndex={5}\n parentWidth=\"100%\"\n hidden={!isHomeWork || teacherMenuVisible}\n >\n <Styled.CardKebabMenuWrapper\n $alignItems=\"center\"\n $justifyContent=\"center\"\n ref={teacherContainerRef}\n onClick={onTeacherMenuClick}\n >\n <MoreVerticalIcon width={16} height={16} />\n </Styled.CardKebabMenuWrapper>\n </ArrowTooltip>\n <CardMenuOptions\n options={teacherOptions}\n triggerRef={teacherContainerRef}\n visible={teacherMenuVisible}\n shouldOpenOnRight={shouldOpenOnRight}\n />\n </Styled.MenuWrapper>\n )}\n </Styled.CardContainer>\n );\n};\n\nexport default memo(HomeworkCard);\n"],"names":["HomeworkCard","header","nodeData","subHeader","userType","userMilestoneId","onNodeUnassign","onNodeReattempt","onNodeView","onNodeReview","onNodeAttempt","renderAs","shouldOpenOnRight","isHomeWork","nodeType","state","accuracy","dueDateTs","imageUrl","imageHue","cardHeader","permissions","userNodeId","unlockedOnTs","milestoneId","bgImage","getNodeTypeBasedBgImage","NodeCardIcon","getNodeCardBasedIcon","teacherContainerRef","useRef","studentContainerRef","titleTextRef","teacherMenuVisible","onTeacherMenuClick","useContextMenuClickHandler","studentMenuVisible","onStudentMenuClick","showTitleTooltip","setShowTitleTooltip","useState","canStart","canResume","canReview","canTeacherReview","canUnassign","canReset","isStudent","useLayoutEffect","onStudentView","useCallback","onTeacherView","handleOnMenuOptionClick","optionId","teacherOptions","Eye2Icon","Styled.StyledMinus2Icon","studentOptions","RedoIcon","Styled.CardContainer","jsx","Clickable","jsxs","FlexView","Styled.CardWrapper","Styled.IconWrapper","Text","Styled.BannerImageWrapper","Styled.BannerImage","NodeCardTags","NodeProgress","ArrowTooltip","Styled.HeaderText","Styled.SubHeaderText","CardMenuOptions","Styled.MenuWrapper","Styled.CardKebabMenuWrapper","MoreVerticalIcon","HomeworkCard$1","memo"],"mappings":"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"}
1
+ {"version":3,"file":"homework-card.js","sources":["../../../src/features/homework/homework-card.tsx"],"sourcesContent":["import type {\n INodeCardCallbacks,\n INodeDataProps,\n} from '../chapters-v2/comps/node-card/node-card-types';\nimport type { TUserTypes } from '../ui/types';\nimport type { IHomeworkData } from './hw-card-list/api/get-homeworks';\n\nimport { memo, useCallback, useLayoutEffect, useRef, useState } from 'react';\n\nimport Eye2Icon from '../../assets/line-icons/icons/eye2';\nimport MoreVerticalIcon from '../../assets/line-icons/icons/more-vertical';\nimport RedoIcon from '../../assets/line-icons/icons/redo';\nimport NodeCardTags from '../chapters-v2/comps/node-card/node-card-tags';\nimport { getNodeTypeBasedBgImage } from '../chapters-v2/utils';\nimport { getNodeCardBasedIcon } from '../chapters-v2/utils/node-card-utils';\nimport ArrowTooltip from '../ui/arrow-tooltip/arrow-tooltip';\nimport Clickable from '../ui/buttons/clickable/clickable';\nimport useContextMenuClickHandler from '../ui/hooks/use-context-menu-click-handler';\nimport FlexView from '../ui/layout/flex-view';\nimport LottieAnimation from '../ui/lottie-animation/lottie-animation';\nimport Text from '../ui/text/text';\nimport CardMenuOptions from './card-menu-options';\nimport NodeProgress from './node-progress';\nimport * as Styled from './styles';\n\ninterface IHomeworkCardProps extends INodeCardCallbacks {\n header: string;\n nodeData: INodeDataProps | IHomeworkData;\n subHeader: string;\n userType: TUserTypes;\n userMilestoneId?: string;\n renderAs: 'homework' | 'milestone';\n shouldOpenOnRight: boolean;\n}\n\nconst HomeworkCard = ({\n header,\n nodeData,\n subHeader,\n userType,\n userMilestoneId,\n onNodeUnassign,\n onNodeReattempt,\n onNodeView,\n onNodeReview,\n onNodeAttempt,\n renderAs,\n shouldOpenOnRight,\n}: IHomeworkCardProps) => {\n const isHomeWork = renderAs === 'homework';\n const {\n node_type: nodeType,\n state,\n accuracy,\n due_date_ts: dueDateTs,\n image_url: imageUrl,\n image_hue: imageHue,\n card_header: cardHeader = '',\n permissions,\n user_node_id: userNodeId,\n unlocked_on_ts: unlockedOnTs,\n user_milestone_id: milestoneId,\n } = nodeData;\n\n const [renderLottie, setRenderLottie] = useState(false);\n const bgImage = getNodeTypeBasedBgImage(nodeType);\n const { icon: NodeCardIcon, lottie: nodeCardLottie } = getNodeCardBasedIcon(nodeType);\n const teacherContainerRef = useRef<HTMLDivElement>(null);\n const studentContainerRef = useRef<HTMLDivElement>(null);\n const titleTextRef = useRef<HTMLDivElement>(null);\n const { menuVisible: teacherMenuVisible, onMenuClick: onTeacherMenuClick } =\n useContextMenuClickHandler(teacherContainerRef);\n const { menuVisible: studentMenuVisible, onMenuClick: onStudentMenuClick } =\n useContextMenuClickHandler(studentContainerRef);\n const [showTitleTooltip, setShowTitleTooltip] = useState(false);\n\n const {\n can_start: canStart,\n can_resume: canResume,\n can_review: canReview,\n can_teacher_review: canTeacherReview,\n can_unassign: canUnassign,\n can_reset: canReset,\n } = permissions;\n const isStudent = userType === 'STUDENT';\n\n useLayoutEffect(() => {\n if (\n titleTextRef.current &&\n titleTextRef.current.scrollHeight > titleTextRef.current.clientHeight\n ) {\n setShowTitleTooltip(true);\n }\n }, [titleTextRef]);\n\n const onStudentView = useCallback(() => {\n if (canStart || canResume) {\n if (typeof onNodeAttempt !== 'function') {\n throw new Error('onNodeAttempt must be a function');\n }\n\n onNodeAttempt(nodeData);\n\n return;\n }\n\n if (canReset && !isHomeWork) {\n onStudentMenuClick();\n\n return;\n }\n\n if (canReview) {\n if (typeof onNodeReview !== 'function') {\n throw new Error('onReview must be a function');\n }\n\n if (!userNodeId) {\n throw new Error('user node id must be present to review the sheet');\n }\n onNodeReview(nodeData, userMilestoneId);\n\n return;\n }\n }, [\n canStart,\n canResume,\n canReset,\n isHomeWork,\n canReview,\n onNodeAttempt,\n nodeData,\n onStudentMenuClick,\n onNodeReview,\n userNodeId,\n userMilestoneId,\n ]);\n\n const onTeacherView = useCallback(() => {\n if (canTeacherReview) {\n if (typeof onNodeReview !== 'function') {\n throw new Error('onNodeReview must be a function');\n }\n\n if (!userNodeId) {\n throw new Error('user node id must be present to review the sheet');\n }\n\n onNodeReview(nodeData, userMilestoneId || milestoneId);\n\n return;\n }\n\n if (typeof onNodeView !== 'function') {\n throw new Error('onNodeView must be a function');\n }\n\n onNodeView(nodeData, userMilestoneId || milestoneId);\n }, [\n canTeacherReview,\n userMilestoneId,\n nodeData,\n onNodeReview,\n milestoneId,\n onNodeView,\n userNodeId,\n ]);\n\n const handleOnMenuOptionClick = useCallback(\n (optionId: string) => {\n switch (optionId) {\n case 'teacher-card-view':\n onTeacherView();\n\n return;\n case 'student-card-click':\n onStudentView();\n\n return;\n case 'teacher-card-unassign':\n onNodeUnassign?.(nodeData, userMilestoneId);\n\n return;\n case 'student-card-reattempt':\n onNodeReattempt?.(nodeData, userMilestoneId);\n\n return;\n default:\n throw new Error(`No callback function for ${optionId}`);\n }\n },\n [nodeData, onNodeReattempt, onNodeUnassign, onStudentView, onTeacherView, userMilestoneId],\n );\n\n const handleOnMouseEnter = useCallback(() => {\n setRenderLottie(true);\n }, []);\n\n const handleOnMouseLeave = useCallback(() => {\n setRenderLottie(false);\n }, []);\n\n const teacherOptions = [\n {\n id: 'teacher-card-view',\n label: 'View',\n icon: Eye2Icon,\n disabled: false,\n onClick: handleOnMenuOptionClick,\n },\n {\n id: 'teacher-card-unassign',\n label: 'Unassign',\n icon: Styled.StyledMinus2Icon,\n disabled: isHomeWork ? false : !canUnassign,\n onClick: handleOnMenuOptionClick,\n },\n ];\n\n const studentOptions = [\n {\n id: 'student-card-click',\n label: 'Review',\n icon: Eye2Icon,\n disabled: !canReview,\n onClick: handleOnMenuOptionClick,\n },\n {\n id: 'student-card-reattempt',\n label: 'Reattempt',\n icon: RedoIcon,\n disabled: !canReset,\n onClick: handleOnMenuOptionClick,\n },\n ];\n\n return (\n <Styled.CardContainer $position=\"relative\" $width=\"fit-content\">\n <Clickable onClick={isStudent ? onStudentView : onTeacherView} label=\"homework-card\">\n <FlexView\n ref={studentContainerRef}\n $widthX={12.38}\n $position=\"relative\"\n $background={`${imageHue || 'ORANGE'}_2`}\n onMouseEnter={handleOnMouseEnter}\n onMouseLeave={handleOnMouseLeave}\n >\n <Styled.CardWrapper\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $width=\"100%\"\n $heightX={3.5}\n $bgImage={bgImage}\n $gutterX={0.78125}\n $flexGap={8.5}\n $position=\"relative\"\n >\n <Styled.IconWrapper\n $width={31}\n $height={31}\n $borderRadiusX={2}\n $background=\"WHITE_1\"\n $position=\"relative\"\n $alignItems=\"center\"\n $justifyContent=\"center\"\n >\n {renderLottie ? (\n <LottieAnimation src={nodeCardLottie} />\n ) : (\n <NodeCardIcon width={20} height={20} />\n )}\n </Styled.IconWrapper>\n {nodeType === 'MASTERY' ? (\n <FlexView>\n <FlexView $background=\"BLACK_T_60\" $width=\"fit-content\" $gutterX={0.25}>\n <Text $color=\"WHITE\" $renderAs=\"ac4-black\">\n Smart\n </Text>\n </FlexView>\n <Text $renderAs=\"ac4-black\">Practice</Text>\n </FlexView>\n ) : (\n <Text $renderAs=\"ac4-black\">{cardHeader}</Text>\n )}\n\n {!!imageUrl && (\n <Styled.BannerImageWrapper>\n <Styled.BannerImage src={imageUrl} alt=\"Chapter image\" />\n </Styled.BannerImageWrapper>\n )}\n </Styled.CardWrapper>\n <NodeCardTags\n nodeType={nodeType}\n state={state}\n accuracy={accuracy}\n dueDateTs={dueDateTs}\n />\n {dueDateTs && unlockedOnTs && (\n <NodeProgress\n dueDate={dueDateTs * 1000}\n unlockedOn={unlockedOnTs * 1000}\n progressBg={`${imageHue || 'ORANGE'}_4`}\n />\n )}\n <FlexView $gutterX={0.75} $gapX={1} $flexRowGapX={0.5} $background=\"WHITE\">\n <ArrowTooltip\n renderAs=\"primary\"\n position=\"bottom\"\n tooltipItem={header}\n hidden={!showTitleTooltip}\n parentWidth=\"auto\"\n zIndex={2}\n >\n <FlexView $heightX={2.5}>\n <Styled.HeaderText ref={titleTextRef} $renderAs=\"ab3\">\n {header}\n </Styled.HeaderText>\n </FlexView>\n </ArrowTooltip>\n <FlexView\n $flexDirection=\"row\"\n $heightX={1.25}\n $alignItems=\"center\"\n $justifyContent=\"space-between\"\n >\n <Styled.SubHeaderText $renderAs=\"ub3\" $color=\"BLACK_T_60\">\n {subHeader}\n </Styled.SubHeaderText>\n </FlexView>\n </FlexView>\n </FlexView>\n </Clickable>\n {isStudent && !isHomeWork && (\n <CardMenuOptions\n $width={200}\n options={studentOptions}\n triggerRef={studentContainerRef}\n visible={studentMenuVisible}\n shouldOpenOnRight={false}\n />\n )}\n {!isStudent && (\n <Styled.MenuWrapper $position=\"absolute\" $width=\"fit-content\" $borderRadiusX={2}>\n <ArrowTooltip\n renderAs=\"primary\"\n tooltipItem=\"Review\"\n position=\"bottom\"\n zIndex={5}\n parentWidth=\"100%\"\n hidden={!isHomeWork || teacherMenuVisible}\n >\n <Styled.CardKebabMenuWrapper\n $alignItems=\"center\"\n $justifyContent=\"center\"\n ref={teacherContainerRef}\n onClick={onTeacherMenuClick}\n >\n <MoreVerticalIcon width={16} height={16} />\n </Styled.CardKebabMenuWrapper>\n </ArrowTooltip>\n <CardMenuOptions\n options={teacherOptions}\n triggerRef={teacherContainerRef}\n visible={teacherMenuVisible}\n shouldOpenOnRight={shouldOpenOnRight}\n />\n </Styled.MenuWrapper>\n )}\n </Styled.CardContainer>\n );\n};\n\nexport default memo(HomeworkCard);\n"],"names":["HomeworkCard","header","nodeData","subHeader","userType","userMilestoneId","onNodeUnassign","onNodeReattempt","onNodeView","onNodeReview","onNodeAttempt","renderAs","shouldOpenOnRight","isHomeWork","nodeType","state","accuracy","dueDateTs","imageUrl","imageHue","cardHeader","permissions","userNodeId","unlockedOnTs","milestoneId","renderLottie","setRenderLottie","useState","bgImage","getNodeTypeBasedBgImage","NodeCardIcon","nodeCardLottie","getNodeCardBasedIcon","teacherContainerRef","useRef","studentContainerRef","titleTextRef","teacherMenuVisible","onTeacherMenuClick","useContextMenuClickHandler","studentMenuVisible","onStudentMenuClick","showTitleTooltip","setShowTitleTooltip","canStart","canResume","canReview","canTeacherReview","canUnassign","canReset","isStudent","useLayoutEffect","onStudentView","useCallback","onTeacherView","handleOnMenuOptionClick","optionId","handleOnMouseEnter","handleOnMouseLeave","teacherOptions","Eye2Icon","Styled.StyledMinus2Icon","studentOptions","RedoIcon","Styled.CardContainer","jsx","Clickable","jsxs","FlexView","Styled.CardWrapper","Styled.IconWrapper","LottieAnimation","Text","Styled.BannerImageWrapper","Styled.BannerImage","NodeCardTags","NodeProgress","ArrowTooltip","Styled.HeaderText","Styled.SubHeaderText","CardMenuOptions","Styled.MenuWrapper","Styled.CardKebabMenuWrapper","MoreVerticalIcon","HomeworkCard$1","memo"],"mappings":"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"}