@cuemath/leap 3.1.7-gg1 → 3.1.8-aa0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/illustrations/illustrations.js +1 -1
- package/dist/assets/illustrations/illustrations.js.map +1 -1
- package/dist/constants/country.js +994 -2
- package/dist/constants/country.js.map +1 -1
- package/dist/features/auth/account-selector/account-selector-styled.js +9 -0
- package/dist/features/auth/account-selector/account-selector-styled.js.map +1 -0
- package/dist/features/auth/account-selector/account-selector.js +60 -36
- package/dist/features/auth/account-selector/account-selector.js.map +1 -1
- package/dist/features/auth/comps/auth-page-layout/{auth-page-layout-styles.js → auth-page-layout-styled.js} +1 -1
- package/dist/features/auth/comps/auth-page-layout/{auth-page-layout-styles.js.map → auth-page-layout-styled.js.map} +1 -1
- package/dist/features/auth/comps/auth-page-layout/auth-page-layout.js +20 -9
- package/dist/features/auth/comps/auth-page-layout/auth-page-layout.js.map +1 -1
- package/dist/features/auth/comps/auth-static-panel/auth-static-panel.js +1 -1
- package/dist/features/auth/comps/auth-static-panel/auth-static-panel.js.map +1 -1
- package/dist/features/auth/forgot-password/forgot-password-styled.js +30 -4
- package/dist/features/auth/forgot-password/forgot-password-styled.js.map +1 -1
- package/dist/features/auth/forgot-password/otp-form/otp-form.js +27 -29
- package/dist/features/auth/forgot-password/otp-form/otp-form.js.map +1 -1
- package/dist/features/auth/forgot-password/reset-password-form/reset-password-form.js +22 -27
- package/dist/features/auth/forgot-password/reset-password-form/reset-password-form.js.map +1 -1
- package/dist/features/auth/forgot-password/user-identifier-form/user-identifier-form.js +25 -28
- package/dist/features/auth/forgot-password/user-identifier-form/user-identifier-form.js.map +1 -1
- package/dist/features/auth/login/identifier-otp-form/identifier-otp-form-styled.js +17 -4
- package/dist/features/auth/login/identifier-otp-form/identifier-otp-form-styled.js.map +1 -1
- package/dist/features/auth/login/identifier-otp-form/identifier-otp-form.js +88 -79
- package/dist/features/auth/login/identifier-otp-form/identifier-otp-form.js.map +1 -1
- package/dist/features/auth/login/login-styled.js +26 -0
- package/dist/features/auth/login/login-styled.js.map +1 -0
- package/dist/features/auth/login/social-account-not-found/social-account-not-found.js +27 -21
- package/dist/features/auth/login/social-account-not-found/social-account-not-found.js.map +1 -1
- package/dist/features/auth/login/social-login-methods/social-login-methods-styled.js +9 -0
- package/dist/features/auth/login/social-login-methods/social-login-methods-styled.js.map +1 -0
- package/dist/features/auth/login/social-login-methods/social-login-methods.js +43 -34
- package/dist/features/auth/login/social-login-methods/social-login-methods.js.map +1 -1
- package/dist/features/auth/login/username-password-form/username-password-form.js +68 -71
- package/dist/features/auth/login/username-password-form/username-password-form.js.map +1 -1
- package/dist/features/auth/signup/custom-input-field/country-selector/country-list-menu.js +1 -1
- package/dist/features/auth/signup/custom-input-field/country-selector/country-list-menu.js.map +1 -1
- package/dist/features/auth/signup/signup-constants.js +6 -998
- package/dist/features/auth/signup/signup-constants.js.map +1 -1
- package/dist/features/auth/user-list/user-item/user-item.js +33 -32
- package/dist/features/auth/user-list/user-item/user-item.js.map +1 -1
- package/dist/features/auth/user-list/user-list.js +60 -51
- package/dist/features/auth/user-list/user-list.js.map +1 -1
- package/dist/features/hooks/use-viewport/use-viewport.js +21 -0
- package/dist/features/hooks/use-viewport/use-viewport.js.map +1 -0
- package/dist/features/ui/buttons/button/button-styled.js +29 -29
- package/dist/features/ui/buttons/button/button-styled.js.map +1 -1
- package/dist/features/utils/media.js +16 -0
- package/dist/features/utils/media.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-question/subjective-feedback.js +60 -60
- package/dist/features/worksheet/worksheet/worksheet-question/subjective-feedback.js.map +1 -1
- package/dist/index.d.ts +22 -71
- package/dist/index.js +348 -350
- package/dist/index.js.map +1 -1
- package/dist/static/cuemath-app-qr-code.7205ee79.svg +1 -0
- package/package.json +1 -1
- package/dist/features/ui/modals/modal-context.js +0 -13
- package/dist/features/ui/modals/modal-context.js.map +0 -1
- package/dist/features/ui/modals/modal-helpers.js +0 -17
- package/dist/features/ui/modals/modal-helpers.js.map +0 -1
- package/dist/features/ui/modals/modal-provider.js +0 -48
- package/dist/features/ui/modals/modal-provider.js.map +0 -1
- package/dist/features/ui/modals/modal-styled.js +0 -154
- package/dist/features/ui/modals/modal-styled.js.map +0 -1
- package/dist/features/ui/modals/modal.js +0 -19
- package/dist/features/ui/modals/modal.js.map +0 -1
- package/dist/features/ui/modals/use-modal-actions.js +0 -10
- package/dist/features/ui/modals/use-modal-actions.js.map +0 -1
- package/dist/features/ui/modals/use-modal-params.js +0 -10
- package/dist/features/ui/modals/use-modal-params.js.map +0 -1
@@ -1,109 +1,109 @@
|
|
1
1
|
import { jsx as e, jsxs as l, Fragment as M } from "react/jsx-runtime";
|
2
2
|
import { h as ee } from "../../../../node_modules/humanize-plus/dist/humanize.js";
|
3
|
-
import { memo as te, useState as
|
3
|
+
import { memo as te, useState as y, useMemo as A, useCallback as s } from "react";
|
4
4
|
import re from "../../../../assets/line-icons/icons/down.js";
|
5
5
|
import ie from "../../../../assets/line-icons/icons/up.js";
|
6
|
-
import
|
7
|
-
import
|
6
|
+
import R from "../../../ui/buttons/button/button.js";
|
7
|
+
import D from "../../../ui/buttons/clickable/clickable.js";
|
8
8
|
import ce from "../../../ui/buttons/text-button/text-button.js";
|
9
9
|
import m from "../../../ui/layout/flex-view.js";
|
10
10
|
import u from "../../../ui/separator/separator.js";
|
11
11
|
import f from "../../../ui/text/text.js";
|
12
|
-
import
|
13
|
-
import { TextArea as
|
14
|
-
const se = { type: "subjective_response" },
|
12
|
+
import oe from "../hooks/use-s3-helper.js";
|
13
|
+
import { TextArea as ne, FileInputLabel as le, FileInput as ae } from "./subjective-styled.js";
|
14
|
+
const se = { type: "subjective_response" }, Ie = te(
|
15
15
|
({
|
16
|
-
responses:
|
17
|
-
response:
|
18
|
-
nextQuestionId:
|
16
|
+
responses: S,
|
17
|
+
response: r,
|
18
|
+
nextQuestionId: x,
|
19
19
|
responseId: h,
|
20
|
-
studentId:
|
20
|
+
studentId: E,
|
21
21
|
onAddReviewComment: g,
|
22
22
|
openImagesReviewModal: b,
|
23
|
-
handleReviewSubmit:
|
24
|
-
isSubmittingReview:
|
23
|
+
handleReviewSubmit: L,
|
24
|
+
isSubmittingReview: z
|
25
25
|
}) => {
|
26
|
-
var
|
27
|
-
const { score:
|
28
|
-
((
|
29
|
-
),
|
30
|
-
var t,
|
31
|
-
return ((t =
|
32
|
-
}, [d,
|
33
|
-
var
|
34
|
-
if (!
|
26
|
+
var F, T;
|
27
|
+
const { score: B } = r ?? {}, { max_score: $, score: H } = B ?? {}, O = (r == null ? void 0 : r.response) !== void 0, [d, _] = y(((F = r == null ? void 0 : r.teacherReview) == null ? void 0 : F.reviewComment) ?? ""), [q, j] = y(!1), [c, U] = y(H ?? 0), [o, C] = y(
|
28
|
+
((T = r == null ? void 0 : r.teacherReview) == null ? void 0 : T.images) ?? []
|
29
|
+
), v = o.length, K = A(() => {
|
30
|
+
var t, i, n;
|
31
|
+
return ((t = r == null ? void 0 : r.teacherReview) == null ? void 0 : t.reviewComment) === d && ((i = r.teacherReview.images) == null ? void 0 : i.length) === o.length && ((n = r.score) == null ? void 0 : n.score) === c;
|
32
|
+
}, [d, r, c, o.length]), W = A(() => {
|
33
|
+
var i, n, a, p;
|
34
|
+
if (!S) return !1;
|
35
35
|
let t = !0;
|
36
|
-
for (const
|
37
|
-
const P = !!
|
36
|
+
for (const w of Object.values(S)) {
|
37
|
+
const P = !!w.response, Z = ((i = w.teacherReview) == null ? void 0 : i.images) && ((a = (n = w.teacherReview) == null ? void 0 : n.images) == null ? void 0 : a.length) > 0 || !!((p = w.teacherReview) != null && p.reviewComment);
|
38
38
|
if (P && !Z) {
|
39
39
|
t = !1;
|
40
40
|
break;
|
41
41
|
}
|
42
42
|
}
|
43
43
|
return t;
|
44
|
-
}, [
|
45
|
-
studentId:
|
44
|
+
}, [S]), k = oe({
|
45
|
+
studentId: E,
|
46
46
|
query: se
|
47
47
|
}), N = s((t) => {
|
48
|
-
|
48
|
+
_(t.target.value);
|
49
49
|
}, []), Q = s(() => {
|
50
|
-
|
50
|
+
U(c + 0.5);
|
51
51
|
}, [c]), V = s(() => {
|
52
|
-
|
52
|
+
U(c - 0.5);
|
53
53
|
}, [c]), I = s(
|
54
54
|
(t) => {
|
55
|
-
|
56
|
-
const
|
57
|
-
t &&
|
55
|
+
j(!1);
|
56
|
+
const i = o.filter((a) => typeof a == "string"), n = t ? [...i, ...t] : i;
|
57
|
+
t && C(n), g == null || g(h, {
|
58
58
|
score: {
|
59
59
|
score: c,
|
60
|
-
max_score:
|
60
|
+
max_score: $
|
61
61
|
},
|
62
62
|
teacherReview: {
|
63
63
|
reviewComment: d,
|
64
|
-
images:
|
64
|
+
images: n
|
65
65
|
}
|
66
66
|
});
|
67
67
|
},
|
68
|
-
[d,
|
68
|
+
[d, $, g, h, c, o]
|
69
69
|
), Y = s(() => {
|
70
|
-
const t =
|
71
|
-
t.length > 0 ? (
|
70
|
+
const t = o.filter((i) => typeof i != "string");
|
71
|
+
t.length > 0 ? (j(!0), k({
|
72
72
|
fileKey: `subjective-responses/${h}/`,
|
73
73
|
onSuccess: I,
|
74
74
|
onError: () => {
|
75
75
|
},
|
76
76
|
images: t
|
77
77
|
})) : I();
|
78
|
-
}, [I, h,
|
78
|
+
}, [I, h, o, k]), X = s(
|
79
79
|
({ filteredImages: t }) => {
|
80
|
-
|
80
|
+
C(t);
|
81
81
|
},
|
82
82
|
[]
|
83
83
|
), G = s(() => {
|
84
|
-
const t =
|
84
|
+
const t = o.map((i) => typeof i == "string" ? i : i.url);
|
85
85
|
t && (b == null || b({
|
86
86
|
isReviewed: !1,
|
87
87
|
disableScoreForm: !1,
|
88
88
|
imageUrls: t,
|
89
|
-
filteredImageUrls:
|
90
|
-
uploadedImages:
|
89
|
+
filteredImageUrls: X,
|
90
|
+
uploadedImages: o
|
91
91
|
}));
|
92
|
-
}, [b,
|
93
|
-
const { files:
|
94
|
-
if (!
|
95
|
-
const
|
96
|
-
const
|
97
|
-
return { file: a, url:
|
92
|
+
}, [b, X, o]), J = s((t) => {
|
93
|
+
const { files: i } = t.currentTarget;
|
94
|
+
if (!i) return;
|
95
|
+
const n = Array.from(i).map((a) => {
|
96
|
+
const p = URL.createObjectURL(a);
|
97
|
+
return { file: a, url: p };
|
98
98
|
});
|
99
|
-
|
99
|
+
C((a) => [...a, ...n]);
|
100
100
|
}, []);
|
101
|
-
return
|
101
|
+
return r ? !O && x ? /* @__PURE__ */ e(f, { $renderAs: "body1", children: " The student did not attempt this questions." }) : /* @__PURE__ */ l(M, { children: [
|
102
102
|
/* @__PURE__ */ l(m, { $flexDirection: "row", $justifyContent: "space-between", children: [
|
103
103
|
/* @__PURE__ */ l(m, { children: [
|
104
104
|
/* @__PURE__ */ l(f, { $renderAs: "body3", children: [
|
105
105
|
"Score (out of ",
|
106
|
-
|
106
|
+
$,
|
107
107
|
")"
|
108
108
|
] }),
|
109
109
|
/* @__PURE__ */ e(u, { heightX: 1 }),
|
@@ -122,16 +122,16 @@ const se = { type: "subjective_response" }, xe = te(
|
|
122
122
|
),
|
123
123
|
/* @__PURE__ */ e(u, { width: 16 }),
|
124
124
|
/* @__PURE__ */ l(m, { $background: "WHITE", $gutterX: 0.5, $gapX: 0.5, children: [
|
125
|
-
/* @__PURE__ */ e(
|
125
|
+
/* @__PURE__ */ e(D, { label: "up", onClick: Q, disabled: c === $, children: /* @__PURE__ */ e(ie, {}) }),
|
126
126
|
/* @__PURE__ */ e(u, { height: 16 }),
|
127
|
-
/* @__PURE__ */ e(
|
127
|
+
/* @__PURE__ */ e(D, { label: "down", onClick: V, disabled: c === 0, children: /* @__PURE__ */ e(re, {}) })
|
128
128
|
] })
|
129
129
|
] })
|
130
130
|
] }),
|
131
131
|
/* @__PURE__ */ l(m, { children: [
|
132
132
|
/* @__PURE__ */ e(f, { $renderAs: "body1", children: "Comments" }),
|
133
133
|
/* @__PURE__ */ e(u, { heightX: 1 }),
|
134
|
-
/* @__PURE__ */ e(
|
134
|
+
/* @__PURE__ */ e(ne, { value: d, onChange: N })
|
135
135
|
] }),
|
136
136
|
/* @__PURE__ */ l(m, { $alignItems: "center", children: [
|
137
137
|
/* @__PURE__ */ l(f, { $renderAs: "body1", children: [
|
@@ -155,7 +155,7 @@ const se = { type: "subjective_response" }, xe = te(
|
|
155
155
|
ce,
|
156
156
|
{
|
157
157
|
onClick: G,
|
158
|
-
label:
|
158
|
+
label: v ? `${v} ${ee.pluralize(v, "file")}` : "No files"
|
159
159
|
}
|
160
160
|
)
|
161
161
|
] })
|
@@ -170,7 +170,7 @@ const se = { type: "subjective_response" }, xe = te(
|
|
170
170
|
$gapX: 1,
|
171
171
|
children: [
|
172
172
|
/* @__PURE__ */ e(
|
173
|
-
|
173
|
+
R,
|
174
174
|
{
|
175
175
|
widthX: 6,
|
176
176
|
renderAs: "secondary",
|
@@ -182,15 +182,15 @@ const se = { type: "subjective_response" }, xe = te(
|
|
182
182
|
}
|
183
183
|
),
|
184
184
|
/* @__PURE__ */ e(u, { width: 20 }),
|
185
|
-
!
|
186
|
-
|
185
|
+
!x && /* @__PURE__ */ e(
|
186
|
+
R,
|
187
187
|
{
|
188
188
|
widthX: 6,
|
189
189
|
renderAs: "secondary",
|
190
190
|
size: "small",
|
191
191
|
label: "Submit Review",
|
192
|
-
onClick:
|
193
|
-
busy:
|
192
|
+
onClick: L,
|
193
|
+
busy: z,
|
194
194
|
disabled: !W
|
195
195
|
}
|
196
196
|
)
|
@@ -201,6 +201,6 @@ const se = { type: "subjective_response" }, xe = te(
|
|
201
201
|
}
|
202
202
|
);
|
203
203
|
export {
|
204
|
-
|
204
|
+
Ie as default
|
205
205
|
};
|
206
206
|
//# sourceMappingURL=subjective-feedback.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"subjective-feedback.js","sources":["../../../../../src/features/worksheet/worksheet/worksheet-question/subjective-feedback.tsx"],"sourcesContent":["import type { ISubjectiveQuestionReviewProps, IFile } from './subjective-review';\nimport type { FC } from 'react';\n\nimport { pluralize } from 'humanize-plus';\nimport { memo, useCallback, useMemo, useState } from 'react';\n\nimport DownIcon from '../../../../assets/line-icons/icons/down';\nimport UpIcon from '../../../../assets/line-icons/icons/up';\nimport Button from '../../../ui/buttons/button/button';\nimport Clickable from '../../../ui/buttons/clickable/clickable';\nimport TextButton from '../../../ui/buttons/text-button/text-button';\nimport FlexView from '../../../ui/layout/flex-view';\nimport Separator from '../../../ui/separator/separator';\nimport Text from '../../../ui/text/text';\nimport useS3ImageUploadHelper from '../hooks/use-s3-helper';\nimport { TextArea, FileInput, FileInputLabel } from './subjective-styled';\n\nconst QUERY = { type: 'subjective_response' };\n\nconst SubjectiveQuestionFeedback: FC<ISubjectiveQuestionReviewProps> = memo(\n ({\n responses,\n response,\n nextQuestionId,\n responseId,\n studentId,\n onAddReviewComment,\n openImagesReviewModal,\n handleReviewSubmit,\n isSubmittingReview,\n }) => {\n const { score: responseScore } = response ?? {};\n const { max_score: maxScore, score } = responseScore ?? {};\n const isAttempted = responseScore && 'score' in responseScore && 'max_score' in responseScore;\n const [comment, setComment] = useState(response?.teacherReview?.reviewComment ?? '');\n const [isUploading, setIsUploading] = useState<boolean>(false);\n const [scored, setScored] = useState(score ?? 0.0);\n const [selectedImages, setSelectedImage] = useState<(string | IFile)[]>(\n response?.teacherReview?.images ?? [],\n );\n const noOfImages = selectedImages.length;\n const isSaveDisabled = useMemo(() => {\n if (\n response?.teacherReview?.reviewComment === comment &&\n response.teacherReview.images?.length === selectedImages.length &&\n response.score?.score === scored\n ) {\n return true;\n }\n\n return false;\n }, [comment, response, scored, selectedImages.length]);\n\n const canSubmitReview = useMemo(() => {\n if (!responses) return false;\n\n let canSubmit = true;\n\n for (const item of Object.values(responses)) {\n const currResponse = item.response;\n\n const isCurrItemAttempted = !!currResponse;\n const currentItemReviewed =\n (item.teacherReview?.images && item.teacherReview?.images?.length > 0) ||\n !!item.teacherReview?.reviewComment;\n\n if (isCurrItemAttempted && !currentItemReviewed) {\n canSubmit = false;\n break;\n }\n }\n\n return canSubmit;\n }, [responses]);\n\n const uploadImages = useS3ImageUploadHelper({\n studentId,\n query: QUERY,\n });\n\n const onCommentChange = useCallback((e: { target: { value: string } }) => {\n setComment(e.target.value);\n }, []);\n\n const onScoreUp = useCallback(() => {\n setScored(scored + 0.5);\n }, [scored]);\n\n const onScoreDown = useCallback(() => {\n setScored(scored - 0.5);\n }, [scored]);\n\n const onSuccess = useCallback(\n (images?: string[]) => {\n setIsUploading(false);\n const reponseImages = selectedImages.filter(item => typeof item === 'string');\n const allImages = images ? [...reponseImages, ...images] : reponseImages;\n\n if (images) {\n setSelectedImage(allImages);\n }\n onAddReviewComment?.(responseId, {\n score: {\n score: scored,\n max_score: maxScore as number,\n },\n teacherReview: {\n reviewComment: comment,\n images: allImages,\n },\n });\n },\n [comment, maxScore, onAddReviewComment, responseId, scored, selectedImages],\n );\n\n const handleSave = useCallback(() => {\n const imagesToUpload = selectedImages.filter(images => typeof images !== 'string');\n\n if (imagesToUpload.length > 0) {\n setIsUploading(true);\n uploadImages({\n fileKey: `subjective-responses/${responseId}/`,\n onSuccess: onSuccess,\n onError: () => {},\n images: imagesToUpload,\n });\n } else {\n onSuccess();\n }\n }, [onSuccess, responseId, selectedImages, uploadImages]);\n\n const updateImages = useCallback(\n ({ filteredImages }: { filteredImages: string[]; newImages: IFile[] }) => {\n setSelectedImage(filteredImages);\n },\n [],\n );\n\n const openImagesModal = useCallback(() => {\n const previewImages = selectedImages.map(item => {\n if (typeof item === 'string') return item;\n\n return item.url;\n });\n\n if (!previewImages) return;\n\n openImagesReviewModal?.({\n isReviewed: false,\n disableScoreForm: false,\n imageUrls: previewImages,\n filteredImageUrls: updateImages,\n uploadedImages: selectedImages,\n });\n }, [openImagesReviewModal, updateImages, selectedImages]);\n\n const onSelectImages = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const { files } = e.currentTarget;\n\n if (!files) return;\n\n const newFilesList = Array.from(files).map(file => {\n const url = URL.createObjectURL(file);\n\n return { file, url };\n });\n\n setSelectedImage(prevImages => [...prevImages, ...newFilesList]);\n }, []);\n\n if (!response) {\n return null;\n }\n\n if (!isAttempted && nextQuestionId) {\n return <Text $renderAs=\"body1\"> The student did not attempt this questions.</Text>;\n }\n\n return (\n <>\n <FlexView $flexDirection=\"row\" $justifyContent=\"space-between\">\n <FlexView>\n <Text $renderAs=\"body3\">Score (out of {maxScore})</Text>\n <Separator heightX={1} />\n <FlexView $flexDirection=\"row\" $gapX={0.5}>\n <FlexView\n $justifyContent=\"center\"\n $alignItems=\"center\"\n $borderColor=\"BLACK\"\n $width={50}\n $height={50}\n $background=\"WHITE\"\n >\n <Text $renderAs=\"body1\">{scored}</Text>\n </FlexView>\n <Separator width={16} />\n <FlexView $background=\"WHITE\" $gutterX={0.5} $gapX={0.5}>\n <Clickable label=\"up\" onClick={onScoreUp} disabled={scored === maxScore}>\n <UpIcon />\n </Clickable>\n <Separator height={16} />\n <Clickable label=\"down\" onClick={onScoreDown} disabled={scored === 0}>\n <DownIcon />\n </Clickable>\n </FlexView>\n </FlexView>\n </FlexView>\n <FlexView>\n <Text $renderAs=\"body1\">Comments</Text>\n <Separator heightX={1} />\n <TextArea value={comment} onChange={onCommentChange} />\n </FlexView>\n <FlexView $alignItems=\"center\">\n <Text $renderAs=\"body1\">\n Upload Images <small>(max 12)</small>\n </Text>\n <Separator heightX={1} />\n <FileInputLabel htmlFor={`files${responseId}`}>Browse</FileInputLabel>\n <Separator heightX={1} />\n <FileInput\n type=\"file\"\n accept=\".jpeg, .jpg, .png\"\n id={`files${responseId}`}\n multiple\n onChange={onSelectImages}\n />\n <TextButton\n onClick={openImagesModal}\n label={noOfImages ? `${noOfImages} ${pluralize(noOfImages, 'file')}` : 'No files'}\n />\n </FlexView>\n </FlexView>\n <FlexView\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $justifyContent=\"center\"\n $gutterX={1}\n $gapX={1}\n >\n <Button\n widthX={6}\n renderAs=\"secondary\"\n size=\"small\"\n label=\"Save\"\n onClick={handleSave}\n busy={isUploading}\n disabled={isSaveDisabled}\n />\n <Separator width={20} />\n {!nextQuestionId && (\n <Button\n widthX={6}\n renderAs=\"secondary\"\n size=\"small\"\n label=\"Submit Review\"\n onClick={handleReviewSubmit}\n busy={isSubmittingReview}\n disabled={!canSubmitReview}\n />\n )}\n </FlexView>\n </>\n );\n },\n);\n\nexport default SubjectiveQuestionFeedback;\n"],"names":["QUERY","SubjectiveQuestionFeedback","memo","responses","response","nextQuestionId","responseId","studentId","onAddReviewComment","openImagesReviewModal","handleReviewSubmit","isSubmittingReview","responseScore","maxScore","score","isAttempted","comment","setComment","useState","_a","isUploading","setIsUploading","scored","setScored","selectedImages","setSelectedImage","_b","noOfImages","isSaveDisabled","useMemo","_c","canSubmitReview","canSubmit","item","isCurrItemAttempted","currentItemReviewed","_d","uploadImages","useS3ImageUploadHelper","onCommentChange","useCallback","e","onScoreUp","onScoreDown","onSuccess","images","reponseImages","allImages","handleSave","imagesToUpload","updateImages","filteredImages","openImagesModal","previewImages","onSelectImages","files","newFilesList","file","url","prevImages","jsx","Text","jsxs","Fragment","FlexView","Separator","Clickable","UpIcon","DownIcon","TextArea","FileInputLabel","FileInput","TextButton","pluralize","Button"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"subjective-feedback.js","sources":["../../../../../src/features/worksheet/worksheet/worksheet-question/subjective-feedback.tsx"],"sourcesContent":["import type { ISubjectiveQuestionReviewProps, IFile } from './subjective-review';\nimport type { FC } from 'react';\n\nimport { pluralize } from 'humanize-plus';\nimport { memo, useCallback, useMemo, useState } from 'react';\n\nimport DownIcon from '../../../../assets/line-icons/icons/down';\nimport UpIcon from '../../../../assets/line-icons/icons/up';\nimport Button from '../../../ui/buttons/button/button';\nimport Clickable from '../../../ui/buttons/clickable/clickable';\nimport TextButton from '../../../ui/buttons/text-button/text-button';\nimport FlexView from '../../../ui/layout/flex-view';\nimport Separator from '../../../ui/separator/separator';\nimport Text from '../../../ui/text/text';\nimport useS3ImageUploadHelper from '../hooks/use-s3-helper';\nimport { TextArea, FileInput, FileInputLabel } from './subjective-styled';\n\nconst QUERY = { type: 'subjective_response' };\n\nconst SubjectiveQuestionFeedback: FC<ISubjectiveQuestionReviewProps> = memo(\n ({\n responses,\n response,\n nextQuestionId,\n responseId,\n studentId,\n onAddReviewComment,\n openImagesReviewModal,\n handleReviewSubmit,\n isSubmittingReview,\n }) => {\n const { score: responseScore } = response ?? {};\n const { max_score: maxScore, score } = responseScore ?? {};\n const isAttempted = response?.response !== undefined;\n const [comment, setComment] = useState(response?.teacherReview?.reviewComment ?? '');\n const [isUploading, setIsUploading] = useState<boolean>(false);\n const [scored, setScored] = useState(score ?? 0.0);\n const [selectedImages, setSelectedImage] = useState<(string | IFile)[]>(\n response?.teacherReview?.images ?? [],\n );\n const noOfImages = selectedImages.length;\n const isSaveDisabled = useMemo(() => {\n if (\n response?.teacherReview?.reviewComment === comment &&\n response.teacherReview.images?.length === selectedImages.length &&\n response.score?.score === scored\n ) {\n return true;\n }\n\n return false;\n }, [comment, response, scored, selectedImages.length]);\n\n const canSubmitReview = useMemo(() => {\n if (!responses) return false;\n\n let canSubmit = true;\n\n for (const item of Object.values(responses)) {\n const currResponse = item.response;\n\n const isCurrItemAttempted = !!currResponse;\n const currentItemReviewed =\n (item.teacherReview?.images && item.teacherReview?.images?.length > 0) ||\n !!item.teacherReview?.reviewComment;\n\n if (isCurrItemAttempted && !currentItemReviewed) {\n canSubmit = false;\n break;\n }\n }\n\n return canSubmit;\n }, [responses]);\n\n const uploadImages = useS3ImageUploadHelper({\n studentId,\n query: QUERY,\n });\n\n const onCommentChange = useCallback((e: { target: { value: string } }) => {\n setComment(e.target.value);\n }, []);\n\n const onScoreUp = useCallback(() => {\n setScored(scored + 0.5);\n }, [scored]);\n\n const onScoreDown = useCallback(() => {\n setScored(scored - 0.5);\n }, [scored]);\n\n const onSuccess = useCallback(\n (images?: string[]) => {\n setIsUploading(false);\n const reponseImages = selectedImages.filter(item => typeof item === 'string');\n const allImages = images ? [...reponseImages, ...images] : reponseImages;\n\n if (images) {\n setSelectedImage(allImages);\n }\n onAddReviewComment?.(responseId, {\n score: {\n score: scored,\n max_score: maxScore as number,\n },\n teacherReview: {\n reviewComment: comment,\n images: allImages,\n },\n });\n },\n [comment, maxScore, onAddReviewComment, responseId, scored, selectedImages],\n );\n\n const handleSave = useCallback(() => {\n const imagesToUpload = selectedImages.filter(images => typeof images !== 'string');\n\n if (imagesToUpload.length > 0) {\n setIsUploading(true);\n uploadImages({\n fileKey: `subjective-responses/${responseId}/`,\n onSuccess: onSuccess,\n onError: () => {},\n images: imagesToUpload,\n });\n } else {\n onSuccess();\n }\n }, [onSuccess, responseId, selectedImages, uploadImages]);\n\n const updateImages = useCallback(\n ({ filteredImages }: { filteredImages: string[]; newImages: IFile[] }) => {\n setSelectedImage(filteredImages);\n },\n [],\n );\n\n const openImagesModal = useCallback(() => {\n const previewImages = selectedImages.map(item => {\n if (typeof item === 'string') return item;\n\n return item.url;\n });\n\n if (!previewImages) return;\n\n openImagesReviewModal?.({\n isReviewed: false,\n disableScoreForm: false,\n imageUrls: previewImages,\n filteredImageUrls: updateImages,\n uploadedImages: selectedImages,\n });\n }, [openImagesReviewModal, updateImages, selectedImages]);\n\n const onSelectImages = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const { files } = e.currentTarget;\n\n if (!files) return;\n\n const newFilesList = Array.from(files).map(file => {\n const url = URL.createObjectURL(file);\n\n return { file, url };\n });\n\n setSelectedImage(prevImages => [...prevImages, ...newFilesList]);\n }, []);\n\n if (!response) {\n return null;\n }\n\n if (!isAttempted && nextQuestionId) {\n return <Text $renderAs=\"body1\"> The student did not attempt this questions.</Text>;\n }\n\n return (\n <>\n <FlexView $flexDirection=\"row\" $justifyContent=\"space-between\">\n <FlexView>\n <Text $renderAs=\"body3\">Score (out of {maxScore})</Text>\n <Separator heightX={1} />\n <FlexView $flexDirection=\"row\" $gapX={0.5}>\n <FlexView\n $justifyContent=\"center\"\n $alignItems=\"center\"\n $borderColor=\"BLACK\"\n $width={50}\n $height={50}\n $background=\"WHITE\"\n >\n <Text $renderAs=\"body1\">{scored}</Text>\n </FlexView>\n <Separator width={16} />\n <FlexView $background=\"WHITE\" $gutterX={0.5} $gapX={0.5}>\n <Clickable label=\"up\" onClick={onScoreUp} disabled={scored === maxScore}>\n <UpIcon />\n </Clickable>\n <Separator height={16} />\n <Clickable label=\"down\" onClick={onScoreDown} disabled={scored === 0}>\n <DownIcon />\n </Clickable>\n </FlexView>\n </FlexView>\n </FlexView>\n <FlexView>\n <Text $renderAs=\"body1\">Comments</Text>\n <Separator heightX={1} />\n <TextArea value={comment} onChange={onCommentChange} />\n </FlexView>\n <FlexView $alignItems=\"center\">\n <Text $renderAs=\"body1\">\n Upload Images <small>(max 12)</small>\n </Text>\n <Separator heightX={1} />\n <FileInputLabel htmlFor={`files${responseId}`}>Browse</FileInputLabel>\n <Separator heightX={1} />\n <FileInput\n type=\"file\"\n accept=\".jpeg, .jpg, .png\"\n id={`files${responseId}`}\n multiple\n onChange={onSelectImages}\n />\n <TextButton\n onClick={openImagesModal}\n label={noOfImages ? `${noOfImages} ${pluralize(noOfImages, 'file')}` : 'No files'}\n />\n </FlexView>\n </FlexView>\n <FlexView\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $justifyContent=\"center\"\n $gutterX={1}\n $gapX={1}\n >\n <Button\n widthX={6}\n renderAs=\"secondary\"\n size=\"small\"\n label=\"Save\"\n onClick={handleSave}\n busy={isUploading}\n disabled={isSaveDisabled}\n />\n <Separator width={20} />\n {!nextQuestionId && (\n <Button\n widthX={6}\n renderAs=\"secondary\"\n size=\"small\"\n label=\"Submit Review\"\n onClick={handleReviewSubmit}\n busy={isSubmittingReview}\n disabled={!canSubmitReview}\n />\n )}\n </FlexView>\n </>\n );\n },\n);\n\nexport default SubjectiveQuestionFeedback;\n"],"names":["QUERY","SubjectiveQuestionFeedback","memo","responses","response","nextQuestionId","responseId","studentId","onAddReviewComment","openImagesReviewModal","handleReviewSubmit","isSubmittingReview","responseScore","maxScore","score","isAttempted","comment","setComment","useState","_a","isUploading","setIsUploading","scored","setScored","selectedImages","setSelectedImage","_b","noOfImages","isSaveDisabled","useMemo","_c","canSubmitReview","canSubmit","item","isCurrItemAttempted","currentItemReviewed","_d","uploadImages","useS3ImageUploadHelper","onCommentChange","useCallback","e","onScoreUp","onScoreDown","onSuccess","images","reponseImages","allImages","handleSave","imagesToUpload","updateImages","filteredImages","openImagesModal","previewImages","onSelectImages","files","newFilesList","file","url","prevImages","jsx","Text","jsxs","Fragment","FlexView","Separator","Clickable","UpIcon","DownIcon","TextArea","FileInputLabel","FileInput","TextButton","pluralize","Button"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
@@ -758,7 +758,7 @@ declare interface IButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>,
|
|
758
758
|
shape?: 'curved' | 'square';
|
759
759
|
disabled?: boolean;
|
760
760
|
busy?: boolean;
|
761
|
-
width?: number;
|
761
|
+
width?: number | string;
|
762
762
|
widthX?: number;
|
763
763
|
Icon?: React.FC<React.SVGProps<SVGSVGElement>>;
|
764
764
|
iconPosition?: 'left' | 'right';
|
@@ -1168,16 +1168,6 @@ declare interface ICountdownTimer {
|
|
1168
1168
|
theme: 'GREEN_1' | 'ORANGE_1';
|
1169
1169
|
}
|
1170
1170
|
|
1171
|
-
declare interface ICountryOption {
|
1172
|
-
code: string;
|
1173
|
-
id: string;
|
1174
|
-
value: string;
|
1175
|
-
label: string;
|
1176
|
-
icon: string;
|
1177
|
-
url: string;
|
1178
|
-
geoIPCountryCode: string;
|
1179
|
-
}
|
1180
|
-
|
1181
1171
|
export declare interface ICreateUserPayloadDal {
|
1182
1172
|
username: string;
|
1183
1173
|
grade: string;
|
@@ -2360,45 +2350,6 @@ declare interface IMilestoneWidgetResourcesProps extends INodeCardCallbacks {
|
|
2360
2350
|
canUpdatePlan?: boolean;
|
2361
2351
|
}
|
2362
2352
|
|
2363
|
-
/**
|
2364
|
-
* Configuration for a modal component
|
2365
|
-
*/
|
2366
|
-
export declare interface IModal {
|
2367
|
-
/** Unique identifier for the modal */
|
2368
|
-
name: string;
|
2369
|
-
/** Content to display inside the modal */
|
2370
|
-
element: JSX.Element;
|
2371
|
-
/** Rendering style of the modal */
|
2372
|
-
renderAs?: 'modal' | 'fullscreen' | 'spotlight';
|
2373
|
-
/** Whether the modal can be dismissed by clicking outside or ESC key (default: true) */
|
2374
|
-
isDismissable?: boolean;
|
2375
|
-
/** Whether the modal requires authentication to view (default: true) */
|
2376
|
-
isPrivate?: boolean;
|
2377
|
-
/** Width of the modal in CSS units (e.g., '500px', '80vw') */
|
2378
|
-
modalWidth: string;
|
2379
|
-
}
|
2380
|
-
|
2381
|
-
/**
|
2382
|
-
* Context for managing modals throughout the application
|
2383
|
-
*/
|
2384
|
-
declare interface IModalContext {
|
2385
|
-
/** Currently active modal or null if no modal is open */
|
2386
|
-
modal: IModal | null;
|
2387
|
-
/** Parameters passed to the modal when opened */
|
2388
|
-
modalParams?: Record<string, unknown>;
|
2389
|
-
/** Opens a modal by name with optional parameters */
|
2390
|
-
openModal: <T = undefined>(name: string, params?: T) => void;
|
2391
|
-
/** Closes the currently open modal */
|
2392
|
-
closeModal: () => void;
|
2393
|
-
/** Whether the modal is in the process of closing (for animation) */
|
2394
|
-
isClosing?: boolean;
|
2395
|
-
}
|
2396
|
-
|
2397
|
-
declare interface IModalProviderProps extends PropsWithChildren {
|
2398
|
-
modals: IModal[];
|
2399
|
-
isUserAuthenticated?: boolean;
|
2400
|
-
}
|
2401
|
-
|
2402
2353
|
export declare interface IMultiplayerWebGameProps extends IBaseWebGameProps, ISyncableWebGameProps {
|
2403
2354
|
enablePlayerTurnIndicators?: boolean;
|
2404
2355
|
}
|
@@ -2542,7 +2493,7 @@ declare interface IOTPResendProps {
|
|
2542
2493
|
showVoiceOTP?: boolean;
|
2543
2494
|
disabled?: boolean;
|
2544
2495
|
renderAs?: 'submit' | 'text';
|
2545
|
-
width?: number;
|
2496
|
+
width?: number | string;
|
2546
2497
|
}
|
2547
2498
|
|
2548
2499
|
declare interface IOutcomeConfig {
|
@@ -3094,7 +3045,8 @@ declare interface ISingleFieldFormProps {
|
|
3094
3045
|
|
3095
3046
|
declare interface ISocialAccountNotFoundProps {
|
3096
3047
|
onRetryLogin: () => void;
|
3097
|
-
onGoToSignup
|
3048
|
+
onGoToSignup?: () => void;
|
3049
|
+
showSignupButton?: boolean;
|
3098
3050
|
}
|
3099
3051
|
|
3100
3052
|
declare interface ISocialLoginMethodsProps {
|
@@ -3603,14 +3555,6 @@ declare interface IUseIsTabBlocked {
|
|
3603
3555
|
(): IMultiTabBlockerContextValue;
|
3604
3556
|
}
|
3605
3557
|
|
3606
|
-
declare interface IUseModalActions {
|
3607
|
-
(): Pick<IModalContext, 'openModal' | 'closeModal' | 'isClosing'>;
|
3608
|
-
}
|
3609
|
-
|
3610
|
-
declare interface IUseModalParams {
|
3611
|
-
<T = undefined>(): T;
|
3612
|
-
}
|
3613
|
-
|
3614
3558
|
declare interface IusePointerSyncMethods {
|
3615
3559
|
publishMouseMove?: (data: IPointerData) => void;
|
3616
3560
|
susbcribeMouseMove?: (qrId: string, cb: (data: IPointerData) => void) => void;
|
@@ -3675,6 +3619,12 @@ declare interface IUseTrialSessionMessageBroker {
|
|
3675
3619
|
};
|
3676
3620
|
}
|
3677
3621
|
|
3622
|
+
declare interface IUseViewportReturn {
|
3623
|
+
isCompact: boolean;
|
3624
|
+
isMobile: boolean;
|
3625
|
+
isDesktop: boolean;
|
3626
|
+
}
|
3627
|
+
|
3678
3628
|
declare interface IUseWorksheetLayout {
|
3679
3629
|
(options: {
|
3680
3630
|
userType: TUserTypes;
|
@@ -4143,6 +4093,11 @@ export declare const Maintenance: React_2.FC<IMaintenanceProps>;
|
|
4143
4093
|
|
4144
4094
|
declare const MASTERY: "mastery";
|
4145
4095
|
|
4096
|
+
export declare const media: {
|
4097
|
+
minDesktop: string;
|
4098
|
+
minLarge: string;
|
4099
|
+
};
|
4100
|
+
|
4146
4101
|
export declare const MilestoneActionWidget: React_2.FC<IMilestoneActionWidgetProps>;
|
4147
4102
|
|
4148
4103
|
export declare const MilestoneCreate: React.FC<IMileStoneCreateContainerProps>;
|
@@ -4163,11 +4118,6 @@ export declare const MistakeIcon: React.FC<React.SVGProps<SVGSVGElement>>;
|
|
4163
4118
|
|
4164
4119
|
export declare const Mobile: React.FC<React.SVGProps<SVGSVGElement>>;
|
4165
4120
|
|
4166
|
-
/**
|
4167
|
-
* Provider component that manages modal state and provides modal context to child components
|
4168
|
-
*/
|
4169
|
-
export declare const ModalProvider: FC<IModalProviderProps>;
|
4170
|
-
|
4171
4121
|
export declare const MoreVerticalIcon: React.FC<React.SVGProps<SVGSVGElement>>;
|
4172
4122
|
|
4173
4123
|
export declare const MultiTabBlocker: FC<PropsWithChildren<IMultiTabBlockerProps>>;
|
@@ -4572,7 +4522,7 @@ export declare const SkipColoredIcon: React.FC<React.SVGProps<SVGSVGElement>>;
|
|
4572
4522
|
|
4573
4523
|
export declare const SkipIcon: React.FC<React.SVGProps<SVGSVGElement>>;
|
4574
4524
|
|
4575
|
-
export declare const SocialAccountNotFound: MemoExoticComponent<({ onRetryLogin, onGoToSignup }: ISocialAccountNotFoundProps) => JSX_2.Element>;
|
4525
|
+
export declare const SocialAccountNotFound: MemoExoticComponent<({ onRetryLogin, onGoToSignup, showSignupButton, }: ISocialAccountNotFoundProps) => JSX_2.Element>;
|
4576
4526
|
|
4577
4527
|
export declare const SocialLoginMethods: NamedExoticComponent<ISocialLoginMethodsProps>;
|
4578
4528
|
|
@@ -5528,7 +5478,10 @@ declare type TSectionSummary = {
|
|
5528
5478
|
modules: TSATModule[];
|
5529
5479
|
};
|
5530
5480
|
|
5531
|
-
export declare type TSelectedCountry =
|
5481
|
+
export declare type TSelectedCountry = {
|
5482
|
+
id: string;
|
5483
|
+
code: string;
|
5484
|
+
};
|
5532
5485
|
|
5533
5486
|
declare type TSheetAttemptLocation = keyof typeof SHEET_ATTEMPT_LOCATION;
|
5534
5487
|
|
@@ -5882,10 +5835,6 @@ export declare const useIsTabBlocked: IUseIsTabBlocked;
|
|
5882
5835
|
|
5883
5836
|
export declare const useJourney: () => IJourneyContext;
|
5884
5837
|
|
5885
|
-
export declare const useModalActions: IUseModalActions;
|
5886
|
-
|
5887
|
-
export declare const useModalParams: IUseModalParams;
|
5888
|
-
|
5889
5838
|
export declare const usePointerSync: ({ userType, targetUserId, }: IusePointerSyncProps) => IusePointerSyncMethods;
|
5890
5839
|
|
5891
5840
|
export declare const User2Icon: React.FC<React.SVGProps<SVGSVGElement>>;
|
@@ -5908,6 +5857,8 @@ export declare const useTrialSessionMessageBroker: IUseTrialSessionMessageBroker
|
|
5908
5857
|
|
5909
5858
|
export declare const useUIContext: () => UIContextProps;
|
5910
5859
|
|
5860
|
+
export declare const useViewport: () => IUseViewportReturn;
|
5861
|
+
|
5911
5862
|
export declare const useWorksheetLayout: IUseWorksheetLayout;
|
5912
5863
|
|
5913
5864
|
export declare const useZoomDisable: () => void;
|