@cuemath/leap 2.8.61-as7 → 2.8.61-as9
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/features/homework/homework-card.js +140 -128
- package/dist/features/homework/homework-card.js.map +1 -1
- package/dist/features/homework/hw-card-list/hw-card-list.js +45 -43
- package/dist/features/homework/hw-card-list/hw-card-list.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/package.json +1 -1
@@ -1,172 +1,181 @@
|
|
1
|
-
import { jsxs as
|
2
|
-
import { memo as
|
3
|
-
import
|
4
|
-
import
|
5
|
-
import
|
6
|
-
import
|
7
|
-
import { getNodeTypeBasedBgImage as
|
8
|
-
import { getNodeCardBasedIcon as
|
9
|
-
import
|
10
|
-
import
|
11
|
-
import
|
12
|
-
import
|
13
|
-
import
|
14
|
-
import
|
15
|
-
import
|
16
|
-
import { CardContainer as
|
17
|
-
const
|
1
|
+
import { jsxs as n, jsx as e } from "react/jsx-runtime";
|
2
|
+
import { memo as ne, useRef as y, useState as oe, useLayoutEffect as ce, useCallback as E } 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";
|
9
|
+
import j from "../ui/arrow-tooltip/arrow-tooltip.js";
|
10
|
+
import he from "../ui/buttons/clickable/clickable.js";
|
11
|
+
import G from "../ui/hooks/use-context-menu-click-handler.js";
|
12
|
+
import o from "../ui/layout/flex-view.js";
|
13
|
+
import I from "../ui/text/text.js";
|
14
|
+
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 ye = ({
|
18
18
|
header: x,
|
19
19
|
nodeData: r,
|
20
|
-
subHeader:
|
21
|
-
userType:
|
20
|
+
subHeader: L,
|
21
|
+
userType: P,
|
22
22
|
userMilestoneId: t,
|
23
|
-
onNodeUnassign:
|
24
|
-
onNodeReattempt:
|
25
|
-
onNodeView:
|
23
|
+
onNodeUnassign: s,
|
24
|
+
onNodeReattempt: l,
|
25
|
+
onNodeView: m,
|
26
26
|
onNodeReview: i,
|
27
|
-
onNodeAttempt:
|
28
|
-
renderAs:
|
29
|
-
shouldOpenOnRight:
|
27
|
+
onNodeAttempt: f,
|
28
|
+
renderAs: z,
|
29
|
+
shouldOpenOnRight: F
|
30
30
|
}) => {
|
31
|
-
const
|
32
|
-
node_type:
|
33
|
-
state:
|
34
|
-
accuracy:
|
31
|
+
const c = z === "homework", {
|
32
|
+
node_type: d,
|
33
|
+
state: Y,
|
34
|
+
accuracy: q,
|
35
35
|
due_date_ts: p,
|
36
|
-
image_url:
|
37
|
-
image_hue:
|
38
|
-
card_header:
|
39
|
-
permissions:
|
40
|
-
user_node_id:
|
41
|
-
unlocked_on_ts:
|
42
|
-
|
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 = y(null), b = y(null), a = y(null), { menuVisible: O, onMenuClick: U } = G(w), { menuVisible: D, onMenuClick: S } = G(b), [N, ee] = oe(!1), {
|
43
44
|
can_start: W,
|
44
|
-
can_resume:
|
45
|
-
can_review:
|
46
|
-
can_teacher_review:
|
47
|
-
can_unassign:
|
48
|
-
can_reset:
|
49
|
-
} =
|
50
|
-
|
51
|
-
|
52
|
-
}, [
|
53
|
-
const
|
54
|
-
if (W ||
|
55
|
-
if (typeof
|
45
|
+
can_resume: X,
|
46
|
+
can_review: g,
|
47
|
+
can_teacher_review: B,
|
48
|
+
can_unassign: re,
|
49
|
+
can_reset: C
|
50
|
+
} = Q, k = P === "STUDENT";
|
51
|
+
ce(() => {
|
52
|
+
a.current && a.current.scrollHeight > a.current.clientHeight && ee(!0);
|
53
|
+
}, [a]);
|
54
|
+
const _ = E(() => {
|
55
|
+
if (W || X) {
|
56
|
+
if (typeof f != "function")
|
56
57
|
throw new Error("onNodeAttempt must be a function");
|
57
|
-
|
58
|
+
f(r);
|
58
59
|
return;
|
59
60
|
}
|
60
|
-
if (
|
61
|
-
|
61
|
+
if (C && !c) {
|
62
|
+
S();
|
62
63
|
return;
|
63
64
|
}
|
64
|
-
if (
|
65
|
+
if (g) {
|
65
66
|
if (typeof i != "function")
|
66
67
|
throw new Error("onReview must be a function");
|
67
|
-
if (!
|
68
|
+
if (!u)
|
68
69
|
throw new Error("user node id must be present to review the sheet");
|
69
70
|
i(r, t);
|
70
71
|
return;
|
71
72
|
}
|
72
73
|
}, [
|
73
74
|
W,
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
75
|
+
X,
|
76
|
+
C,
|
77
|
+
c,
|
78
|
+
g,
|
79
|
+
f,
|
79
80
|
r,
|
80
|
-
|
81
|
+
S,
|
81
82
|
i,
|
82
|
-
|
83
|
+
u,
|
83
84
|
t
|
84
|
-
]), T =
|
85
|
-
if (
|
85
|
+
]), T = E(() => {
|
86
|
+
if (B) {
|
86
87
|
if (typeof i != "function")
|
87
88
|
throw new Error("onNodeReview must be a function");
|
88
|
-
if (!
|
89
|
+
if (!u)
|
89
90
|
throw new Error("user node id must be present to review the sheet");
|
90
|
-
i(r, t);
|
91
|
+
i(r, t || $);
|
91
92
|
return;
|
92
93
|
}
|
93
|
-
if (typeof
|
94
|
+
if (typeof m != "function")
|
94
95
|
throw new Error("onNodeView must be a function");
|
95
|
-
|
96
|
-
}, [
|
97
|
-
|
98
|
-
|
96
|
+
m(r, t || $);
|
97
|
+
}, [
|
98
|
+
B,
|
99
|
+
t,
|
100
|
+
r,
|
101
|
+
i,
|
102
|
+
$,
|
103
|
+
m,
|
104
|
+
u
|
105
|
+
]), h = E(
|
106
|
+
(V) => {
|
107
|
+
switch (V) {
|
99
108
|
case "teacher-card-view":
|
100
109
|
T();
|
101
110
|
return;
|
102
111
|
case "student-card-click":
|
103
|
-
|
112
|
+
_();
|
104
113
|
return;
|
105
114
|
case "teacher-card-unassign":
|
106
|
-
|
115
|
+
s == null || s(r, t);
|
107
116
|
return;
|
108
117
|
case "student-card-reattempt":
|
109
|
-
|
118
|
+
l == null || l(r, t);
|
110
119
|
return;
|
111
120
|
default:
|
112
|
-
throw new Error(`No callback function for ${
|
121
|
+
throw new Error(`No callback function for ${V}`);
|
113
122
|
}
|
114
123
|
},
|
115
|
-
[r,
|
116
|
-
),
|
124
|
+
[r, l, s, _, T, t]
|
125
|
+
), te = [
|
117
126
|
{
|
118
127
|
id: "teacher-card-view",
|
119
128
|
label: "View",
|
120
|
-
icon:
|
129
|
+
icon: M,
|
121
130
|
disabled: !1,
|
122
|
-
onClick:
|
131
|
+
onClick: h
|
123
132
|
},
|
124
133
|
{
|
125
134
|
id: "teacher-card-unassign",
|
126
135
|
label: "Unassign",
|
127
136
|
icon: Te,
|
128
|
-
disabled: !
|
129
|
-
onClick:
|
137
|
+
disabled: c ? !1 : !re,
|
138
|
+
onClick: h
|
130
139
|
}
|
131
|
-
],
|
140
|
+
], ie = [
|
132
141
|
{
|
133
142
|
id: "student-card-click",
|
134
143
|
label: "Review",
|
135
|
-
icon:
|
136
|
-
disabled:
|
137
|
-
onClick:
|
144
|
+
icon: M,
|
145
|
+
disabled: !g,
|
146
|
+
onClick: h
|
138
147
|
},
|
139
148
|
{
|
140
149
|
id: "student-card-reattempt",
|
141
150
|
label: "Reattempt",
|
142
|
-
icon:
|
143
|
-
disabled: !
|
144
|
-
onClick:
|
151
|
+
icon: se,
|
152
|
+
disabled: !C,
|
153
|
+
onClick: h
|
145
154
|
}
|
146
155
|
];
|
147
|
-
return /* @__PURE__ */
|
148
|
-
/* @__PURE__ */ e(
|
149
|
-
|
156
|
+
return /* @__PURE__ */ n(fe, { $position: "relative", $width: "fit-content", children: [
|
157
|
+
/* @__PURE__ */ e(he, { onClick: k ? _ : T, label: "homework-card", children: /* @__PURE__ */ n(
|
158
|
+
o,
|
150
159
|
{
|
151
|
-
ref:
|
160
|
+
ref: b,
|
152
161
|
$widthX: 12.38,
|
153
162
|
$position: "relative",
|
154
|
-
$background: `${
|
163
|
+
$background: `${H || "ORANGE"}_2`,
|
155
164
|
children: [
|
156
|
-
/* @__PURE__ */
|
157
|
-
|
165
|
+
/* @__PURE__ */ n(
|
166
|
+
pe,
|
158
167
|
{
|
159
168
|
$flexDirection: "row",
|
160
169
|
$alignItems: "center",
|
161
170
|
$width: "100%",
|
162
171
|
$heightX: 3.5,
|
163
|
-
$bgImage:
|
172
|
+
$bgImage: Z,
|
164
173
|
$gutterX: 0.78125,
|
165
174
|
$flexGap: 8.5,
|
166
175
|
$position: "relative",
|
167
176
|
children: [
|
168
177
|
/* @__PURE__ */ e(
|
169
|
-
|
178
|
+
$e,
|
170
179
|
{
|
171
180
|
$width: 31,
|
172
181
|
$height: 31,
|
@@ -175,102 +184,105 @@ const _e = ({
|
|
175
184
|
$position: "relative",
|
176
185
|
$alignItems: "center",
|
177
186
|
$justifyContent: "center",
|
178
|
-
children:
|
187
|
+
children: A && /* @__PURE__ */ e(A, { width: 20, height: 20 })
|
179
188
|
}
|
180
189
|
),
|
181
|
-
/* @__PURE__ */
|
182
|
-
|
190
|
+
d === "MASTERY" ? /* @__PURE__ */ n(o, { children: [
|
191
|
+
/* @__PURE__ */ e(o, { $background: "BLACK_T_60", $width: "fit-content", $gutterX: 0.25, children: /* @__PURE__ */ e(I, { $color: "WHITE", $renderAs: "ac4-black", children: "Smart" }) }),
|
192
|
+
/* @__PURE__ */ e(I, { $renderAs: "ac4-black", children: "Practice" })
|
193
|
+
] }) : /* @__PURE__ */ e(I, { $renderAs: "ac4-black", children: J }),
|
194
|
+
!!v && /* @__PURE__ */ e(we, { children: /* @__PURE__ */ e(be, { src: v, alt: "Chapter image" }) })
|
183
195
|
]
|
184
196
|
}
|
185
197
|
),
|
186
198
|
/* @__PURE__ */ e(
|
187
|
-
|
199
|
+
le,
|
188
200
|
{
|
189
|
-
nodeType:
|
190
|
-
state:
|
191
|
-
accuracy:
|
201
|
+
nodeType: d,
|
202
|
+
state: Y,
|
203
|
+
accuracy: q,
|
192
204
|
dueDateTs: p
|
193
205
|
}
|
194
206
|
),
|
195
|
-
p &&
|
196
|
-
|
207
|
+
p && R && /* @__PURE__ */ e(
|
208
|
+
me,
|
197
209
|
{
|
198
210
|
dueDate: p * 1e3,
|
199
|
-
unlockedOn:
|
200
|
-
progressBg: `${
|
211
|
+
unlockedOn: R * 1e3,
|
212
|
+
progressBg: `${H || "ORANGE"}_4`
|
201
213
|
}
|
202
214
|
),
|
203
|
-
/* @__PURE__ */
|
215
|
+
/* @__PURE__ */ n(o, { $gutterX: 0.75, $gapX: 1, $flexRowGapX: 0.5, $background: "WHITE", children: [
|
204
216
|
/* @__PURE__ */ e(
|
205
|
-
|
217
|
+
j,
|
206
218
|
{
|
207
219
|
renderAs: "primary",
|
208
220
|
position: "bottom",
|
209
221
|
tooltipItem: x,
|
210
|
-
hidden: !
|
222
|
+
hidden: !N,
|
211
223
|
parentWidth: "auto",
|
212
|
-
children: /* @__PURE__ */ e(
|
224
|
+
children: /* @__PURE__ */ e(o, { $heightX: 2.5, children: /* @__PURE__ */ e(ge, { ref: a, $renderAs: "ab3", children: x }) })
|
213
225
|
}
|
214
226
|
),
|
215
227
|
/* @__PURE__ */ e(
|
216
|
-
|
228
|
+
o,
|
217
229
|
{
|
218
230
|
$flexDirection: "row",
|
219
231
|
$heightX: 1.25,
|
220
232
|
$alignItems: "center",
|
221
233
|
$justifyContent: "space-between",
|
222
|
-
children: /* @__PURE__ */ e(
|
234
|
+
children: /* @__PURE__ */ e(Ce, { $renderAs: "ub3", $color: "BLACK_T_60", children: L })
|
223
235
|
}
|
224
236
|
)
|
225
237
|
] })
|
226
238
|
]
|
227
239
|
}
|
228
240
|
) }),
|
229
|
-
|
230
|
-
|
241
|
+
k && !c && /* @__PURE__ */ e(
|
242
|
+
K,
|
231
243
|
{
|
232
244
|
$width: 200,
|
233
|
-
options:
|
234
|
-
triggerRef:
|
235
|
-
visible:
|
245
|
+
options: ie,
|
246
|
+
triggerRef: b,
|
247
|
+
visible: D,
|
236
248
|
shouldOpenOnRight: !1
|
237
249
|
}
|
238
250
|
),
|
239
|
-
!
|
251
|
+
!k && /* @__PURE__ */ n(ke, { $position: "absolute", $width: "fit-content", $borderRadiusX: 2, children: [
|
240
252
|
/* @__PURE__ */ e(
|
241
|
-
|
253
|
+
j,
|
242
254
|
{
|
243
255
|
renderAs: "primary",
|
244
256
|
tooltipItem: "Review",
|
245
257
|
position: "bottom",
|
246
258
|
zIndex: 5,
|
247
259
|
parentWidth: "100%",
|
248
|
-
hidden: !
|
260
|
+
hidden: !c || O,
|
249
261
|
children: /* @__PURE__ */ e(
|
250
|
-
|
262
|
+
_e,
|
251
263
|
{
|
252
264
|
$alignItems: "center",
|
253
265
|
$justifyContent: "center",
|
254
266
|
ref: w,
|
255
|
-
onClick:
|
256
|
-
children: /* @__PURE__ */ e(
|
267
|
+
onClick: U,
|
268
|
+
children: /* @__PURE__ */ e(ae, { width: 16, height: 16 })
|
257
269
|
}
|
258
270
|
)
|
259
271
|
}
|
260
272
|
),
|
261
273
|
/* @__PURE__ */ e(
|
262
|
-
|
274
|
+
K,
|
263
275
|
{
|
264
|
-
options:
|
276
|
+
options: te,
|
265
277
|
triggerRef: w,
|
266
278
|
visible: O,
|
267
|
-
shouldOpenOnRight:
|
279
|
+
shouldOpenOnRight: F
|
268
280
|
}
|
269
281
|
)
|
270
282
|
] })
|
271
283
|
] });
|
272
|
-
},
|
284
|
+
}, Ke = ne(ye);
|
273
285
|
export {
|
274
|
-
|
286
|
+
Ke as default
|
275
287
|
};
|
276
288
|
//# 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 } = 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);\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);\n }, [canTeacherReview, userMilestoneId, nodeData, onNodeReview, onNodeView, userNodeId]);\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: !canUnassign || !isHomeWork,\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 <Text $renderAs=\"ac4-black\">{cardHeader}</Text>\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 >\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\">\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","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 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 >\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,17 +1,17 @@
|
|
1
1
|
import { jsxs as s, jsx as t } from "react/jsx-runtime";
|
2
|
-
import { h as
|
3
|
-
import { useRef as
|
4
|
-
import
|
5
|
-
import
|
6
|
-
import { getTopicsFromItems as
|
2
|
+
import { h as J } from "../../../node_modules/humanize-plus/dist/humanize.js";
|
3
|
+
import { useRef as ee, useState as a, useCallback as n, useEffect as u } from "react";
|
4
|
+
import te from "../../../assets/line-icons/icons/chevron-left.js";
|
5
|
+
import oe from "../../../assets/line-icons/icons/chevron-right.js";
|
6
|
+
import { getTopicsFromItems as re } from "../../milestone/milestone-tests/tests-list/test-sheets-list/test-sheet-item/test-sheet-item-utils.js";
|
7
7
|
import h from "../../ui/layout/flex-view.js";
|
8
|
-
import
|
9
|
-
import
|
10
|
-
import { useGetHomeworks as
|
11
|
-
import { HoverZone as
|
12
|
-
const
|
13
|
-
userType:
|
14
|
-
studentId:
|
8
|
+
import p from "../../ui/text/text.js";
|
9
|
+
import ne from "../homework-card.js";
|
10
|
+
import { useGetHomeworks as ie } from "./api/get-homeworks.js";
|
11
|
+
import { HoverZone as _, ScrollButton as b, ScrollContainer as se } from "./hw-card-list-styled.js";
|
12
|
+
const le = ({
|
13
|
+
userType: k = "STUDENT",
|
14
|
+
studentId: d,
|
15
15
|
stream: $,
|
16
16
|
onTestStart: w,
|
17
17
|
onNodeAttempt: x,
|
@@ -21,7 +21,7 @@ const ie = ({
|
|
21
21
|
onNodeReview: A,
|
22
22
|
onNodeUnassign: E
|
23
23
|
}) => {
|
24
|
-
const r =
|
24
|
+
const r = ee(null), [y, g] = a(!1), [B, v] = a(!1), [I, M] = a(!1), [N, j] = a(!0), { get: L, data: e, isProcessingFailed: K } = ie(d), z = n(() => {
|
25
25
|
r.current && r.current.scrollBy({ left: -200, behavior: "smooth" });
|
26
26
|
}, []), G = n(() => {
|
27
27
|
r.current && r.current.scrollBy({ left: 200, behavior: "smooth" });
|
@@ -35,8 +35,8 @@ const ie = ({
|
|
35
35
|
v(!1);
|
36
36
|
}, []), i = n(() => {
|
37
37
|
if (r.current) {
|
38
|
-
const { scrollLeft: o, scrollWidth: l, clientWidth:
|
39
|
-
M(o > 10), j(o < l -
|
38
|
+
const { scrollLeft: o, scrollWidth: l, clientWidth: f } = r.current;
|
39
|
+
M(o > 10), j(o < l - f - 10);
|
40
40
|
}
|
41
41
|
}, []);
|
42
42
|
u(() => {
|
@@ -49,26 +49,26 @@ const ie = ({
|
|
49
49
|
i();
|
50
50
|
}, [e, i]);
|
51
51
|
const C = n(() => {
|
52
|
-
L(
|
53
|
-
}, [L, $,
|
52
|
+
L(d, void 0, { stream: $ });
|
53
|
+
}, [L, $, d]);
|
54
54
|
return u(() => {
|
55
55
|
C();
|
56
56
|
}, [C]), e && e.length === 0 ? /* @__PURE__ */ s(h, { $flexRowGapX: 1, children: [
|
57
|
-
/* @__PURE__ */ s(
|
57
|
+
/* @__PURE__ */ s(p, { $renderAs: "ac4-black", $color: "BLACK_T_60", children: [
|
58
58
|
"Homework (",
|
59
59
|
e == null ? void 0 : e.length,
|
60
60
|
")"
|
61
61
|
] }),
|
62
|
-
/* @__PURE__ */ t(
|
62
|
+
/* @__PURE__ */ t(p, { $renderAs: "ab2", $color: "BLACK_T_60", children: "No Homework assigned yet" })
|
63
63
|
] }) : K ? null : /* @__PURE__ */ s(h, { $flexRowGapX: 1, children: [
|
64
|
-
/* @__PURE__ */ s(
|
64
|
+
/* @__PURE__ */ s(p, { $renderAs: "ac4-black", $color: "BLACK_T_60", children: [
|
65
65
|
"Homework (",
|
66
66
|
e == null ? void 0 : e.length,
|
67
67
|
")"
|
68
68
|
] }),
|
69
69
|
/* @__PURE__ */ s(h, { $position: "relative", onMouseEnter: i, children: [
|
70
|
-
|
71
|
-
|
70
|
+
I && /* @__PURE__ */ t(
|
71
|
+
_,
|
72
72
|
{
|
73
73
|
$position: "absolute",
|
74
74
|
$width: "60px",
|
@@ -77,7 +77,7 @@ const ie = ({
|
|
77
77
|
onMouseEnter: W,
|
78
78
|
onMouseLeave: F,
|
79
79
|
children: /* @__PURE__ */ t(
|
80
|
-
|
80
|
+
b,
|
81
81
|
{
|
82
82
|
$position: "absolute",
|
83
83
|
$background: "BLACK_T_60",
|
@@ -85,43 +85,45 @@ const ie = ({
|
|
85
85
|
$alignItems: "center",
|
86
86
|
$height: "100%",
|
87
87
|
onClick: z,
|
88
|
-
$visible:
|
88
|
+
$visible: y,
|
89
89
|
left: "0px",
|
90
90
|
right: "auto",
|
91
|
-
children: /* @__PURE__ */ t(
|
91
|
+
children: /* @__PURE__ */ t(te, { width: 24, height: 24 })
|
92
92
|
}
|
93
93
|
)
|
94
94
|
},
|
95
95
|
"left-hover-zone"
|
96
96
|
),
|
97
|
-
/* @__PURE__ */ t(
|
97
|
+
/* @__PURE__ */ t(se, { ref: r, children: /* @__PURE__ */ t(h, { $flexDirection: "row", $flexGapX: 1, children: e == null ? void 0 : e.map((o, l) => {
|
98
98
|
const {
|
99
|
-
items:
|
99
|
+
items: f,
|
100
100
|
node_id: P,
|
101
101
|
sheet_time: H,
|
102
|
-
total_questions:
|
102
|
+
total_questions: m,
|
103
103
|
worksheet_id: Q,
|
104
|
-
node_type: V
|
105
|
-
|
104
|
+
node_type: V,
|
105
|
+
title: q,
|
106
|
+
chapter_name: D
|
107
|
+
} = o, U = H && Math.ceil(H / 60) || 0, Y = re(f).join(", "), Z = `${typeof m == "number" ? `${m} ${J.pluralize(m, "Question")}, ` : ""}${U} Mins`, c = V === "DYNAMIC";
|
106
108
|
return /* @__PURE__ */ t(
|
107
|
-
|
109
|
+
ne,
|
108
110
|
{
|
109
|
-
userType:
|
110
|
-
header:
|
111
|
-
subHeader:
|
111
|
+
userType: k,
|
112
|
+
header: c ? Y : q,
|
113
|
+
subHeader: D ?? Z,
|
112
114
|
nodeData: o,
|
113
115
|
renderAs: "homework",
|
114
|
-
onNodeAttempt:
|
116
|
+
onNodeAttempt: c ? w : x,
|
115
117
|
shouldOpenOnRight: e.length > 3 && l === e.length - 1,
|
116
|
-
onNodeView:
|
117
|
-
onNodeReview:
|
118
|
+
onNodeView: c ? R : S,
|
119
|
+
onNodeReview: c ? T : A,
|
118
120
|
onNodeUnassign: E
|
119
121
|
},
|
120
122
|
`${Q}_${P}_${l}`
|
121
123
|
);
|
122
124
|
}) }) }),
|
123
125
|
N && /* @__PURE__ */ t(
|
124
|
-
|
126
|
+
_,
|
125
127
|
{
|
126
128
|
$position: "absolute",
|
127
129
|
$width: "60px",
|
@@ -130,7 +132,7 @@ const ie = ({
|
|
130
132
|
onMouseEnter: X,
|
131
133
|
onMouseLeave: O,
|
132
134
|
children: /* @__PURE__ */ t(
|
133
|
-
|
135
|
+
b,
|
134
136
|
{
|
135
137
|
$position: "absolute",
|
136
138
|
$width: "60px",
|
@@ -139,10 +141,10 @@ const ie = ({
|
|
139
141
|
$justifyContent: "center",
|
140
142
|
$alignItems: "center",
|
141
143
|
onClick: G,
|
142
|
-
$visible:
|
144
|
+
$visible: B,
|
143
145
|
left: "auto",
|
144
146
|
right: "0px",
|
145
|
-
children: /* @__PURE__ */ t(
|
147
|
+
children: /* @__PURE__ */ t(oe, { width: 24, height: 24 })
|
146
148
|
}
|
147
149
|
)
|
148
150
|
},
|
@@ -150,8 +152,8 @@ const ie = ({
|
|
150
152
|
)
|
151
153
|
] })
|
152
154
|
] });
|
153
|
-
},
|
155
|
+
}, Ce = le;
|
154
156
|
export {
|
155
|
-
|
157
|
+
Ce as default
|
156
158
|
};
|
157
159
|
//# sourceMappingURL=hw-card-list.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"hw-card-list.js","sources":["../../../../src/features/homework/hw-card-list/hw-card-list.tsx"],"sourcesContent":["import type {\n INodeCardCallbacks,\n INodeDataProps,\n} from '../../chapters-v2/comps/node-card/node-card-types';\nimport type { TUserTypes } from '../../ui/types';\n\nimport { pluralize } from 'humanize-plus';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport ChevronLeftIcon from '../../../assets/line-icons/icons/chevron-left';\nimport ChevronRightIcon from '../../../assets/line-icons/icons/chevron-right';\nimport { getTopicsFromItems } from '../../milestone/milestone-tests/tests-list/test-sheets-list/test-sheet-item/test-sheet-item-utils';\nimport FlexView from '../../ui/layout/flex-view';\nimport Text from '../../ui/text/text';\nimport HomeworkCard from '../homework-card';\nimport { useGetHomeworks } from './api/get-homeworks';\nimport * as Styled from './hw-card-list-styled';\n\ninterface HWCardListProps extends INodeCardCallbacks {\n userType: TUserTypes;\n studentId: string;\n stream: string;\n onTestPreview?: (sheetData: INodeDataProps, milestoneId?: string) => void;\n onTestStart?: (sheetData: INodeDataProps) => void;\n onTestReview?: (sheetData: INodeDataProps, milestoneId?: string) => void;\n}\n\nconst HWCardList: React.FC<HWCardListProps> = ({\n userType = 'STUDENT',\n studentId,\n stream,\n onTestStart,\n onNodeAttempt,\n onTestPreview,\n onNodeView,\n onTestReview,\n onNodeReview,\n onNodeUnassign,\n}) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n const [isLeftHovered, setIsLeftHovered] = useState(false);\n const [isRightHovered, setIsRightHovered] = useState(false);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(true);\n const { get: getHomeworks, data: hwDetails, isProcessingFailed } = useGetHomeworks();\n\n const handleScrollLeft = useCallback(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollBy({ left: -200, behavior: 'smooth' });\n }\n }, []);\n\n const handleScrollRight = useCallback(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollBy({ left: 200, behavior: 'smooth' });\n }\n }, []);\n\n const handleLeftHoverEnter = useCallback(() => {\n setIsLeftHovered(true);\n }, []);\n\n const handleLeftHoverLeave = useCallback(() => {\n setIsLeftHovered(false);\n }, []);\n\n const handleRightHoverEnter = useCallback(() => {\n setIsRightHovered(true);\n }, []);\n\n const handleRightHoverLeave = useCallback(() => {\n setIsRightHovered(false);\n }, []);\n\n // Function to check scroll position and update button availability\n const checkScrollPosition = useCallback(() => {\n if (scrollRef.current) {\n const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;\n\n // Can scroll left if scrolled to the right\n setCanScrollLeft(scrollLeft > 10);\n\n // Can scroll right if not at the end\n setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 10);\n }\n }, []);\n\n // Add scroll event listener to check scroll position\n useEffect(() => {\n const scrollElement = scrollRef.current;\n\n if (scrollElement) {\n scrollElement.addEventListener('scroll', checkScrollPosition);\n // Run once on mount to set initial button states\n checkScrollPosition();\n\n return () => {\n scrollElement.removeEventListener('scroll', checkScrollPosition);\n };\n }\n }, [checkScrollPosition]);\n\n // Also check when content changes\n useEffect(() => {\n checkScrollPosition();\n }, [hwDetails, checkScrollPosition]);\n\n const fetchChapterDetails = useCallback(() => {\n getHomeworks(studentId, undefined, { stream });\n }, [getHomeworks, stream, studentId]);\n\n useEffect(() => {\n fetchChapterDetails();\n }, [fetchChapterDetails]);\n\n if (hwDetails && hwDetails.length === 0) {\n return (\n <FlexView $flexRowGapX={1}>\n <Text $renderAs=\"ac4-black\" $color=\"BLACK_T_60\">\n Homework ({hwDetails?.length})\n </Text>\n <Text $renderAs=\"ab2\" $color=\"BLACK_T_60\">\n No Homework assigned yet\n </Text>\n </FlexView>\n );\n }\n\n if (isProcessingFailed) {\n return null;\n }\n\n return (\n <FlexView $flexRowGapX={1}>\n <Text $renderAs=\"ac4-black\" $color=\"BLACK_T_60\">\n Homework ({hwDetails?.length})\n </Text>\n <FlexView $position=\"relative\" onMouseEnter={checkScrollPosition}>\n {/* Left hover zone */}\n {canScrollLeft && (\n <Styled.HoverZone\n key=\"left-hover-zone\"\n $position=\"absolute\"\n $width=\"60px\"\n left=\"0\"\n right=\"auto\"\n onMouseEnter={handleLeftHoverEnter}\n onMouseLeave={handleLeftHoverLeave}\n >\n {/* Left scroll button - only visible when hovered */}\n <Styled.ScrollButton\n $position=\"absolute\"\n $background=\"BLACK_T_60\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n $height=\"100%\"\n onClick={handleScrollLeft}\n $visible={isLeftHovered}\n left=\"0px\"\n right=\"auto\"\n >\n <ChevronLeftIcon width={24} height={24} />\n </Styled.ScrollButton>\n </Styled.HoverZone>\n )}\n\n <Styled.ScrollContainer ref={scrollRef}>\n <FlexView $flexDirection=\"row\" $flexGapX={1}>\n {hwDetails?.map((sheet, idx) => {\n const {\n items,\n node_id: nodeId,\n sheet_time: sheetTime,\n total_questions: totalQuestions,\n worksheet_id: worksheetId,\n node_type: nodeType,\n } = sheet;\n const totalSheetTime = (sheetTime && Math.ceil(sheetTime / 60)) || 0;\n const topics = getTopicsFromItems(items);\n const testChapterName = topics.join(', ');\n const subHeader = `${\n typeof totalQuestions === 'number'\n ? `${totalQuestions} ${pluralize(totalQuestions, 'Question')}, `\n : ''\n }${totalSheetTime} Mins`;\n const isTestSheet = nodeType === 'DYNAMIC';\n\n return (\n <HomeworkCard\n key={`${worksheetId}_${nodeId}_${idx}`}\n userType={userType}\n header={testChapterName}\n subHeader={subHeader}\n nodeData={sheet}\n renderAs=\"homework\"\n onNodeAttempt={isTestSheet ? onTestStart : onNodeAttempt}\n shouldOpenOnRight={hwDetails.length > 3 && idx === hwDetails.length - 1}\n onNodeView={isTestSheet ? onTestPreview : onNodeView}\n onNodeReview={isTestSheet ? onTestReview : onNodeReview}\n onNodeUnassign={onNodeUnassign}\n />\n );\n })}\n </FlexView>\n </Styled.ScrollContainer>\n\n {/* Right hover zone */}\n {canScrollRight && (\n <Styled.HoverZone\n key=\"right-hover-zone\"\n $position=\"absolute\"\n $width=\"60px\"\n right=\"0\"\n left=\"auto\"\n onMouseEnter={handleRightHoverEnter}\n onMouseLeave={handleRightHoverLeave}\n >\n {/* Right scroll button - only visible when hovered */}\n <Styled.ScrollButton\n $position=\"absolute\"\n $width=\"60px\"\n $height=\"100%\"\n $background=\"BLACK_T_60\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n onClick={handleScrollRight}\n $visible={isRightHovered}\n left=\"auto\"\n right=\"0px\"\n >\n <ChevronRightIcon width={24} height={24} />\n </Styled.ScrollButton>\n </Styled.HoverZone>\n )}\n </FlexView>\n </FlexView>\n );\n};\n\nexport default HWCardList;\n"],"names":["HWCardList","userType","studentId","stream","onTestStart","onNodeAttempt","onTestPreview","onNodeView","onTestReview","onNodeReview","onNodeUnassign","scrollRef","useRef","isLeftHovered","setIsLeftHovered","useState","isRightHovered","setIsRightHovered","canScrollLeft","setCanScrollLeft","canScrollRight","setCanScrollRight","getHomeworks","hwDetails","isProcessingFailed","useGetHomeworks","handleScrollLeft","useCallback","handleScrollRight","handleLeftHoverEnter","handleLeftHoverLeave","handleRightHoverEnter","handleRightHoverLeave","checkScrollPosition","scrollLeft","scrollWidth","clientWidth","useEffect","scrollElement","fetchChapterDetails","jsxs","FlexView","Text","jsx","Styled.HoverZone","Styled.ScrollButton","ChevronLeftIcon","Styled.ScrollContainer","sheet","idx","items","nodeId","sheetTime","totalQuestions","worksheetId","nodeType","totalSheetTime","testChapterName","getTopicsFromItems","subHeader","pluralize","isTestSheet","HomeworkCard","ChevronRightIcon","HWCardList$1"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"hw-card-list.js","sources":["../../../../src/features/homework/hw-card-list/hw-card-list.tsx"],"sourcesContent":["import type {\n INodeCardCallbacks,\n INodeDataProps,\n} from '../../chapters-v2/comps/node-card/node-card-types';\nimport type { TUserTypes } from '../../ui/types';\n\nimport { pluralize } from 'humanize-plus';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport ChevronLeftIcon from '../../../assets/line-icons/icons/chevron-left';\nimport ChevronRightIcon from '../../../assets/line-icons/icons/chevron-right';\nimport { getTopicsFromItems } from '../../milestone/milestone-tests/tests-list/test-sheets-list/test-sheet-item/test-sheet-item-utils';\nimport FlexView from '../../ui/layout/flex-view';\nimport Text from '../../ui/text/text';\nimport HomeworkCard from '../homework-card';\nimport { useGetHomeworks } from './api/get-homeworks';\nimport * as Styled from './hw-card-list-styled';\n\ninterface HWCardListProps extends INodeCardCallbacks {\n userType: TUserTypes;\n studentId: string;\n stream: string;\n onTestPreview?: (sheetData: INodeDataProps, milestoneId?: string) => void;\n onTestStart?: (sheetData: INodeDataProps) => void;\n onTestReview?: (sheetData: INodeDataProps, milestoneId?: string) => void;\n}\n\nconst HWCardList: React.FC<HWCardListProps> = ({\n userType = 'STUDENT',\n studentId,\n stream,\n onTestStart,\n onNodeAttempt,\n onTestPreview,\n onNodeView,\n onTestReview,\n onNodeReview,\n onNodeUnassign,\n}) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n const [isLeftHovered, setIsLeftHovered] = useState(false);\n const [isRightHovered, setIsRightHovered] = useState(false);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(true);\n const { get: getHomeworks, data: hwDetails, isProcessingFailed } = useGetHomeworks(studentId);\n\n const handleScrollLeft = useCallback(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollBy({ left: -200, behavior: 'smooth' });\n }\n }, []);\n\n const handleScrollRight = useCallback(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollBy({ left: 200, behavior: 'smooth' });\n }\n }, []);\n\n const handleLeftHoverEnter = useCallback(() => {\n setIsLeftHovered(true);\n }, []);\n\n const handleLeftHoverLeave = useCallback(() => {\n setIsLeftHovered(false);\n }, []);\n\n const handleRightHoverEnter = useCallback(() => {\n setIsRightHovered(true);\n }, []);\n\n const handleRightHoverLeave = useCallback(() => {\n setIsRightHovered(false);\n }, []);\n\n // Function to check scroll position and update button availability\n const checkScrollPosition = useCallback(() => {\n if (scrollRef.current) {\n const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;\n\n // Can scroll left if scrolled to the right\n setCanScrollLeft(scrollLeft > 10);\n\n // Can scroll right if not at the end\n setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 10);\n }\n }, []);\n\n // Add scroll event listener to check scroll position\n useEffect(() => {\n const scrollElement = scrollRef.current;\n\n if (scrollElement) {\n scrollElement.addEventListener('scroll', checkScrollPosition);\n // Run once on mount to set initial button states\n checkScrollPosition();\n\n return () => {\n scrollElement.removeEventListener('scroll', checkScrollPosition);\n };\n }\n }, [checkScrollPosition]);\n\n // Also check when content changes\n useEffect(() => {\n checkScrollPosition();\n }, [hwDetails, checkScrollPosition]);\n\n const fetchChapterDetails = useCallback(() => {\n getHomeworks(studentId, undefined, { stream });\n }, [getHomeworks, stream, studentId]);\n\n useEffect(() => {\n fetchChapterDetails();\n }, [fetchChapterDetails]);\n\n if (hwDetails && hwDetails.length === 0) {\n return (\n <FlexView $flexRowGapX={1}>\n <Text $renderAs=\"ac4-black\" $color=\"BLACK_T_60\">\n Homework ({hwDetails?.length})\n </Text>\n <Text $renderAs=\"ab2\" $color=\"BLACK_T_60\">\n No Homework assigned yet\n </Text>\n </FlexView>\n );\n }\n\n if (isProcessingFailed) {\n return null;\n }\n\n return (\n <FlexView $flexRowGapX={1}>\n <Text $renderAs=\"ac4-black\" $color=\"BLACK_T_60\">\n Homework ({hwDetails?.length})\n </Text>\n <FlexView $position=\"relative\" onMouseEnter={checkScrollPosition}>\n {/* Left hover zone */}\n {canScrollLeft && (\n <Styled.HoverZone\n key=\"left-hover-zone\"\n $position=\"absolute\"\n $width=\"60px\"\n left=\"0\"\n right=\"auto\"\n onMouseEnter={handleLeftHoverEnter}\n onMouseLeave={handleLeftHoverLeave}\n >\n {/* Left scroll button - only visible when hovered */}\n <Styled.ScrollButton\n $position=\"absolute\"\n $background=\"BLACK_T_60\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n $height=\"100%\"\n onClick={handleScrollLeft}\n $visible={isLeftHovered}\n left=\"0px\"\n right=\"auto\"\n >\n <ChevronLeftIcon width={24} height={24} />\n </Styled.ScrollButton>\n </Styled.HoverZone>\n )}\n\n <Styled.ScrollContainer ref={scrollRef}>\n <FlexView $flexDirection=\"row\" $flexGapX={1}>\n {hwDetails?.map((sheet, idx) => {\n const {\n items,\n node_id: nodeId,\n sheet_time: sheetTime,\n total_questions: totalQuestions,\n worksheet_id: worksheetId,\n node_type: nodeType,\n title,\n chapter_name: chapterName,\n } = sheet;\n const totalSheetTime = (sheetTime && Math.ceil(sheetTime / 60)) || 0;\n const topics = getTopicsFromItems(items);\n const testChapterName = topics.join(', ');\n const subHeader = `${\n typeof totalQuestions === 'number'\n ? `${totalQuestions} ${pluralize(totalQuestions, 'Question')}, `\n : ''\n }${totalSheetTime} Mins`;\n const isDynamicSheet = nodeType === 'DYNAMIC';\n\n return (\n <HomeworkCard\n key={`${worksheetId}_${nodeId}_${idx}`}\n userType={userType}\n header={isDynamicSheet ? testChapterName : title}\n subHeader={chapterName ?? subHeader}\n nodeData={sheet}\n renderAs=\"homework\"\n onNodeAttempt={isDynamicSheet ? onTestStart : onNodeAttempt}\n shouldOpenOnRight={hwDetails.length > 3 && idx === hwDetails.length - 1}\n onNodeView={isDynamicSheet ? onTestPreview : onNodeView}\n onNodeReview={isDynamicSheet ? onTestReview : onNodeReview}\n onNodeUnassign={onNodeUnassign}\n />\n );\n })}\n </FlexView>\n </Styled.ScrollContainer>\n\n {/* Right hover zone */}\n {canScrollRight && (\n <Styled.HoverZone\n key=\"right-hover-zone\"\n $position=\"absolute\"\n $width=\"60px\"\n right=\"0\"\n left=\"auto\"\n onMouseEnter={handleRightHoverEnter}\n onMouseLeave={handleRightHoverLeave}\n >\n {/* Right scroll button - only visible when hovered */}\n <Styled.ScrollButton\n $position=\"absolute\"\n $width=\"60px\"\n $height=\"100%\"\n $background=\"BLACK_T_60\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n onClick={handleScrollRight}\n $visible={isRightHovered}\n left=\"auto\"\n right=\"0px\"\n >\n <ChevronRightIcon width={24} height={24} />\n </Styled.ScrollButton>\n </Styled.HoverZone>\n )}\n </FlexView>\n </FlexView>\n );\n};\n\nexport default HWCardList;\n"],"names":["HWCardList","userType","studentId","stream","onTestStart","onNodeAttempt","onTestPreview","onNodeView","onTestReview","onNodeReview","onNodeUnassign","scrollRef","useRef","isLeftHovered","setIsLeftHovered","useState","isRightHovered","setIsRightHovered","canScrollLeft","setCanScrollLeft","canScrollRight","setCanScrollRight","getHomeworks","hwDetails","isProcessingFailed","useGetHomeworks","handleScrollLeft","useCallback","handleScrollRight","handleLeftHoverEnter","handleLeftHoverLeave","handleRightHoverEnter","handleRightHoverLeave","checkScrollPosition","scrollLeft","scrollWidth","clientWidth","useEffect","scrollElement","fetchChapterDetails","jsxs","FlexView","Text","jsx","Styled.HoverZone","Styled.ScrollButton","ChevronLeftIcon","Styled.ScrollContainer","sheet","idx","items","nodeId","sheetTime","totalQuestions","worksheetId","nodeType","title","chapterName","totalSheetTime","testChapterName","getTopicsFromItems","subHeader","pluralize","isDynamicSheet","HomeworkCard","ChevronRightIcon","HWCardList$1"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
@@ -2150,7 +2150,7 @@ declare interface INodeCardCallbacks {
|
|
2150
2150
|
onNodeAttemptLocationChange?: (nodeData: INodeDataProps) => void;
|
2151
2151
|
onNodeMarkAsDone?: (nodeData: INodeDataProps) => void;
|
2152
2152
|
onNodeReset?: (nodeData: INodeDataProps, milestoneId?: string) => void;
|
2153
|
-
onNodeUnassign?: (nodeData: INodeDataProps, milestoneId?: string) => void;
|
2153
|
+
onNodeUnassign?: (nodeData: INodeDataProps | IHomeworkData, milestoneId?: string) => void;
|
2154
2154
|
}
|
2155
2155
|
|
2156
2156
|
export declare interface INodeDataProps {
|
@@ -2183,6 +2183,7 @@ export declare interface INodeDataProps {
|
|
2183
2183
|
total_questions: number | null;
|
2184
2184
|
unlocked_on_ts: number | null;
|
2185
2185
|
items?: TNodeDataTestItemsDataProps[];
|
2186
|
+
user_milestone_id?: string;
|
2186
2187
|
}
|
2187
2188
|
|
2188
2189
|
declare interface INodePermissions {
|
@@ -4501,7 +4502,7 @@ export declare type TInclassMessage = {
|
|
4501
4502
|
} | {
|
4502
4503
|
eventName: typeof EVENTS.HOMEWORK_UNASSIGN;
|
4503
4504
|
eventPayload: {
|
4504
|
-
|
4505
|
+
studentId: string;
|
4505
4506
|
};
|
4506
4507
|
} | {
|
4507
4508
|
eventName: typeof EVENTS.CHAPTER_UPDATED;
|