@cuemath/leap 2.9.8-as1 → 2.9.8-as12
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/chapters-v2/chapter-details/block-sections/block-sections.js +9 -9
- package/dist/features/chapters-v2/chapter-details/block-sections/block-sections.js.map +1 -1
- package/dist/features/chapters-v2/utils/index.js +19 -12
- package/dist/features/chapters-v2/utils/index.js.map +1 -1
- package/dist/features/chapters-v2/utils/node-card-utils.js +40 -48
- package/dist/features/chapters-v2/utils/node-card-utils.js.map +1 -1
- package/dist/features/homework/hw-card-list/hw-card-list-view.js +157 -0
- package/dist/features/homework/hw-card-list/hw-card-list-view.js.map +1 -0
- package/dist/features/homework/hw-card-list/hw-card-list.js +58 -182
- package/dist/features/homework/hw-card-list/hw-card-list.js.map +1 -1
- package/dist/features/homework/styles.js +24 -24
- package/dist/features/homework/styles.js.map +1 -1
- package/dist/features/journey/comps/coachmark/coachmark-styled.js +5 -12
- package/dist/features/journey/comps/coachmark/coachmark-styled.js.map +1 -1
- package/dist/features/journey/hooks/use-chapter-journey.js +90 -111
- package/dist/features/journey/hooks/use-chapter-journey.js.map +1 -1
- package/dist/features/journey/hooks/use-home-page-journey/home-page-homeworks-mock.js +268 -0
- package/dist/features/journey/hooks/use-home-page-journey/home-page-homeworks-mock.js.map +1 -0
- package/dist/features/journey/hooks/use-home-page-journey/recent-chapters-mock.js +513 -0
- package/dist/features/journey/hooks/use-home-page-journey/recent-chapters-mock.js.map +1 -0
- package/dist/features/journey/hooks/use-home-page-journey/styles.js +23 -0
- package/dist/features/journey/hooks/use-home-page-journey/styles.js.map +1 -0
- package/dist/features/journey/hooks/use-home-page-journey/tooltip-item.js +22 -0
- package/dist/features/journey/hooks/use-home-page-journey/tooltip-item.js.map +1 -0
- package/dist/features/journey/hooks/use-home-page-journey/use-home-page-journey.js +270 -0
- package/dist/features/journey/hooks/use-home-page-journey/use-home-page-journey.js.map +1 -0
- package/dist/features/journey/mocks/chapter-page-journey-mock-data.js +0 -3
- package/dist/features/journey/mocks/chapter-page-journey-mock-data.js.map +1 -1
- package/dist/features/milestone/milestone-list-container/milestone-list-container.js.map +1 -1
- package/dist/features/milestone/milestone-tests/tests-creation/test-stages/chapter-selection/chapter-item/chapter-item.js.map +1 -1
- package/dist/features/trial-session/comps/learning-plan/index.js.map +1 -1
- package/dist/index.d.ts +10 -25
- package/dist/index.js +495 -505
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/assets/line-icons/icons/alarm.js +0 -41
- package/dist/assets/line-icons/icons/alarm.js.map +0 -1
- package/dist/assets/line-icons/icons/dart.js +0 -23
- package/dist/assets/line-icons/icons/dart.js.map +0 -1
- package/dist/assets/line-icons/icons/puzzle.js +0 -25
- package/dist/assets/line-icons/icons/puzzle.js.map +0 -1
- package/dist/assets/line-icons/icons/recap.js +0 -32
- package/dist/assets/line-icons/icons/recap.js.map +0 -1
- package/dist/assets/line-icons/icons/testtube.js +0 -33
- package/dist/assets/line-icons/icons/testtube.js.map +0 -1
- package/dist/features/journey/hooks/use-home-page-journey.js +0 -189
- package/dist/features/journey/hooks/use-home-page-journey.js.map +0 -1
@@ -2,12 +2,12 @@ import { jsxs as I, jsx as s } from "react/jsx-runtime";
|
|
2
2
|
import { memo as w, useMemo as x } from "react";
|
3
3
|
import h from "./block-section-view.js";
|
4
4
|
import { ChapterDetailsWrapper as L } from "./block-sections-styled.js";
|
5
|
-
const E = w((
|
5
|
+
const E = w((_) => {
|
6
6
|
const {
|
7
7
|
blocks: t,
|
8
8
|
imageHue: n,
|
9
9
|
userType: l,
|
10
|
-
coreBlocksRef:
|
10
|
+
coreBlocksRef: g,
|
11
11
|
onNodeAttempt: i,
|
12
12
|
onNodeAttemptLocationChange: r,
|
13
13
|
onNodeMarkAsDone: c,
|
@@ -15,7 +15,7 @@ const E = w((g) => {
|
|
15
15
|
onNodeReview: d,
|
16
16
|
onNodeView: k,
|
17
17
|
onBlockSkipUnskip: m
|
18
|
-
} =
|
18
|
+
} = _;
|
19
19
|
let a = 0;
|
20
20
|
const { goalBlocks: u, nonGoalBlocks: B } = x(
|
21
21
|
() => t.reduce(
|
@@ -30,16 +30,16 @@ const E = w((g) => {
|
|
30
30
|
$width: "100%",
|
31
31
|
$background: B.length ? "WHITE_1" : `${n}_1`,
|
32
32
|
children: [
|
33
|
-
/* @__PURE__ */ s("div", { ref:
|
34
|
-
const { block_type: N, block_id:
|
33
|
+
/* @__PURE__ */ s("div", { ref: g, children: u.map((o, e) => {
|
34
|
+
const { block_type: N, block_id: A, permissions: G } = o;
|
35
35
|
let f = 0;
|
36
|
-
const
|
37
|
-
return N === "GOAL" && (
|
36
|
+
const S = e === u.length - 1;
|
37
|
+
return N === "GOAL" && (G.can_un_skip || (a += 1), f = a), /* @__PURE__ */ s(
|
38
38
|
h,
|
39
39
|
{
|
40
40
|
blockData: o,
|
41
41
|
userType: l,
|
42
|
-
isLastBlock:
|
42
|
+
isLastBlock: S,
|
43
43
|
lessonIdx: f,
|
44
44
|
imageHue: n,
|
45
45
|
isGoalBlock: !0,
|
@@ -51,7 +51,7 @@ const E = w((g) => {
|
|
51
51
|
onNodeView: k,
|
52
52
|
onBlockSkipUnskip: m
|
53
53
|
},
|
54
|
-
|
54
|
+
A
|
55
55
|
);
|
56
56
|
}) }),
|
57
57
|
B.map((o) => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"block-sections.js","sources":["../../../../../src/features/chapters-v2/chapter-details/block-sections/block-sections.tsx"],"sourcesContent":["import type { IBlockSectionsProps } from './block-sections-types';\nimport type { FC } from 'react';\n\nimport { memo, useMemo } from 'react';\n\nimport BlockSectionView from './block-section-view';\nimport * as Styled from './block-sections-styled';\n\nconst BlockSections: FC<IBlockSectionsProps> = memo(props => {\n const {\n blocks,\n imageHue,\n userType,\n coreBlocksRef,\n onNodeAttempt,\n onNodeAttemptLocationChange,\n onNodeMarkAsDone,\n onNodeReattempt,\n onNodeReview,\n onNodeView,\n onBlockSkipUnskip,\n } = props;\n\n let lessonCount = 0;\n\n const { goalBlocks, nonGoalBlocks } = useMemo(\n () =>\n blocks.reduce(\n (acc, block) => {\n if (block.section_code === 'GOALS' || block.section_code === 'READINESS') {\n acc.goalBlocks.push(block);\n } else {\n acc.nonGoalBlocks.push(block);\n }\n\n return acc;\n },\n { goalBlocks: [] as typeof blocks, nonGoalBlocks: [] as typeof blocks },\n ),\n [blocks],\n );\n\n return (\n <Styled.ChapterDetailsWrapper\n $width=\"100%\"\n $background={!nonGoalBlocks.length ? `${imageHue}_1` : 'WHITE_1'}\n >\n <div ref={coreBlocksRef}>\n {goalBlocks.map((blockData, idx) => {\n const { block_type: blockType, block_id: blockId,
|
1
|
+
{"version":3,"file":"block-sections.js","sources":["../../../../../src/features/chapters-v2/chapter-details/block-sections/block-sections.tsx"],"sourcesContent":["import type { IBlockSectionsProps } from './block-sections-types';\nimport type { FC } from 'react';\n\nimport { memo, useMemo } from 'react';\n\nimport BlockSectionView from './block-section-view';\nimport * as Styled from './block-sections-styled';\n\nconst BlockSections: FC<IBlockSectionsProps> = memo(props => {\n const {\n blocks,\n imageHue,\n userType,\n coreBlocksRef,\n onNodeAttempt,\n onNodeAttemptLocationChange,\n onNodeMarkAsDone,\n onNodeReattempt,\n onNodeReview,\n onNodeView,\n onBlockSkipUnskip,\n } = props;\n\n let lessonCount = 0;\n\n const { goalBlocks, nonGoalBlocks } = useMemo(\n () =>\n blocks.reduce(\n (acc, block) => {\n if (block.section_code === 'GOALS' || block.section_code === 'READINESS') {\n acc.goalBlocks.push(block);\n } else {\n acc.nonGoalBlocks.push(block);\n }\n\n return acc;\n },\n { goalBlocks: [] as typeof blocks, nonGoalBlocks: [] as typeof blocks },\n ),\n [blocks],\n );\n\n return (\n <Styled.ChapterDetailsWrapper\n $width=\"100%\"\n $background={!nonGoalBlocks.length ? `${imageHue}_1` : 'WHITE_1'}\n >\n <div ref={coreBlocksRef}>\n {goalBlocks.map((blockData, idx) => {\n const { block_type: blockType, block_id: blockId, permissions } = blockData;\n let lessonIdx = 0;\n\n const isLastBlock = idx === goalBlocks.length - 1;\n\n if (blockType === 'GOAL') {\n if (!permissions.can_un_skip) {\n lessonCount += 1;\n }\n\n lessonIdx = lessonCount;\n }\n\n return (\n <BlockSectionView\n blockData={blockData}\n userType={userType}\n isLastBlock={isLastBlock}\n key={blockId}\n lessonIdx={lessonIdx}\n imageHue={imageHue}\n isGoalBlock\n onNodeAttempt={onNodeAttempt}\n onNodeAttemptLocationChange={onNodeAttemptLocationChange}\n onNodeMarkAsDone={onNodeMarkAsDone}\n onNodeReattempt={onNodeReattempt}\n onNodeReview={onNodeReview}\n onNodeView={onNodeView}\n onBlockSkipUnskip={onBlockSkipUnskip}\n />\n );\n })}\n </div>\n\n {nonGoalBlocks.map(blockData => {\n const { block_id: blockId } = blockData;\n\n return (\n <BlockSectionView\n key={blockId}\n blockData={blockData}\n userType={userType}\n imageHue={imageHue}\n onNodeAttempt={onNodeAttempt}\n onNodeAttemptLocationChange={onNodeAttemptLocationChange}\n onNodeMarkAsDone={onNodeMarkAsDone}\n onNodeReattempt={onNodeReattempt}\n onNodeReview={onNodeReview}\n onNodeView={onNodeView}\n onBlockSkipUnskip={onBlockSkipUnskip}\n />\n );\n })}\n </Styled.ChapterDetailsWrapper>\n );\n});\n\nexport default BlockSections;\n"],"names":["BlockSections","memo","props","blocks","imageHue","userType","coreBlocksRef","onNodeAttempt","onNodeAttemptLocationChange","onNodeMarkAsDone","onNodeReattempt","onNodeReview","onNodeView","onBlockSkipUnskip","lessonCount","goalBlocks","nonGoalBlocks","useMemo","acc","block","jsxs","Styled.ChapterDetailsWrapper","jsx","blockData","idx","blockType","blockId","permissions","lessonIdx","isLastBlock","BlockSectionView"],"mappings":";;;;AAQM,MAAAA,IAAyCC,EAAK,CAASC,MAAA;AACrD,QAAA;AAAA,IACJ,QAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,eAAAC;AAAA,IACA,eAAAC;AAAA,IACA,6BAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,YAAAC;AAAA,IACA,mBAAAC;AAAA,EACE,IAAAX;AAEJ,MAAIY,IAAc;AAEZ,QAAA,EAAE,YAAAC,GAAY,eAAAC,EAAA,IAAkBC;AAAA,IACpC,MACEd,EAAO;AAAA,MACL,CAACe,GAAKC,OACAA,EAAM,iBAAiB,WAAWA,EAAM,iBAAiB,cACvDD,EAAA,WAAW,KAAKC,CAAK,IAErBD,EAAA,cAAc,KAAKC,CAAK,GAGvBD;AAAA,MAET,EAAE,YAAY,CAAA,GAAqB,eAAe,GAAoB;AAAA,IACxE;AAAA,IACF,CAACf,CAAM;AAAA,EAAA;AAIP,SAAA,gBAAAiB;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,QAAO;AAAA,MACP,aAAcL,EAAc,SAA2B,YAAlB,GAAGZ,CAAQ;AAAA,MAEhD,UAAA;AAAA,QAAA,gBAAAkB,EAAC,SAAI,KAAKhB,GACP,YAAW,IAAI,CAACiB,GAAWC,MAAQ;AAClC,gBAAM,EAAE,YAAYC,GAAW,UAAUC,GAAS,aAAAC,EAAgB,IAAAJ;AAClE,cAAIK,IAAY;AAEV,gBAAAC,IAAcL,MAAQT,EAAW,SAAS;AAEhD,iBAAIU,MAAc,WACXE,EAAY,gBACAb,KAAA,IAGLc,IAAAd,IAIZ,gBAAAQ;AAAA,YAACQ;AAAA,YAAA;AAAA,cACC,WAAAP;AAAA,cACA,UAAAlB;AAAA,cACA,aAAAwB;AAAA,cAEA,WAAAD;AAAA,cACA,UAAAxB;AAAA,cACA,aAAW;AAAA,cACX,eAAAG;AAAA,cACA,6BAAAC;AAAA,cACA,kBAAAC;AAAA,cACA,iBAAAC;AAAA,cACA,cAAAC;AAAA,cACA,YAAAC;AAAA,cACA,mBAAAC;AAAA,YAAA;AAAA,YAVKa;AAAA,UAAA;AAAA,QAaV,CAAA,GACH;AAAA,QAECV,EAAc,IAAI,CAAaO,MAAA;AACxB,gBAAA,EAAE,UAAUG,EAAY,IAAAH;AAG5B,iBAAA,gBAAAD;AAAA,YAACQ;AAAA,YAAA;AAAA,cAEC,WAAAP;AAAA,cACA,UAAAlB;AAAA,cACA,UAAAD;AAAA,cACA,eAAAG;AAAA,cACA,6BAAAC;AAAA,cACA,kBAAAC;AAAA,cACA,iBAAAC;AAAA,cACA,cAAAC;AAAA,cACA,YAAAC;AAAA,cACA,mBAAAC;AAAA,YAAA;AAAA,YAVKa;AAAA,UAAA;AAAA,QAWP,CAEH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;"}
|
@@ -1,22 +1,29 @@
|
|
1
1
|
import { ILLUSTRATIONS as e } from "../../../assets/illustrations/illustrations.js";
|
2
|
-
const
|
3
|
-
if (!
|
4
|
-
const { mandatory:
|
5
|
-
return
|
6
|
-
},
|
7
|
-
switch (
|
2
|
+
const s = (E) => {
|
3
|
+
if (!E) return 0;
|
4
|
+
const { mandatory: r } = E, { completed: c, total: t } = r;
|
5
|
+
return t === 0 ? 0 : Math.floor(c / t * 100);
|
6
|
+
}, _ = (E) => {
|
7
|
+
switch (E) {
|
8
8
|
case "LEARNING":
|
9
|
+
case "LEVEL2":
|
10
|
+
case "LEVEL3":
|
9
11
|
return e.NODE_LEARN_BG;
|
10
12
|
case "RECAP":
|
13
|
+
case "REMEDIAL":
|
14
|
+
case "REVISION":
|
11
15
|
return e.NODE_RECAP_BG;
|
12
|
-
case "ASSESSMENT":
|
13
16
|
case "DYNAMIC":
|
17
|
+
case "ASSESSMENT":
|
18
|
+
case "CHAPTER_ASSESSMENT":
|
19
|
+
case "DIAGNOSTIC":
|
14
20
|
return e.NODE_CUSTOM_TEST_BG;
|
15
21
|
case "PRACTICE":
|
16
22
|
case "EXTRA_PRACTICE":
|
17
23
|
case "TARGET_PRACTICE":
|
18
24
|
case "MASTERY":
|
19
25
|
return e.NODE_PRACTICE_BG;
|
26
|
+
case "PUZZLE":
|
20
27
|
case "PUZZLE_EASY":
|
21
28
|
case "PUZZLE_MEDIUM":
|
22
29
|
case "PUZZLE_HARD":
|
@@ -26,13 +33,13 @@ const _ = (t) => {
|
|
26
33
|
default:
|
27
34
|
return e.NODE_CUSTOM_TEST_BG;
|
28
35
|
}
|
29
|
-
}, T = (
|
30
|
-
if (!(
|
31
|
-
return
|
36
|
+
}, T = (E, r, c, t) => {
|
37
|
+
if (!(E || !t))
|
38
|
+
return c ? `${t}` : `(${r})`;
|
32
39
|
};
|
33
40
|
export {
|
34
|
-
|
35
|
-
|
41
|
+
s as getChapterCompletionPercentage,
|
42
|
+
_ as getNodeTypeBasedBgImage,
|
36
43
|
T as getSheetNLessonCount
|
37
44
|
};
|
38
45
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/features/chapters-v2/utils/index.ts"],"sourcesContent":["import type { IChapterProgressStats } from '../chapter-details/chapter-details-types';\nimport type { INodeDataProps } from '../comps/node-card/node-card-types';\n\nimport { ILLUSTRATIONS } from '../../../assets/illustrations/illustrations';\n\n// This function calculates the completion percentage of a chapter based on progress stats.\n// If no progress stats are provided, it returns 0.\n// It uses the `mandatory` field from the progress stats to determine the completed and total items.\n// It returns an integer representing the percentage of completion, rounded down to the nearest whole number.\nconst getChapterCompletionPercentage = (progressStats: IChapterProgressStats | null) => {\n if (!progressStats) return 0;\n\n const { mandatory } = progressStats;\n const { completed, total } = mandatory;\n\n if (total === 0) {\n return 0;\n }\n\n const percentage = Math.floor((completed / total) * 100);\n\n return percentage;\n};\n\nconst getNodeTypeBasedBgImage = (nodeType: INodeDataProps['node_type']) => {\n switch (nodeType) {\n case 'LEARNING':\n return ILLUSTRATIONS.NODE_LEARN_BG;\n case 'RECAP':\n return ILLUSTRATIONS.NODE_RECAP_BG;\n\n case 'ASSESSMENT':\n case '
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/features/chapters-v2/utils/index.ts"],"sourcesContent":["import type { IChapterProgressStats } from '../chapter-details/chapter-details-types';\nimport type { INodeDataProps } from '../comps/node-card/node-card-types';\n\nimport { ILLUSTRATIONS } from '../../../assets/illustrations/illustrations';\n\n// This function calculates the completion percentage of a chapter based on progress stats.\n// If no progress stats are provided, it returns 0.\n// It uses the `mandatory` field from the progress stats to determine the completed and total items.\n// It returns an integer representing the percentage of completion, rounded down to the nearest whole number.\nconst getChapterCompletionPercentage = (progressStats: IChapterProgressStats | null) => {\n if (!progressStats) return 0;\n\n const { mandatory } = progressStats;\n const { completed, total } = mandatory;\n\n if (total === 0) {\n return 0;\n }\n\n const percentage = Math.floor((completed / total) * 100);\n\n return percentage;\n};\n\nconst getNodeTypeBasedBgImage = (nodeType: INodeDataProps['node_type']) => {\n switch (nodeType) {\n case 'LEARNING':\n case 'LEVEL2':\n case 'LEVEL3':\n return ILLUSTRATIONS.NODE_LEARN_BG;\n case 'RECAP':\n case 'REMEDIAL':\n case 'REVISION':\n return ILLUSTRATIONS.NODE_RECAP_BG;\n\n case 'DYNAMIC':\n case 'ASSESSMENT':\n case 'CHAPTER_ASSESSMENT':\n case 'DIAGNOSTIC':\n return ILLUSTRATIONS.NODE_CUSTOM_TEST_BG;\n\n case 'PRACTICE':\n case 'EXTRA_PRACTICE':\n case 'TARGET_PRACTICE':\n case 'MASTERY':\n return ILLUSTRATIONS.NODE_PRACTICE_BG;\n\n case 'PUZZLE':\n case 'PUZZLE_EASY':\n case 'PUZZLE_MEDIUM':\n case 'PUZZLE_HARD':\n return ILLUSTRATIONS.NODE_PUZZLE_BG;\n\n case 'VIDEO':\n return ILLUSTRATIONS.NODE_VIDEO_BG;\n\n default:\n return ILLUSTRATIONS.NODE_CUSTOM_TEST_BG;\n }\n};\n\nconst getSheetNLessonCount = (\n isSkipped: boolean,\n sheetsLength: number,\n isGoalBlock?: boolean,\n lessonIdx?: number,\n) => {\n if (isSkipped || !lessonIdx) return undefined;\n\n if (!isGoalBlock) return `(${sheetsLength})`;\n\n return `${lessonIdx}`;\n};\n\nexport { getChapterCompletionPercentage, getNodeTypeBasedBgImage, getSheetNLessonCount };\n"],"names":["getChapterCompletionPercentage","progressStats","mandatory","completed","total","getNodeTypeBasedBgImage","nodeType","ILLUSTRATIONS","getSheetNLessonCount","isSkipped","sheetsLength","isGoalBlock","lessonIdx"],"mappings":";AASM,MAAAA,IAAiC,CAACC,MAAgD;AAClF,MAAA,CAACA,EAAsB,QAAA;AAErB,QAAA,EAAE,WAAAC,EAAc,IAAAD,GAChB,EAAE,WAAAE,GAAW,OAAAC,EAAU,IAAAF;AAE7B,SAAIE,MAAU,IACL,IAGU,KAAK,MAAOD,IAAYC,IAAS,GAAG;AAGzD,GAEMC,IAA0B,CAACC,MAA0C;AACzE,UAAQA,GAAU;AAAA,IAChB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAOC,EAAc;AAAA,IACvB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAOA,EAAc;AAAA,IAEvB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAOA,EAAc;AAAA,IAEvB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAOA,EAAc;AAAA,IAEvB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAOA,EAAc;AAAA,IAEvB,KAAK;AACH,aAAOA,EAAc;AAAA,IAEvB;AACE,aAAOA,EAAc;AAAA,EACzB;AACF,GAEMC,IAAuB,CAC3BC,GACAC,GACAC,GACAC,MACG;AACC,MAAA,EAAAH,KAAa,CAACG;AAElB,WAAKD,IAEE,GAAGC,CAAS,KAFM,IAAIF,CAAY;AAG3C;"}
|
@@ -1,29 +1,22 @@
|
|
1
|
-
import { jsx as e, jsxs as
|
2
|
-
import
|
3
|
-
import
|
4
|
-
import
|
5
|
-
import u from "../../../assets/line-icons/icons/
|
6
|
-
import
|
7
|
-
import
|
8
|
-
import h from "../../../assets/line-icons/icons/play2.js";
|
9
|
-
import $ from "../../../assets/line-icons/icons/puzzle.js";
|
10
|
-
import g from "../../../assets/line-icons/icons/recap.js";
|
11
|
-
import D from "../../../assets/line-icons/icons/status.js";
|
12
|
-
import C from "../../../assets/line-icons/icons/testtube.js";
|
13
|
-
import { LOTTIE as t } from "../../../assets/lottie/lottie.js";
|
14
|
-
import S from "../../ui/layout/flex-view.js";
|
1
|
+
import { jsx as e, jsxs as m } from "react/jsx-runtime";
|
2
|
+
import p from "../../../assets/line-icons/icons/check2.js";
|
3
|
+
import T from "../../../assets/line-icons/icons/exclamation.js";
|
4
|
+
import f from "../../../assets/line-icons/icons/lock2.js";
|
5
|
+
import u from "../../../assets/line-icons/icons/status.js";
|
6
|
+
import { LOTTIE as o } from "../../../assets/lottie/lottie.js";
|
7
|
+
import R from "../../ui/layout/flex-view.js";
|
15
8
|
import a from "../../ui/arrow-tooltip/arrow-tooltip.js";
|
16
9
|
import d from "../../ui/text/text.js";
|
17
10
|
import { InProgressIconWrapper as l } from "../comps/node-card/node-card-styled.js";
|
18
|
-
import
|
19
|
-
const
|
20
|
-
if (!
|
11
|
+
import I from "../comps/tag/tag.js";
|
12
|
+
const A = 60 * 60 * 24, h = ["NOT_STARTED", "IN_PROGRESS"], $ = (t) => {
|
13
|
+
if (!t)
|
21
14
|
return { isOverdue: !1, daysText: "", differenceInDays: 0 };
|
22
|
-
const i = Math.floor(Date.now() / 1e3), c =
|
15
|
+
const i = Math.floor(Date.now() / 1e3), c = t - i, n = Math.ceil(c / A), s = n < 0, r = n > 0 ? `${Math.abs(n)}D` : "";
|
23
16
|
return { isOverdue: s, daysText: r, differenceInDays: n };
|
24
|
-
},
|
25
|
-
const { isOverdue: s, daysText: r, differenceInDays:
|
26
|
-
if (s &&
|
17
|
+
}, y = (t, i, c, n) => {
|
18
|
+
const { isOverdue: s, daysText: r, differenceInDays: E } = $(n);
|
19
|
+
if (s && h.includes(t))
|
27
20
|
return {
|
28
21
|
icon: /* @__PURE__ */ e(
|
29
22
|
a,
|
@@ -34,13 +27,13 @@ const P = 60 * 60 * 24, b = ["NOT_STARTED", "IN_PROGRESS"], O = (o) => {
|
|
34
27
|
zIndex: 10,
|
35
28
|
hidden: !i,
|
36
29
|
parentWidth: "fit-content",
|
37
|
-
children: /* @__PURE__ */ e(
|
30
|
+
children: /* @__PURE__ */ e(R, { $background: "RED", $borderRadius: 16, $gapX: 0.24, $gutterX: 0.5, children: /* @__PURE__ */ e(d, { $renderAs: "ac4-black", $color: "WHITE", children: "OVERDUE" }) })
|
38
31
|
}
|
39
32
|
),
|
40
33
|
top: -10,
|
41
34
|
right: -10
|
42
35
|
};
|
43
|
-
switch (
|
36
|
+
switch (t) {
|
44
37
|
case "NOT_STARTED":
|
45
38
|
return {
|
46
39
|
icon: /* @__PURE__ */ e(
|
@@ -48,7 +41,7 @@ const P = 60 * 60 * 24, b = ["NOT_STARTED", "IN_PROGRESS"], O = (o) => {
|
|
48
41
|
{
|
49
42
|
renderAs: "primary",
|
50
43
|
position: "bottom",
|
51
|
-
tooltipItem:
|
44
|
+
tooltipItem: E > 1 ? `${E} days left` : "Complete it today",
|
52
45
|
zIndex: 10,
|
53
46
|
hidden: !i,
|
54
47
|
children: /* @__PURE__ */ e(
|
@@ -70,13 +63,13 @@ const P = 60 * 60 * 24, b = ["NOT_STARTED", "IN_PROGRESS"], O = (o) => {
|
|
70
63
|
};
|
71
64
|
case "LOCKED":
|
72
65
|
return {
|
73
|
-
icon: /* @__PURE__ */ e(
|
66
|
+
icon: /* @__PURE__ */ e(f, { width: 32, height: 32 }),
|
74
67
|
top: -12,
|
75
68
|
right: -12
|
76
69
|
};
|
77
70
|
case "IN_PROGRESS":
|
78
71
|
return {
|
79
|
-
icon: /* @__PURE__ */
|
72
|
+
icon: /* @__PURE__ */ m(
|
80
73
|
l,
|
81
74
|
{
|
82
75
|
$flexDirection: "row",
|
@@ -87,7 +80,7 @@ const P = 60 * 60 * 24, b = ["NOT_STARTED", "IN_PROGRESS"], O = (o) => {
|
|
87
80
|
$paddingLeft: r ? 6 : 0,
|
88
81
|
children: [
|
89
82
|
r && /* @__PURE__ */ e(d, { $renderAs: "ub3-bold", $color: "WHITE", children: r }),
|
90
|
-
/* @__PURE__ */ e(
|
83
|
+
/* @__PURE__ */ e(u, {})
|
91
84
|
]
|
92
85
|
}
|
93
86
|
)
|
@@ -95,9 +88,9 @@ const P = 60 * 60 * 24, b = ["NOT_STARTED", "IN_PROGRESS"], O = (o) => {
|
|
95
88
|
case "COMPLETED":
|
96
89
|
return {
|
97
90
|
icon: /* @__PURE__ */ e(
|
98
|
-
|
91
|
+
I,
|
99
92
|
{
|
100
|
-
Icon:
|
93
|
+
Icon: p,
|
101
94
|
label: typeof c == "number" ? `${c}%` : void 0
|
102
95
|
}
|
103
96
|
),
|
@@ -113,7 +106,7 @@ const P = 60 * 60 * 24, b = ["NOT_STARTED", "IN_PROGRESS"], O = (o) => {
|
|
113
106
|
position: "bottom",
|
114
107
|
tooltipItem: i ? "Waiting for teacher to review" : "Needs your review",
|
115
108
|
zIndex: 10,
|
116
|
-
children: /* @__PURE__ */ e(
|
109
|
+
children: /* @__PURE__ */ e(I, { Icon: T })
|
117
110
|
}
|
118
111
|
),
|
119
112
|
top: -10,
|
@@ -124,54 +117,53 @@ const P = 60 * 60 * 24, b = ["NOT_STARTED", "IN_PROGRESS"], O = (o) => {
|
|
124
117
|
icon: void 0
|
125
118
|
};
|
126
119
|
}
|
127
|
-
},
|
128
|
-
switch (
|
120
|
+
}, w = (t) => {
|
121
|
+
switch (t) {
|
129
122
|
case "LEARNING":
|
123
|
+
case "LEVEL2":
|
124
|
+
case "LEVEL3":
|
130
125
|
return {
|
131
|
-
lottie:
|
132
|
-
icon: f
|
126
|
+
lottie: o.LEARN
|
133
127
|
};
|
134
128
|
case "RECAP":
|
129
|
+
case "REMEDIAL":
|
130
|
+
case "REVISION":
|
135
131
|
return {
|
136
|
-
lottie:
|
137
|
-
icon: g
|
132
|
+
lottie: o.RECAP
|
138
133
|
};
|
139
134
|
case "DYNAMIC":
|
140
135
|
case "ASSESSMENT":
|
141
136
|
case "CHAPTER_ASSESSMENT":
|
137
|
+
case "DIAGNOSTIC":
|
142
138
|
return {
|
143
|
-
lottie:
|
144
|
-
icon: I
|
139
|
+
lottie: o.TEST
|
145
140
|
};
|
146
141
|
case "PRACTICE":
|
147
142
|
case "EXTRA_PRACTICE":
|
148
143
|
case "TARGET_PRACTICE":
|
149
144
|
case "MASTERY":
|
150
145
|
return {
|
151
|
-
lottie:
|
152
|
-
icon: u
|
146
|
+
lottie: o.PRACTICE
|
153
147
|
};
|
148
|
+
case "PUZZLE":
|
154
149
|
case "PUZZLE_EASY":
|
155
150
|
case "PUZZLE_MEDIUM":
|
156
151
|
case "PUZZLE_HARD":
|
157
152
|
return {
|
158
|
-
lottie:
|
159
|
-
icon: $
|
153
|
+
lottie: o.PUZZLE
|
160
154
|
};
|
161
155
|
case "VIDEO":
|
162
156
|
return {
|
163
|
-
lottie:
|
164
|
-
icon: h
|
157
|
+
lottie: o.VIDEO
|
165
158
|
};
|
166
159
|
default:
|
167
160
|
return {
|
168
|
-
lottie:
|
169
|
-
icon: C
|
161
|
+
lottie: o.PROJECT
|
170
162
|
};
|
171
163
|
}
|
172
164
|
};
|
173
165
|
export {
|
174
|
-
|
175
|
-
|
166
|
+
w as getNodeCardBasedIcon,
|
167
|
+
y as getNodeStateBasedTagInfo
|
176
168
|
};
|
177
169
|
//# sourceMappingURL=node-card-utils.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"node-card-utils.js","sources":["../../../../src/features/chapters-v2/utils/node-card-utils.tsx"],"sourcesContent":["import type { INodeDataProps } from '../comps/node-card/node-card-types';\n\nimport
|
1
|
+
{"version":3,"file":"node-card-utils.js","sources":["../../../../src/features/chapters-v2/utils/node-card-utils.tsx"],"sourcesContent":["import type { INodeDataProps } from '../comps/node-card/node-card-types';\n\nimport Check2Icon from '../../../assets/line-icons/icons/check2';\nimport ExclamationIcon from '../../../assets/line-icons/icons/exclamation';\nimport Lock2Icon from '../../../assets/line-icons/icons/lock2';\nimport StatusIcon from '../../../assets/line-icons/icons/status';\nimport { LOTTIE } from '../../../assets/lottie/lottie';\nimport FlexView from '../..//ui/layout/flex-view';\nimport ArrowTooltip from '../../ui/arrow-tooltip/arrow-tooltip';\nimport Text from '../../ui/text/text';\nimport { InProgressIconWrapper } from '../comps/node-card/node-card-styled';\nimport Tag from '../comps/tag/tag';\n\ninterface DueDateInfo {\n isOverdue: boolean;\n daysText: string;\n differenceInDays: number;\n}\n\nconst SECONDS_PER_DAY = 60 * 60 * 24;\nconst OVERDUE_TAG_STATES: INodeDataProps['state'][] = ['NOT_STARTED', 'IN_PROGRESS'];\n\nconst calculateDueDateInfo = (dueDateTs?: number | null): DueDateInfo => {\n if (!dueDateTs) {\n return { isOverdue: false, daysText: '', differenceInDays: 0 };\n }\n\n const currentTimestamp = Math.floor(Date.now() / 1000);\n const differenceInSeconds = dueDateTs - currentTimestamp;\n const differenceInDays = Math.ceil(differenceInSeconds / SECONDS_PER_DAY);\n\n const isOverdue = differenceInDays < 0;\n\n const daysText = differenceInDays > 0 ? `${Math.abs(differenceInDays)}D` : '';\n\n return { isOverdue, daysText, differenceInDays };\n};\n\nconst getNodeStateBasedTagInfo = (\n nodeState: INodeDataProps['state'],\n isStudent: boolean,\n accuracy?: number | null,\n dueDateTs?: number | null,\n) => {\n const { isOverdue, daysText, differenceInDays } = calculateDueDateInfo(dueDateTs);\n\n if (isOverdue && OVERDUE_TAG_STATES.includes(nodeState)) {\n return {\n icon: (\n <ArrowTooltip\n renderAs=\"primary\"\n position=\"bottom\"\n tooltipItem=\"Complete now\"\n zIndex={10}\n hidden={!isStudent}\n parentWidth=\"fit-content\"\n >\n <FlexView $background=\"RED\" $borderRadius={16} $gapX={0.24} $gutterX={0.5}>\n <Text $renderAs=\"ac4-black\" $color=\"WHITE\">\n OVERDUE\n </Text>\n </FlexView>\n </ArrowTooltip>\n ),\n top: -10,\n right: -10,\n };\n }\n\n switch (nodeState) {\n case 'NOT_STARTED':\n return {\n icon: (\n <ArrowTooltip\n renderAs=\"primary\"\n position=\"bottom\"\n tooltipItem={\n differenceInDays > 1 ? `${differenceInDays} days left` : 'Complete it today'\n }\n zIndex={10}\n hidden={!isStudent}\n >\n <InProgressIconWrapper\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $justifyContent=\"center\"\n $borderRadius={16}\n $paddingRight={6}\n $paddingLeft={6}\n >\n {daysText && (\n <Text $renderAs=\"ub3-bold\" $color=\"WHITE\">\n {daysText}\n </Text>\n )}\n </InProgressIconWrapper>\n </ArrowTooltip>\n ),\n top: 0,\n right: 0,\n };\n case 'LOCKED':\n return {\n icon: <Lock2Icon width={32} height={32} />,\n top: -12,\n right: -12,\n };\n case 'IN_PROGRESS':\n return {\n icon: (\n <InProgressIconWrapper\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $justifyContent=\"center\"\n $borderRadius={16}\n $paddingRight={0}\n $paddingLeft={daysText ? 6 : 0}\n >\n {daysText && (\n <Text $renderAs=\"ub3-bold\" $color=\"WHITE\">\n {daysText}\n </Text>\n )}\n <StatusIcon />\n </InProgressIconWrapper>\n ),\n };\n case 'COMPLETED':\n return {\n icon: (\n <Tag\n Icon={Check2Icon}\n label={typeof accuracy === 'number' ? `${accuracy}%` : undefined}\n />\n ),\n top: -10,\n right: -10,\n };\n case 'WAIT_FOR_REVIEW':\n return {\n icon: (\n <ArrowTooltip\n renderAs=\"primary\"\n position=\"bottom\"\n tooltipItem={isStudent ? 'Waiting for teacher to review' : 'Needs your review'}\n zIndex={10}\n >\n <Tag Icon={ExclamationIcon} />\n </ArrowTooltip>\n ),\n top: -10,\n right: -10,\n };\n\n default:\n return {\n icon: undefined,\n };\n }\n};\n\nconst getNodeCardBasedIcon = (nodeType: INodeDataProps['node_type']) => {\n switch (nodeType) {\n case 'LEARNING':\n case 'LEVEL2':\n case 'LEVEL3':\n return {\n lottie: LOTTIE.LEARN,\n };\n case 'RECAP':\n case 'REMEDIAL':\n case 'REVISION':\n return {\n lottie: LOTTIE.RECAP,\n };\n case 'DYNAMIC':\n case 'ASSESSMENT':\n case 'CHAPTER_ASSESSMENT':\n case 'DIAGNOSTIC':\n return {\n lottie: LOTTIE.TEST,\n };\n case 'PRACTICE':\n case 'EXTRA_PRACTICE':\n case 'TARGET_PRACTICE':\n case 'MASTERY':\n return {\n lottie: LOTTIE.PRACTICE,\n };\n case 'PUZZLE':\n case 'PUZZLE_EASY':\n case 'PUZZLE_MEDIUM':\n case 'PUZZLE_HARD':\n return {\n lottie: LOTTIE.PUZZLE,\n };\n case 'VIDEO':\n return {\n lottie: LOTTIE.VIDEO,\n };\n default:\n return {\n lottie: LOTTIE.PROJECT,\n };\n }\n};\n\nexport { getNodeStateBasedTagInfo, getNodeCardBasedIcon };\n"],"names":["SECONDS_PER_DAY","OVERDUE_TAG_STATES","calculateDueDateInfo","dueDateTs","currentTimestamp","differenceInSeconds","differenceInDays","isOverdue","daysText","getNodeStateBasedTagInfo","nodeState","isStudent","accuracy","jsx","ArrowTooltip","FlexView","Text","InProgressIconWrapper","Lock2Icon","jsxs","StatusIcon","Tag","Check2Icon","ExclamationIcon","getNodeCardBasedIcon","nodeType","LOTTIE"],"mappings":"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"}
|
@@ -0,0 +1,157 @@
|
|
1
|
+
import { jsxs as c, jsx as n } from "react/jsx-runtime";
|
2
|
+
import { memo as V, useState as p, useRef as G, useMemo as M, useCallback as l, useEffect as a } from "react";
|
3
|
+
import Q from "../../../assets/line-icons/icons/chevron-left.js";
|
4
|
+
import X from "../../../assets/line-icons/icons/chevron-right.js";
|
5
|
+
import d from "../../ui/layout/flex-view.js";
|
6
|
+
import $ from "../../ui/text/text.js";
|
7
|
+
import F from "../homework-card.js";
|
8
|
+
import { ContentWrapper as O, ScrollButton as g, ScrollContainer as P, QueueWrapper as Y, QueueText as q } from "./hw-card-list-styled.js";
|
9
|
+
const z = ({
|
10
|
+
userType: h,
|
11
|
+
studentId: v,
|
12
|
+
isHwProcessing: C,
|
13
|
+
hwDetails: e,
|
14
|
+
onTestStart: L,
|
15
|
+
onNodeAttempt: _,
|
16
|
+
onTestPreview: b,
|
17
|
+
onNodeView: k,
|
18
|
+
onTestReview: x,
|
19
|
+
onNodeReview: A,
|
20
|
+
onNodeUnassign: H
|
21
|
+
}) => {
|
22
|
+
const [I, u] = p(!1), [R, m] = p(!1), o = G(null), E = M(
|
23
|
+
() => ((e == null ? void 0 : e.filter((r) => r.state === "WAIT_FOR_REVIEW")) || []).length,
|
24
|
+
[e]
|
25
|
+
), t = l(() => {
|
26
|
+
if (o.current) {
|
27
|
+
const { scrollLeft: r, scrollWidth: i, clientWidth: s } = o.current;
|
28
|
+
r > 1 && u(!0), r < i - s - 1 && m(!0);
|
29
|
+
}
|
30
|
+
}, []), T = l(() => {
|
31
|
+
o.current && t();
|
32
|
+
}, [t]), y = l(() => {
|
33
|
+
u(!1), m(!1);
|
34
|
+
}, []), B = l(() => {
|
35
|
+
o.current && (o.current.scrollBy({ left: -200, behavior: "smooth" }), t());
|
36
|
+
}, [t]), S = l(() => {
|
37
|
+
o.current && (o.current.scrollBy({ left: 200, behavior: "smooth" }), t());
|
38
|
+
}, [t]);
|
39
|
+
return a(() => {
|
40
|
+
if (e && (e == null ? void 0 : e.length) > 3 && o.current) {
|
41
|
+
const { scrollLeft: r } = o.current;
|
42
|
+
r > 1 && u(!0);
|
43
|
+
}
|
44
|
+
}, [e]), a(() => {
|
45
|
+
const r = o.current;
|
46
|
+
if (r)
|
47
|
+
return r.addEventListener("scroll", t), () => {
|
48
|
+
r.removeEventListener("scroll", t);
|
49
|
+
};
|
50
|
+
}, [t]), e && e.length === 0 ? /* @__PURE__ */ c(d, { $flexRowGapX: 1, children: [
|
51
|
+
/* @__PURE__ */ c($, { $renderAs: "ac4-black", $color: "BLACK_T_60", children: [
|
52
|
+
"Homework (",
|
53
|
+
e == null ? void 0 : e.length,
|
54
|
+
")"
|
55
|
+
] }),
|
56
|
+
/* @__PURE__ */ n($, { $renderAs: "ab2", $color: "BLACK_T_60", children: "No Homework assigned yet" })
|
57
|
+
] }) : /* @__PURE__ */ c(O, { $flexRowGapX: 1, $disablePointerEvents: C, children: [
|
58
|
+
/* @__PURE__ */ c($, { $renderAs: "ac4-black", $color: "BLACK_T_60", children: [
|
59
|
+
"Homework (",
|
60
|
+
E,
|
61
|
+
"/",
|
62
|
+
e == null ? void 0 : e.length,
|
63
|
+
")"
|
64
|
+
] }),
|
65
|
+
/* @__PURE__ */ c(
|
66
|
+
d,
|
67
|
+
{
|
68
|
+
$position: "relative",
|
69
|
+
onMouseEnter: T,
|
70
|
+
onMouseLeave: y,
|
71
|
+
children: [
|
72
|
+
/* @__PURE__ */ n(
|
73
|
+
g,
|
74
|
+
{
|
75
|
+
$position: "absolute",
|
76
|
+
$background: "BLACK_T_60",
|
77
|
+
$justifyContent: "center",
|
78
|
+
$alignItems: "center",
|
79
|
+
$height: "100%",
|
80
|
+
onClick: B,
|
81
|
+
$visible: I,
|
82
|
+
left: "0px",
|
83
|
+
right: "auto",
|
84
|
+
children: /* @__PURE__ */ n(Q, { width: 24, height: 24 })
|
85
|
+
}
|
86
|
+
),
|
87
|
+
/* @__PURE__ */ n(P, { ref: o, children: /* @__PURE__ */ n(d, { $flexDirection: "row", $flexGapX: 1, children: e == null ? void 0 : e.map((r, i) => {
|
88
|
+
const {
|
89
|
+
node_id: s,
|
90
|
+
worksheet_id: W,
|
91
|
+
node_type: K,
|
92
|
+
title: j,
|
93
|
+
subtext: N
|
94
|
+
} = r, f = K === "DYNAMIC";
|
95
|
+
return /* @__PURE__ */ c(
|
96
|
+
d,
|
97
|
+
{
|
98
|
+
$flexDirection: "row",
|
99
|
+
$flexGapX: 1,
|
100
|
+
children: [
|
101
|
+
e.length > 10 && i === 10 && /* @__PURE__ */ n(
|
102
|
+
Y,
|
103
|
+
{
|
104
|
+
$background: "BLACK_4",
|
105
|
+
$justifyContent: "center",
|
106
|
+
$gutter: 4,
|
107
|
+
$gap: 8,
|
108
|
+
children: /* @__PURE__ */ n(q, { $renderAs: "ac3", $color: "WHITE", children: "In Queue" })
|
109
|
+
}
|
110
|
+
),
|
111
|
+
/* @__PURE__ */ n(
|
112
|
+
F,
|
113
|
+
{
|
114
|
+
isInQueue: e.length > 10 && i > 9,
|
115
|
+
userType: h,
|
116
|
+
header: j,
|
117
|
+
subHeader: N || "",
|
118
|
+
nodeData: r,
|
119
|
+
renderAs: "homework",
|
120
|
+
studentId: v,
|
121
|
+
onNodeAttempt: f ? L : _,
|
122
|
+
shouldOpenOnRight: !0,
|
123
|
+
onNodeView: f ? b : k,
|
124
|
+
onNodeReview: f ? x : A,
|
125
|
+
onNodeUnassign: H
|
126
|
+
}
|
127
|
+
)
|
128
|
+
]
|
129
|
+
},
|
130
|
+
`${W}_${s}_${i}`
|
131
|
+
);
|
132
|
+
}) }) }),
|
133
|
+
/* @__PURE__ */ n(
|
134
|
+
g,
|
135
|
+
{
|
136
|
+
$position: "absolute",
|
137
|
+
$width: "60px",
|
138
|
+
$height: "100%",
|
139
|
+
$background: "BLACK_T_60",
|
140
|
+
$justifyContent: "center",
|
141
|
+
$alignItems: "center",
|
142
|
+
onClick: S,
|
143
|
+
$visible: R,
|
144
|
+
left: "auto",
|
145
|
+
right: "0px",
|
146
|
+
children: /* @__PURE__ */ n(X, { width: 24, height: 24 })
|
147
|
+
}
|
148
|
+
)
|
149
|
+
]
|
150
|
+
}
|
151
|
+
)
|
152
|
+
] });
|
153
|
+
}, ne = V(z);
|
154
|
+
export {
|
155
|
+
ne as default
|
156
|
+
};
|
157
|
+
//# sourceMappingURL=hw-card-list-view.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"hw-card-list-view.js","sources":["../../../../src/features/homework/hw-card-list/hw-card-list-view.tsx"],"sourcesContent":["import type {\n INodeCardCallbacks,\n INodeDataProps,\n} from '../../chapters-v2/comps/node-card/node-card-types';\nimport type { TUserTypes } from '../../ui/types';\nimport type { FC } from 'react';\n\nimport { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport ChevronLeftIcon from '../../../assets/line-icons/icons/chevron-left';\nimport ChevronRightIcon from '../../../assets/line-icons/icons/chevron-right';\nimport FlexView from '../../ui/layout/flex-view';\nimport Text from '../../ui/text/text';\nimport HomeworkCard from '../homework-card';\nimport * as Styled from './hw-card-list-styled';\n\ninterface IHwCardListView extends INodeCardCallbacks {\n userType: TUserTypes;\n studentId: string;\n isHwProcessing: boolean;\n hwDetails?: INodeDataProps[];\n onTestPreview?: (sheetData: INodeDataProps, milestoneId?: string) => void;\n onTestStart?: (sheetData: INodeDataProps, homeworkId?: string) => void;\n onTestReview?: (sheetData: INodeDataProps, milestoneId?: string) => void;\n}\n\nconst HwCardListView: FC<IHwCardListView> = ({\n userType,\n studentId,\n isHwProcessing,\n hwDetails,\n onTestStart,\n onNodeAttempt,\n onTestPreview,\n onNodeView,\n onTestReview,\n onNodeReview,\n onNodeUnassign,\n}) => {\n const [isLeftHovered, setIsLeftHovered] = useState(false);\n const [isRightHovered, setIsRightHovered] = useState(false);\n const scrollRef = useRef<HTMLDivElement>(null);\n\n const waitForReviewSheets = useMemo(\n () => (hwDetails?.filter(sheet => sheet.state === 'WAIT_FOR_REVIEW') || []).length,\n [hwDetails],\n );\n\n const updatedCanScroll = useCallback(() => {\n if (scrollRef.current) {\n const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;\n\n if (scrollLeft > 1) {\n setIsLeftHovered(true);\n }\n\n if (scrollLeft < scrollWidth - clientWidth - 1) {\n setIsRightHovered(true);\n }\n }\n }, []);\n const handleHoverEnter = useCallback(() => {\n if (!scrollRef.current) return;\n\n updatedCanScroll();\n }, [updatedCanScroll]);\n\n const handleHoverLeave = useCallback(() => {\n setIsLeftHovered(false);\n setIsRightHovered(false);\n }, []);\n\n const handleScrollLeft = useCallback(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollBy({ left: -200, behavior: 'smooth' });\n updatedCanScroll();\n }\n }, [updatedCanScroll]);\n\n const handleScrollRight = useCallback(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollBy({ left: 200, behavior: 'smooth' });\n updatedCanScroll();\n }\n }, [updatedCanScroll]);\n\n useEffect(() => {\n if (hwDetails && hwDetails?.length > 3 && scrollRef.current) {\n const { scrollLeft } = scrollRef.current;\n\n if (scrollLeft > 1) {\n setIsLeftHovered(true);\n }\n }\n }, [hwDetails]);\n\n useEffect(() => {\n const scrollElement = scrollRef.current;\n\n if (scrollElement) {\n scrollElement.addEventListener('scroll', updatedCanScroll);\n\n return () => {\n scrollElement.removeEventListener('scroll', updatedCanScroll);\n };\n }\n }, [updatedCanScroll]);\n\n if (hwDetails && hwDetails.length === 0) {\n return (\n <FlexView $flexRowGapX={1}>\n <Text $renderAs=\"ac4-black\" $color=\"BLACK_T_60\">\n Homework ({hwDetails?.length})\n </Text>\n <Text $renderAs=\"ab2\" $color=\"BLACK_T_60\">\n No Homework assigned yet\n </Text>\n </FlexView>\n );\n }\n\n return (\n <Styled.ContentWrapper $flexRowGapX={1} $disablePointerEvents={isHwProcessing}>\n <Text $renderAs=\"ac4-black\" $color=\"BLACK_T_60\">\n Homework ({waitForReviewSheets}/{hwDetails?.length})\n </Text>\n <FlexView\n $position=\"relative\"\n onMouseEnter={handleHoverEnter}\n onMouseLeave={handleHoverLeave}\n >\n <Styled.ScrollButton\n $position=\"absolute\"\n $background=\"BLACK_T_60\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n $height=\"100%\"\n onClick={handleScrollLeft}\n $visible={isLeftHovered}\n left=\"0px\"\n right=\"auto\"\n >\n <ChevronLeftIcon width={24} height={24} />\n </Styled.ScrollButton>\n\n <Styled.ScrollContainer ref={scrollRef}>\n <FlexView $flexDirection=\"row\" $flexGapX={1}>\n {hwDetails?.map((sheet, idx) => {\n const {\n node_id: nodeId,\n worksheet_id: worksheetId,\n node_type: nodeType,\n title,\n subtext,\n } = sheet;\n const isDynamicSheet = nodeType === 'DYNAMIC';\n\n return (\n <FlexView\n key={`${worksheetId}_${nodeId}_${idx}`}\n $flexDirection=\"row\"\n $flexGapX={1}\n >\n {hwDetails.length > 10 && idx === 10 && (\n <Styled.QueueWrapper\n $background=\"BLACK_4\"\n $justifyContent=\"center\"\n $gutter={4}\n $gap={8}\n >\n <Styled.QueueText $renderAs=\"ac3\" $color=\"WHITE\">\n In Queue\n </Styled.QueueText>\n </Styled.QueueWrapper>\n )}\n <HomeworkCard\n isInQueue={hwDetails.length > 10 && idx > 9}\n userType={userType}\n header={title}\n subHeader={subtext || ''}\n nodeData={sheet}\n renderAs=\"homework\"\n studentId={studentId}\n onNodeAttempt={isDynamicSheet ? onTestStart : onNodeAttempt}\n shouldOpenOnRight={true}\n onNodeView={isDynamicSheet ? onTestPreview : onNodeView}\n onNodeReview={isDynamicSheet ? onTestReview : onNodeReview}\n onNodeUnassign={onNodeUnassign}\n />\n </FlexView>\n );\n })}\n </FlexView>\n </Styled.ScrollContainer>\n <Styled.ScrollButton\n $position=\"absolute\"\n $width=\"60px\"\n $height=\"100%\"\n $background=\"BLACK_T_60\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n onClick={handleScrollRight}\n $visible={isRightHovered}\n left=\"auto\"\n right=\"0px\"\n >\n <ChevronRightIcon width={24} height={24} />\n </Styled.ScrollButton>\n </FlexView>\n </Styled.ContentWrapper>\n );\n};\n\nexport default memo(HwCardListView);\n"],"names":["HwCardListView","userType","studentId","isHwProcessing","hwDetails","onTestStart","onNodeAttempt","onTestPreview","onNodeView","onTestReview","onNodeReview","onNodeUnassign","isLeftHovered","setIsLeftHovered","useState","isRightHovered","setIsRightHovered","scrollRef","useRef","waitForReviewSheets","useMemo","sheet","updatedCanScroll","useCallback","scrollLeft","scrollWidth","clientWidth","handleHoverEnter","handleHoverLeave","handleScrollLeft","handleScrollRight","useEffect","scrollElement","jsxs","FlexView","Text","Styled.ContentWrapper","jsx","Styled.ScrollButton","ChevronLeftIcon","Styled.ScrollContainer","idx","nodeId","worksheetId","nodeType","title","subtext","isDynamicSheet","Styled.QueueWrapper","Styled.QueueText","HomeworkCard","ChevronRightIcon","HwCardListView$1","memo"],"mappings":"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"}
|