@cuemath/leap 3.4.6-m-t → 3.4.7-m
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/worksheet/worksheet/worksheet-sidebar/question-guide.js +58 -59
- package/dist/features/worksheet/worksheet/worksheet-sidebar/question-guide.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-sidebar/sidebar.js +17 -19
- package/dist/features/worksheet/worksheet/worksheet-sidebar/sidebar.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-types.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet.js +124 -130
- package/dist/features/worksheet/worksheet/worksheet.js.map +1 -1
- package/dist/index.d.ts +1 -4
- package/package.json +1 -1
|
@@ -1,41 +1,40 @@
|
|
|
1
1
|
import { jsx as e, jsxs as o } from "react/jsx-runtime";
|
|
2
|
-
import { memo as q, useState as
|
|
2
|
+
import { memo as q, useState as $, useRef as C, useCallback as s, useMemo as m, useEffect as z } from "react";
|
|
3
3
|
import { useGetEligibleJourneysViaRoute as D } from "../../../journey/hooks/use-get-eligible-journeys-via-route.js";
|
|
4
|
-
import { JOURNEY_ID_TEACHER as
|
|
5
|
-
import { useJourney as
|
|
6
|
-
import { useStickersJourney as
|
|
7
|
-
import
|
|
4
|
+
import { JOURNEY_ID_TEACHER as Y } from "../../../journey/journey-id/journey-id-teacher.js";
|
|
5
|
+
import { useJourney as F } from "../../../journey/use-journey/use-journey.js";
|
|
6
|
+
import { useStickersJourney as Q } from "../../../stickers/sticker-selector/hooks/use-stickers-journey/use-stickers-journey.js";
|
|
7
|
+
import Z from "../../../stickers/sticker-selector/sticker-selector.js";
|
|
8
8
|
import f from "../../../ui/buttons/clickable/clickable.js";
|
|
9
9
|
import i from "../../../ui/layout/flex-view.js";
|
|
10
|
-
import
|
|
10
|
+
import v from "../../../ui/separator/separator.js";
|
|
11
11
|
import d from "../../../ui/text/text.js";
|
|
12
|
-
import
|
|
13
|
-
import { StickersIcon as
|
|
12
|
+
import J from "../../constants/events.js";
|
|
13
|
+
import { StickersIcon as ee, GuideContainer as te, HintIcon as oe, SolIcon as ie, Pointer as ne, SectionContainer as re, Section as ce, CloseIcon as le, Guide as se } from "./worksheet-sidebar-styled.js";
|
|
14
14
|
const Te = q(
|
|
15
15
|
({
|
|
16
16
|
questionWidth: E,
|
|
17
|
-
questions:
|
|
18
|
-
activeQuestionIndex:
|
|
17
|
+
questions: L,
|
|
18
|
+
activeQuestionIndex: X,
|
|
19
19
|
learnosity: I,
|
|
20
|
-
actionbarHeight:
|
|
20
|
+
actionbarHeight: T,
|
|
21
21
|
loggerRef: a,
|
|
22
|
-
|
|
23
|
-
enableStickers: X
|
|
22
|
+
studentClassroomId: b
|
|
24
23
|
}) => {
|
|
25
|
-
var
|
|
26
|
-
const [t, h] =
|
|
24
|
+
var G;
|
|
25
|
+
const [t, h] = $(), [K, B] = $({
|
|
27
26
|
top: 0,
|
|
28
27
|
left: 0
|
|
29
|
-
}), [
|
|
30
|
-
h("HINT"), a.current(
|
|
31
|
-
}, [a]), j = s(() => {
|
|
32
|
-
h("SOL"), a.current(G.WORKSHEET_V3_SOLUTION_SEEN);
|
|
28
|
+
}), [g, V] = $(!1), k = C(null), { top: R, left: O } = K, j = s(() => {
|
|
29
|
+
h("HINT"), a.current(J.WORKSHEET_V3_HINT_SEEN);
|
|
33
30
|
}, [a]), x = s(() => {
|
|
31
|
+
h("SOL"), a.current(J.WORKSHEET_V3_SOLUTION_SEEN);
|
|
32
|
+
}, [a]), P = s(() => {
|
|
34
33
|
h(() => {
|
|
35
34
|
});
|
|
36
35
|
}, []), p = s(() => {
|
|
37
|
-
|
|
38
|
-
}, []), { hints: n, solution:
|
|
36
|
+
V((c) => !c);
|
|
37
|
+
}, []), { hints: n, solution: u } = ((G = L[X]) == null ? void 0 : G.metadata) || {}, r = m(() => t === void 0 ? void 0 : t === "HINT" ? n : u, [t, n, u]), _ = C(null), N = C(null), S = s((c) => {
|
|
39
38
|
if (c.current) {
|
|
40
39
|
const l = c.current.getBoundingClientRect();
|
|
41
40
|
B({
|
|
@@ -44,14 +43,14 @@ const Te = q(
|
|
|
44
43
|
// 52px (sidebar width) + 16px (gutter) + 10px
|
|
45
44
|
});
|
|
46
45
|
}
|
|
47
|
-
}, []),
|
|
48
|
-
() => /* @__PURE__ */ e("div", { ref:
|
|
49
|
-
/* @__PURE__ */ e(
|
|
50
|
-
/* @__PURE__ */ e(d, { $renderAs: "eyebrow2", $color:
|
|
51
|
-
/* @__PURE__ */ e(i, { $gap: 8, $alignItems: "center", children: /* @__PURE__ */ e(
|
|
46
|
+
}, []), H = m(
|
|
47
|
+
() => /* @__PURE__ */ e("div", { ref: k, children: /* @__PURE__ */ e(f, { label: "teacher-badges", onClick: p, children: /* @__PURE__ */ o(i, { $alignItems: "center", $justifyContent: "center", children: [
|
|
48
|
+
/* @__PURE__ */ e(ee, { width: 32, height: 32, $disabled: !g }),
|
|
49
|
+
/* @__PURE__ */ e(d, { $renderAs: "eyebrow2", $color: g ? "BLACK" : "GREY_4", children: "STICKERS" }),
|
|
50
|
+
/* @__PURE__ */ e(i, { $gap: 8, $alignItems: "center", children: /* @__PURE__ */ e(v, { width: 24, height: 1, background: "GREY_2" }) })
|
|
52
51
|
] }) }) }),
|
|
53
|
-
[
|
|
54
|
-
),
|
|
52
|
+
[g, p]
|
|
53
|
+
), U = m(
|
|
55
54
|
() => ({
|
|
56
55
|
stickerSize: 48,
|
|
57
56
|
columns: 4,
|
|
@@ -67,64 +66,64 @@ const Te = q(
|
|
|
67
66
|
tooltipYCoOrdinates: "40%"
|
|
68
67
|
}),
|
|
69
68
|
[]
|
|
70
|
-
),
|
|
69
|
+
), M = {
|
|
71
70
|
position: "left",
|
|
72
71
|
tooltipXCoOrdinates: 20,
|
|
73
72
|
tooltipYCoOrdinates: -20
|
|
74
|
-
},
|
|
75
|
-
|
|
76
|
-
]), { isJourneyActive:
|
|
77
|
-
triggerRef:
|
|
78
|
-
triggerElement:
|
|
79
|
-
tooltipConfig:
|
|
73
|
+
}, w = D([
|
|
74
|
+
Y.STICKERS_INTRO_JOURNEY
|
|
75
|
+
]), { isJourneyActive: y } = F(), { startTeacherStickersJourney: A } = Q({
|
|
76
|
+
triggerRef: k,
|
|
77
|
+
triggerElement: H,
|
|
78
|
+
tooltipConfig: M
|
|
80
79
|
});
|
|
81
80
|
return t && r && I && I.renderMath("mathjax"), z(() => {
|
|
82
|
-
t === "HINT" ?
|
|
81
|
+
t === "HINT" ? S(N) : t === "SOL" ? S(_) : r || h(void 0), w.includes(Y.STICKERS_INTRO_JOURNEY) && !y && A();
|
|
83
82
|
}, [
|
|
84
83
|
t,
|
|
85
|
-
|
|
84
|
+
S,
|
|
86
85
|
r,
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
]), /* @__PURE__ */ o(
|
|
91
|
-
|
|
92
|
-
|
|
86
|
+
w,
|
|
87
|
+
y,
|
|
88
|
+
A
|
|
89
|
+
]), /* @__PURE__ */ o(te, { $background: "WHITE", children: [
|
|
90
|
+
b && /* @__PURE__ */ e(
|
|
91
|
+
Z,
|
|
93
92
|
{
|
|
94
|
-
triggerNode:
|
|
95
|
-
studentClassroomId:
|
|
96
|
-
gridConfig:
|
|
93
|
+
triggerNode: H,
|
|
94
|
+
studentClassroomId: b,
|
|
95
|
+
gridConfig: U,
|
|
97
96
|
tooltipConfig: W,
|
|
98
|
-
visible:
|
|
97
|
+
visible: g,
|
|
99
98
|
onToggle: p
|
|
100
99
|
}
|
|
101
100
|
),
|
|
102
|
-
/* @__PURE__ */ e(f, { label: "hints", onClick:
|
|
103
|
-
/* @__PURE__ */ e(
|
|
101
|
+
/* @__PURE__ */ e(f, { label: "hints", onClick: j, disabled: !n, children: /* @__PURE__ */ o(i, { $alignItems: "center", $justifyContent: "center", ref: N, children: [
|
|
102
|
+
/* @__PURE__ */ e(oe, { width: 32, height: 32, $disabled: !n }),
|
|
104
103
|
/* @__PURE__ */ e(d, { $renderAs: "eyebrow2", $color: n ? "BLACK" : "GREY_4", children: "HINT" }),
|
|
105
|
-
/* @__PURE__ */ e(i, { $gap: 8, $alignItems: "center", children: /* @__PURE__ */ e(
|
|
104
|
+
/* @__PURE__ */ e(i, { $gap: 8, $alignItems: "center", children: /* @__PURE__ */ e(v, { width: 24, height: 1, background: "GREY_2" }) })
|
|
106
105
|
] }) }),
|
|
107
|
-
/* @__PURE__ */ e(f, { label: "solution", onClick:
|
|
108
|
-
/* @__PURE__ */ e(
|
|
106
|
+
/* @__PURE__ */ e(f, { label: "solution", onClick: x, disabled: !u, children: /* @__PURE__ */ o(i, { $alignItems: "center", $justifyContent: "center", ref: _, children: [
|
|
107
|
+
/* @__PURE__ */ e(ie, { width: 32, height: 32, $disabled: !u }),
|
|
109
108
|
/* @__PURE__ */ e(d, { $renderAs: "eyebrow2", $color: n ? "BLACK" : "GREY_4", children: "SOL" })
|
|
110
109
|
] }) }),
|
|
111
|
-
t &&
|
|
110
|
+
t && R && O && /* @__PURE__ */ e(ne, { topValue: R, leftValue: O }),
|
|
112
111
|
t && /* @__PURE__ */ e(
|
|
113
|
-
|
|
112
|
+
re,
|
|
114
113
|
{
|
|
115
114
|
$background: "WHITE",
|
|
116
115
|
$questionWidth: E,
|
|
117
|
-
$actionbarHeight:
|
|
116
|
+
$actionbarHeight: T,
|
|
118
117
|
$borderRadius: 10,
|
|
119
118
|
children: /* @__PURE__ */ o(
|
|
120
|
-
|
|
119
|
+
ce,
|
|
121
120
|
{
|
|
122
121
|
$gutterX: 1,
|
|
123
122
|
$gapX: 1,
|
|
124
123
|
$questionWidth: E,
|
|
125
|
-
$actionbarHeight:
|
|
124
|
+
$actionbarHeight: T,
|
|
126
125
|
children: [
|
|
127
|
-
/* @__PURE__ */ e(f, { label: "close", onClick:
|
|
126
|
+
/* @__PURE__ */ e(f, { label: "close", onClick: P, children: /* @__PURE__ */ e(le, {}) }),
|
|
128
127
|
/* @__PURE__ */ e(i, { $gutterX: 0.5, children: /* @__PURE__ */ e(d, { $renderAs: "eyebrow2", $color: "ORANGE_5", $marginBottomX: 0.25, children: t === "HINT" ? "HINTS:" : "SOLUTION:" }) }),
|
|
129
128
|
r && r.map((c, l) => /* @__PURE__ */ o(i, { $gutterX: 0.5, $gapX: 0.5, children: [
|
|
130
129
|
r.length > 1 && /* @__PURE__ */ o(d, { $renderAs: "eyebrow2", $color: "ORANGE_5", $marginBottomX: 0.25, children: [
|
|
@@ -134,7 +133,7 @@ const Te = q(
|
|
|
134
133
|
":"
|
|
135
134
|
] }),
|
|
136
135
|
/* @__PURE__ */ e(
|
|
137
|
-
|
|
136
|
+
se,
|
|
138
137
|
{
|
|
139
138
|
dangerouslySetInnerHTML: {
|
|
140
139
|
__html: c
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"question-guide.js","sources":["../../../../../src/features/worksheet/worksheet/worksheet-sidebar/question-guide.tsx"],"sourcesContent":["import React, {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useState,\n useRef,\n type ReactElement,\n type RefObject,\n} from 'react';\n\nimport { useGetEligibleJourneysViaRoute } from '../../../journey/hooks/use-get-eligible-journeys-via-route';\nimport { JOURNEY_ID_TEACHER } from '../../../journey/journey-id/journey-id-teacher';\nimport { useJourney } from '../../../journey/use-journey/use-journey';\nimport { useStickersJourney } from '../../../stickers/sticker-selector/hooks/use-stickers-journey/use-stickers-journey';\nimport StickerSelector from '../../../stickers/sticker-selector/sticker-selector';\nimport {\n type IArrowTooltipProps,\n type TPositionProps,\n} from '../../../ui/arrow-tooltip/arrow-tooltip-types';\nimport Clickable from '../../../ui/buttons/clickable/clickable';\nimport FlexView from '../../../ui/layout/flex-view';\nimport Separator from '../../../ui/separator/separator';\nimport Text from '../../../ui/text/text';\nimport EVENTS from '../../constants/events';\nimport type { ILearnosity, IWorksheetProps, IWorksheetQuestion } from '../worksheet-types';\nimport {\n Section,\n GuideContainer,\n CloseIcon,\n SolIcon,\n HintIcon,\n StickersIcon,\n SectionContainer,\n Guide,\n Pointer,\n} from './worksheet-sidebar-styled';\n\ntype TSections = 'HINT' | 'SOL';\n\ninterface IQuestionGuideProps extends Pick<IWorksheetProps, 'loggerRef'> {\n questionWidth: number;\n questions: IWorksheetQuestion[];\n activeQuestionIndex: number;\n learnosity: ILearnosity;\n actionbarHeight: number;\n studentId: string;\n enableStickers?: boolean;\n}\n\nconst QuestionGuide: React.FC<IQuestionGuideProps> = memo(\n ({\n questionWidth,\n questions,\n activeQuestionIndex,\n learnosity,\n actionbarHeight,\n loggerRef,\n studentId,\n enableStickers,\n }) => {\n const [activeSection, setActiveSection] = useState<TSections | undefined>();\n const [pointerPosition, setPointerPosition] = useState({\n top: 0,\n left: 0,\n });\n const [showStickers, setShowStickers] = useState(false);\n const triggerRef = useRef<HTMLDivElement | null>(null);\n const { top, left } = pointerPosition;\n\n const handleHintClick = useCallback(() => {\n setActiveSection('HINT');\n loggerRef.current(EVENTS.WORKSHEET_V3_HINT_SEEN);\n }, [loggerRef]);\n const handleSolClick = useCallback(() => {\n setActiveSection('SOL');\n loggerRef.current(EVENTS.WORKSHEET_V3_SOLUTION_SEEN);\n }, [loggerRef]);\n const handleClose = useCallback(() => {\n setActiveSection(() => undefined);\n }, []);\n const handleBadgeToggle = useCallback(() => {\n setShowStickers(prev => !prev);\n }, []);\n\n const { hints, solution } = questions[activeQuestionIndex]?.metadata || {};\n\n const activeSectionData = useMemo(() => {\n return activeSection === undefined ? undefined : activeSection === 'HINT' ? hints : solution;\n }, [activeSection, hints, solution]);\n\n const sqlRef = useRef<HTMLDivElement>(null) as React.RefObject<HTMLDivElement>;\n const hintRef = useRef<HTMLDivElement>(null) as React.RefObject<HTMLDivElement>;\n\n const updatePointerPosition = useCallback((ref: React.RefObject<HTMLDivElement>) => {\n if (ref.current) {\n const rect = ref.current.getBoundingClientRect();\n\n setPointerPosition({\n top: rect.top + rect.height / 2 - 8,\n left: rect.right - 78, // 52px (sidebar width) + 16px (gutter) + 10px\n });\n }\n }, []);\n\n const stickerTrigger = useMemo(\n () => (\n <div ref={triggerRef}>\n <Clickable label=\"teacher-badges\" onClick={handleBadgeToggle}>\n <FlexView $alignItems=\"center\" $justifyContent=\"center\">\n <StickersIcon width={32} height={32} $disabled={!showStickers} />\n <Text $renderAs=\"eyebrow2\" $color={!showStickers ? 'GREY_4' : 'BLACK'}>\n STICKERS\n </Text>\n <FlexView $gap={8} $alignItems=\"center\">\n <Separator width={24} height={1} background=\"GREY_2\" />\n </FlexView>\n </FlexView>\n </Clickable>\n </div>\n ),\n [showStickers, handleBadgeToggle],\n );\n\n const stickerGridConfig = useMemo(\n () => ({\n stickerSize: 48,\n columns: 4,\n gap: 8,\n }),\n [],\n );\n\n const stickerTooltipConfig = useMemo(\n () => ({\n position: 'left' as TPositionProps,\n zIndex: 1000,\n arrowYCoOrdinates: -175,\n tooltipXCoOrdinates: '7.5%',\n tooltipYCoOrdinates: '40%',\n }),\n [],\n );\n\n const coachmarkConfig = {\n position: 'left',\n tooltipXCoOrdinates: 20,\n tooltipYCoOrdinates: -20,\n };\n\n const eligibleJourneyIds = useGetEligibleJourneysViaRoute([\n JOURNEY_ID_TEACHER.STICKERS_INTRO_JOURNEY,\n ]);\n\n const { isJourneyActive } = useJourney();\n\n const { startTeacherStickersJourney } = useStickersJourney({\n triggerRef: triggerRef as RefObject<HTMLDivElement>,\n triggerElement: stickerTrigger as ReactElement,\n tooltipConfig: coachmarkConfig as IArrowTooltipProps,\n });\n\n if (activeSection && activeSectionData && learnosity) {\n learnosity.renderMath('mathjax');\n }\n\n useEffect(() => {\n if (activeSection === 'HINT') {\n updatePointerPosition(hintRef);\n } else if (activeSection === 'SOL') {\n updatePointerPosition(sqlRef);\n } else if (!activeSectionData) {\n setActiveSection(undefined);\n }\n\n if (\n // eligibleJourneyIds.includes(JOURNEY_ID_TEACHER.STICKERS_INTRO_JOURNEY) &&\n !isJourneyActive\n ) {\n startTeacherStickersJourney();\n }\n }, [\n activeSection,\n updatePointerPosition,\n activeSectionData,\n eligibleJourneyIds,\n isJourneyActive,\n startTeacherStickersJourney,\n ]);\n\n return (\n <GuideContainer $background=\"WHITE\">\n {enableStickers && (\n <StickerSelector\n triggerNode={stickerTrigger}\n studentClassroomId={studentId}\n gridConfig={stickerGridConfig}\n tooltipConfig={stickerTooltipConfig}\n visible={showStickers}\n onToggle={handleBadgeToggle}\n />\n )}\n <Clickable label=\"hints\" onClick={handleHintClick} disabled={!hints}>\n <FlexView $alignItems=\"center\" $justifyContent=\"center\" ref={hintRef}>\n <HintIcon width={32} height={32} $disabled={!hints} />\n <Text $renderAs=\"eyebrow2\" $color={!hints ? 'GREY_4' : 'BLACK'}>\n HINT\n </Text>\n <FlexView $gap={8} $alignItems=\"center\">\n <Separator width={24} height={1} background=\"GREY_2\" />\n </FlexView>\n </FlexView>\n </Clickable>\n <Clickable label=\"solution\" onClick={handleSolClick} disabled={!solution}>\n <FlexView $alignItems=\"center\" $justifyContent=\"center\" ref={sqlRef}>\n <SolIcon width={32} height={32} $disabled={!solution} />\n <Text $renderAs=\"eyebrow2\" $color={!hints ? 'GREY_4' : 'BLACK'}>\n SOL\n </Text>\n </FlexView>\n </Clickable>\n {activeSection && top && left && <Pointer topValue={top} leftValue={left} />}\n {activeSection && (\n <SectionContainer\n $background=\"WHITE\"\n $questionWidth={questionWidth}\n $actionbarHeight={actionbarHeight}\n $borderRadius={10}\n >\n <Section\n $gutterX={1}\n $gapX={1}\n $questionWidth={questionWidth}\n $actionbarHeight={actionbarHeight}\n >\n <Clickable label=\"close\" onClick={handleClose}>\n <CloseIcon />\n </Clickable>\n <FlexView $gutterX={0.5}>\n <Text $renderAs=\"eyebrow2\" $color=\"ORANGE_5\" $marginBottomX={0.25}>\n {activeSection === 'HINT' ? 'HINTS:' : 'SOLUTION:'}\n </Text>\n </FlexView>\n {activeSectionData &&\n activeSectionData.map((item, index) => (\n <FlexView $gutterX={0.5} $gapX={0.5} key={index.toString()}>\n {activeSectionData.length > 1 && (\n <Text $renderAs=\"eyebrow2\" $color=\"ORANGE_5\" $marginBottomX={0.25}>\n {activeSection} {index + 1}:\n </Text>\n )}\n <Guide\n dangerouslySetInnerHTML={{\n __html: item,\n }}\n />\n </FlexView>\n ))}\n </Section>\n </SectionContainer>\n )}\n </GuideContainer>\n );\n },\n);\n\nexport default QuestionGuide;\n"],"names":["QuestionGuide","memo","questionWidth","questions","activeQuestionIndex","learnosity","actionbarHeight","loggerRef","studentId","enableStickers","activeSection","setActiveSection","useState","pointerPosition","setPointerPosition","showStickers","setShowStickers","triggerRef","useRef","top","left","handleHintClick","useCallback","EVENTS","handleSolClick","handleClose","handleBadgeToggle","prev","hints","solution","_a","activeSectionData","useMemo","sqlRef","hintRef","updatePointerPosition","ref","rect","stickerTrigger","jsx","Clickable","jsxs","FlexView","StickersIcon","Text","Separator","stickerGridConfig","stickerTooltipConfig","coachmarkConfig","eligibleJourneyIds","useGetEligibleJourneysViaRoute","JOURNEY_ID_TEACHER","isJourneyActive","useJourney","startTeacherStickersJourney","useStickersJourney","useEffect","GuideContainer","StickerSelector","HintIcon","SolIcon","Pointer","SectionContainer","Section","CloseIcon","item","index","Guide"],"mappings":";;;;;;;;;;;;;AAkDA,MAAMA,KAA+CC;AAAA,EACnD,CAAC;AAAA,IACC,eAAAC;AAAA,IACA,WAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC;AAAA,IACA,gBAAAC;AAAA,EAAA,MACI;;AACJ,UAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAgC,GACpE,CAACC,GAAiBC,CAAkB,IAAIF,EAAS;AAAA,MACrD,KAAK;AAAA,MACL,MAAM;AAAA,IAAA,CACP,GACK,CAACG,GAAcC,CAAe,IAAIJ,EAAS,EAAK,GAChDK,IAAaC,EAA8B,IAAI,GAC/C,EAAE,KAAAC,GAAK,MAAAC,EAAS,IAAAP,GAEhBQ,IAAkBC,EAAY,MAAM;AACxC,MAAAX,EAAiB,MAAM,GACbJ,EAAA,QAAQgB,EAAO,sBAAsB;AAAA,IAAA,GAC9C,CAAChB,CAAS,CAAC,GACRiB,IAAiBF,EAAY,MAAM;AACvC,MAAAX,EAAiB,KAAK,GACZJ,EAAA,QAAQgB,EAAO,0BAA0B;AAAA,IAAA,GAClD,CAAChB,CAAS,CAAC,GACRkB,IAAcH,EAAY,MAAM;AACpC,MAAAX,EAAiB,MAAA;AAAA,OAAe;AAAA,IAClC,GAAG,CAAE,CAAA,GACCe,IAAoBJ,EAAY,MAAM;AAC1B,MAAAN,EAAA,CAAAW,MAAQ,CAACA,CAAI;AAAA,IAC/B,GAAG,CAAE,CAAA,GAEC,EAAE,OAAAC,GAAO,UAAAC,EAAS,MAAIC,IAAA3B,EAAUC,CAAmB,MAA7B,gBAAA0B,EAAgC,aAAY,IAElEC,IAAoBC,EAAQ,MACzBtB,MAAkB,SAAY,SAAYA,MAAkB,SAASkB,IAAQC,GACnF,CAACnB,GAAekB,GAAOC,CAAQ,CAAC,GAE7BI,IAASf,EAAuB,IAAI,GACpCgB,IAAUhB,EAAuB,IAAI,GAErCiB,IAAwBb,EAAY,CAACc,MAAyC;AAClF,UAAIA,EAAI,SAAS;AACT,cAAAC,IAAOD,EAAI,QAAQ,sBAAsB;AAE5B,QAAAtB,EAAA;AAAA,UACjB,KAAKuB,EAAK,MAAMA,EAAK,SAAS,IAAI;AAAA,UAClC,MAAMA,EAAK,QAAQ;AAAA;AAAA,QAAA,CACpB;AAAA,MACH;AAAA,IACF,GAAG,CAAE,CAAA,GAECC,IAAiBN;AAAA,MACrB,MACG,gBAAAO,EAAA,OAAA,EAAI,KAAKtB,GACR,4BAACuB,GAAU,EAAA,OAAM,kBAAiB,SAASd,GACzC,UAAC,gBAAAe,EAAAC,GAAA,EAAS,aAAY,UAAS,iBAAgB,UAC7C,UAAA;AAAA,QAAA,gBAAAH,EAACI,MAAa,OAAO,IAAI,QAAQ,IAAI,WAAW,CAAC5B,GAAc;AAAA,QAC/D,gBAAAwB,EAACK,KAAK,WAAU,YAAW,QAAS7B,IAA0B,UAAX,UAAoB,UAEvE,WAAA,CAAA;AAAA,QACC,gBAAAwB,EAAAG,GAAA,EAAS,MAAM,GAAG,aAAY,UAC7B,UAAA,gBAAAH,EAACM,GAAU,EAAA,OAAO,IAAI,QAAQ,GAAG,YAAW,SAAS,CAAA,GACvD;AAAA,MAAA,EACF,CAAA,EACF,CAAA,GACF;AAAA,MAEF,CAAC9B,GAAcW,CAAiB;AAAA,IAAA,GAG5BoB,IAAoBd;AAAA,MACxB,OAAO;AAAA,QACL,aAAa;AAAA,QACb,SAAS;AAAA,QACT,KAAK;AAAA,MAAA;AAAA,MAEP,CAAC;AAAA,IAAA,GAGGe,IAAuBf;AAAA,MAC3B,OAAO;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,mBAAmB;AAAA,QACnB,qBAAqB;AAAA,QACrB,qBAAqB;AAAA,MAAA;AAAA,MAEvB,CAAC;AAAA,IAAA,GAGGgB,IAAkB;AAAA,MACtB,UAAU;AAAA,MACV,qBAAqB;AAAA,MACrB,qBAAqB;AAAA,IAAA,GAGjBC,IAAqBC,EAA+B;AAAA,MACxDC,EAAmB;AAAA,IAAA,CACpB,GAEK,EAAE,iBAAAC,MAAoBC,KAEtB,EAAE,6BAAAC,EAA4B,IAAIC,EAAmB;AAAA,MACzD,YAAAtC;AAAA,MACA,gBAAgBqB;AAAA,MAChB,eAAeU;AAAA,IAAA,CAChB;AAEG,WAAAtC,KAAiBqB,KAAqB1B,KACxCA,EAAW,WAAW,SAAS,GAGjCmD,EAAU,MAAM;AACd,MAAI9C,MAAkB,SACpByB,EAAsBD,CAAO,IACpBxB,MAAkB,QAC3ByB,EAAsBF,CAAM,IAClBF,KACVpB,EAAiB,MAAS,GAKzByC,KAE2BE;IAC9B,GACC;AAAA,MACD5C;AAAA,MACAyB;AAAA,MACAJ;AAAA,MACAkB;AAAA,MACAG;AAAA,MACAE;AAAA,IAAA,CACD,GAGC,gBAAAb,EAACgB,IAAe,EAAA,aAAY,SACzB,UAAA;AAAA,MACChD,KAAA,gBAAA8B;AAAA,QAACmB;AAAA,QAAA;AAAA,UACC,aAAapB;AAAA,UACb,oBAAoB9B;AAAA,UACpB,YAAYsC;AAAA,UACZ,eAAeC;AAAA,UACf,SAAShC;AAAA,UACT,UAAUW;AAAA,QAAA;AAAA,MACZ;AAAA,wBAEDc,GAAU,EAAA,OAAM,SAAQ,SAASnB,GAAiB,UAAU,CAACO,GAC5D,UAAA,gBAAAa,EAACC,KAAS,aAAY,UAAS,iBAAgB,UAAS,KAAKR,GAC3D,UAAA;AAAA,QAAA,gBAAAK,EAACoB,MAAS,OAAO,IAAI,QAAQ,IAAI,WAAW,CAAC/B,GAAO;AAAA,QACpD,gBAAAW,EAACK,KAAK,WAAU,YAAW,QAAShB,IAAmB,UAAX,UAAoB,UAEhE,OAAA,CAAA;AAAA,QACC,gBAAAW,EAAAG,GAAA,EAAS,MAAM,GAAG,aAAY,UAC7B,UAAA,gBAAAH,EAACM,GAAU,EAAA,OAAO,IAAI,QAAQ,GAAG,YAAW,SAAS,CAAA,GACvD;AAAA,MAAA,EAAA,CACF,EACF,CAAA;AAAA,wBACCL,GAAU,EAAA,OAAM,YAAW,SAAShB,GAAgB,UAAU,CAACK,GAC9D,UAAA,gBAAAY,EAACC,KAAS,aAAY,UAAS,iBAAgB,UAAS,KAAKT,GAC3D,UAAA;AAAA,QAAA,gBAAAM,EAACqB,MAAQ,OAAO,IAAI,QAAQ,IAAI,WAAW,CAAC/B,GAAU;AAAA,QACtD,gBAAAU,EAACK,KAAK,WAAU,YAAW,QAAShB,IAAmB,UAAX,UAAoB,UAEhE,MAAA,CAAA;AAAA,MAAA,EAAA,CACF,EACF,CAAA;AAAA,MACClB,KAAiBS,KAAOC,KAAQ,gBAAAmB,EAACsB,MAAQ,UAAU1C,GAAK,WAAWC,GAAM;AAAA,MACzEV,KACC,gBAAA6B;AAAA,QAACuB;AAAA,QAAA;AAAA,UACC,aAAY;AAAA,UACZ,gBAAgB5D;AAAA,UAChB,kBAAkBI;AAAA,UAClB,eAAe;AAAA,UAEf,UAAA,gBAAAmC;AAAA,YAACsB;AAAA,YAAA;AAAA,cACC,UAAU;AAAA,cACV,OAAO;AAAA,cACP,gBAAgB7D;AAAA,cAChB,kBAAkBI;AAAA,cAElB,UAAA;AAAA,gBAAA,gBAAAiC,EAACC,KAAU,OAAM,SAAQ,SAASf,GAChC,UAAA,gBAAAc,EAACyB,MAAU,EACb,CAAA;AAAA,kCACCtB,GAAS,EAAA,UAAU,KAClB,UAAA,gBAAAH,EAACK,KAAK,WAAU,YAAW,QAAO,YAAW,gBAAgB,MAC1D,UAAAlC,MAAkB,SAAS,WAAW,YACzC,CAAA,GACF;AAAA,gBACCqB,KACCA,EAAkB,IAAI,CAACkC,GAAMC,MAC3B,gBAAAzB,EAACC,GAAS,EAAA,UAAU,KAAK,OAAO,KAC7B,UAAA;AAAA,kBAAkBX,EAAA,SAAS,KACzB,gBAAAU,EAAAG,GAAA,EAAK,WAAU,YAAW,QAAO,YAAW,gBAAgB,MAC1D,UAAA;AAAA,oBAAAlC;AAAA,oBAAc;AAAA,oBAAEwD,IAAQ;AAAA,oBAAE;AAAA,kBAAA,GAC7B;AAAA,kBAEF,gBAAA3B;AAAA,oBAAC4B;AAAA,oBAAA;AAAA,sBACC,yBAAyB;AAAA,wBACvB,QAAQF;AAAA,sBACV;AAAA,oBAAA;AAAA,kBACF;AAAA,gBAAA,KAVwCC,EAAM,SAAS,CAWzD,CACD;AAAA,cAAA;AAAA,YAAA;AAAA,UACL;AAAA,QAAA;AAAA,MACF;AAAA,IAEJ,EAAA,CAAA;AAAA,EAEJ;AACF;"}
|
|
1
|
+
{"version":3,"file":"question-guide.js","sources":["../../../../../src/features/worksheet/worksheet/worksheet-sidebar/question-guide.tsx"],"sourcesContent":["import React, {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useState,\n useRef,\n type ReactElement,\n type RefObject,\n} from 'react';\n\nimport { useGetEligibleJourneysViaRoute } from '../../../journey/hooks/use-get-eligible-journeys-via-route';\nimport { JOURNEY_ID_TEACHER } from '../../../journey/journey-id/journey-id-teacher';\nimport { useJourney } from '../../../journey/use-journey/use-journey';\nimport { useStickersJourney } from '../../../stickers/sticker-selector/hooks/use-stickers-journey/use-stickers-journey';\nimport StickerSelector from '../../../stickers/sticker-selector/sticker-selector';\nimport {\n type IArrowTooltipProps,\n type TPositionProps,\n} from '../../../ui/arrow-tooltip/arrow-tooltip-types';\nimport Clickable from '../../../ui/buttons/clickable/clickable';\nimport FlexView from '../../../ui/layout/flex-view';\nimport Separator from '../../../ui/separator/separator';\nimport Text from '../../../ui/text/text';\nimport EVENTS from '../../constants/events';\nimport type { ILearnosity, IWorksheetProps, IWorksheetQuestion } from '../worksheet-types';\nimport {\n Section,\n GuideContainer,\n CloseIcon,\n SolIcon,\n HintIcon,\n StickersIcon,\n SectionContainer,\n Guide,\n Pointer,\n} from './worksheet-sidebar-styled';\n\ntype TSections = 'HINT' | 'SOL';\n\ninterface IQuestionGuideProps extends Pick<IWorksheetProps, 'loggerRef'> {\n questionWidth: number;\n questions: IWorksheetQuestion[];\n activeQuestionIndex: number;\n learnosity: ILearnosity;\n actionbarHeight: number;\n studentClassroomId?: string;\n}\n\nconst QuestionGuide: React.FC<IQuestionGuideProps> = memo(\n ({\n questionWidth,\n questions,\n activeQuestionIndex,\n learnosity,\n actionbarHeight,\n loggerRef,\n studentClassroomId,\n }) => {\n const [activeSection, setActiveSection] = useState<TSections | undefined>();\n const [pointerPosition, setPointerPosition] = useState({\n top: 0,\n left: 0,\n });\n const [showStickers, setShowStickers] = useState(false);\n const triggerRef = useRef<HTMLDivElement | null>(null);\n const { top, left } = pointerPosition;\n\n const handleHintClick = useCallback(() => {\n setActiveSection('HINT');\n loggerRef.current(EVENTS.WORKSHEET_V3_HINT_SEEN);\n }, [loggerRef]);\n const handleSolClick = useCallback(() => {\n setActiveSection('SOL');\n loggerRef.current(EVENTS.WORKSHEET_V3_SOLUTION_SEEN);\n }, [loggerRef]);\n const handleClose = useCallback(() => {\n setActiveSection(() => undefined);\n }, []);\n const handleBadgeToggle = useCallback(() => {\n setShowStickers(prev => !prev);\n }, []);\n\n const { hints, solution } = questions[activeQuestionIndex]?.metadata || {};\n\n const activeSectionData = useMemo(() => {\n return activeSection === undefined ? undefined : activeSection === 'HINT' ? hints : solution;\n }, [activeSection, hints, solution]);\n\n const sqlRef = useRef<HTMLDivElement>(null) as React.RefObject<HTMLDivElement>;\n const hintRef = useRef<HTMLDivElement>(null) as React.RefObject<HTMLDivElement>;\n\n const updatePointerPosition = useCallback((ref: React.RefObject<HTMLDivElement>) => {\n if (ref.current) {\n const rect = ref.current.getBoundingClientRect();\n\n setPointerPosition({\n top: rect.top + rect.height / 2 - 8,\n left: rect.right - 78, // 52px (sidebar width) + 16px (gutter) + 10px\n });\n }\n }, []);\n\n const stickerTrigger = useMemo(\n () => (\n <div ref={triggerRef}>\n <Clickable label=\"teacher-badges\" onClick={handleBadgeToggle}>\n <FlexView $alignItems=\"center\" $justifyContent=\"center\">\n <StickersIcon width={32} height={32} $disabled={!showStickers} />\n <Text $renderAs=\"eyebrow2\" $color={!showStickers ? 'GREY_4' : 'BLACK'}>\n STICKERS\n </Text>\n <FlexView $gap={8} $alignItems=\"center\">\n <Separator width={24} height={1} background=\"GREY_2\" />\n </FlexView>\n </FlexView>\n </Clickable>\n </div>\n ),\n [showStickers, handleBadgeToggle],\n );\n\n const stickerGridConfig = useMemo(\n () => ({\n stickerSize: 48,\n columns: 4,\n gap: 8,\n }),\n [],\n );\n\n const stickerTooltipConfig = useMemo(\n () => ({\n position: 'left' as TPositionProps,\n zIndex: 1000,\n arrowYCoOrdinates: -175,\n tooltipXCoOrdinates: '7.5%',\n tooltipYCoOrdinates: '40%',\n }),\n [],\n );\n\n const coachmarkConfig = {\n position: 'left',\n tooltipXCoOrdinates: 20,\n tooltipYCoOrdinates: -20,\n };\n\n const eligibleJourneyIds = useGetEligibleJourneysViaRoute([\n JOURNEY_ID_TEACHER.STICKERS_INTRO_JOURNEY,\n ]);\n\n const { isJourneyActive } = useJourney();\n\n const { startTeacherStickersJourney } = useStickersJourney({\n triggerRef: triggerRef as RefObject<HTMLDivElement>,\n triggerElement: stickerTrigger as ReactElement,\n tooltipConfig: coachmarkConfig as IArrowTooltipProps,\n });\n\n if (activeSection && activeSectionData && learnosity) {\n learnosity.renderMath('mathjax');\n }\n\n useEffect(() => {\n if (activeSection === 'HINT') {\n updatePointerPosition(hintRef);\n } else if (activeSection === 'SOL') {\n updatePointerPosition(sqlRef);\n } else if (!activeSectionData) {\n setActiveSection(undefined);\n }\n\n if (\n eligibleJourneyIds.includes(JOURNEY_ID_TEACHER.STICKERS_INTRO_JOURNEY) &&\n !isJourneyActive\n ) {\n startTeacherStickersJourney();\n }\n }, [\n activeSection,\n updatePointerPosition,\n activeSectionData,\n eligibleJourneyIds,\n isJourneyActive,\n startTeacherStickersJourney,\n ]);\n\n return (\n <GuideContainer $background=\"WHITE\">\n {studentClassroomId && (\n <StickerSelector\n triggerNode={stickerTrigger}\n studentClassroomId={studentClassroomId}\n gridConfig={stickerGridConfig}\n tooltipConfig={stickerTooltipConfig}\n visible={showStickers}\n onToggle={handleBadgeToggle}\n />\n )}\n <Clickable label=\"hints\" onClick={handleHintClick} disabled={!hints}>\n <FlexView $alignItems=\"center\" $justifyContent=\"center\" ref={hintRef}>\n <HintIcon width={32} height={32} $disabled={!hints} />\n <Text $renderAs=\"eyebrow2\" $color={!hints ? 'GREY_4' : 'BLACK'}>\n HINT\n </Text>\n <FlexView $gap={8} $alignItems=\"center\">\n <Separator width={24} height={1} background=\"GREY_2\" />\n </FlexView>\n </FlexView>\n </Clickable>\n <Clickable label=\"solution\" onClick={handleSolClick} disabled={!solution}>\n <FlexView $alignItems=\"center\" $justifyContent=\"center\" ref={sqlRef}>\n <SolIcon width={32} height={32} $disabled={!solution} />\n <Text $renderAs=\"eyebrow2\" $color={!hints ? 'GREY_4' : 'BLACK'}>\n SOL\n </Text>\n </FlexView>\n </Clickable>\n {activeSection && top && left && <Pointer topValue={top} leftValue={left} />}\n {activeSection && (\n <SectionContainer\n $background=\"WHITE\"\n $questionWidth={questionWidth}\n $actionbarHeight={actionbarHeight}\n $borderRadius={10}\n >\n <Section\n $gutterX={1}\n $gapX={1}\n $questionWidth={questionWidth}\n $actionbarHeight={actionbarHeight}\n >\n <Clickable label=\"close\" onClick={handleClose}>\n <CloseIcon />\n </Clickable>\n <FlexView $gutterX={0.5}>\n <Text $renderAs=\"eyebrow2\" $color=\"ORANGE_5\" $marginBottomX={0.25}>\n {activeSection === 'HINT' ? 'HINTS:' : 'SOLUTION:'}\n </Text>\n </FlexView>\n {activeSectionData &&\n activeSectionData.map((item, index) => (\n <FlexView $gutterX={0.5} $gapX={0.5} key={index.toString()}>\n {activeSectionData.length > 1 && (\n <Text $renderAs=\"eyebrow2\" $color=\"ORANGE_5\" $marginBottomX={0.25}>\n {activeSection} {index + 1}:\n </Text>\n )}\n <Guide\n dangerouslySetInnerHTML={{\n __html: item,\n }}\n />\n </FlexView>\n ))}\n </Section>\n </SectionContainer>\n )}\n </GuideContainer>\n );\n },\n);\n\nexport default QuestionGuide;\n"],"names":["QuestionGuide","memo","questionWidth","questions","activeQuestionIndex","learnosity","actionbarHeight","loggerRef","studentClassroomId","activeSection","setActiveSection","useState","pointerPosition","setPointerPosition","showStickers","setShowStickers","triggerRef","useRef","top","left","handleHintClick","useCallback","EVENTS","handleSolClick","handleClose","handleBadgeToggle","prev","hints","solution","_a","activeSectionData","useMemo","sqlRef","hintRef","updatePointerPosition","ref","rect","stickerTrigger","jsx","Clickable","jsxs","FlexView","StickersIcon","Text","Separator","stickerGridConfig","stickerTooltipConfig","coachmarkConfig","eligibleJourneyIds","useGetEligibleJourneysViaRoute","JOURNEY_ID_TEACHER","isJourneyActive","useJourney","startTeacherStickersJourney","useStickersJourney","useEffect","GuideContainer","StickerSelector","HintIcon","SolIcon","Pointer","SectionContainer","Section","CloseIcon","item","index","Guide"],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { jsxs as n, jsx as r } from "react/jsx-runtime";
|
|
2
|
-
import { memo as
|
|
3
|
-
import
|
|
4
|
-
import
|
|
2
|
+
import { memo as x, useCallback as C } from "react";
|
|
3
|
+
import g from "../../../ui/layout/flex-view.js";
|
|
4
|
+
import u from "../../../ui/separator/separator.js";
|
|
5
5
|
import { SIDEBAR_WIDTH as f } from "../constants.js";
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import { SideBarContainer as
|
|
9
|
-
const
|
|
6
|
+
import w from "./navigator.js";
|
|
7
|
+
import S from "./question-guide.js";
|
|
8
|
+
import { SideBarContainer as T, UnderlinedTextWrapper as j, UnderlinedText as k } from "./worksheet-sidebar-styled.js";
|
|
9
|
+
const U = x(
|
|
10
10
|
({
|
|
11
11
|
questionWidth: t,
|
|
12
12
|
questions: i,
|
|
@@ -17,24 +17,23 @@ const X = C(
|
|
|
17
17
|
actionbarHeight: s,
|
|
18
18
|
openQuestionFeedbackModal: e,
|
|
19
19
|
loggerRef: h,
|
|
20
|
-
|
|
21
|
-
enableStickers: d
|
|
20
|
+
studentClassroomId: p
|
|
22
21
|
}) => {
|
|
23
|
-
const
|
|
22
|
+
const d = i[m], { item_reference: o } = d ?? {}, $ = C(() => {
|
|
24
23
|
e && e(o || "");
|
|
25
24
|
}, [o, e]);
|
|
26
25
|
return c !== "TEACHER" || !e ? null : /* @__PURE__ */ n(
|
|
27
|
-
|
|
26
|
+
T,
|
|
28
27
|
{
|
|
29
28
|
$width: f,
|
|
30
29
|
$questionWidth: t,
|
|
31
30
|
$height: l,
|
|
32
31
|
$justifyContent: "space-between",
|
|
33
32
|
children: [
|
|
34
|
-
/* @__PURE__ */ r(
|
|
35
|
-
/* @__PURE__ */ n(
|
|
33
|
+
/* @__PURE__ */ r(j, { $width: f, $alignItems: "flex-start", $gapX: 0.5, children: /* @__PURE__ */ r(k, { $renderAs: "cta1", onClick: $, children: "Question Feedback" }) }),
|
|
34
|
+
/* @__PURE__ */ n(g, { children: [
|
|
36
35
|
/* @__PURE__ */ r(
|
|
37
|
-
|
|
36
|
+
S,
|
|
38
37
|
{
|
|
39
38
|
questionWidth: t,
|
|
40
39
|
questions: i,
|
|
@@ -42,12 +41,11 @@ const X = C(
|
|
|
42
41
|
learnosity: a,
|
|
43
42
|
actionbarHeight: s,
|
|
44
43
|
loggerRef: h,
|
|
45
|
-
|
|
46
|
-
enableStickers: d
|
|
44
|
+
studentClassroomId: p
|
|
47
45
|
}
|
|
48
46
|
),
|
|
49
|
-
/* @__PURE__ */ r(
|
|
50
|
-
/* @__PURE__ */ r(
|
|
47
|
+
/* @__PURE__ */ r(u, { heightX: 0.5 }),
|
|
48
|
+
/* @__PURE__ */ r(w, {})
|
|
51
49
|
] })
|
|
52
50
|
]
|
|
53
51
|
}
|
|
@@ -55,6 +53,6 @@ const X = C(
|
|
|
55
53
|
}
|
|
56
54
|
);
|
|
57
55
|
export {
|
|
58
|
-
|
|
56
|
+
U as default
|
|
59
57
|
};
|
|
60
58
|
//# sourceMappingURL=sidebar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.js","sources":["../../../../../src/features/worksheet/worksheet/worksheet-sidebar/sidebar.tsx"],"sourcesContent":["import { memo, useCallback, type FC } from 'react';\n\nimport FlexView from '../../../ui/layout/flex-view';\nimport Separator from '../../../ui/separator/separator';\nimport type { TUserTypes } from '../../../ui/types';\nimport { SIDEBAR_WIDTH } from '../constants';\nimport type { ILearnosity, IWorksheetProps, IWorksheetQuestion } from '../worksheet-types';\nimport Navigator from './navigator';\nimport QuestionGuide from './question-guide';\nimport {\n SideBarContainer,\n UnderlinedText,\n UnderlinedTextWrapper,\n} from './worksheet-sidebar-styled';\n\ninterface IWorksheetSideBarProps extends Pick<IWorksheetProps, 'loggerRef'> {\n questionWidth: number;\n questions: IWorksheetQuestion[];\n activeQuestionIndex: number;\n learnosity: ILearnosity;\n userType: TUserTypes;\n height: number | string;\n actionbarHeight: number;\n
|
|
1
|
+
{"version":3,"file":"sidebar.js","sources":["../../../../../src/features/worksheet/worksheet/worksheet-sidebar/sidebar.tsx"],"sourcesContent":["import { memo, useCallback, type FC } from 'react';\n\nimport FlexView from '../../../ui/layout/flex-view';\nimport Separator from '../../../ui/separator/separator';\nimport type { TUserTypes } from '../../../ui/types';\nimport { SIDEBAR_WIDTH } from '../constants';\nimport type { ILearnosity, IWorksheetProps, IWorksheetQuestion } from '../worksheet-types';\nimport Navigator from './navigator';\nimport QuestionGuide from './question-guide';\nimport {\n SideBarContainer,\n UnderlinedText,\n UnderlinedTextWrapper,\n} from './worksheet-sidebar-styled';\n\ninterface IWorksheetSideBarProps extends Pick<IWorksheetProps, 'loggerRef'> {\n questionWidth: number;\n questions: IWorksheetQuestion[];\n activeQuestionIndex: number;\n learnosity: ILearnosity;\n userType: TUserTypes;\n height: number | string;\n actionbarHeight: number;\n studentClassroomId?: string;\n openQuestionFeedbackModal?: (itemRef: string) => void;\n}\n\nconst WorksheetSideBar: FC<IWorksheetSideBarProps> = memo(\n ({\n questionWidth,\n questions,\n activeQuestionIndex,\n learnosity,\n userType,\n height,\n actionbarHeight,\n openQuestionFeedbackModal,\n loggerRef,\n studentClassroomId,\n }) => {\n const activeQuestion = questions[activeQuestionIndex];\n const { item_reference: itemRef } = activeQuestion ?? {};\n\n const onFeedbackClick = useCallback(() => {\n if (openQuestionFeedbackModal) {\n openQuestionFeedbackModal(itemRef || '');\n }\n }, [itemRef, openQuestionFeedbackModal]);\n\n if (userType !== 'TEACHER' || !openQuestionFeedbackModal) return null;\n\n return (\n <SideBarContainer\n $width={SIDEBAR_WIDTH}\n $questionWidth={questionWidth}\n $height={height}\n $justifyContent=\"space-between\"\n >\n <UnderlinedTextWrapper $width={SIDEBAR_WIDTH} $alignItems=\"flex-start\" $gapX={0.5}>\n <UnderlinedText $renderAs=\"cta1\" onClick={onFeedbackClick}>\n Question Feedback\n </UnderlinedText>\n </UnderlinedTextWrapper>\n\n <FlexView>\n <QuestionGuide\n questionWidth={questionWidth}\n questions={questions}\n activeQuestionIndex={activeQuestionIndex}\n learnosity={learnosity}\n actionbarHeight={actionbarHeight}\n loggerRef={loggerRef}\n studentClassroomId={studentClassroomId}\n />\n <Separator heightX={0.5} />\n <Navigator />\n </FlexView>\n </SideBarContainer>\n );\n },\n);\n\nexport default WorksheetSideBar;\n"],"names":["WorksheetSideBar","memo","questionWidth","questions","activeQuestionIndex","learnosity","userType","height","actionbarHeight","openQuestionFeedbackModal","loggerRef","studentClassroomId","activeQuestion","itemRef","onFeedbackClick","useCallback","jsxs","SideBarContainer","SIDEBAR_WIDTH","jsx","UnderlinedTextWrapper","UnderlinedText","FlexView","QuestionGuide","Separator","Navigator"],"mappings":";;;;;;;;AA2BA,MAAMA,IAA+CC;AAAA,EACnD,CAAC;AAAA,IACC,eAAAC;AAAA,IACA,WAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,UAAAC;AAAA,IACA,QAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,2BAAAC;AAAA,IACA,WAAAC;AAAA,IACA,oBAAAC;AAAA,EAAA,MACI;AACE,UAAAC,IAAiBT,EAAUC,CAAmB,GAC9C,EAAE,gBAAgBS,MAAYD,KAAkB,CAAA,GAEhDE,IAAkBC,EAAY,MAAM;AACxC,MAAIN,KACFA,EAA0BI,KAAW,EAAE;AAAA,IACzC,GACC,CAACA,GAASJ,CAAyB,CAAC;AAEvC,WAAIH,MAAa,aAAa,CAACG,IAAkC,OAG/D,gBAAAO;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,QAAQC;AAAA,QACR,gBAAgBhB;AAAA,QAChB,SAASK;AAAA,QACT,iBAAgB;AAAA,QAEhB,UAAA;AAAA,UAAA,gBAAAY,EAACC,GAAsB,EAAA,QAAQF,GAAe,aAAY,cAAa,OAAO,KAC5E,UAAC,gBAAAC,EAAAE,GAAA,EAAe,WAAU,QAAO,SAASP,GAAiB,8BAE3D,CAAA,GACF;AAAA,4BAECQ,GACC,EAAA,UAAA;AAAA,YAAA,gBAAAH;AAAA,cAACI;AAAA,cAAA;AAAA,gBACC,eAAArB;AAAA,gBACA,WAAAC;AAAA,gBACA,qBAAAC;AAAA,gBACA,YAAAC;AAAA,gBACA,iBAAAG;AAAA,gBACA,WAAAE;AAAA,gBACA,oBAAAC;AAAA,cAAA;AAAA,YACF;AAAA,YACA,gBAAAQ,EAACK,GAAU,EAAA,SAAS,IAAK,CAAA;AAAA,8BACxBC,GAAU,EAAA;AAAA,UAAA,GACb;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worksheet-types.js","sources":["../../../../src/features/worksheet/worksheet/worksheet-types.ts"],"sourcesContent":["import type { MutableRefObject, ReactElement } from 'react';\n\nimport type { TNodeTypes } from '../../../types/models/worksheet';\nimport type { IActionData, TPublish, TSubscribe } from '../../cue-canvas/types/cue-canvas';\nimport type { TPublishMouseMove, TSubscribeMouseMove } from '../../pointer-sync/pointer-types';\nimport type { TColorNames, THueNames, TUserTypes } from '../../ui/types';\nimport type { IFile } from './worksheet-question/subjective-review';\n\nexport enum QUESTION_TAGS {\n TRIAL_TOPIC = 'trial-topic',\n QUESTION_CODE = 'question code',\n}\n\nexport enum QUESTIONS_RATING {\n E = 3,\n S = 2, // Just right\n H = 1,\n}\n\nexport interface ILearnosityError {\n code: number;\n consumerKey: string;\n detail: string;\n errorUI: string;\n msg: string;\n}\n\ninterface ILearnosityQuestionMetadata {\n widget_reference: string;\n sheet_reference: string;\n hints?: string[];\n solution?: string[];\n teacher_tips?: string[];\n valid_response_count: number;\n source: {\n organisation_id: number;\n };\n}\n\nexport type TInstructorStimulus =\n | 'SystemIntro' // lesson v3\n | 'Intro' // lesson v3\n | 'Concept-Intro' // lesson v3\n | 'Instruction' // lesson v3\n | 'Task' // lesson v3\n | 'Try' // trial v3\n | 'Learn' // trial v3\n | 'Apply'; // trial v3\nexport type TItemType =\n | 'overview'\n | 'learning-we-do'\n | 'learning-your-turn'\n | 'learning-explore'\n | 'practice-basic'\n | 'practice-basic-optional'\n | 'practice-regular'\n | 'practice-regular-optional'\n | 'exit-ticket'\n | 'advanced-we-do'\n | 'advanced-your-turn'\n | 'advanced-explore'\n | 'advanced-practice';\n\nexport type TSectionName =\n | 'overview'\n | 'learning'\n | 'practice-basic'\n | 'practice-regular'\n | 'exit-ticket'\n | 'advanced';\n\nexport interface IQuestionValidResponse {\n score: number;\n value: unknown[];\n}\n\nexport interface ISheetNudgeBannerInfo {\n bannerBackgroundColor: TColorNames;\n label: string;\n}\n\nexport interface ILearnosityQuestion {\n response_id: string;\n instructor_stimulus?: TInstructorStimulus;\n metadata: ILearnosityQuestionMetadata;\n instant_feedback?: boolean;\n math_renderer?: string;\n template?: string;\n tokenization?: string;\n numberPad?: string[];\n symbols?: unknown[];\n response_container?: Record<string, unknown>;\n ui_style?: Record<string, unknown>;\n shuffle_options?: boolean;\n // for custom type question validation is undefined.\n validation?: {\n scoring_type?: string;\n unscored?: boolean;\n valid_response?: IQuestionValidResponse;\n alt_responses?: IQuestionValidResponse[];\n penalty?: number;\n min_score_if_attempted?: number;\n };\n is_math?: boolean;\n labels?: Record<string, unknown>;\n line?: Record<string, unknown>;\n points?: string[];\n snap_to_ticks?: boolean;\n ticks?: Record<string, unknown>;\n max_length?: number;\n type:\n | 'hotspot'\n | 'tokenhighlight'\n | 'numberline'\n | 'clozeassociation'\n | 'clozetext'\n | 'association'\n | 'classification'\n | 'clozedropdown'\n | 'clozeformula'\n | 'mcq'\n | 'choicematrix'\n | 'plaintext'\n | 'drawing';\n case_sensitive?: boolean;\n show_copy?: boolean;\n show_cut?: boolean;\n show_paste?: boolean;\n spellcheck?: boolean;\n stimulus?: string;\n stimulus_review?: string;\n stimulus_list?: string[];\n image?: Record<string, unknown>;\n areas?: unknown[];\n area_attributes?: Record<string, unknown>;\n possible_responses?: string[][] | string[];\n duplicate_responses?: boolean;\n response_containers?: unknown[];\n options?: Record<string, unknown>[] | string[];\n feedback_attempts?: number;\n stems?: string[];\n multiple_responses?: boolean;\n}\n\nexport interface ILearnosityItem {\n reference: string;\n questions: ILearnosityQuestion[];\n source: Record<string, unknown>;\n content: string;\n metadata: Record<string, unknown> | unknown[];\n workflow: unknown[];\n response_ids: string[];\n feature_ids: unknown[];\n features: unknown[];\n itemType?: TItemType;\n tags?: string[];\n}\n\nexport interface IWorksheetQuestion extends ILearnosityQuestion {\n item_reference: string;\n item_type?: TItemType;\n section_name?: TSectionName;\n is_optional?: boolean;\n item_tags: string[];\n item_tags_map: Record<string, string>;\n item_number: number;\n item_display_number: number;\n question_number: number;\n total_questions: number;\n}\n\nexport interface ILearnosityQuestionScore {\n score?: number | null;\n max_score: number;\n unscored?: boolean;\n}\n\nexport interface ILearnosityQuestionResponse {\n value: unknown;\n responses?: unknown;\n type: unknown;\n updatedFormat?: boolean;\n wordCount?: number;\n apiVersion: string;\n revision: number;\n feedbackAttemptsCount?: number;\n}\n\nexport interface IAttempt {\n response: ILearnosityQuestionResponse;\n score: ILearnosityQuestionScore;\n}\n\ninterface ITeacherReview {\n reviewComment?: string;\n images?: string[];\n}\nexport interface IWorksheetResponse {\n widgetReference: string;\n itemReference: string;\n itemPosition: number; // 0 based\n questionPosition: number; // 0 based\n isOkayTypeQuestion: boolean;\n response?: ILearnosityQuestionResponse;\n simState?: Record<string, unknown>;\n score?: ILearnosityQuestionScore;\n responseEdited?: boolean;\n hintsUsed?: number;\n markedForReview?: boolean;\n attemptsHistory?: IAttempt[];\n validatedByTeacher?: boolean;\n submittedByStudent?: boolean;\n assignStatus?: 'assigned' | 'skipped';\n rating?: number;\n skipped?: boolean;\n doubtResolved?: boolean;\n teacherReview?: ITeacherReview;\n tags?: Record<string, string>;\n timeSpent?: number;\n}\n\ntype TMathRenderer = 'mathjax' | 'mathquill';\nexport interface ILearnosity {\n ready: () => void;\n questions: () => Record<string, unknown>;\n question: (responseId: string) =>\n | {\n enable: () => boolean;\n disable: () => boolean;\n getQuestion: () => ILearnosityQuestion;\n getMetadata: () => ILearnosityQuestionMetadata;\n getResponse: () => ILearnosityQuestionResponse;\n getScore: (\n callback?: (score: ILearnosityQuestionScore | null) => void,\n ) => ILearnosityQuestionScore;\n validate: (\n options?: { showCorrectAnswers?: boolean; feedbackAttempts?: boolean },\n callback?: () => void,\n ) => void;\n resetValidationUI: () => void;\n on: (eventName: 'changed', callback: () => void) => void;\n off: (eventName: 'changed', callback?: () => void) => void;\n }\n | undefined;\n append: (toAppend: {\n questions: ILearnosityQuestion[];\n responses?: Record<string, unknown>;\n }) => void;\n appendQuestion: (toAppend: {\n questions: ILearnosityQuestion[];\n responses?: Record<string, unknown>;\n }) => void;\n reset: () => void;\n renderMath: (renderer: TMathRenderer) => void;\n}\n\nexport interface IWorksheetBehavior {\n /**\n * If true, Opens the worksheet in resume mode.\n * - If false, Opens the worksheet in review mode.\n */\n canAttempt: boolean;\n /**\n * If true, the user can mark the question for review.\n */\n canMarkForReview: boolean;\n /**\n * The mode of navigation for the worksheet.\n * - `OPEN` mode allows the user to navigate to any question in the worksheet.\n * - `LINEAR` mode allows the user to navigate to the next question only.\n * - `ADAPTIVE` mode allows the user to navigate future questions based on the rating of the current question.\n * - `CURRENT` mode allows the user to navigate to the current question only. Back and forth not allowed.\n */\n navigationMode: 'OPEN' | 'LINEAR' | 'ADAPTIVE' | 'CURRENT';\n /**\n * The initial question to display when the worksheet is loaded.\n * - `FIRST` mode displays the first question in the worksheet.\n * - `CURRENT` mode displays the question that the user was last on.\n */\n initialQuestion: 'FIRST' | 'CURRENT';\n /**\n * If hints are available, on clicking the help button, first availble hint will be shown.\n * Clicking again will show the next hint.\n * If no more hints are available, onHelp will be called.\n */\n hints: boolean;\n /**\n * The time in seconds after which the hints button will be shown.\n */\n hintsTimer?: number; // in seconds\n /**\n * If true, the user can skip the question without attempting it.\n * Skip button will be shown only after the hints are exausted and skipTimer is reached.\n */\n skippable?: boolean;\n /**\n * The time in seconds after which the user can skip the question.\n */\n skippableTime?: number; // in seconds\n /**\n * If true, teacher validation is needed for the question to proceed\n */\n teacherValidationEnabled: boolean;\n /**\n * If worksheet is attempting outside the class setting\n * This needs teacherValidationEnabled to be true\n * TODO-ANTIL: Accept only validation which can be 'system' or 'teacher' or undefined\n */\n canTeacherValidate: boolean;\n /**\n * If true, questions will be validated and feedback will be shown.\n */\n validation: boolean;\n /**\n * If true, solution wont be shown to the user.\n */\n solutionHidden?: boolean;\n /**\n * If true, questions will be validated and feedback will be shown along with the correct answer.\n */\n review: boolean;\n /**\n * The maximum number of attempts allowed for each question.\n * 0 means unlimited attempts.\n * -1 means attempts will not be validated, hence not pushed to attempt history.\n * -2 means the sheet is a puzzle sheet\n * After reaching the maximum number of attempts, the user cannot attempt the question anymore.\n * If maxAtttmpts reached and canExceedAttempts is true, the user can still attempt the question\n * , also user will have the option to move to next question\n */\n maximumAttempts: number;\n /**\n * If true, the user can exceed the maximum number of attempts.\n */\n canExceedAttempts: boolean;\n /**\n * If the worksheet minimumAccuracy is not met, on clicking the final submit button, onMinimumAccuracyNotMet will be called.\n */\n minimumAccuracy: number;\n /**\n * Label for the check button\n * For example,\n * - \"Check\" for Checking the answer\n * - \"Submit\" for Submitting the answer when doing assessment\n */\n checkButtonLabel: string;\n /**\n * If attempt is incorrect, we show retry button, this is the label for the retry button\n * For example,\n * - 'Try Again' for retrying the question\n */\n retryButtonLabel: string;\n /**\n * If true show demos calculator https://www.desmos.com/calculator\n */\n canShowDesmosCalc: boolean;\n\n // If true, canvas is enabled and user can use canvas to scribble on the worksheet by toggling the scribble button\n canvasEnabled?: boolean;\n\n // If true, the user can scribble on workheet\n canScribble?: boolean;\n /**\n * If true displays option to send stickers in worksheet sidebar.\n */\n enableStickers?: boolean;\n}\n\nexport type TWORKSHHET_QUESTION_MEDIA_TYPE = 'SIMULATION' | 'VIDEO' | 'AUDIO';\n\nexport interface IWorksheetCallbackProps {\n onResponseChange?: (options: {\n responseId: string;\n response: IWorksheetResponse;\n isNewAttempt: boolean;\n question: IWorksheetQuestion;\n }) => void;\n onBulkResponsesChange?: (responses: Record<string, IWorksheetResponse>) => void;\n onResponsesChange?: (responses: Record<string, IWorksheetResponse>) => void;\n onMediaStateChange?: (\n question: IWorksheetQuestion,\n mediaType: TWORKSHHET_QUESTION_MEDIA_TYPE,\n mediaState: Record<string, unknown>,\n ) => void;\n onTeacherValidation?: (questionId: string, rating?: keyof typeof QUESTIONS_RATING) => void;\n onOptionalItemAssignment?: (itemType: TItemType) => void;\n onOptionalItemSkip?: (itemType: TItemType) => void;\n onHelp?: (options: { questionId: string; questionNumber: string }) => void;\n onMinimumAccuracyNotMet?: (accuracy: number) => void;\n onExitTicketStart?: () => void;\n onExitTicketSubmit?: () => void;\n onSubmit?: (responses: Record<string, IWorksheetResponse>) => void;\n loggerRef: MutableRefObject<(eventName: string, data?: Record<string, unknown>) => void>;\n}\n\nexport interface ICueCanvasCallbackProps {\n onPublishStrokes?: TPublish;\n onReceiveStrokes?: TSubscribe;\n}\n\nexport interface ICueCanvasProps {\n initialStrokesData?: Record<string, IActionData[]>;\n}\n\nexport interface IPointerSyncCallbackProps {\n onPublishMouseMove?: TPublishMouseMove;\n onSubscribeMouseMove?: TSubscribeMouseMove;\n}\n\nexport interface IWorksheetLayout {\n containerStyle: 'none' | 'card';\n navigationBar: 'none' | 'top' | 'bottom';\n actionBar: 'none' | 'bottom';\n containerWidth: string;\n topOffset: number; // Offset from the top of the screen, for eg: height of the header\n questionsScrollable: boolean;\n minQuestionHeight: string | number;\n minSummaryHeight: string | number;\n renderSideBar: boolean;\n showUserPointer?: boolean;\n renderQuestionHeader?: boolean;\n imageHue?: THueNames;\n background?: 'none' | 'paper';\n questionPadding: number;\n}\n\nexport interface ISubjectiveSheetProps {\n onAddReviewComment?: (\n responseId: string,\n commentData: {\n score: ILearnosityQuestionScore;\n teacherReview: ITeacherReview;\n },\n ) => void;\n openImagesReviewModal?: (props: IOpenImageReviewModalProps) => void;\n handleReviewSubmit?: () => void;\n isSubmittingReview?: boolean;\n isReviewPending?: boolean;\n}\n\ninterface IBaseWorksheetProps {\n userType: TUserTypes;\n userId: string;\n studentId: string;\n studentName?: string;\n worksheetName: string;\n layout: IWorksheetLayout;\n behavior: IWorksheetBehavior;\n initialResponseId?: string;\n initialItemIndex?: number;\n updatedResponses?: Record<string, IWorksheetResponse>;\n worksheetCompleted: boolean;\n showNudgeBanner?: boolean;\n markedAsCompleted?: boolean;\n onResolveDoubt?: (responseId: string) => void;\n onActiveQuestionChange?: (question: IWorksheetQuestion) => void;\n canResolveDoubt?: boolean;\n onSkip?: (itemIndex: number, widgetIndex: number) => void;\n canShowActionBar?: boolean;\n actionBarRightElement?: ReactElement; // Extra Elements to be rendered in the action bar\n}\n\nexport interface IWorksheetProps\n extends IBaseWorksheetProps,\n IWorksheetCallbackProps,\n ICueCanvasProps,\n ICueCanvasCallbackProps,\n IPointerSyncCallbackProps {\n learnosityActivityRef?: string;\n learnosityItems: ILearnosityItem[];\n learnosityResponses?: Record<string, IWorksheetResponse>;\n learnosity: ILearnosity;\n appendedQuestionIds: string[];\n questionsSignedRequest: string;\n openQuestionFeedbackModal?: (itemRef: string) => void;\n summaryDescription?: ReactElement | null;\n canSubmitWorksheet?: boolean;\n studentId: string;\n attemptId?: string;\n subjectiveProps?: ISubjectiveSheetProps;\n}\n\nexport interface IUpdateImages {\n filteredImages: string[];\n newImages: IFile[];\n}\nexport interface IOpenImageReviewModalProps {\n isReviewed?: boolean;\n disableScoreForm?: boolean;\n imageUrls?: string[];\n filteredImageUrls?: (props: IUpdateImages) => void;\n uploadedImages?: (IFile | string)[];\n image?: string;\n}\n\nexport interface IWorksheetContainerProps\n extends Omit<IBaseWorksheetProps, 'behavior'>,\n IWorksheetCallbackProps,\n ICueCanvasProps,\n ICueCanvasCallbackProps,\n IPointerSyncCallbackProps {\n studentId: string;\n attemptId?: string;\n itemsSignedRequest: string;\n questionsSignedRequest: string;\n onLoaded: () => void;\n onErrored: (error: { code?: number; message: string }) => void;\n onResponsesLoaded?: (responses: Record<string, IWorksheetResponse>) => void;\n openQuestionFeedbackModal?: (itemRef: string) => void;\n summaryDescription?: ReactElement | null;\n canSubmitWorksheet?: boolean;\n subjectiveProps?: ISubjectiveSheetProps;\n inClass?: boolean; // If true, the worksheet is rendered inside class\n isLessonV3Enabled?: boolean; // If true, the worksheet is rendered in lesson v3 mode\n isDesmosEnabled?: boolean; // If true, the worksheet can show desmos calculator\n nodeType: TNodeTypes; // NodeType of the worksheet\n mode: 'resume' | 'review' | 'preview'; // mode of the worksheet\n}\n\nexport interface IWorksheetRef {\n validateQuestion: (\n responseId: string,\n rating?: keyof typeof QUESTIONS_RATING,\n skipRemainingQuestions?: boolean,\n ) => void;\n assignOptionalItems: (itemType: TItemType) => void;\n skipOptionalItems: (itemType: TItemType) => void;\n updateMediaState: (\n responseId: string,\n mediaType: TWORKSHHET_QUESTION_MEDIA_TYPE,\n mediaState: Record<string, unknown>,\n ) => void;\n}\n\ninterface IWorksheetHeaderLayoutArgs {\n isPuzzleWorksheet?: boolean;\n isTestWorksheet?: boolean;\n imageHue?: THueNames;\n}\n\nexport interface IWorksheetHeaderLayoutProps {\n (args: IWorksheetHeaderLayoutArgs): {\n bgColor: TColorNames;\n borderColor?: TColorNames;\n textColor?: TColorNames;\n };\n}\n"],"names":["QUESTION_TAGS","QUESTIONS_RATING"],"mappings":"AAQY,IAAAA,sBAAAA,OACVA,EAAA,cAAc,eACdA,EAAA,gBAAgB,iBAFNA,IAAAA,KAAA,CAAA,CAAA,GAKAC,sBAAAA,OACVA,EAAAA,EAAA,IAAI,CAAJ,IAAA,KACAA,EAAAA,EAAA,IAAI,CAAJ,IAAA,KACAA,EAAAA,EAAA,IAAI,CAAJ,IAAA,KAHUA,IAAAA,KAAA,CAAA,CAAA;"}
|
|
1
|
+
{"version":3,"file":"worksheet-types.js","sources":["../../../../src/features/worksheet/worksheet/worksheet-types.ts"],"sourcesContent":["import type { MutableRefObject, ReactElement } from 'react';\n\nimport type { TNodeTypes } from '../../../types/models/worksheet';\nimport type { IActionData, TPublish, TSubscribe } from '../../cue-canvas/types/cue-canvas';\nimport type { TPublishMouseMove, TSubscribeMouseMove } from '../../pointer-sync/pointer-types';\nimport type { TColorNames, THueNames, TUserTypes } from '../../ui/types';\nimport type { IFile } from './worksheet-question/subjective-review';\n\nexport enum QUESTION_TAGS {\n TRIAL_TOPIC = 'trial-topic',\n QUESTION_CODE = 'question code',\n}\n\nexport enum QUESTIONS_RATING {\n E = 3,\n S = 2, // Just right\n H = 1,\n}\n\nexport interface ILearnosityError {\n code: number;\n consumerKey: string;\n detail: string;\n errorUI: string;\n msg: string;\n}\n\ninterface ILearnosityQuestionMetadata {\n widget_reference: string;\n sheet_reference: string;\n hints?: string[];\n solution?: string[];\n teacher_tips?: string[];\n valid_response_count: number;\n source: {\n organisation_id: number;\n };\n}\n\nexport type TInstructorStimulus =\n | 'SystemIntro' // lesson v3\n | 'Intro' // lesson v3\n | 'Concept-Intro' // lesson v3\n | 'Instruction' // lesson v3\n | 'Task' // lesson v3\n | 'Try' // trial v3\n | 'Learn' // trial v3\n | 'Apply'; // trial v3\nexport type TItemType =\n | 'overview'\n | 'learning-we-do'\n | 'learning-your-turn'\n | 'learning-explore'\n | 'practice-basic'\n | 'practice-basic-optional'\n | 'practice-regular'\n | 'practice-regular-optional'\n | 'exit-ticket'\n | 'advanced-we-do'\n | 'advanced-your-turn'\n | 'advanced-explore'\n | 'advanced-practice';\n\nexport type TSectionName =\n | 'overview'\n | 'learning'\n | 'practice-basic'\n | 'practice-regular'\n | 'exit-ticket'\n | 'advanced';\n\nexport interface IQuestionValidResponse {\n score: number;\n value: unknown[];\n}\n\nexport interface ISheetNudgeBannerInfo {\n bannerBackgroundColor: TColorNames;\n label: string;\n}\n\nexport interface ILearnosityQuestion {\n response_id: string;\n instructor_stimulus?: TInstructorStimulus;\n metadata: ILearnosityQuestionMetadata;\n instant_feedback?: boolean;\n math_renderer?: string;\n template?: string;\n tokenization?: string;\n numberPad?: string[];\n symbols?: unknown[];\n response_container?: Record<string, unknown>;\n ui_style?: Record<string, unknown>;\n shuffle_options?: boolean;\n // for custom type question validation is undefined.\n validation?: {\n scoring_type?: string;\n unscored?: boolean;\n valid_response?: IQuestionValidResponse;\n alt_responses?: IQuestionValidResponse[];\n penalty?: number;\n min_score_if_attempted?: number;\n };\n is_math?: boolean;\n labels?: Record<string, unknown>;\n line?: Record<string, unknown>;\n points?: string[];\n snap_to_ticks?: boolean;\n ticks?: Record<string, unknown>;\n max_length?: number;\n type:\n | 'hotspot'\n | 'tokenhighlight'\n | 'numberline'\n | 'clozeassociation'\n | 'clozetext'\n | 'association'\n | 'classification'\n | 'clozedropdown'\n | 'clozeformula'\n | 'mcq'\n | 'choicematrix'\n | 'plaintext'\n | 'drawing';\n case_sensitive?: boolean;\n show_copy?: boolean;\n show_cut?: boolean;\n show_paste?: boolean;\n spellcheck?: boolean;\n stimulus?: string;\n stimulus_review?: string;\n stimulus_list?: string[];\n image?: Record<string, unknown>;\n areas?: unknown[];\n area_attributes?: Record<string, unknown>;\n possible_responses?: string[][] | string[];\n duplicate_responses?: boolean;\n response_containers?: unknown[];\n options?: Record<string, unknown>[] | string[];\n feedback_attempts?: number;\n stems?: string[];\n multiple_responses?: boolean;\n}\n\nexport interface ILearnosityItem {\n reference: string;\n questions: ILearnosityQuestion[];\n source: Record<string, unknown>;\n content: string;\n metadata: Record<string, unknown> | unknown[];\n workflow: unknown[];\n response_ids: string[];\n feature_ids: unknown[];\n features: unknown[];\n itemType?: TItemType;\n tags?: string[];\n}\n\nexport interface IWorksheetQuestion extends ILearnosityQuestion {\n item_reference: string;\n item_type?: TItemType;\n section_name?: TSectionName;\n is_optional?: boolean;\n item_tags: string[];\n item_tags_map: Record<string, string>;\n item_number: number;\n item_display_number: number;\n question_number: number;\n total_questions: number;\n}\n\nexport interface ILearnosityQuestionScore {\n score?: number | null;\n max_score: number;\n unscored?: boolean;\n}\n\nexport interface ILearnosityQuestionResponse {\n value: unknown;\n responses?: unknown;\n type: unknown;\n updatedFormat?: boolean;\n wordCount?: number;\n apiVersion: string;\n revision: number;\n feedbackAttemptsCount?: number;\n}\n\nexport interface IAttempt {\n response: ILearnosityQuestionResponse;\n score: ILearnosityQuestionScore;\n}\n\ninterface ITeacherReview {\n reviewComment?: string;\n images?: string[];\n}\nexport interface IWorksheetResponse {\n widgetReference: string;\n itemReference: string;\n itemPosition: number; // 0 based\n questionPosition: number; // 0 based\n isOkayTypeQuestion: boolean;\n response?: ILearnosityQuestionResponse;\n simState?: Record<string, unknown>;\n score?: ILearnosityQuestionScore;\n responseEdited?: boolean;\n hintsUsed?: number;\n markedForReview?: boolean;\n attemptsHistory?: IAttempt[];\n validatedByTeacher?: boolean;\n submittedByStudent?: boolean;\n assignStatus?: 'assigned' | 'skipped';\n rating?: number;\n skipped?: boolean;\n doubtResolved?: boolean;\n teacherReview?: ITeacherReview;\n tags?: Record<string, string>;\n timeSpent?: number;\n}\n\ntype TMathRenderer = 'mathjax' | 'mathquill';\nexport interface ILearnosity {\n ready: () => void;\n questions: () => Record<string, unknown>;\n question: (responseId: string) =>\n | {\n enable: () => boolean;\n disable: () => boolean;\n getQuestion: () => ILearnosityQuestion;\n getMetadata: () => ILearnosityQuestionMetadata;\n getResponse: () => ILearnosityQuestionResponse;\n getScore: (\n callback?: (score: ILearnosityQuestionScore | null) => void,\n ) => ILearnosityQuestionScore;\n validate: (\n options?: { showCorrectAnswers?: boolean; feedbackAttempts?: boolean },\n callback?: () => void,\n ) => void;\n resetValidationUI: () => void;\n on: (eventName: 'changed', callback: () => void) => void;\n off: (eventName: 'changed', callback?: () => void) => void;\n }\n | undefined;\n append: (toAppend: {\n questions: ILearnosityQuestion[];\n responses?: Record<string, unknown>;\n }) => void;\n appendQuestion: (toAppend: {\n questions: ILearnosityQuestion[];\n responses?: Record<string, unknown>;\n }) => void;\n reset: () => void;\n renderMath: (renderer: TMathRenderer) => void;\n}\n\nexport interface IWorksheetBehavior {\n /**\n * If true, Opens the worksheet in resume mode.\n * - If false, Opens the worksheet in review mode.\n */\n canAttempt: boolean;\n /**\n * If true, the user can mark the question for review.\n */\n canMarkForReview: boolean;\n /**\n * The mode of navigation for the worksheet.\n * - `OPEN` mode allows the user to navigate to any question in the worksheet.\n * - `LINEAR` mode allows the user to navigate to the next question only.\n * - `ADAPTIVE` mode allows the user to navigate future questions based on the rating of the current question.\n * - `CURRENT` mode allows the user to navigate to the current question only. Back and forth not allowed.\n */\n navigationMode: 'OPEN' | 'LINEAR' | 'ADAPTIVE' | 'CURRENT';\n /**\n * The initial question to display when the worksheet is loaded.\n * - `FIRST` mode displays the first question in the worksheet.\n * - `CURRENT` mode displays the question that the user was last on.\n */\n initialQuestion: 'FIRST' | 'CURRENT';\n /**\n * If hints are available, on clicking the help button, first availble hint will be shown.\n * Clicking again will show the next hint.\n * If no more hints are available, onHelp will be called.\n */\n hints: boolean;\n /**\n * The time in seconds after which the hints button will be shown.\n */\n hintsTimer?: number; // in seconds\n /**\n * If true, the user can skip the question without attempting it.\n * Skip button will be shown only after the hints are exausted and skipTimer is reached.\n */\n skippable?: boolean;\n /**\n * The time in seconds after which the user can skip the question.\n */\n skippableTime?: number; // in seconds\n /**\n * If true, teacher validation is needed for the question to proceed\n */\n teacherValidationEnabled: boolean;\n /**\n * If worksheet is attempting outside the class setting\n * This needs teacherValidationEnabled to be true\n * TODO-ANTIL: Accept only validation which can be 'system' or 'teacher' or undefined\n */\n canTeacherValidate: boolean;\n /**\n * If true, questions will be validated and feedback will be shown.\n */\n validation: boolean;\n /**\n * If true, solution wont be shown to the user.\n */\n solutionHidden?: boolean;\n /**\n * If true, questions will be validated and feedback will be shown along with the correct answer.\n */\n review: boolean;\n /**\n * The maximum number of attempts allowed for each question.\n * 0 means unlimited attempts.\n * -1 means attempts will not be validated, hence not pushed to attempt history.\n * -2 means the sheet is a puzzle sheet\n * After reaching the maximum number of attempts, the user cannot attempt the question anymore.\n * If maxAtttmpts reached and canExceedAttempts is true, the user can still attempt the question\n * , also user will have the option to move to next question\n */\n maximumAttempts: number;\n /**\n * If true, the user can exceed the maximum number of attempts.\n */\n canExceedAttempts: boolean;\n /**\n * If the worksheet minimumAccuracy is not met, on clicking the final submit button, onMinimumAccuracyNotMet will be called.\n */\n minimumAccuracy: number;\n /**\n * Label for the check button\n * For example,\n * - \"Check\" for Checking the answer\n * - \"Submit\" for Submitting the answer when doing assessment\n */\n checkButtonLabel: string;\n /**\n * If attempt is incorrect, we show retry button, this is the label for the retry button\n * For example,\n * - 'Try Again' for retrying the question\n */\n retryButtonLabel: string;\n /**\n * If true show demos calculator https://www.desmos.com/calculator\n */\n canShowDesmosCalc: boolean;\n\n // If true, canvas is enabled and user can use canvas to scribble on the worksheet by toggling the scribble button\n canvasEnabled?: boolean;\n\n // If true, the user can scribble on workheet\n canScribble?: boolean;\n}\n\nexport type TWORKSHHET_QUESTION_MEDIA_TYPE = 'SIMULATION' | 'VIDEO' | 'AUDIO';\n\nexport interface IWorksheetCallbackProps {\n onResponseChange?: (options: {\n responseId: string;\n response: IWorksheetResponse;\n isNewAttempt: boolean;\n question: IWorksheetQuestion;\n }) => void;\n onBulkResponsesChange?: (responses: Record<string, IWorksheetResponse>) => void;\n onResponsesChange?: (responses: Record<string, IWorksheetResponse>) => void;\n onMediaStateChange?: (\n question: IWorksheetQuestion,\n mediaType: TWORKSHHET_QUESTION_MEDIA_TYPE,\n mediaState: Record<string, unknown>,\n ) => void;\n onTeacherValidation?: (questionId: string, rating?: keyof typeof QUESTIONS_RATING) => void;\n onOptionalItemAssignment?: (itemType: TItemType) => void;\n onOptionalItemSkip?: (itemType: TItemType) => void;\n onHelp?: (options: { questionId: string; questionNumber: string }) => void;\n onMinimumAccuracyNotMet?: (accuracy: number) => void;\n onExitTicketStart?: () => void;\n onExitTicketSubmit?: () => void;\n onSubmit?: (responses: Record<string, IWorksheetResponse>) => void;\n loggerRef: MutableRefObject<(eventName: string, data?: Record<string, unknown>) => void>;\n}\n\nexport interface ICueCanvasCallbackProps {\n onPublishStrokes?: TPublish;\n onReceiveStrokes?: TSubscribe;\n}\n\nexport interface ICueCanvasProps {\n initialStrokesData?: Record<string, IActionData[]>;\n}\n\nexport interface IPointerSyncCallbackProps {\n onPublishMouseMove?: TPublishMouseMove;\n onSubscribeMouseMove?: TSubscribeMouseMove;\n}\n\nexport interface IWorksheetLayout {\n containerStyle: 'none' | 'card';\n navigationBar: 'none' | 'top' | 'bottom';\n actionBar: 'none' | 'bottom';\n containerWidth: string;\n topOffset: number; // Offset from the top of the screen, for eg: height of the header\n questionsScrollable: boolean;\n minQuestionHeight: string | number;\n minSummaryHeight: string | number;\n renderSideBar: boolean;\n showUserPointer?: boolean;\n renderQuestionHeader?: boolean;\n imageHue?: THueNames;\n background?: 'none' | 'paper';\n questionPadding: number;\n}\n\nexport interface ISubjectiveSheetProps {\n onAddReviewComment?: (\n responseId: string,\n commentData: {\n score: ILearnosityQuestionScore;\n teacherReview: ITeacherReview;\n },\n ) => void;\n openImagesReviewModal?: (props: IOpenImageReviewModalProps) => void;\n handleReviewSubmit?: () => void;\n isSubmittingReview?: boolean;\n isReviewPending?: boolean;\n}\n\ninterface IBaseWorksheetProps {\n userType: TUserTypes;\n userId: string;\n studentId: string;\n studentName?: string;\n worksheetName: string;\n layout: IWorksheetLayout;\n behavior: IWorksheetBehavior;\n initialResponseId?: string;\n initialItemIndex?: number;\n updatedResponses?: Record<string, IWorksheetResponse>;\n worksheetCompleted: boolean;\n showNudgeBanner?: boolean;\n markedAsCompleted?: boolean;\n onResolveDoubt?: (responseId: string) => void;\n onActiveQuestionChange?: (question: IWorksheetQuestion) => void;\n canResolveDoubt?: boolean;\n onSkip?: (itemIndex: number, widgetIndex: number) => void;\n canShowActionBar?: boolean;\n actionBarRightElement?: ReactElement; // Extra Elements to be rendered in the action bar\n}\n\nexport interface IWorksheetProps\n extends IBaseWorksheetProps,\n IWorksheetCallbackProps,\n ICueCanvasProps,\n ICueCanvasCallbackProps,\n IPointerSyncCallbackProps {\n learnosityActivityRef?: string;\n learnosityItems: ILearnosityItem[];\n learnosityResponses?: Record<string, IWorksheetResponse>;\n learnosity: ILearnosity;\n appendedQuestionIds: string[];\n questionsSignedRequest: string;\n openQuestionFeedbackModal?: (itemRef: string) => void;\n summaryDescription?: ReactElement | null;\n canSubmitWorksheet?: boolean;\n studentId: string;\n studentClassroomId?: string;\n attemptId?: string;\n subjectiveProps?: ISubjectiveSheetProps;\n}\n\nexport interface IUpdateImages {\n filteredImages: string[];\n newImages: IFile[];\n}\nexport interface IOpenImageReviewModalProps {\n isReviewed?: boolean;\n disableScoreForm?: boolean;\n imageUrls?: string[];\n filteredImageUrls?: (props: IUpdateImages) => void;\n uploadedImages?: (IFile | string)[];\n image?: string;\n}\n\nexport interface IWorksheetContainerProps\n extends Omit<IBaseWorksheetProps, 'behavior'>,\n IWorksheetCallbackProps,\n ICueCanvasProps,\n ICueCanvasCallbackProps,\n IPointerSyncCallbackProps {\n studentId: string;\n attemptId?: string;\n itemsSignedRequest: string;\n questionsSignedRequest: string;\n onLoaded: () => void;\n onErrored: (error: { code?: number; message: string }) => void;\n onResponsesLoaded?: (responses: Record<string, IWorksheetResponse>) => void;\n openQuestionFeedbackModal?: (itemRef: string) => void;\n summaryDescription?: ReactElement | null;\n canSubmitWorksheet?: boolean;\n subjectiveProps?: ISubjectiveSheetProps;\n inClass?: boolean; // If true, the worksheet is rendered inside class\n isLessonV3Enabled?: boolean; // If true, the worksheet is rendered in lesson v3 mode\n isDesmosEnabled?: boolean; // If true, the worksheet can show desmos calculator\n nodeType: TNodeTypes; // NodeType of the worksheet\n mode: 'resume' | 'review' | 'preview'; // mode of the worksheet\n}\n\nexport interface IWorksheetRef {\n validateQuestion: (\n responseId: string,\n rating?: keyof typeof QUESTIONS_RATING,\n skipRemainingQuestions?: boolean,\n ) => void;\n assignOptionalItems: (itemType: TItemType) => void;\n skipOptionalItems: (itemType: TItemType) => void;\n updateMediaState: (\n responseId: string,\n mediaType: TWORKSHHET_QUESTION_MEDIA_TYPE,\n mediaState: Record<string, unknown>,\n ) => void;\n}\n\ninterface IWorksheetHeaderLayoutArgs {\n isPuzzleWorksheet?: boolean;\n isTestWorksheet?: boolean;\n imageHue?: THueNames;\n}\n\nexport interface IWorksheetHeaderLayoutProps {\n (args: IWorksheetHeaderLayoutArgs): {\n bgColor: TColorNames;\n borderColor?: TColorNames;\n textColor?: TColorNames;\n };\n}\n"],"names":["QUESTION_TAGS","QUESTIONS_RATING"],"mappings":"AAQY,IAAAA,sBAAAA,OACVA,EAAA,cAAc,eACdA,EAAA,gBAAgB,iBAFNA,IAAAA,KAAA,CAAA,CAAA,GAKAC,sBAAAA,OACVA,EAAAA,EAAA,IAAI,CAAJ,IAAA,KACAA,EAAAA,EAAA,IAAI,CAAJ,IAAA,KACAA,EAAAA,EAAA,IAAI,CAAJ,IAAA,KAHUA,IAAAA,KAAA,CAAA,CAAA;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs as y, Fragment as st, jsx as i } from "react/jsx-runtime";
|
|
2
|
-
import { memo as at, forwardRef as
|
|
2
|
+
import { memo as at, forwardRef as dt, useMemo as z, useState as C, useCallback as S, useEffect as T, useLayoutEffect as ct } from "react";
|
|
3
3
|
import lt from "../../../assets/line-icons/icons/check2.js";
|
|
4
4
|
import mt from "../../../assets/line-icons/icons/info2.js";
|
|
5
5
|
import ut from "../../../helpers/get-device-details.js";
|
|
@@ -7,78 +7,73 @@ import ht from "../../sheet-tools/desmos-calculator/desmos-calculator.js";
|
|
|
7
7
|
import de from "../../ui/layout/flex-view.js";
|
|
8
8
|
import ft from "../../ui/text/text.js";
|
|
9
9
|
import pt from "../user-pointer-pin/user-pin.js";
|
|
10
|
-
import { WORKSHEET_NUDGE_BANNER_HEIGHT as
|
|
10
|
+
import { WORKSHEET_NUDGE_BANNER_HEIGHT as ce, TOP_NAVIGATION_HEIGHT as gt, DESMOS_CALC_POSITION as bt } from "./constants.js";
|
|
11
11
|
import It from "./hooks/use-create-imperative-handle.js";
|
|
12
|
-
import
|
|
13
|
-
import
|
|
12
|
+
import Ct from "./hooks/use-get-active-question-id.js";
|
|
13
|
+
import St from "./hooks/use-time-on-questions.js";
|
|
14
14
|
import kt from "./question-tips.js";
|
|
15
15
|
import $t from "./worksheet-action-bar/worksheet-action-bar.js";
|
|
16
16
|
import Tt from "./worksheet-blocker/worksheet-blocker.js";
|
|
17
|
-
import { getWorksheetDimensions as vt, getQuestionsFromItems as Et, getInitialResponses as wt, getLastUnlockedQuestionIndex as
|
|
17
|
+
import { getWorksheetDimensions as vt, getQuestionsFromItems as Et, getInitialResponses as wt, getLastUnlockedQuestionIndex as le, getInitialQuestionId as Nt, getQuestionMetadata as me, scrollToQuestion as x, getRenderableQuestions as Bt, getWorksheetNudgeBannerInfo as At } from "./worksheet-helpers.js";
|
|
18
18
|
import yt from "./worksheet-navigation/worksheet-navigation.js";
|
|
19
19
|
import Wt from "./worksheet-question/worksheet-question.js";
|
|
20
20
|
import _t from "./worksheet-sidebar/navigator.js";
|
|
21
21
|
import Ot from "./worksheet-sidebar/sidebar.js";
|
|
22
|
-
import { NudgeBannerWrapper as Dt, NudgeBannerIcon as
|
|
22
|
+
import { NudgeBannerWrapper as Dt, NudgeBannerIcon as ue, WorksheetContainer as Vt, NavigationContainer as Ht, NavigationWrapper as Mt, BlockerWrapper as xt, DesmosCalcWrapper as Rt, ActionbarContainer as Pt, ActionbarWrapper as Qt, StudentWorksheetSideBar as Gt, QuestionsWrapper as Ft } from "./worksheet-styled.js";
|
|
23
23
|
import jt from "./worksheet-summary/worksheet-summary.js";
|
|
24
|
-
const qt = (
|
|
24
|
+
const qt = (he, fe) => {
|
|
25
25
|
const {
|
|
26
26
|
userType: r,
|
|
27
|
-
studentName:
|
|
28
|
-
questionsSignedRequest:
|
|
27
|
+
studentName: pe = "Student",
|
|
28
|
+
questionsSignedRequest: ge,
|
|
29
29
|
worksheetName: J,
|
|
30
|
-
initialResponseId:
|
|
31
|
-
initialItemIndex:
|
|
30
|
+
initialResponseId: be,
|
|
31
|
+
initialItemIndex: Ie,
|
|
32
32
|
// learnosityActivityRef,
|
|
33
33
|
learnosityItems: R,
|
|
34
34
|
learnosityResponses: Ce,
|
|
35
35
|
layout: k,
|
|
36
36
|
behavior: a,
|
|
37
37
|
updatedResponses: P,
|
|
38
|
-
showNudgeBanner:
|
|
38
|
+
showNudgeBanner: Se,
|
|
39
39
|
markedAsCompleted: U,
|
|
40
40
|
onResponseChange: f,
|
|
41
|
-
onBulkResponsesChange:
|
|
41
|
+
onBulkResponsesChange: ke,
|
|
42
42
|
onResponsesChange: Q,
|
|
43
43
|
onMediaStateChange: G,
|
|
44
44
|
onTeacherValidation: Y,
|
|
45
|
-
onOptionalItemAssignment:
|
|
46
|
-
onOptionalItemSkip:
|
|
45
|
+
onOptionalItemAssignment: $e,
|
|
46
|
+
onOptionalItemSkip: Te,
|
|
47
47
|
onExitTicketStart: W,
|
|
48
48
|
onExitTicketSubmit: _,
|
|
49
|
-
onSubmit:
|
|
49
|
+
onSubmit: ve,
|
|
50
50
|
learnosity: p,
|
|
51
51
|
appendedQuestionIds: Z,
|
|
52
|
-
worksheetCompleted:
|
|
53
|
-
userId:
|
|
54
|
-
onPublishStrokes:
|
|
55
|
-
onReceiveStrokes:
|
|
56
|
-
initialStrokesData:
|
|
57
|
-
onHelp:
|
|
58
|
-
onPublishMouseMove:
|
|
59
|
-
onSubscribeMouseMove:
|
|
52
|
+
worksheetCompleted: Ee,
|
|
53
|
+
userId: we,
|
|
54
|
+
onPublishStrokes: Ne,
|
|
55
|
+
onReceiveStrokes: Be,
|
|
56
|
+
initialStrokesData: Ae,
|
|
57
|
+
onHelp: ye,
|
|
58
|
+
onPublishMouseMove: We,
|
|
59
|
+
onSubscribeMouseMove: _e,
|
|
60
60
|
onActiveQuestionChange: F,
|
|
61
|
-
openQuestionFeedbackModal:
|
|
62
|
-
summaryDescription:
|
|
63
|
-
canSubmitWorksheet:
|
|
61
|
+
openQuestionFeedbackModal: Oe,
|
|
62
|
+
summaryDescription: De,
|
|
63
|
+
canSubmitWorksheet: Ve,
|
|
64
64
|
loggerRef: j,
|
|
65
|
-
canResolveDoubt:
|
|
66
|
-
onResolveDoubt:
|
|
67
|
-
onSkip:
|
|
68
|
-
studentId:
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
navigationMode: m,
|
|
75
|
-
teacherValidationEnabled: je,
|
|
76
|
-
maximumAttempts: te,
|
|
77
|
-
enableStickers: qe
|
|
78
|
-
} = a, {
|
|
65
|
+
canResolveDoubt: He,
|
|
66
|
+
onResolveDoubt: Me,
|
|
67
|
+
onSkip: xe,
|
|
68
|
+
studentId: Re,
|
|
69
|
+
studentClassroomId: Pe,
|
|
70
|
+
subjectiveProps: Qe,
|
|
71
|
+
canShowActionBar: Ge = !0,
|
|
72
|
+
actionBarRightElement: Fe
|
|
73
|
+
} = he, { initialQuestion: je, navigationMode: m, teacherValidationEnabled: qe, maximumAttempts: ee } = a, {
|
|
79
74
|
containerStyle: O,
|
|
80
75
|
containerWidth: Le,
|
|
81
|
-
minQuestionHeight:
|
|
76
|
+
minQuestionHeight: te,
|
|
82
77
|
minSummaryHeight: Xe,
|
|
83
78
|
questionsScrollable: D,
|
|
84
79
|
navigationBar: Ke,
|
|
@@ -89,64 +84,64 @@ const qt = (fe, pe) => {
|
|
|
89
84
|
} = k, { actionbarHeight: g, maxQuestionWidth: q, questionsContainerWidth: L } = z(
|
|
90
85
|
() => vt(R, k),
|
|
91
86
|
[k, R]
|
|
92
|
-
), [t] =
|
|
87
|
+
), [t] = C(
|
|
93
88
|
() => Et(R, {
|
|
94
|
-
sectioned:
|
|
89
|
+
sectioned: qe && m !== "ADAPTIVE" && m !== "CURRENT",
|
|
95
90
|
adaptive: m === "ADAPTIVE"
|
|
96
91
|
})
|
|
97
|
-
), [
|
|
92
|
+
), [d, v] = C(
|
|
98
93
|
() => Ce ?? wt(t)
|
|
99
|
-
), [
|
|
100
|
-
() => m !== "OPEN" ?
|
|
94
|
+
), [ie, Ye] = C(!1), u = z(
|
|
95
|
+
() => m !== "OPEN" ? le({
|
|
101
96
|
questions: t,
|
|
102
|
-
responses:
|
|
97
|
+
responses: d,
|
|
103
98
|
behavior: a,
|
|
104
99
|
userType: r
|
|
105
100
|
}) : t.length - 1,
|
|
106
|
-
[a, m, t,
|
|
107
|
-
),
|
|
101
|
+
[a, m, t, d, r]
|
|
102
|
+
), c = t[u], n = d[(c == null ? void 0 : c.response_id) ?? ""], { bannerBackgroundColor: Ze, label: et } = At(r, !!U), [E] = C(
|
|
108
103
|
() => Nt({
|
|
109
104
|
questions: t,
|
|
110
|
-
initialQuestion:
|
|
111
|
-
lastUnlockedQuestionIndex:
|
|
105
|
+
initialQuestion: je,
|
|
106
|
+
lastUnlockedQuestionIndex: le({
|
|
112
107
|
questions: t,
|
|
113
|
-
responses:
|
|
108
|
+
responses: d,
|
|
114
109
|
behavior: a,
|
|
115
110
|
userType: r
|
|
116
111
|
}),
|
|
117
|
-
initialResponseId:
|
|
118
|
-
initialItemIndex:
|
|
112
|
+
initialResponseId: be,
|
|
113
|
+
initialItemIndex: Ie
|
|
119
114
|
})
|
|
120
|
-
), { activeQuestionId: w, setActiveQuestionId: H, intersectionObserver: X } =
|
|
115
|
+
), { activeQuestionId: w, setActiveQuestionId: H, intersectionObserver: X } = Ct(E), l = z(
|
|
121
116
|
() => t.findIndex((e) => e.response_id === w),
|
|
122
117
|
[w, t]
|
|
123
|
-
), [h, K] =
|
|
118
|
+
), [h, K] = C(!1), [ne, N] = C(), [oe, re] = C(!1), se = St(a, d, w), tt = S(
|
|
124
119
|
(e, s, o) => {
|
|
125
120
|
const b = s === "SIMULATION" ? "simState" : void 0;
|
|
126
121
|
b && (f ? v(($) => {
|
|
127
|
-
const I = e.response_id, A =
|
|
122
|
+
const I = e.response_id, A = me(t, I);
|
|
128
123
|
if (!A) return $;
|
|
129
|
-
const
|
|
124
|
+
const ae = {
|
|
130
125
|
...A,
|
|
131
126
|
...$[I],
|
|
132
127
|
[b]: o
|
|
133
128
|
};
|
|
134
129
|
return f == null || f({
|
|
135
130
|
responseId: I,
|
|
136
|
-
response:
|
|
131
|
+
response: ae,
|
|
137
132
|
isNewAttempt: !1,
|
|
138
133
|
question: e
|
|
139
134
|
}), {
|
|
140
135
|
...$,
|
|
141
|
-
[I]:
|
|
136
|
+
[I]: ae
|
|
142
137
|
};
|
|
143
138
|
}) : G && G(e, s, o));
|
|
144
139
|
},
|
|
145
140
|
[G, f, t]
|
|
146
|
-
), it =
|
|
141
|
+
), it = S(
|
|
147
142
|
(e, s) => {
|
|
148
143
|
v((o) => {
|
|
149
|
-
const b =
|
|
144
|
+
const b = me(t, e);
|
|
150
145
|
return b ? {
|
|
151
146
|
...o,
|
|
152
147
|
[e]: {
|
|
@@ -158,7 +153,7 @@ const qt = (fe, pe) => {
|
|
|
158
153
|
});
|
|
159
154
|
},
|
|
160
155
|
[t]
|
|
161
|
-
), B =
|
|
156
|
+
), B = S(() => {
|
|
162
157
|
N((e) => {
|
|
163
158
|
var s;
|
|
164
159
|
if (e) {
|
|
@@ -168,35 +163,35 @@ const qt = (fe, pe) => {
|
|
|
168
163
|
}, 50);
|
|
169
164
|
}
|
|
170
165
|
});
|
|
171
|
-
}, [u, t]), M =
|
|
166
|
+
}, [u, t]), M = S(
|
|
172
167
|
(e) => {
|
|
173
168
|
K(!1), D ? requestAnimationFrame(() => x(e)) : H(e);
|
|
174
169
|
},
|
|
175
170
|
[D, H]
|
|
176
|
-
), nt =
|
|
177
|
-
|
|
178
|
-
}, []), ot =
|
|
179
|
-
|
|
180
|
-
}, []), rt =
|
|
171
|
+
), nt = S(() => {
|
|
172
|
+
re(!1);
|
|
173
|
+
}, []), ot = S(() => {
|
|
174
|
+
re(!0);
|
|
175
|
+
}, []), rt = S(() => {
|
|
181
176
|
K(!0);
|
|
182
177
|
}, []);
|
|
183
178
|
return T(() => {
|
|
184
179
|
const e = t[l];
|
|
185
180
|
e && F && F(e);
|
|
186
|
-
}, [F, t, l]), It(
|
|
181
|
+
}, [F, t, l]), It(fe, {
|
|
187
182
|
behavior: a,
|
|
188
183
|
questions: t,
|
|
189
184
|
setResponses: v,
|
|
190
185
|
onResponseChange: f,
|
|
191
|
-
onBulkResponsesChange:
|
|
192
|
-
getTimeSpentOnQuestion:
|
|
186
|
+
onBulkResponsesChange: ke,
|
|
187
|
+
getTimeSpentOnQuestion: se
|
|
193
188
|
}), T(() => () => {
|
|
194
189
|
X.disconnect();
|
|
195
190
|
}, [X]), T(() => {
|
|
196
|
-
Q &&
|
|
197
|
-
}, [Q,
|
|
191
|
+
Q && d && Q(d);
|
|
192
|
+
}, [Q, d]), T(() => {
|
|
198
193
|
P && v(P);
|
|
199
|
-
}, [P]),
|
|
194
|
+
}, [P]), ct(() => {
|
|
200
195
|
let e;
|
|
201
196
|
return p && E && (ut().browser_name === "Safari" ? e = setTimeout(() => {
|
|
202
197
|
x(E);
|
|
@@ -204,30 +199,30 @@ const qt = (fe, pe) => {
|
|
|
204
199
|
clearTimeout(e);
|
|
205
200
|
};
|
|
206
201
|
}, [p, E, V]), T(() => {
|
|
207
|
-
if (a.teacherValidationEnabled &&
|
|
208
|
-
const { item_type: e, instructor_stimulus: s, is_optional: o } =
|
|
202
|
+
if (a.teacherValidationEnabled && c) {
|
|
203
|
+
const { item_type: e, instructor_stimulus: s, is_optional: o } = c;
|
|
209
204
|
r === "TEACHER" && (e === "exit-ticket" && s !== "SystemIntro" ? n != null && n.submittedByStudent && !(n != null && n.validatedByTeacher) ? N("exit-ticket-review-available") : n != null && n.validatedByTeacher ? B() : N("exit-ticket-teacher-intervention") : o ? n != null && n.assignStatus ? B() : N("optional-items-assignment") : o || B());
|
|
210
205
|
}
|
|
211
206
|
}, [
|
|
212
207
|
a.teacherValidationEnabled,
|
|
213
208
|
B,
|
|
214
|
-
|
|
209
|
+
c,
|
|
215
210
|
n,
|
|
216
211
|
r
|
|
217
212
|
]), T(() => {
|
|
218
|
-
if (a.teacherValidationEnabled &&
|
|
219
|
-
const { item_type: e, instructor_stimulus: s } =
|
|
213
|
+
if (a.teacherValidationEnabled && c) {
|
|
214
|
+
const { item_type: e, instructor_stimulus: s } = c;
|
|
220
215
|
r === "STUDENT" && e === "exit-ticket" && s !== "SystemIntro" && (n != null && n.submittedByStudent ? _ == null || _() : W == null || W());
|
|
221
216
|
}
|
|
222
217
|
}, [
|
|
223
218
|
a.teacherValidationEnabled,
|
|
224
|
-
|
|
219
|
+
c,
|
|
225
220
|
n == null ? void 0 : n.submittedByStudent,
|
|
226
221
|
W,
|
|
227
222
|
_,
|
|
228
223
|
r
|
|
229
224
|
]), p ? /* @__PURE__ */ y(st, { children: [
|
|
230
|
-
|
|
225
|
+
Se && /* @__PURE__ */ y(
|
|
231
226
|
Dt,
|
|
232
227
|
{
|
|
233
228
|
$flexDirection: "row",
|
|
@@ -235,14 +230,14 @@ const qt = (fe, pe) => {
|
|
|
235
230
|
$alignItems: "center",
|
|
236
231
|
$width: "100%",
|
|
237
232
|
$heightX: 1.75,
|
|
238
|
-
$height:
|
|
233
|
+
$height: ce,
|
|
239
234
|
$gap: 8,
|
|
240
235
|
$gutter: 8,
|
|
241
236
|
$flexGap: 8,
|
|
242
237
|
$background: Ze,
|
|
243
|
-
$topOffset: k.topOffset -
|
|
238
|
+
$topOffset: k.topOffset - ce,
|
|
244
239
|
children: [
|
|
245
|
-
U ? /* @__PURE__ */ i(
|
|
240
|
+
U ? /* @__PURE__ */ i(ue, { children: /* @__PURE__ */ i(lt, { width: 16, height: 16 }) }) : /* @__PURE__ */ i(ue, { children: /* @__PURE__ */ i(mt, { width: 16, height: 16 }) }),
|
|
246
241
|
/* @__PURE__ */ i(ft, { $renderAs: "ub3", children: et })
|
|
247
242
|
]
|
|
248
243
|
}
|
|
@@ -253,7 +248,7 @@ const qt = (fe, pe) => {
|
|
|
253
248
|
{
|
|
254
249
|
placement: "top",
|
|
255
250
|
questions: t,
|
|
256
|
-
responses:
|
|
251
|
+
responses: d,
|
|
257
252
|
activeQuestionIndex: l,
|
|
258
253
|
lastUnlockedQuestionIndex: u,
|
|
259
254
|
behavior: a,
|
|
@@ -262,15 +257,15 @@ const qt = (fe, pe) => {
|
|
|
262
257
|
summaryVisible: h
|
|
263
258
|
}
|
|
264
259
|
) }) }),
|
|
265
|
-
|
|
260
|
+
ne && c && /* @__PURE__ */ i(xt, { $minHeight: te, $topOffset: V, children: /* @__PURE__ */ i(de, { $width: q, $justifyContent: "center", $alignItems: "center", children: /* @__PURE__ */ i(
|
|
266
261
|
Tt,
|
|
267
262
|
{
|
|
268
|
-
blocker:
|
|
269
|
-
lastUnlockedQuestion:
|
|
270
|
-
studentName:
|
|
263
|
+
blocker: ne,
|
|
264
|
+
lastUnlockedQuestion: c,
|
|
265
|
+
studentName: pe,
|
|
271
266
|
onBlockerClose: B,
|
|
272
|
-
onOptionalItemAssignment:
|
|
273
|
-
onOptionalItemSkip:
|
|
267
|
+
onOptionalItemAssignment: $e,
|
|
268
|
+
onOptionalItemSkip: Te,
|
|
274
269
|
onTeacherValidation: Y
|
|
275
270
|
}
|
|
276
271
|
) }) }),
|
|
@@ -285,7 +280,7 @@ const qt = (fe, pe) => {
|
|
|
285
280
|
userType: r
|
|
286
281
|
}
|
|
287
282
|
),
|
|
288
|
-
|
|
283
|
+
oe && /* @__PURE__ */ i(Rt, { children: /* @__PURE__ */ i(ht, { initialPosition: bt, onClose: nt }) }),
|
|
289
284
|
/* @__PURE__ */ y(
|
|
290
285
|
Pt,
|
|
291
286
|
{
|
|
@@ -293,7 +288,7 @@ const qt = (fe, pe) => {
|
|
|
293
288
|
$height: g,
|
|
294
289
|
$isCardView: O === "card",
|
|
295
290
|
children: [
|
|
296
|
-
|
|
291
|
+
ee !== -2 && /* @__PURE__ */ i(
|
|
297
292
|
kt,
|
|
298
293
|
{
|
|
299
294
|
width: L - 32,
|
|
@@ -302,11 +297,11 @@ const qt = (fe, pe) => {
|
|
|
302
297
|
userType: r
|
|
303
298
|
}
|
|
304
299
|
),
|
|
305
|
-
|
|
300
|
+
Ge && /* @__PURE__ */ i(
|
|
306
301
|
Qt,
|
|
307
302
|
{
|
|
308
303
|
$height: g,
|
|
309
|
-
$width: O === "card" ||
|
|
304
|
+
$width: O === "card" || ee === -2 ? L - 32 : "100%",
|
|
310
305
|
$isCardView: O === "card",
|
|
311
306
|
children: /* @__PURE__ */ i(
|
|
312
307
|
de,
|
|
@@ -324,17 +319,17 @@ const qt = (fe, pe) => {
|
|
|
324
319
|
behavior: a,
|
|
325
320
|
worksheetName: J,
|
|
326
321
|
questions: t,
|
|
327
|
-
responses:
|
|
322
|
+
responses: d,
|
|
328
323
|
onCalculatorOpen: ot,
|
|
329
324
|
activeQuestionIndex: l,
|
|
330
325
|
lastUnlockedQuestionIndex: u,
|
|
331
326
|
appendedQuestionIds: Z,
|
|
332
327
|
learnosity: p,
|
|
333
|
-
canSubmitWorksheet:
|
|
334
|
-
isScribblingEnabled:
|
|
328
|
+
canSubmitWorksheet: Ve,
|
|
329
|
+
isScribblingEnabled: ie,
|
|
335
330
|
isSummaryVisible: h,
|
|
336
331
|
setResponses: v,
|
|
337
|
-
getTimeSpentOnQuestion:
|
|
332
|
+
getTimeSpentOnQuestion: se,
|
|
338
333
|
setSummaryVisible: K,
|
|
339
334
|
setBlocker: N,
|
|
340
335
|
setIsScribblingEnabled: Ye,
|
|
@@ -342,13 +337,13 @@ const qt = (fe, pe) => {
|
|
|
342
337
|
onItemNumberClick: M,
|
|
343
338
|
onGoToReview: rt,
|
|
344
339
|
onResponseChange: f,
|
|
345
|
-
onHelp:
|
|
340
|
+
onHelp: ye,
|
|
346
341
|
onTeacherValidation: Y,
|
|
347
|
-
onSubmit:
|
|
348
|
-
showCalculator:
|
|
342
|
+
onSubmit: ve,
|
|
343
|
+
showCalculator: oe,
|
|
349
344
|
loggerRef: j,
|
|
350
|
-
onSkip:
|
|
351
|
-
actionBarRightElement:
|
|
345
|
+
onSkip: xe,
|
|
346
|
+
actionBarRightElement: Fe
|
|
352
347
|
}
|
|
353
348
|
)
|
|
354
349
|
}
|
|
@@ -369,16 +364,16 @@ const qt = (fe, pe) => {
|
|
|
369
364
|
Bt({ questions: t, lastUnlockedQuestionIndex: u, userType: r }).map(
|
|
370
365
|
(e, s) => {
|
|
371
366
|
var I, A;
|
|
372
|
-
const { response_id: o, is_optional: b } = e, $ = (I =
|
|
367
|
+
const { response_id: o, is_optional: b } = e, $ = (I = d[o]) == null ? void 0 : I.assignStatus;
|
|
373
368
|
return a.teacherValidationEnabled && ($ === "skipped" || b && $ !== "assigned" && r === "STUDENT") ? null : /* @__PURE__ */ i(
|
|
374
369
|
Wt,
|
|
375
370
|
{
|
|
376
|
-
signedRequest:
|
|
371
|
+
signedRequest: ge,
|
|
377
372
|
userType: r,
|
|
378
|
-
worksheetCompleted:
|
|
373
|
+
worksheetCompleted: Ee,
|
|
379
374
|
question: e,
|
|
380
|
-
response:
|
|
381
|
-
nextQuestionId: m === "ADAPTIVE" || m === "CURRENT" ?
|
|
375
|
+
response: d[o],
|
|
376
|
+
nextQuestionId: m === "ADAPTIVE" || m === "CURRENT" ? c == null ? void 0 : c.response_id : s < u ? (A = t[s + 1]) == null ? void 0 : A.response_id : void 0,
|
|
382
377
|
maxQuestionWidth: q,
|
|
383
378
|
learnosity: p,
|
|
384
379
|
isActive: o === w,
|
|
@@ -391,19 +386,19 @@ const qt = (fe, pe) => {
|
|
|
391
386
|
intersectionObserver: X,
|
|
392
387
|
onMarkForReview: it,
|
|
393
388
|
onMediaStateChange: tt,
|
|
394
|
-
userId:
|
|
395
|
-
isScribblingEnabled:
|
|
396
|
-
onPublishStrokes:
|
|
397
|
-
onReceiveStrokes:
|
|
398
|
-
initialStrokesData:
|
|
399
|
-
onPublishMouseMove:
|
|
400
|
-
onSubscribeMouseMove:
|
|
389
|
+
userId: we,
|
|
390
|
+
isScribblingEnabled: ie,
|
|
391
|
+
onPublishStrokes: Ne,
|
|
392
|
+
onReceiveStrokes: Be,
|
|
393
|
+
initialStrokesData: Ae,
|
|
394
|
+
onPublishMouseMove: We,
|
|
395
|
+
onSubscribeMouseMove: _e,
|
|
401
396
|
setActiveQuestionId: H,
|
|
402
|
-
canResolveDoubt:
|
|
403
|
-
onResolveDoubt:
|
|
404
|
-
studentId:
|
|
405
|
-
subjectiveProps:
|
|
406
|
-
responses:
|
|
397
|
+
canResolveDoubt: He,
|
|
398
|
+
onResolveDoubt: Me,
|
|
399
|
+
studentId: Re,
|
|
400
|
+
subjectiveProps: Qe,
|
|
401
|
+
responses: d,
|
|
407
402
|
loggerRef: j
|
|
408
403
|
},
|
|
409
404
|
o
|
|
@@ -415,13 +410,13 @@ const qt = (fe, pe) => {
|
|
|
415
410
|
{
|
|
416
411
|
worksheetName: J,
|
|
417
412
|
questions: t,
|
|
418
|
-
responses:
|
|
413
|
+
responses: d,
|
|
419
414
|
activeQuestionIndex: l,
|
|
420
415
|
lastUnlockedQuestionIndex: u,
|
|
421
416
|
onItemNumberClick: M,
|
|
422
417
|
behavior: a,
|
|
423
418
|
minHeight: Xe,
|
|
424
|
-
summaryDescription:
|
|
419
|
+
summaryDescription: De,
|
|
425
420
|
summaryVisible: h
|
|
426
421
|
}
|
|
427
422
|
)
|
|
@@ -436,17 +431,16 @@ const qt = (fe, pe) => {
|
|
|
436
431
|
activeQuestionIndex: l,
|
|
437
432
|
learnosity: p,
|
|
438
433
|
userType: r,
|
|
439
|
-
height:
|
|
434
|
+
height: te,
|
|
440
435
|
actionbarHeight: g,
|
|
441
|
-
openQuestionFeedbackModal:
|
|
436
|
+
openQuestionFeedbackModal: Oe,
|
|
442
437
|
loggerRef: j,
|
|
443
|
-
|
|
444
|
-
enableStickers: qe ?? !1
|
|
438
|
+
studentClassroomId: Pe
|
|
445
439
|
}
|
|
446
440
|
)
|
|
447
441
|
] })
|
|
448
442
|
] }) : null;
|
|
449
|
-
}, pi = at(
|
|
443
|
+
}, pi = at(dt(qt));
|
|
450
444
|
export {
|
|
451
445
|
pi as default
|
|
452
446
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worksheet.js","sources":["../../../../src/features/worksheet/worksheet/worksheet.tsx"],"sourcesContent":["import type { ForwardRefRenderFunction } from 'react';\n// import { captureMessage } from '@sentry/browser';\nimport {\n forwardRef,\n memo,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport Check2Icon from '../../../assets/line-icons/icons/check2';\nimport Info2Icon from '../../../assets/line-icons/icons/info2';\nimport getDeviceDetails from '../../../helpers/get-device-details';\nimport DesmosCalculator from '../../sheet-tools/desmos-calculator/desmos-calculator';\nimport FlexView from '../../ui/layout/flex-view';\nimport Text from '../../ui/text/text';\n// import EVENTS from '../constants/events';\nimport UserPointer from '../user-pointer-pin/user-pin';\nimport {\n DESMOS_CALC_POSITION,\n TOP_NAVIGATION_HEIGHT,\n WORKSHEET_NUDGE_BANNER_HEIGHT,\n} from './constants';\nimport useCreateImperativeHandle from './hooks/use-create-imperative-handle';\nimport useGetActiveQuestionId from './hooks/use-get-active-question-id';\nimport useTimeSpentOnQuestions from './hooks/use-time-on-questions';\nimport QuestionTips from './question-tips';\nimport WorksheetActionBar from './worksheet-action-bar/worksheet-action-bar';\nimport WorksheetBlocker from './worksheet-blocker/worksheet-blocker';\nimport type { TWorksheetBlocker } from './worksheet-blocker/worksheet-blocker-types';\nimport {\n getInitialQuestionId,\n getInitialResponses,\n getLastUnlockedQuestionIndex,\n getQuestionMetadata,\n getQuestionsFromItems,\n getRenderableQuestions,\n getWorksheetDimensions,\n getWorksheetNudgeBannerInfo,\n scrollToQuestion,\n} from './worksheet-helpers';\nimport WorksheetNavigation from './worksheet-navigation/worksheet-navigation';\nimport WorksheetQuestion from './worksheet-question/worksheet-question';\nimport Navigator from './worksheet-sidebar/navigator';\nimport WorksheetSideBar from './worksheet-sidebar/sidebar';\nimport * as Styled from './worksheet-styled';\nimport WorksheetSummary from './worksheet-summary/worksheet-summary';\nimport type { IWorksheetProps, IWorksheetRef, IWorksheetResponse } from './worksheet-types';\n\n/**\n *\n * @param learnosityItems cannot not be changed between the renders\n */\nconst WorksheetComp: ForwardRefRenderFunction<IWorksheetRef, IWorksheetProps> = (props, ref) => {\n const {\n userType,\n studentName = 'Student',\n questionsSignedRequest,\n worksheetName,\n initialResponseId,\n initialItemIndex,\n // learnosityActivityRef,\n learnosityItems,\n learnosityResponses,\n layout,\n behavior,\n updatedResponses,\n showNudgeBanner,\n markedAsCompleted,\n onResponseChange,\n onBulkResponsesChange,\n onResponsesChange,\n onMediaStateChange,\n onTeacherValidation,\n onOptionalItemAssignment,\n onOptionalItemSkip,\n onExitTicketStart,\n onExitTicketSubmit,\n onSubmit,\n learnosity,\n appendedQuestionIds,\n worksheetCompleted,\n userId,\n onPublishStrokes,\n onReceiveStrokes,\n initialStrokesData,\n onHelp,\n onPublishMouseMove,\n onSubscribeMouseMove,\n onActiveQuestionChange,\n openQuestionFeedbackModal,\n summaryDescription,\n canSubmitWorksheet,\n loggerRef,\n canResolveDoubt,\n onResolveDoubt,\n onSkip,\n studentId,\n subjectiveProps,\n canShowActionBar = true,\n actionBarRightElement,\n } = props;\n const {\n initialQuestion,\n navigationMode,\n teacherValidationEnabled,\n maximumAttempts,\n enableStickers,\n } = behavior;\n const {\n containerStyle,\n containerWidth,\n minQuestionHeight,\n minSummaryHeight,\n questionsScrollable,\n navigationBar,\n topOffset,\n renderSideBar,\n showUserPointer = true,\n questionPadding,\n } = layout;\n\n const { actionbarHeight, maxQuestionWidth, questionsContainerWidth } = useMemo(\n () => getWorksheetDimensions(learnosityItems, layout),\n [layout, learnosityItems],\n );\n\n const [questions] = useState(() =>\n getQuestionsFromItems(learnosityItems, {\n sectioned:\n teacherValidationEnabled && navigationMode !== 'ADAPTIVE' && navigationMode !== 'CURRENT',\n adaptive: navigationMode === 'ADAPTIVE',\n }),\n );\n\n const [responses, setResponses] = useState<Record<string, IWorksheetResponse>>(\n () => learnosityResponses ?? getInitialResponses(questions),\n );\n const [isScribblingEnabled, setIsScribblingEnabled] = useState(false);\n const lastUnlockedQuestionIndex = useMemo(\n () =>\n navigationMode !== 'OPEN'\n ? getLastUnlockedQuestionIndex({\n questions,\n responses,\n behavior,\n userType,\n })\n : questions.length - 1,\n [behavior, navigationMode, questions, responses, userType],\n );\n\n const lastUnlockedQuestion = questions[lastUnlockedQuestionIndex];\n const lastUnlockedQuestionResponse = responses[lastUnlockedQuestion?.response_id ?? ''];\n\n const { bannerBackgroundColor: nudgeBannerBackgroundColor, label: nudgeBannerLabel } =\n getWorksheetNudgeBannerInfo(userType, Boolean(markedAsCompleted));\n\n const [initialQuestionId] = useState(() =>\n getInitialQuestionId({\n questions,\n initialQuestion,\n lastUnlockedQuestionIndex: getLastUnlockedQuestionIndex({\n questions,\n responses,\n behavior,\n userType,\n }),\n initialResponseId,\n initialItemIndex,\n }),\n );\n\n const { activeQuestionId, setActiveQuestionId, intersectionObserver } =\n useGetActiveQuestionId(initialQuestionId);\n const activeQuestionIndex = useMemo(\n () => questions.findIndex(question => question.response_id === activeQuestionId),\n [activeQuestionId, questions],\n );\n const [summaryVisible, setSummaryVisible] = useState(false);\n const [blocker, setBlocker] = useState<TWorksheetBlocker>();\n\n const [showCalculator, setShowCalculator] = useState(false);\n const getTimeSpentOnQuestion = useTimeSpentOnQuestions(behavior, responses, activeQuestionId);\n\n const handleMediaStateChange = useCallback<NonNullable<typeof onMediaStateChange>>(\n (question, mediaType, mediaState) => {\n const key = mediaType === 'SIMULATION' ? 'simState' : undefined;\n\n if (!key) return;\n\n if (onResponseChange) {\n setResponses(prevResponses => {\n const questionId = question.response_id;\n const questionMeta = getQuestionMetadata(questions, questionId);\n\n if (!questionMeta) return prevResponses;\n\n const updatedResponse = {\n ...questionMeta,\n ...prevResponses[questionId],\n [key]: mediaState,\n };\n\n onResponseChange?.({\n responseId: questionId,\n response: updatedResponse,\n isNewAttempt: false,\n question,\n });\n\n return {\n ...prevResponses,\n [questionId]: updatedResponse,\n };\n });\n } else if (onMediaStateChange) {\n onMediaStateChange(question, mediaType, mediaState);\n }\n },\n [onMediaStateChange, onResponseChange, questions],\n );\n\n const handleMarkForReview = useCallback(\n (questionId: string, markedForReview: boolean) => {\n setResponses(prevResponses => {\n const questionMeta = getQuestionMetadata(questions, questionId);\n\n if (!questionMeta) return prevResponses;\n\n return {\n ...prevResponses,\n [questionId]: {\n ...questionMeta,\n ...prevResponses[questionId],\n markedForReview,\n },\n };\n });\n },\n [questions],\n );\n\n const handleBlockerClose = useCallback(() => {\n setBlocker(prevBlocker => {\n if (prevBlocker) {\n const lastUnlockedQuestionId = questions[lastUnlockedQuestionIndex]?.response_id;\n\n if (lastUnlockedQuestionId) {\n setTimeout(() => {\n scrollToQuestion(lastUnlockedQuestionId);\n }, 50);\n }\n }\n\n return undefined;\n });\n }, [lastUnlockedQuestionIndex, questions]);\n\n const handleItemNumberClick = useCallback(\n (questionId: string) => {\n setSummaryVisible(false);\n\n if (questionsScrollable) {\n requestAnimationFrame(() => scrollToQuestion(questionId));\n } else {\n setActiveQuestionId(questionId);\n }\n },\n [questionsScrollable, setActiveQuestionId],\n );\n\n const onCalculatorClose = useCallback(() => {\n setShowCalculator(false);\n }, []);\n\n const onCalculatorOpen = useCallback(() => {\n setShowCalculator(true);\n }, []);\n\n const handleOnGoToReview = useCallback(() => {\n setSummaryVisible(true);\n }, []);\n\n useEffect(() => {\n const activeQuestion = questions[activeQuestionIndex];\n\n if (activeQuestion && onActiveQuestionChange) {\n onActiveQuestionChange(activeQuestion);\n }\n }, [onActiveQuestionChange, questions, activeQuestionIndex]);\n\n useCreateImperativeHandle(ref, {\n behavior,\n questions,\n setResponses,\n onResponseChange,\n onBulkResponsesChange,\n getTimeSpentOnQuestion,\n });\n\n useEffect(() => {\n return () => {\n intersectionObserver.disconnect();\n };\n }, [intersectionObserver]);\n\n useEffect(() => {\n if (onResponsesChange && responses) {\n onResponsesChange(responses);\n }\n }, [onResponsesChange, responses]);\n\n useEffect(() => {\n if (updatedResponses) {\n setResponses(updatedResponses);\n }\n }, [updatedResponses]);\n\n useLayoutEffect(() => {\n let timer: NodeJS.Timeout;\n\n if (learnosity && initialQuestionId) {\n if (getDeviceDetails().browser_name === 'Safari') {\n timer = setTimeout(() => {\n scrollToQuestion(initialQuestionId);\n }, 400);\n } else {\n scrollToQuestion(initialQuestionId);\n }\n }\n\n return () => {\n clearTimeout(timer);\n };\n }, [learnosity, initialQuestionId, topOffset]);\n\n useEffect(() => {\n if (behavior.teacherValidationEnabled && lastUnlockedQuestion) {\n const { item_type, instructor_stimulus, is_optional } = lastUnlockedQuestion;\n\n if (userType === 'TEACHER') {\n if (item_type === 'exit-ticket' && instructor_stimulus !== 'SystemIntro') {\n if (\n lastUnlockedQuestionResponse?.submittedByStudent &&\n !lastUnlockedQuestionResponse?.validatedByTeacher\n ) {\n setBlocker('exit-ticket-review-available');\n } else if (!lastUnlockedQuestionResponse?.validatedByTeacher) {\n setBlocker('exit-ticket-teacher-intervention');\n } else {\n handleBlockerClose();\n }\n } else if (is_optional) {\n if (!lastUnlockedQuestionResponse?.assignStatus) {\n setBlocker('optional-items-assignment');\n } else {\n handleBlockerClose();\n }\n } else if (!is_optional) {\n handleBlockerClose();\n }\n }\n }\n }, [\n behavior.teacherValidationEnabled,\n handleBlockerClose,\n lastUnlockedQuestion,\n lastUnlockedQuestionResponse,\n userType,\n ]);\n\n useEffect(() => {\n if (behavior.teacherValidationEnabled && lastUnlockedQuestion) {\n const { item_type, instructor_stimulus } = lastUnlockedQuestion;\n\n if (userType === 'STUDENT') {\n if (item_type === 'exit-ticket' && instructor_stimulus !== 'SystemIntro') {\n if (lastUnlockedQuestionResponse?.submittedByStudent) {\n onExitTicketSubmit?.();\n } else {\n onExitTicketStart?.();\n }\n }\n }\n }\n }, [\n behavior.teacherValidationEnabled,\n lastUnlockedQuestion,\n lastUnlockedQuestionResponse?.submittedByStudent,\n onExitTicketStart,\n onExitTicketSubmit,\n userType,\n ]);\n\n // useEffect(() => {\n // if (navigationMode === 'CURRENT') {\n // learnosityItems.forEach(({ reference, questions: itemQuestions }) => {\n // if (itemQuestions.length < 3) {\n // captureMessage(`Diagnostics item has Less than 3 questions: ${reference}`, {\n // tags: {\n // 'content-type': 'learnosity',\n // 'activity-reference': learnosityActivityRef,\n // 'item-reference': reference,\n // },\n // fingerprint: [`diagnostics-item-questions-count-${reference}`], // Add unique fingerprint\n // });\n // } else if (\n // itemQuestions[0]?.instructor_stimulus !== 'Try' ||\n // itemQuestions[1]?.instructor_stimulus !== 'Learn' ||\n // itemQuestions[2]?.instructor_stimulus !== 'Apply'\n // ) {\n // captureMessage(\n // `Diagnostics questions sequence is incorrect expected [Try, Learn, Apply]: ${reference}`,\n // {\n // tags: {\n // 'content-type': 'learnosity',\n // 'activity-reference': learnosityActivityRef,\n // 'item-reference': reference,\n // },\n // fingerprint: [`diagnostics-item-questions-sequence-${reference}`], // Add unique fingerprint\n // },\n // );\n // }\n // });\n // }\n // }, [learnosityActivityRef, learnosityItems, navigationMode]);\n\n // useEffect(() => {\n // questions.forEach(question => {\n // const { validation, item_reference, type, question_number, metadata } = question;\n // const responseNeeded = teacherValidationEnabled ? type !== 'clozetext' : true;\n\n // if (responseNeeded && validation?.valid_response) {\n // const value = validation.valid_response.value ?? [];\n\n // if (value?.length === 0) {\n // const altResponses = validation.alt_responses ?? [];\n // const hasAltResponse = altResponses.some(altResponse => altResponse.value.length > 0);\n\n // if (!hasAltResponse) {\n // captureMessage(`Question has no valid response: ${metadata.widget_reference}`, {\n // tags: {\n // 'content-type': 'learnosity',\n // 'activity-reference': learnosityActivityRef,\n // 'item-reference': item_reference,\n // 'question-number': question_number,\n // 'widget-reference': metadata.widget_reference,\n // },\n // fingerprint: [`no-valid-response-${metadata.widget_reference}`], // Add unique fingerprint\n // });\n // loggerRef.current(EVENTS.WORKSHEET_V3_QUESTION_MISSING_VALIDATION, {\n // item_reference: item_reference,\n // widget_reference: metadata.widget_reference,\n // question_type: type,\n // question_number: question_number,\n // });\n // }\n // }\n // }\n // });\n // }, [learnosityActivityRef, loggerRef, questions, teacherValidationEnabled]);\n\n if (!learnosity) {\n return null;\n }\n\n return (\n <>\n {showNudgeBanner && (\n <Styled.NudgeBannerWrapper\n $flexDirection=\"row\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n $width=\"100%\"\n $heightX={1.75}\n $height={WORKSHEET_NUDGE_BANNER_HEIGHT}\n $gap={8}\n $gutter={8}\n $flexGap={8}\n $background={nudgeBannerBackgroundColor}\n $topOffset={layout.topOffset - WORKSHEET_NUDGE_BANNER_HEIGHT}\n >\n {markedAsCompleted ? (\n <Styled.NudgeBannerIcon>\n <Check2Icon width={16} height={16} />\n </Styled.NudgeBannerIcon>\n ) : (\n <Styled.NudgeBannerIcon>\n <Info2Icon width={16} height={16} />\n </Styled.NudgeBannerIcon>\n )}\n\n <Text $renderAs=\"ub3\">{nudgeBannerLabel}</Text>\n </Styled.NudgeBannerWrapper>\n )}\n\n <Styled.WorksheetContainer $background=\"WHITE_1\" $width={containerWidth}>\n {navigationBar === 'top' && (\n <Styled.NavigationContainer $topOffset={topOffset} $height={TOP_NAVIGATION_HEIGHT}>\n <Styled.NavigationWrapper>\n <WorksheetNavigation\n placement=\"top\"\n questions={questions}\n responses={responses}\n activeQuestionIndex={activeQuestionIndex}\n lastUnlockedQuestionIndex={lastUnlockedQuestionIndex}\n behavior={behavior}\n onItemNumberClick={handleItemNumberClick}\n userType={userType}\n summaryVisible={summaryVisible}\n />\n </Styled.NavigationWrapper>\n </Styled.NavigationContainer>\n )}\n {blocker && lastUnlockedQuestion && (\n <Styled.BlockerWrapper $minHeight={minQuestionHeight} $topOffset={topOffset}>\n <FlexView $width={maxQuestionWidth} $justifyContent=\"center\" $alignItems=\"center\">\n <WorksheetBlocker\n blocker={blocker}\n lastUnlockedQuestion={lastUnlockedQuestion}\n studentName={studentName}\n onBlockerClose={handleBlockerClose}\n onOptionalItemAssignment={onOptionalItemAssignment}\n onOptionalItemSkip={onOptionalItemSkip}\n onTeacherValidation={onTeacherValidation}\n />\n </FlexView>\n </Styled.BlockerWrapper>\n )}\n {showUserPointer && (\n <UserPointer\n activeQuestionIndex={activeQuestionIndex}\n onClick={handleItemNumberClick}\n questions={questions}\n bottomOffset={actionbarHeight}\n topOffset={topOffset}\n userType={userType}\n />\n )}\n {showCalculator && (\n <Styled.DesmosCalcWrapper>\n <DesmosCalculator initialPosition={DESMOS_CALC_POSITION} onClose={onCalculatorClose} />\n </Styled.DesmosCalcWrapper>\n )}\n <Styled.ActionbarContainer\n $marginTop={userType === 'TEACHER' && summaryVisible ? '0' : actionbarHeight}\n $height={actionbarHeight}\n $isCardView={containerStyle === 'card'}\n >\n {maximumAttempts !== -2 && (\n <QuestionTips\n width={questionsContainerWidth - 32}\n question={questions[activeQuestionIndex]}\n learnosity={learnosity}\n userType={userType}\n />\n )}\n {canShowActionBar && (\n <Styled.ActionbarWrapper\n $height={actionbarHeight}\n $width={\n containerStyle === 'card' || maximumAttempts === -2\n ? questionsContainerWidth - 32\n : '100%'\n }\n $isCardView={containerStyle === 'card'}\n >\n <FlexView\n $gutterX={1}\n $flexDirection=\"row\"\n $justifyContent=\"space-between\"\n $alignItems=\"center\"\n $width={questionsContainerWidth - 32}\n >\n <WorksheetActionBar\n userType={userType}\n layout={layout}\n behavior={behavior}\n worksheetName={worksheetName}\n questions={questions}\n responses={responses}\n onCalculatorOpen={onCalculatorOpen}\n activeQuestionIndex={activeQuestionIndex}\n lastUnlockedQuestionIndex={lastUnlockedQuestionIndex}\n appendedQuestionIds={appendedQuestionIds}\n learnosity={learnosity}\n canSubmitWorksheet={canSubmitWorksheet}\n isScribblingEnabled={isScribblingEnabled}\n isSummaryVisible={summaryVisible}\n setResponses={setResponses}\n getTimeSpentOnQuestion={getTimeSpentOnQuestion}\n setSummaryVisible={setSummaryVisible}\n setBlocker={setBlocker}\n setIsScribblingEnabled={setIsScribblingEnabled}\n setActiveQuestionId={setActiveQuestionId}\n onItemNumberClick={handleItemNumberClick}\n onGoToReview={handleOnGoToReview}\n onResponseChange={onResponseChange}\n onHelp={onHelp}\n onTeacherValidation={onTeacherValidation}\n onSubmit={onSubmit}\n showCalculator={showCalculator}\n loggerRef={loggerRef}\n onSkip={onSkip}\n actionBarRightElement={actionBarRightElement}\n />\n </FlexView>\n </Styled.ActionbarWrapper>\n )}\n {!summaryVisible && questionsScrollable && userType === 'STUDENT' && (\n <Styled.StudentWorksheetSideBar>\n <Navigator />\n </Styled.StudentWorksheetSideBar>\n )}\n </Styled.ActionbarContainer>\n <Styled.QuestionsWrapper\n $actionbarHeight={actionbarHeight}\n $isCardView={containerStyle === 'card'}\n $questionPadding={questionPadding}\n >\n {getRenderableQuestions({ questions, lastUnlockedQuestionIndex, userType }).map(\n (question, questionIndex) => {\n const { response_id: responseId, is_optional } = question;\n const assignStatus = responses[responseId]?.assignStatus;\n\n if (behavior.teacherValidationEnabled) {\n if (assignStatus === 'skipped') return null;\n\n if (is_optional && assignStatus !== 'assigned' && userType === 'STUDENT') {\n return null;\n }\n }\n\n return (\n <WorksheetQuestion\n key={responseId}\n signedRequest={questionsSignedRequest}\n userType={userType}\n worksheetCompleted={worksheetCompleted}\n question={question}\n response={responses[responseId]}\n nextQuestionId={\n navigationMode === 'ADAPTIVE' || navigationMode === 'CURRENT'\n ? lastUnlockedQuestion?.response_id\n : questionIndex < lastUnlockedQuestionIndex\n ? questions[questionIndex + 1]?.response_id\n : undefined\n }\n maxQuestionWidth={maxQuestionWidth}\n learnosity={learnosity}\n isActive={responseId === activeQuestionId}\n isHidden={\n (!questionsScrollable && responseId !== activeQuestionId) || summaryVisible\n }\n canRender={\n activeQuestionIndex > -1 &&\n (questionIndex === activeQuestionIndex ||\n (navigationMode !== 'CURRENT' && questionIndex === activeQuestionIndex + 1))\n }\n appended={appendedQuestionIds.includes(responseId)}\n behavior={behavior}\n layout={layout}\n actionbarHeight={actionbarHeight}\n intersectionObserver={intersectionObserver}\n onMarkForReview={handleMarkForReview}\n onMediaStateChange={handleMediaStateChange}\n userId={userId}\n isScribblingEnabled={isScribblingEnabled}\n onPublishStrokes={onPublishStrokes}\n onReceiveStrokes={onReceiveStrokes}\n initialStrokesData={initialStrokesData}\n onPublishMouseMove={onPublishMouseMove}\n onSubscribeMouseMove={onSubscribeMouseMove}\n setActiveQuestionId={setActiveQuestionId}\n canResolveDoubt={canResolveDoubt}\n onResolveDoubt={onResolveDoubt}\n studentId={studentId}\n subjectiveProps={subjectiveProps}\n responses={responses}\n loggerRef={loggerRef}\n />\n );\n },\n )}\n {summaryVisible && (\n <WorksheetSummary\n worksheetName={worksheetName}\n questions={questions}\n responses={responses}\n activeQuestionIndex={activeQuestionIndex}\n lastUnlockedQuestionIndex={lastUnlockedQuestionIndex}\n onItemNumberClick={handleItemNumberClick}\n behavior={behavior}\n minHeight={minSummaryHeight}\n summaryDescription={summaryDescription}\n summaryVisible={summaryVisible}\n />\n )}\n </Styled.QuestionsWrapper>\n {!summaryVisible && renderSideBar && (\n <WorksheetSideBar\n questionWidth={maxQuestionWidth}\n questions={questions}\n activeQuestionIndex={activeQuestionIndex}\n learnosity={learnosity}\n userType={userType}\n height={minQuestionHeight}\n actionbarHeight={actionbarHeight}\n openQuestionFeedbackModal={openQuestionFeedbackModal}\n loggerRef={loggerRef}\n studentId={studentId}\n enableStickers={enableStickers ?? false}\n />\n )}\n </Styled.WorksheetContainer>\n </>\n );\n};\n\nconst Worksheet = memo(forwardRef(WorksheetComp));\n\nexport default Worksheet;\n"],"names":["WorksheetComp","props","ref","userType","studentName","questionsSignedRequest","worksheetName","initialResponseId","initialItemIndex","learnosityItems","learnosityResponses","layout","behavior","updatedResponses","showNudgeBanner","markedAsCompleted","onResponseChange","onBulkResponsesChange","onResponsesChange","onMediaStateChange","onTeacherValidation","onOptionalItemAssignment","onOptionalItemSkip","onExitTicketStart","onExitTicketSubmit","onSubmit","learnosity","appendedQuestionIds","worksheetCompleted","userId","onPublishStrokes","onReceiveStrokes","initialStrokesData","onHelp","onPublishMouseMove","onSubscribeMouseMove","onActiveQuestionChange","openQuestionFeedbackModal","summaryDescription","canSubmitWorksheet","loggerRef","canResolveDoubt","onResolveDoubt","onSkip","studentId","subjectiveProps","canShowActionBar","actionBarRightElement","initialQuestion","navigationMode","teacherValidationEnabled","maximumAttempts","enableStickers","containerStyle","containerWidth","minQuestionHeight","minSummaryHeight","questionsScrollable","navigationBar","topOffset","renderSideBar","showUserPointer","questionPadding","actionbarHeight","maxQuestionWidth","questionsContainerWidth","useMemo","getWorksheetDimensions","questions","useState","getQuestionsFromItems","responses","setResponses","getInitialResponses","isScribblingEnabled","setIsScribblingEnabled","lastUnlockedQuestionIndex","getLastUnlockedQuestionIndex","lastUnlockedQuestion","lastUnlockedQuestionResponse","nudgeBannerBackgroundColor","nudgeBannerLabel","getWorksheetNudgeBannerInfo","initialQuestionId","getInitialQuestionId","activeQuestionId","setActiveQuestionId","intersectionObserver","useGetActiveQuestionId","activeQuestionIndex","question","summaryVisible","setSummaryVisible","blocker","setBlocker","showCalculator","setShowCalculator","getTimeSpentOnQuestion","useTimeSpentOnQuestions","handleMediaStateChange","useCallback","mediaType","mediaState","key","prevResponses","questionId","questionMeta","getQuestionMetadata","updatedResponse","handleMarkForReview","markedForReview","handleBlockerClose","prevBlocker","lastUnlockedQuestionId","_a","scrollToQuestion","handleItemNumberClick","onCalculatorClose","onCalculatorOpen","handleOnGoToReview","useEffect","activeQuestion","useCreateImperativeHandle","useLayoutEffect","timer","getDeviceDetails","item_type","instructor_stimulus","is_optional","jsxs","Fragment","Styled.NudgeBannerWrapper","WORKSHEET_NUDGE_BANNER_HEIGHT","jsx","Styled.NudgeBannerIcon","Check2Icon","Info2Icon","Text","Styled.WorksheetContainer","Styled.NavigationContainer","TOP_NAVIGATION_HEIGHT","Styled.NavigationWrapper","WorksheetNavigation","Styled.BlockerWrapper","FlexView","WorksheetBlocker","UserPointer","Styled.DesmosCalcWrapper","DesmosCalculator","DESMOS_CALC_POSITION","Styled.ActionbarContainer","QuestionTips","Styled.ActionbarWrapper","WorksheetActionBar","Styled.StudentWorksheetSideBar","Navigator","Styled.QuestionsWrapper","getRenderableQuestions","questionIndex","responseId","assignStatus","WorksheetQuestion","_b","WorksheetSummary","WorksheetSideBar","Worksheet","memo","forwardRef"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worksheet.js","sources":["../../../../src/features/worksheet/worksheet/worksheet.tsx"],"sourcesContent":["import type { ForwardRefRenderFunction } from 'react';\n// import { captureMessage } from '@sentry/browser';\nimport {\n forwardRef,\n memo,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport Check2Icon from '../../../assets/line-icons/icons/check2';\nimport Info2Icon from '../../../assets/line-icons/icons/info2';\nimport getDeviceDetails from '../../../helpers/get-device-details';\nimport DesmosCalculator from '../../sheet-tools/desmos-calculator/desmos-calculator';\nimport FlexView from '../../ui/layout/flex-view';\nimport Text from '../../ui/text/text';\n// import EVENTS from '../constants/events';\nimport UserPointer from '../user-pointer-pin/user-pin';\nimport {\n DESMOS_CALC_POSITION,\n TOP_NAVIGATION_HEIGHT,\n WORKSHEET_NUDGE_BANNER_HEIGHT,\n} from './constants';\nimport useCreateImperativeHandle from './hooks/use-create-imperative-handle';\nimport useGetActiveQuestionId from './hooks/use-get-active-question-id';\nimport useTimeSpentOnQuestions from './hooks/use-time-on-questions';\nimport QuestionTips from './question-tips';\nimport WorksheetActionBar from './worksheet-action-bar/worksheet-action-bar';\nimport WorksheetBlocker from './worksheet-blocker/worksheet-blocker';\nimport type { TWorksheetBlocker } from './worksheet-blocker/worksheet-blocker-types';\nimport {\n getInitialQuestionId,\n getInitialResponses,\n getLastUnlockedQuestionIndex,\n getQuestionMetadata,\n getQuestionsFromItems,\n getRenderableQuestions,\n getWorksheetDimensions,\n getWorksheetNudgeBannerInfo,\n scrollToQuestion,\n} from './worksheet-helpers';\nimport WorksheetNavigation from './worksheet-navigation/worksheet-navigation';\nimport WorksheetQuestion from './worksheet-question/worksheet-question';\nimport Navigator from './worksheet-sidebar/navigator';\nimport WorksheetSideBar from './worksheet-sidebar/sidebar';\nimport * as Styled from './worksheet-styled';\nimport WorksheetSummary from './worksheet-summary/worksheet-summary';\nimport type { IWorksheetProps, IWorksheetRef, IWorksheetResponse } from './worksheet-types';\n\n/**\n *\n * @param learnosityItems cannot not be changed between the renders\n */\nconst WorksheetComp: ForwardRefRenderFunction<IWorksheetRef, IWorksheetProps> = (props, ref) => {\n const {\n userType,\n studentName = 'Student',\n questionsSignedRequest,\n worksheetName,\n initialResponseId,\n initialItemIndex,\n // learnosityActivityRef,\n learnosityItems,\n learnosityResponses,\n layout,\n behavior,\n updatedResponses,\n showNudgeBanner,\n markedAsCompleted,\n onResponseChange,\n onBulkResponsesChange,\n onResponsesChange,\n onMediaStateChange,\n onTeacherValidation,\n onOptionalItemAssignment,\n onOptionalItemSkip,\n onExitTicketStart,\n onExitTicketSubmit,\n onSubmit,\n learnosity,\n appendedQuestionIds,\n worksheetCompleted,\n userId,\n onPublishStrokes,\n onReceiveStrokes,\n initialStrokesData,\n onHelp,\n onPublishMouseMove,\n onSubscribeMouseMove,\n onActiveQuestionChange,\n openQuestionFeedbackModal,\n summaryDescription,\n canSubmitWorksheet,\n loggerRef,\n canResolveDoubt,\n onResolveDoubt,\n onSkip,\n studentId,\n studentClassroomId,\n subjectiveProps,\n canShowActionBar = true,\n actionBarRightElement,\n } = props;\n const { initialQuestion, navigationMode, teacherValidationEnabled, maximumAttempts } = behavior;\n const {\n containerStyle,\n containerWidth,\n minQuestionHeight,\n minSummaryHeight,\n questionsScrollable,\n navigationBar,\n topOffset,\n renderSideBar,\n showUserPointer = true,\n questionPadding,\n } = layout;\n\n const { actionbarHeight, maxQuestionWidth, questionsContainerWidth } = useMemo(\n () => getWorksheetDimensions(learnosityItems, layout),\n [layout, learnosityItems],\n );\n\n const [questions] = useState(() =>\n getQuestionsFromItems(learnosityItems, {\n sectioned:\n teacherValidationEnabled && navigationMode !== 'ADAPTIVE' && navigationMode !== 'CURRENT',\n adaptive: navigationMode === 'ADAPTIVE',\n }),\n );\n\n const [responses, setResponses] = useState<Record<string, IWorksheetResponse>>(\n () => learnosityResponses ?? getInitialResponses(questions),\n );\n const [isScribblingEnabled, setIsScribblingEnabled] = useState(false);\n const lastUnlockedQuestionIndex = useMemo(\n () =>\n navigationMode !== 'OPEN'\n ? getLastUnlockedQuestionIndex({\n questions,\n responses,\n behavior,\n userType,\n })\n : questions.length - 1,\n [behavior, navigationMode, questions, responses, userType],\n );\n\n const lastUnlockedQuestion = questions[lastUnlockedQuestionIndex];\n const lastUnlockedQuestionResponse = responses[lastUnlockedQuestion?.response_id ?? ''];\n\n const { bannerBackgroundColor: nudgeBannerBackgroundColor, label: nudgeBannerLabel } =\n getWorksheetNudgeBannerInfo(userType, Boolean(markedAsCompleted));\n\n const [initialQuestionId] = useState(() =>\n getInitialQuestionId({\n questions,\n initialQuestion,\n lastUnlockedQuestionIndex: getLastUnlockedQuestionIndex({\n questions,\n responses,\n behavior,\n userType,\n }),\n initialResponseId,\n initialItemIndex,\n }),\n );\n\n const { activeQuestionId, setActiveQuestionId, intersectionObserver } =\n useGetActiveQuestionId(initialQuestionId);\n const activeQuestionIndex = useMemo(\n () => questions.findIndex(question => question.response_id === activeQuestionId),\n [activeQuestionId, questions],\n );\n const [summaryVisible, setSummaryVisible] = useState(false);\n const [blocker, setBlocker] = useState<TWorksheetBlocker>();\n\n const [showCalculator, setShowCalculator] = useState(false);\n const getTimeSpentOnQuestion = useTimeSpentOnQuestions(behavior, responses, activeQuestionId);\n\n const handleMediaStateChange = useCallback<NonNullable<typeof onMediaStateChange>>(\n (question, mediaType, mediaState) => {\n const key = mediaType === 'SIMULATION' ? 'simState' : undefined;\n\n if (!key) return;\n\n if (onResponseChange) {\n setResponses(prevResponses => {\n const questionId = question.response_id;\n const questionMeta = getQuestionMetadata(questions, questionId);\n\n if (!questionMeta) return prevResponses;\n\n const updatedResponse = {\n ...questionMeta,\n ...prevResponses[questionId],\n [key]: mediaState,\n };\n\n onResponseChange?.({\n responseId: questionId,\n response: updatedResponse,\n isNewAttempt: false,\n question,\n });\n\n return {\n ...prevResponses,\n [questionId]: updatedResponse,\n };\n });\n } else if (onMediaStateChange) {\n onMediaStateChange(question, mediaType, mediaState);\n }\n },\n [onMediaStateChange, onResponseChange, questions],\n );\n\n const handleMarkForReview = useCallback(\n (questionId: string, markedForReview: boolean) => {\n setResponses(prevResponses => {\n const questionMeta = getQuestionMetadata(questions, questionId);\n\n if (!questionMeta) return prevResponses;\n\n return {\n ...prevResponses,\n [questionId]: {\n ...questionMeta,\n ...prevResponses[questionId],\n markedForReview,\n },\n };\n });\n },\n [questions],\n );\n\n const handleBlockerClose = useCallback(() => {\n setBlocker(prevBlocker => {\n if (prevBlocker) {\n const lastUnlockedQuestionId = questions[lastUnlockedQuestionIndex]?.response_id;\n\n if (lastUnlockedQuestionId) {\n setTimeout(() => {\n scrollToQuestion(lastUnlockedQuestionId);\n }, 50);\n }\n }\n\n return undefined;\n });\n }, [lastUnlockedQuestionIndex, questions]);\n\n const handleItemNumberClick = useCallback(\n (questionId: string) => {\n setSummaryVisible(false);\n\n if (questionsScrollable) {\n requestAnimationFrame(() => scrollToQuestion(questionId));\n } else {\n setActiveQuestionId(questionId);\n }\n },\n [questionsScrollable, setActiveQuestionId],\n );\n\n const onCalculatorClose = useCallback(() => {\n setShowCalculator(false);\n }, []);\n\n const onCalculatorOpen = useCallback(() => {\n setShowCalculator(true);\n }, []);\n\n const handleOnGoToReview = useCallback(() => {\n setSummaryVisible(true);\n }, []);\n\n useEffect(() => {\n const activeQuestion = questions[activeQuestionIndex];\n\n if (activeQuestion && onActiveQuestionChange) {\n onActiveQuestionChange(activeQuestion);\n }\n }, [onActiveQuestionChange, questions, activeQuestionIndex]);\n\n useCreateImperativeHandle(ref, {\n behavior,\n questions,\n setResponses,\n onResponseChange,\n onBulkResponsesChange,\n getTimeSpentOnQuestion,\n });\n\n useEffect(() => {\n return () => {\n intersectionObserver.disconnect();\n };\n }, [intersectionObserver]);\n\n useEffect(() => {\n if (onResponsesChange && responses) {\n onResponsesChange(responses);\n }\n }, [onResponsesChange, responses]);\n\n useEffect(() => {\n if (updatedResponses) {\n setResponses(updatedResponses);\n }\n }, [updatedResponses]);\n\n useLayoutEffect(() => {\n let timer: NodeJS.Timeout;\n\n if (learnosity && initialQuestionId) {\n if (getDeviceDetails().browser_name === 'Safari') {\n timer = setTimeout(() => {\n scrollToQuestion(initialQuestionId);\n }, 400);\n } else {\n scrollToQuestion(initialQuestionId);\n }\n }\n\n return () => {\n clearTimeout(timer);\n };\n }, [learnosity, initialQuestionId, topOffset]);\n\n useEffect(() => {\n if (behavior.teacherValidationEnabled && lastUnlockedQuestion) {\n const { item_type, instructor_stimulus, is_optional } = lastUnlockedQuestion;\n\n if (userType === 'TEACHER') {\n if (item_type === 'exit-ticket' && instructor_stimulus !== 'SystemIntro') {\n if (\n lastUnlockedQuestionResponse?.submittedByStudent &&\n !lastUnlockedQuestionResponse?.validatedByTeacher\n ) {\n setBlocker('exit-ticket-review-available');\n } else if (!lastUnlockedQuestionResponse?.validatedByTeacher) {\n setBlocker('exit-ticket-teacher-intervention');\n } else {\n handleBlockerClose();\n }\n } else if (is_optional) {\n if (!lastUnlockedQuestionResponse?.assignStatus) {\n setBlocker('optional-items-assignment');\n } else {\n handleBlockerClose();\n }\n } else if (!is_optional) {\n handleBlockerClose();\n }\n }\n }\n }, [\n behavior.teacherValidationEnabled,\n handleBlockerClose,\n lastUnlockedQuestion,\n lastUnlockedQuestionResponse,\n userType,\n ]);\n\n useEffect(() => {\n if (behavior.teacherValidationEnabled && lastUnlockedQuestion) {\n const { item_type, instructor_stimulus } = lastUnlockedQuestion;\n\n if (userType === 'STUDENT') {\n if (item_type === 'exit-ticket' && instructor_stimulus !== 'SystemIntro') {\n if (lastUnlockedQuestionResponse?.submittedByStudent) {\n onExitTicketSubmit?.();\n } else {\n onExitTicketStart?.();\n }\n }\n }\n }\n }, [\n behavior.teacherValidationEnabled,\n lastUnlockedQuestion,\n lastUnlockedQuestionResponse?.submittedByStudent,\n onExitTicketStart,\n onExitTicketSubmit,\n userType,\n ]);\n\n // useEffect(() => {\n // if (navigationMode === 'CURRENT') {\n // learnosityItems.forEach(({ reference, questions: itemQuestions }) => {\n // if (itemQuestions.length < 3) {\n // captureMessage(`Diagnostics item has Less than 3 questions: ${reference}`, {\n // tags: {\n // 'content-type': 'learnosity',\n // 'activity-reference': learnosityActivityRef,\n // 'item-reference': reference,\n // },\n // fingerprint: [`diagnostics-item-questions-count-${reference}`], // Add unique fingerprint\n // });\n // } else if (\n // itemQuestions[0]?.instructor_stimulus !== 'Try' ||\n // itemQuestions[1]?.instructor_stimulus !== 'Learn' ||\n // itemQuestions[2]?.instructor_stimulus !== 'Apply'\n // ) {\n // captureMessage(\n // `Diagnostics questions sequence is incorrect expected [Try, Learn, Apply]: ${reference}`,\n // {\n // tags: {\n // 'content-type': 'learnosity',\n // 'activity-reference': learnosityActivityRef,\n // 'item-reference': reference,\n // },\n // fingerprint: [`diagnostics-item-questions-sequence-${reference}`], // Add unique fingerprint\n // },\n // );\n // }\n // });\n // }\n // }, [learnosityActivityRef, learnosityItems, navigationMode]);\n\n // useEffect(() => {\n // questions.forEach(question => {\n // const { validation, item_reference, type, question_number, metadata } = question;\n // const responseNeeded = teacherValidationEnabled ? type !== 'clozetext' : true;\n\n // if (responseNeeded && validation?.valid_response) {\n // const value = validation.valid_response.value ?? [];\n\n // if (value?.length === 0) {\n // const altResponses = validation.alt_responses ?? [];\n // const hasAltResponse = altResponses.some(altResponse => altResponse.value.length > 0);\n\n // if (!hasAltResponse) {\n // captureMessage(`Question has no valid response: ${metadata.widget_reference}`, {\n // tags: {\n // 'content-type': 'learnosity',\n // 'activity-reference': learnosityActivityRef,\n // 'item-reference': item_reference,\n // 'question-number': question_number,\n // 'widget-reference': metadata.widget_reference,\n // },\n // fingerprint: [`no-valid-response-${metadata.widget_reference}`], // Add unique fingerprint\n // });\n // loggerRef.current(EVENTS.WORKSHEET_V3_QUESTION_MISSING_VALIDATION, {\n // item_reference: item_reference,\n // widget_reference: metadata.widget_reference,\n // question_type: type,\n // question_number: question_number,\n // });\n // }\n // }\n // }\n // });\n // }, [learnosityActivityRef, loggerRef, questions, teacherValidationEnabled]);\n\n if (!learnosity) {\n return null;\n }\n\n return (\n <>\n {showNudgeBanner && (\n <Styled.NudgeBannerWrapper\n $flexDirection=\"row\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n $width=\"100%\"\n $heightX={1.75}\n $height={WORKSHEET_NUDGE_BANNER_HEIGHT}\n $gap={8}\n $gutter={8}\n $flexGap={8}\n $background={nudgeBannerBackgroundColor}\n $topOffset={layout.topOffset - WORKSHEET_NUDGE_BANNER_HEIGHT}\n >\n {markedAsCompleted ? (\n <Styled.NudgeBannerIcon>\n <Check2Icon width={16} height={16} />\n </Styled.NudgeBannerIcon>\n ) : (\n <Styled.NudgeBannerIcon>\n <Info2Icon width={16} height={16} />\n </Styled.NudgeBannerIcon>\n )}\n\n <Text $renderAs=\"ub3\">{nudgeBannerLabel}</Text>\n </Styled.NudgeBannerWrapper>\n )}\n\n <Styled.WorksheetContainer $background=\"WHITE_1\" $width={containerWidth}>\n {navigationBar === 'top' && (\n <Styled.NavigationContainer $topOffset={topOffset} $height={TOP_NAVIGATION_HEIGHT}>\n <Styled.NavigationWrapper>\n <WorksheetNavigation\n placement=\"top\"\n questions={questions}\n responses={responses}\n activeQuestionIndex={activeQuestionIndex}\n lastUnlockedQuestionIndex={lastUnlockedQuestionIndex}\n behavior={behavior}\n onItemNumberClick={handleItemNumberClick}\n userType={userType}\n summaryVisible={summaryVisible}\n />\n </Styled.NavigationWrapper>\n </Styled.NavigationContainer>\n )}\n {blocker && lastUnlockedQuestion && (\n <Styled.BlockerWrapper $minHeight={minQuestionHeight} $topOffset={topOffset}>\n <FlexView $width={maxQuestionWidth} $justifyContent=\"center\" $alignItems=\"center\">\n <WorksheetBlocker\n blocker={blocker}\n lastUnlockedQuestion={lastUnlockedQuestion}\n studentName={studentName}\n onBlockerClose={handleBlockerClose}\n onOptionalItemAssignment={onOptionalItemAssignment}\n onOptionalItemSkip={onOptionalItemSkip}\n onTeacherValidation={onTeacherValidation}\n />\n </FlexView>\n </Styled.BlockerWrapper>\n )}\n {showUserPointer && (\n <UserPointer\n activeQuestionIndex={activeQuestionIndex}\n onClick={handleItemNumberClick}\n questions={questions}\n bottomOffset={actionbarHeight}\n topOffset={topOffset}\n userType={userType}\n />\n )}\n {showCalculator && (\n <Styled.DesmosCalcWrapper>\n <DesmosCalculator initialPosition={DESMOS_CALC_POSITION} onClose={onCalculatorClose} />\n </Styled.DesmosCalcWrapper>\n )}\n <Styled.ActionbarContainer\n $marginTop={userType === 'TEACHER' && summaryVisible ? '0' : actionbarHeight}\n $height={actionbarHeight}\n $isCardView={containerStyle === 'card'}\n >\n {maximumAttempts !== -2 && (\n <QuestionTips\n width={questionsContainerWidth - 32}\n question={questions[activeQuestionIndex]}\n learnosity={learnosity}\n userType={userType}\n />\n )}\n {canShowActionBar && (\n <Styled.ActionbarWrapper\n $height={actionbarHeight}\n $width={\n containerStyle === 'card' || maximumAttempts === -2\n ? questionsContainerWidth - 32\n : '100%'\n }\n $isCardView={containerStyle === 'card'}\n >\n <FlexView\n $gutterX={1}\n $flexDirection=\"row\"\n $justifyContent=\"space-between\"\n $alignItems=\"center\"\n $width={questionsContainerWidth - 32}\n >\n <WorksheetActionBar\n userType={userType}\n layout={layout}\n behavior={behavior}\n worksheetName={worksheetName}\n questions={questions}\n responses={responses}\n onCalculatorOpen={onCalculatorOpen}\n activeQuestionIndex={activeQuestionIndex}\n lastUnlockedQuestionIndex={lastUnlockedQuestionIndex}\n appendedQuestionIds={appendedQuestionIds}\n learnosity={learnosity}\n canSubmitWorksheet={canSubmitWorksheet}\n isScribblingEnabled={isScribblingEnabled}\n isSummaryVisible={summaryVisible}\n setResponses={setResponses}\n getTimeSpentOnQuestion={getTimeSpentOnQuestion}\n setSummaryVisible={setSummaryVisible}\n setBlocker={setBlocker}\n setIsScribblingEnabled={setIsScribblingEnabled}\n setActiveQuestionId={setActiveQuestionId}\n onItemNumberClick={handleItemNumberClick}\n onGoToReview={handleOnGoToReview}\n onResponseChange={onResponseChange}\n onHelp={onHelp}\n onTeacherValidation={onTeacherValidation}\n onSubmit={onSubmit}\n showCalculator={showCalculator}\n loggerRef={loggerRef}\n onSkip={onSkip}\n actionBarRightElement={actionBarRightElement}\n />\n </FlexView>\n </Styled.ActionbarWrapper>\n )}\n {!summaryVisible && questionsScrollable && userType === 'STUDENT' && (\n <Styled.StudentWorksheetSideBar>\n <Navigator />\n </Styled.StudentWorksheetSideBar>\n )}\n </Styled.ActionbarContainer>\n <Styled.QuestionsWrapper\n $actionbarHeight={actionbarHeight}\n $isCardView={containerStyle === 'card'}\n $questionPadding={questionPadding}\n >\n {getRenderableQuestions({ questions, lastUnlockedQuestionIndex, userType }).map(\n (question, questionIndex) => {\n const { response_id: responseId, is_optional } = question;\n const assignStatus = responses[responseId]?.assignStatus;\n\n if (behavior.teacherValidationEnabled) {\n if (assignStatus === 'skipped') return null;\n\n if (is_optional && assignStatus !== 'assigned' && userType === 'STUDENT') {\n return null;\n }\n }\n\n return (\n <WorksheetQuestion\n key={responseId}\n signedRequest={questionsSignedRequest}\n userType={userType}\n worksheetCompleted={worksheetCompleted}\n question={question}\n response={responses[responseId]}\n nextQuestionId={\n navigationMode === 'ADAPTIVE' || navigationMode === 'CURRENT'\n ? lastUnlockedQuestion?.response_id\n : questionIndex < lastUnlockedQuestionIndex\n ? questions[questionIndex + 1]?.response_id\n : undefined\n }\n maxQuestionWidth={maxQuestionWidth}\n learnosity={learnosity}\n isActive={responseId === activeQuestionId}\n isHidden={\n (!questionsScrollable && responseId !== activeQuestionId) || summaryVisible\n }\n canRender={\n activeQuestionIndex > -1 &&\n (questionIndex === activeQuestionIndex ||\n (navigationMode !== 'CURRENT' && questionIndex === activeQuestionIndex + 1))\n }\n appended={appendedQuestionIds.includes(responseId)}\n behavior={behavior}\n layout={layout}\n actionbarHeight={actionbarHeight}\n intersectionObserver={intersectionObserver}\n onMarkForReview={handleMarkForReview}\n onMediaStateChange={handleMediaStateChange}\n userId={userId}\n isScribblingEnabled={isScribblingEnabled}\n onPublishStrokes={onPublishStrokes}\n onReceiveStrokes={onReceiveStrokes}\n initialStrokesData={initialStrokesData}\n onPublishMouseMove={onPublishMouseMove}\n onSubscribeMouseMove={onSubscribeMouseMove}\n setActiveQuestionId={setActiveQuestionId}\n canResolveDoubt={canResolveDoubt}\n onResolveDoubt={onResolveDoubt}\n studentId={studentId}\n subjectiveProps={subjectiveProps}\n responses={responses}\n loggerRef={loggerRef}\n />\n );\n },\n )}\n {summaryVisible && (\n <WorksheetSummary\n worksheetName={worksheetName}\n questions={questions}\n responses={responses}\n activeQuestionIndex={activeQuestionIndex}\n lastUnlockedQuestionIndex={lastUnlockedQuestionIndex}\n onItemNumberClick={handleItemNumberClick}\n behavior={behavior}\n minHeight={minSummaryHeight}\n summaryDescription={summaryDescription}\n summaryVisible={summaryVisible}\n />\n )}\n </Styled.QuestionsWrapper>\n {!summaryVisible && renderSideBar && (\n <WorksheetSideBar\n questionWidth={maxQuestionWidth}\n questions={questions}\n activeQuestionIndex={activeQuestionIndex}\n learnosity={learnosity}\n userType={userType}\n height={minQuestionHeight}\n actionbarHeight={actionbarHeight}\n openQuestionFeedbackModal={openQuestionFeedbackModal}\n loggerRef={loggerRef}\n studentClassroomId={studentClassroomId}\n />\n )}\n </Styled.WorksheetContainer>\n </>\n );\n};\n\nconst Worksheet = memo(forwardRef(WorksheetComp));\n\nexport default Worksheet;\n"],"names":["WorksheetComp","props","ref","userType","studentName","questionsSignedRequest","worksheetName","initialResponseId","initialItemIndex","learnosityItems","learnosityResponses","layout","behavior","updatedResponses","showNudgeBanner","markedAsCompleted","onResponseChange","onBulkResponsesChange","onResponsesChange","onMediaStateChange","onTeacherValidation","onOptionalItemAssignment","onOptionalItemSkip","onExitTicketStart","onExitTicketSubmit","onSubmit","learnosity","appendedQuestionIds","worksheetCompleted","userId","onPublishStrokes","onReceiveStrokes","initialStrokesData","onHelp","onPublishMouseMove","onSubscribeMouseMove","onActiveQuestionChange","openQuestionFeedbackModal","summaryDescription","canSubmitWorksheet","loggerRef","canResolveDoubt","onResolveDoubt","onSkip","studentId","studentClassroomId","subjectiveProps","canShowActionBar","actionBarRightElement","initialQuestion","navigationMode","teacherValidationEnabled","maximumAttempts","containerStyle","containerWidth","minQuestionHeight","minSummaryHeight","questionsScrollable","navigationBar","topOffset","renderSideBar","showUserPointer","questionPadding","actionbarHeight","maxQuestionWidth","questionsContainerWidth","useMemo","getWorksheetDimensions","questions","useState","getQuestionsFromItems","responses","setResponses","getInitialResponses","isScribblingEnabled","setIsScribblingEnabled","lastUnlockedQuestionIndex","getLastUnlockedQuestionIndex","lastUnlockedQuestion","lastUnlockedQuestionResponse","nudgeBannerBackgroundColor","nudgeBannerLabel","getWorksheetNudgeBannerInfo","initialQuestionId","getInitialQuestionId","activeQuestionId","setActiveQuestionId","intersectionObserver","useGetActiveQuestionId","activeQuestionIndex","question","summaryVisible","setSummaryVisible","blocker","setBlocker","showCalculator","setShowCalculator","getTimeSpentOnQuestion","useTimeSpentOnQuestions","handleMediaStateChange","useCallback","mediaType","mediaState","key","prevResponses","questionId","questionMeta","getQuestionMetadata","updatedResponse","handleMarkForReview","markedForReview","handleBlockerClose","prevBlocker","lastUnlockedQuestionId","_a","scrollToQuestion","handleItemNumberClick","onCalculatorClose","onCalculatorOpen","handleOnGoToReview","useEffect","activeQuestion","useCreateImperativeHandle","useLayoutEffect","timer","getDeviceDetails","item_type","instructor_stimulus","is_optional","jsxs","Fragment","Styled.NudgeBannerWrapper","WORKSHEET_NUDGE_BANNER_HEIGHT","jsx","Styled.NudgeBannerIcon","Check2Icon","Info2Icon","Text","Styled.WorksheetContainer","Styled.NavigationContainer","TOP_NAVIGATION_HEIGHT","Styled.NavigationWrapper","WorksheetNavigation","Styled.BlockerWrapper","FlexView","WorksheetBlocker","UserPointer","Styled.DesmosCalcWrapper","DesmosCalculator","DESMOS_CALC_POSITION","Styled.ActionbarContainer","QuestionTips","Styled.ActionbarWrapper","WorksheetActionBar","Styled.StudentWorksheetSideBar","Navigator","Styled.QuestionsWrapper","getRenderableQuestions","questionIndex","responseId","assignStatus","WorksheetQuestion","_b","WorksheetSummary","WorksheetSideBar","Worksheet","memo","forwardRef"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4635,10 +4635,6 @@ export declare interface IWorksheetBehavior {
|
|
|
4635
4635
|
canShowDesmosCalc: boolean;
|
|
4636
4636
|
canvasEnabled?: boolean;
|
|
4637
4637
|
canScribble?: boolean;
|
|
4638
|
-
/**
|
|
4639
|
-
* If true displays option to send stickers in worksheet sidebar.
|
|
4640
|
-
*/
|
|
4641
|
-
enableStickers?: boolean;
|
|
4642
4638
|
}
|
|
4643
4639
|
|
|
4644
4640
|
declare interface IWorksheetCallbackProps {
|
|
@@ -4747,6 +4743,7 @@ export declare interface IWorksheetProps extends IBaseWorksheetProps, IWorksheet
|
|
|
4747
4743
|
summaryDescription?: ReactElement | null;
|
|
4748
4744
|
canSubmitWorksheet?: boolean;
|
|
4749
4745
|
studentId: string;
|
|
4746
|
+
studentClassroomId?: string;
|
|
4750
4747
|
attemptId?: string;
|
|
4751
4748
|
subjectiveProps?: ISubjectiveSheetProps;
|
|
4752
4749
|
}
|