@cuemath/leap 3.5.4-as10 → 3.5.4-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/timeline/api/use-daily-timeline-get.js.map +1 -1
- package/dist/features/timeline/comps/accordion-item/accordion-item.js +34 -33
- package/dist/features/timeline/comps/accordion-item/accordion-item.js.map +1 -1
- package/dist/features/timeline/comps/daily-timeline-items/daily-timeline-items-styled.js.map +1 -0
- package/dist/features/timeline/{daily-timeline → comps}/daily-timeline-items/daily-timeline-items.js +5 -5
- package/dist/features/timeline/comps/daily-timeline-items/daily-timeline-items.js.map +1 -0
- package/dist/features/timeline/comps/month-break.js +1 -1
- package/dist/features/timeline/comps/month-break.js.map +1 -1
- package/dist/features/timeline/comps/{accordion-item/utils.js → utils.js} +26 -19
- package/dist/features/timeline/comps/utils.js.map +1 -0
- package/dist/features/timeline/{daily-timeline/daily-timeline-styled.js → daily-timeline-styled.js} +1 -1
- package/dist/features/timeline/daily-timeline-styled.js.map +1 -0
- package/dist/features/timeline/{daily-timeline/daily-timeline.js → daily-timeline.js} +15 -15
- package/dist/features/timeline/daily-timeline.js.map +1 -0
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/features/timeline/comps/accordion-item/utils.js.map +0 -1
- package/dist/features/timeline/daily-timeline/daily-timeline-items/daily-timeline-items-styled.js.map +0 -1
- package/dist/features/timeline/daily-timeline/daily-timeline-items/daily-timeline-items.js.map +0 -1
- package/dist/features/timeline/daily-timeline/daily-timeline-styled.js.map +0 -1
- package/dist/features/timeline/daily-timeline/daily-timeline.js.map +0 -1
- /package/dist/features/timeline/{daily-timeline → comps}/daily-timeline-items/daily-timeline-items-styled.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-daily-timeline-get.js","sources":["../../../../src/features/timeline/api/use-daily-timeline-get.ts"],"sourcesContent":["import { createGetAPI } from '@cuemath/rest-api';\n\nimport { BASE_URL_V3 } from '../../../constants/api';\nimport { stringify } from '../../../helpers/query-string';\nimport type { TCourseStream } from '../../milestone/create/milestone-create-types';\n\nexport type TState = 'COMPLETED' | 'IN_PROGRESS' | 'PENDING';\n\nexport interface
|
|
1
|
+
{"version":3,"file":"use-daily-timeline-get.js","sources":["../../../../src/features/timeline/api/use-daily-timeline-get.ts"],"sourcesContent":["import { createGetAPI } from '@cuemath/rest-api';\n\nimport { BASE_URL_V3 } from '../../../constants/api';\nimport { stringify } from '../../../helpers/query-string';\nimport type { TCourseStream } from '../../milestone/create/milestone-create-types';\n\nexport type TState = 'COMPLETED' | 'IN_PROGRESS' | 'PENDING';\n\nexport interface TimeLineItem {\n accuracy: number | null;\n block_type: string | null;\n card_type?: string;\n chapter_name: string | null;\n feedback_comments: string | null;\n image_hue: string | null;\n is_timed: boolean;\n items: { ref: string }[] | null;\n label: string;\n learnosity_activity_ref: string | null;\n max_score: number | null;\n node_id: string;\n node_type: string;\n points: number | null;\n state: TState;\n subtext: string | null;\n task_type: string | null;\n time_taken: number | null;\n tip: string | null;\n title: string;\n total_questions: number | null;\n total_score: number | null;\n user_block_id: string | null;\n user_id?: string;\n user_node_id: string;\n}\n\nexport interface TimeLineEntry {\n cards: TimeLineItem[];\n course_stream: TCourseStream | 'CIRCLE' | null;\n summary: string | null;\n type: 'CW' | 'HW' | 'CIRCLE';\n}\n\nexport type TimelineData = {\n daily_logs: TimeLineEntry[];\n from_date: string;\n to_date: string;\n};\n\nexport type TimelineResponse = {\n curr_page: number | null;\n next_page: number | null;\n per_page: number | null;\n total_pages: number | null;\n user_logs: TimelineData[];\n};\n\ninterface GetUserTimelineParams {\n course_stream?: TCourseStream[];\n page?: number; // defaults to 1\n size?: number; // defaults to 10 - page size means no of dates data\n timezone: string;\n}\n\nconst { useGet: useDailyTimelineGet } = createGetAPI<TimelineResponse, GetUserTimelineParams>({\n getURL: (studentId: string, queryParams) => {\n return `${BASE_URL_V3}/user-timeline/${studentId}?${stringify(queryParams)}`;\n },\n});\n\nexport { useDailyTimelineGet };\n"],"names":["useDailyTimelineGet","createGetAPI","studentId","queryParams","BASE_URL_V3","stringify"],"mappings":";;;AAgEA,MAAM,EAAE,QAAQA,EAAoB,IAAIC,EAAsD;AAAA,EAC5F,QAAQ,CAACC,GAAmBC,MACnB,GAAGC,CAAW,kBAAkBF,CAAS,IAAIG,EAAUF,CAAW,CAAC;AAE9E,CAAC;"}
|
|
@@ -1,53 +1,54 @@
|
|
|
1
|
-
import { jsxs as o, jsx as
|
|
2
|
-
import { memo as
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import { getStateColor as
|
|
7
|
-
import { BLOCK_TYPE as
|
|
8
|
-
const
|
|
9
|
-
({ type:
|
|
1
|
+
import { jsxs as o, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { memo as k, useCallback as p } from "react";
|
|
3
|
+
import C from "../../../ui/buttons/text-button/text-button.js";
|
|
4
|
+
import r from "../../../ui/layout/flex-view.js";
|
|
5
|
+
import n from "../../../ui/text/text.js";
|
|
6
|
+
import { getStateColor as L, getStateIcon as S, CODING_ACTIVITY_NODE_TYPES as g } from "../utils.js";
|
|
7
|
+
import { BLOCK_TYPE as B } from "../../../chapters-v2/constants/block-constants.js";
|
|
8
|
+
const z = k(
|
|
9
|
+
({ type: s, userType: d, card: f, onPuzzleClick: l, onReviewClick: i }) => {
|
|
10
10
|
const {
|
|
11
11
|
label: a,
|
|
12
|
-
title:
|
|
12
|
+
title: $,
|
|
13
13
|
state: c,
|
|
14
14
|
subtext: m,
|
|
15
15
|
user_node_id: e,
|
|
16
|
-
block_type:
|
|
17
|
-
user_block_id:
|
|
18
|
-
|
|
16
|
+
block_type: b,
|
|
17
|
+
user_block_id: u,
|
|
18
|
+
node_type: x
|
|
19
|
+
} = f, E = a === "PUZZLE", T = S(c), _ = c === "COMPLETED", I = d === "TEACHER" && s !== "CIRCLE" || d === "STUDENT" && _ && s !== "CIRCLE" && !g.includes(x), w = p(() => {
|
|
19
20
|
e && l && l(e);
|
|
20
|
-
}, [l, e]),
|
|
21
|
-
i && e && i(e,
|
|
22
|
-
}, [
|
|
23
|
-
return /* @__PURE__ */ o(
|
|
24
|
-
/* @__PURE__ */ r
|
|
25
|
-
/* @__PURE__ */ o(
|
|
26
|
-
/* @__PURE__ */ o(
|
|
27
|
-
/* @__PURE__ */ o(
|
|
21
|
+
}, [l, e]), h = b === B.SAT_MOCK_TEST, A = p(() => {
|
|
22
|
+
i && e && i(e, h, u);
|
|
23
|
+
}, [h, i, u, e]);
|
|
24
|
+
return /* @__PURE__ */ o(r, { $flexDirection: "row", $flexGapX: 1.5, children: [
|
|
25
|
+
/* @__PURE__ */ t(r, { $background: L(c), $borderRadiusX: 0.5, $width: 16, $height: 16, children: T && /* @__PURE__ */ t(T, { width: 16, height: 16 }) }),
|
|
26
|
+
/* @__PURE__ */ o(r, { $flexRowGapX: 0.25, children: [
|
|
27
|
+
/* @__PURE__ */ o(n, { $renderAs: "ub3", children: [
|
|
28
|
+
/* @__PURE__ */ o(n, { $renderAs: "ub3-bold", $inline: !0, children: [
|
|
28
29
|
a,
|
|
29
30
|
":"
|
|
30
31
|
] }),
|
|
31
32
|
" ",
|
|
32
|
-
|
|
33
|
+
$
|
|
33
34
|
] }),
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
E ? /* @__PURE__ */ t(
|
|
36
|
+
C,
|
|
36
37
|
{
|
|
37
|
-
label:
|
|
38
|
+
label: _ ? "View reviewed puzzle" : "View assigned puzzle",
|
|
38
39
|
size: "small",
|
|
39
40
|
color: "BLACK_T_60",
|
|
40
|
-
onClick:
|
|
41
|
+
onClick: w
|
|
41
42
|
}
|
|
42
|
-
) : /* @__PURE__ */ o(
|
|
43
|
-
m && /* @__PURE__ */
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
) : /* @__PURE__ */ o(r, { $flexDirection: "row", $flexGapX: 0.75, $alignItems: "center", children: [
|
|
44
|
+
m && /* @__PURE__ */ t(n, { $renderAs: "ub3", $color: "BLACK_T_60", children: m }),
|
|
45
|
+
I && /* @__PURE__ */ t(
|
|
46
|
+
C,
|
|
46
47
|
{
|
|
47
48
|
label: "Review",
|
|
48
49
|
size: "small",
|
|
49
50
|
color: "BLACK_T_60",
|
|
50
|
-
onClick:
|
|
51
|
+
onClick: A
|
|
51
52
|
}
|
|
52
53
|
)
|
|
53
54
|
] })
|
|
@@ -55,8 +56,8 @@ const B = I(
|
|
|
55
56
|
] });
|
|
56
57
|
}
|
|
57
58
|
);
|
|
58
|
-
|
|
59
|
+
z.displayName = "AccordionItem";
|
|
59
60
|
export {
|
|
60
|
-
|
|
61
|
+
z as default
|
|
61
62
|
};
|
|
62
63
|
//# sourceMappingURL=accordion-item.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accordion-item.js","sources":["../../../../../src/features/timeline/comps/accordion-item/accordion-item.tsx"],"sourcesContent":["import { memo, useCallback, type FC } from 'react';\n\nimport TextButton from '../../../ui/buttons/text-button/text-button';\nimport FlexView from '../../../ui/layout/flex-view';\nimport Text from '../../../ui/text/text';\nimport type { AccordionItemProps } from './accordion-item-types';\nimport { getStateColor, getStateIcon } from '
|
|
1
|
+
{"version":3,"file":"accordion-item.js","sources":["../../../../../src/features/timeline/comps/accordion-item/accordion-item.tsx"],"sourcesContent":["import { memo, useCallback, type FC } from 'react';\n\nimport TextButton from '../../../ui/buttons/text-button/text-button';\nimport FlexView from '../../../ui/layout/flex-view';\nimport Text from '../../../ui/text/text';\nimport type { AccordionItemProps } from './accordion-item-types';\nimport { CODING_ACTIVITY_NODE_TYPES, getStateColor, getStateIcon } from '../utils';\nimport { BLOCK_TYPE } from '../../../chapters-v2/constants/block-constants';\n\nconst AccordionItem: FC<AccordionItemProps> = memo(\n ({ type, userType, card, onPuzzleClick, onReviewClick }) => {\n const {\n label,\n title,\n state,\n subtext,\n user_node_id: userNodeId,\n block_type: blockType,\n user_block_id: userBlockId,\n node_type: nodeType,\n } = card;\n\n const isPuzzle = label === 'PUZZLE';\n const Icon = getStateIcon(state);\n const isCompleted = state === 'COMPLETED';\n\n const shouldShowReview =\n (userType === 'TEACHER' && type !== 'CIRCLE') ||\n (userType === 'STUDENT' &&\n isCompleted &&\n type !== 'CIRCLE' &&\n !CODING_ACTIVITY_NODE_TYPES.includes(nodeType));\n\n const handlePuzzleClick = useCallback(() => {\n if (userNodeId && onPuzzleClick) {\n onPuzzleClick(userNodeId);\n }\n }, [onPuzzleClick, userNodeId]);\n const isSatMockTestBlock = blockType === BLOCK_TYPE.SAT_MOCK_TEST;\n\n const handleReviewClick = useCallback(() => {\n if (onReviewClick && userNodeId) {\n onReviewClick(userNodeId, isSatMockTestBlock, userBlockId);\n }\n }, [isSatMockTestBlock, onReviewClick, userBlockId, userNodeId]);\n\n return (\n <FlexView $flexDirection=\"row\" $flexGapX={1.5}>\n <FlexView $background={getStateColor(state)} $borderRadiusX={0.5} $width={16} $height={16}>\n {Icon && <Icon width={16} height={16} />}\n </FlexView>\n <FlexView $flexRowGapX={0.25}>\n <Text $renderAs=\"ub3\">\n <Text $renderAs=\"ub3-bold\" $inline>\n {label}:\n </Text>{' '}\n {title}\n </Text>\n {isPuzzle ? (\n <TextButton\n label={isCompleted ? 'View reviewed puzzle' : 'View assigned puzzle'}\n size=\"small\"\n color=\"BLACK_T_60\"\n onClick={handlePuzzleClick}\n />\n ) : (\n <FlexView $flexDirection=\"row\" $flexGapX={0.75} $alignItems=\"center\">\n {subtext && (\n <Text $renderAs=\"ub3\" $color=\"BLACK_T_60\">\n {subtext}\n </Text>\n )}\n {shouldShowReview && (\n <TextButton\n label=\"Review\"\n size=\"small\"\n color=\"BLACK_T_60\"\n onClick={handleReviewClick}\n />\n )}\n </FlexView>\n )}\n </FlexView>\n </FlexView>\n );\n },\n);\n\nAccordionItem.displayName = 'AccordionItem';\n\nexport default AccordionItem;\n"],"names":["AccordionItem","memo","type","userType","card","onPuzzleClick","onReviewClick","label","title","state","subtext","userNodeId","blockType","userBlockId","nodeType","isPuzzle","Icon","getStateIcon","isCompleted","shouldShowReview","CODING_ACTIVITY_NODE_TYPES","handlePuzzleClick","useCallback","isSatMockTestBlock","BLOCK_TYPE","handleReviewClick","jsxs","FlexView","jsx","getStateColor","Text","TextButton"],"mappings":";;;;;;;AASA,MAAMA,IAAwCC;AAAA,EAC5C,CAAC,EAAE,MAAAC,GAAM,UAAAC,GAAU,MAAAC,GAAM,eAAAC,GAAe,eAAAC,QAAoB;AACpD,UAAA;AAAA,MACJ,OAAAC;AAAA,MACA,OAAAC;AAAA,MACA,OAAAC;AAAA,MACA,SAAAC;AAAA,MACA,cAAcC;AAAA,MACd,YAAYC;AAAA,MACZ,eAAeC;AAAA,MACf,WAAWC;AAAA,IACT,IAAAV,GAEEW,IAAWR,MAAU,UACrBS,IAAOC,EAAaR,CAAK,GACzBS,IAAcT,MAAU,aAExBU,IACHhB,MAAa,aAAaD,MAAS,YACnCC,MAAa,aACZe,KACAhB,MAAS,YACT,CAACkB,EAA2B,SAASN,CAAQ,GAE3CO,IAAoBC,EAAY,MAAM;AAC1C,MAAIX,KAAcN,KAChBA,EAAcM,CAAU;AAAA,IAC1B,GACC,CAACN,GAAeM,CAAU,CAAC,GACxBY,IAAqBX,MAAcY,EAAW,eAE9CC,IAAoBH,EAAY,MAAM;AAC1C,MAAIhB,KAAiBK,KACLL,EAAAK,GAAYY,GAAoBV,CAAW;AAAA,OAE1D,CAACU,GAAoBjB,GAAeO,GAAaF,CAAU,CAAC;AAE/D,WACG,gBAAAe,EAAAC,GAAA,EAAS,gBAAe,OAAM,WAAW,KACxC,UAAA;AAAA,MAAA,gBAAAC,EAACD,KAAS,aAAaE,EAAcpB,CAAK,GAAG,gBAAgB,KAAK,QAAQ,IAAI,SAAS,IACpF,eAAS,gBAAAmB,EAAAZ,GAAA,EAAK,OAAO,IAAI,QAAQ,GAAI,CAAA,GACxC;AAAA,MACA,gBAAAU,EAACC,GAAS,EAAA,cAAc,MACtB,UAAA;AAAA,QAAC,gBAAAD,EAAAI,GAAA,EAAK,WAAU,OACd,UAAA;AAAA,UAAA,gBAAAJ,EAACI,GAAK,EAAA,WAAU,YAAW,SAAO,IAC/B,UAAA;AAAA,YAAAvB;AAAA,YAAM;AAAA,UAAA,GACT;AAAA,UAAQ;AAAA,UACPC;AAAA,QAAA,GACH;AAAA,QACCO,IACC,gBAAAa;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,OAAOb,IAAc,yBAAyB;AAAA,YAC9C,MAAK;AAAA,YACL,OAAM;AAAA,YACN,SAASG;AAAA,UAAA;AAAA,QAAA,sBAGVM,GAAS,EAAA,gBAAe,OAAM,WAAW,MAAM,aAAY,UACzD,UAAA;AAAA,UAAAjB,uBACEoB,GAAK,EAAA,WAAU,OAAM,QAAO,cAC1B,UACHpB,GAAA;AAAA,UAEDS,KACC,gBAAAS;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,OAAM;AAAA,cACN,MAAK;AAAA,cACL,OAAM;AAAA,cACN,SAASN;AAAA,YAAA;AAAA,UACX;AAAA,QAAA,GAEJ;AAAA,MAAA,GAEJ;AAAA,IACF,EAAA,CAAA;AAAA,EAEJ;AACF;AAEAzB,EAAc,cAAc;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daily-timeline-items-styled.js","sources":["../../../../../src/features/timeline/comps/daily-timeline-items/daily-timeline-items-styled.tsx"],"sourcesContent":["import styled from 'styled-components';\n\nimport FlexView from '../../../ui/layout/flex-view';\n\nexport const Card = styled(FlexView)<{ $isLastCard: boolean }>`\n border-left: ${({ $isLastCard, theme }) =>\n $isLastCard ? 'none' : `1px dashed ${theme.colors.GREY_3}`};\n padding-bottom: ${({ $isLastCard }) => ($isLastCard ? '0' : '20px')};\n > div {\n margin-left: -8px;\n }\n`;\n"],"names":["Card","styled","FlexView","$isLastCard","theme"],"mappings":";;AAIa,MAAAA,IAAOC,EAAOC,CAAQ;AAAA,iBAClB,CAAC,EAAE,aAAAC,GAAa,OAAAC,EAAM,MACnCD,IAAc,SAAS,cAAcC,EAAM,OAAO,MAAM,EAAE;AAAA,oBAC1C,CAAC,EAAE,aAAAD,EAAA,MAAmBA,IAAc,MAAM,MAAO;AAAA;AAAA;AAAA;AAAA;"}
|
package/dist/features/timeline/{daily-timeline → comps}/daily-timeline-items/daily-timeline-items.js
RENAMED
|
@@ -2,9 +2,9 @@ import { jsx as o } from "react/jsx-runtime";
|
|
|
2
2
|
import { memo as p, useMemo as s } from "react";
|
|
3
3
|
import g from "../../../ui/layout/flex-view.js";
|
|
4
4
|
import h from "../../../ui/simple-accordian/accordion.js";
|
|
5
|
-
import u from "
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import u from "../accordion-item/accordion-item.js";
|
|
6
|
+
import { Card as $ } from "./daily-timeline-items-styled.js";
|
|
7
|
+
import { getTimelineCardIcon as x } from "../utils.js";
|
|
8
8
|
const B = p(
|
|
9
9
|
({
|
|
10
10
|
type: i,
|
|
@@ -16,7 +16,7 @@ const B = p(
|
|
|
16
16
|
shouldShowTag: a,
|
|
17
17
|
userType: f
|
|
18
18
|
}) => {
|
|
19
|
-
const c = s(() =>
|
|
19
|
+
const c = s(() => x(i), [i]);
|
|
20
20
|
return /* @__PURE__ */ o(
|
|
21
21
|
h,
|
|
22
22
|
{
|
|
@@ -25,7 +25,7 @@ const B = p(
|
|
|
25
25
|
defaultExpanded: !1,
|
|
26
26
|
icon: c ?? "",
|
|
27
27
|
children: m.length > 0 && /* @__PURE__ */ o(g, { $gutter: 32, $marginBottom: 24, children: m.map((r, t) => /* @__PURE__ */ o(
|
|
28
|
-
|
|
28
|
+
$,
|
|
29
29
|
{
|
|
30
30
|
$isLastCard: t === m.length - 1,
|
|
31
31
|
children: /* @__PURE__ */ o(
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daily-timeline-items.js","sources":["../../../../../src/features/timeline/comps/daily-timeline-items/daily-timeline-items.tsx"],"sourcesContent":["import { memo, useMemo, type FC } from 'react';\n\nimport FlexView from '../../../ui/layout/flex-view';\nimport Accordion from '../../../ui/simple-accordian/accordion';\nimport AccordionItem from '../accordion-item/accordion-item';\nimport * as Styled from './daily-timeline-items-styled';\nimport type { DailyTimelineItemsProps } from './daily-timeline-items.types';\nimport { getTimelineCardIcon } from '../utils';\n\nconst DailyTimelineItems: FC<DailyTimelineItemsProps> = memo(\n ({\n type,\n summary,\n cards,\n onPuzzleClick,\n onReviewClick,\n courseStream,\n shouldShowTag,\n userType,\n }) => {\n const icon = useMemo(() => getTimelineCardIcon(type), [type]);\n\n return (\n <Accordion\n tag={shouldShowTag ? courseStream : undefined}\n title={summary}\n defaultExpanded={false}\n icon={icon ?? ''}\n >\n {cards.length > 0 && (\n <FlexView $gutter={32} $marginBottom={24}>\n {cards.map((card, index) => (\n <Styled.Card\n key={`${card.node_id}-${index}`}\n $isLastCard={index === cards.length - 1}\n >\n <AccordionItem\n card={card}\n onPuzzleClick={onPuzzleClick}\n onReviewClick={onReviewClick}\n type={type}\n userType={userType}\n />\n </Styled.Card>\n ))}\n </FlexView>\n )}\n </Accordion>\n );\n },\n);\n\nexport default DailyTimelineItems;\n"],"names":["DailyTimelineItems","memo","type","summary","cards","onPuzzleClick","onReviewClick","courseStream","shouldShowTag","userType","icon","useMemo","getTimelineCardIcon","jsx","Accordion","FlexView","card","index","Styled.Card","AccordionItem"],"mappings":";;;;;;;AASA,MAAMA,IAAkDC;AAAA,EACtD,CAAC;AAAA,IACC,MAAAC;AAAA,IACA,SAAAC;AAAA,IACA,OAAAC;AAAA,IACA,eAAAC;AAAA,IACA,eAAAC;AAAA,IACA,cAAAC;AAAA,IACA,eAAAC;AAAA,IACA,UAAAC;AAAA,EAAA,MACI;AACE,UAAAC,IAAOC,EAAQ,MAAMC,EAAoBV,CAAI,GAAG,CAACA,CAAI,CAAC;AAG1D,WAAA,gBAAAW;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,KAAKN,IAAgBD,IAAe;AAAA,QACpC,OAAOJ;AAAA,QACP,iBAAiB;AAAA,QACjB,MAAMO,KAAQ;AAAA,QAEb,UAAMN,EAAA,SAAS,KACd,gBAAAS,EAACE,GAAS,EAAA,SAAS,IAAI,eAAe,IACnC,UAAAX,EAAM,IAAI,CAACY,GAAMC,MAChB,gBAAAJ;AAAA,UAACK;AAAAA,UAAA;AAAA,YAEC,aAAaD,MAAUb,EAAM,SAAS;AAAA,YAEtC,UAAA,gBAAAS;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,MAAAH;AAAA,gBACA,eAAAX;AAAA,gBACA,eAAAC;AAAA,gBACA,MAAAJ;AAAA,gBACA,UAAAO;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,UATK,GAAGO,EAAK,OAAO,IAAIC,CAAK;AAAA,QAWhC,CAAA,GACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as e } from "react/jsx-runtime";
|
|
2
2
|
import a from "styled-components";
|
|
3
3
|
import i from "../../ui/layout/flex-view.js";
|
|
4
|
-
import { monthImageMap as n } from "./
|
|
4
|
+
import { monthImageMap as n } from "./utils.js";
|
|
5
5
|
const m = a(i)`
|
|
6
6
|
margin-top: ${({ $isLastYear: r }) => r ? "-46px" : "0"};
|
|
7
7
|
background-image: url(${({ $img: r }) => r});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"month-break.js","sources":["../../../../src/features/timeline/comps/month-break.tsx"],"sourcesContent":["import styled from 'styled-components';\n\nimport FlexView from '../../ui/layout/flex-view';\nimport { monthImageMap } from './
|
|
1
|
+
{"version":3,"file":"month-break.js","sources":["../../../../src/features/timeline/comps/month-break.tsx"],"sourcesContent":["import styled from 'styled-components';\n\nimport FlexView from '../../ui/layout/flex-view';\nimport { monthImageMap } from './utils';\n\nconst MonthImageWrapper = styled(FlexView)<{ $isLastYear: boolean; $img: string }>`\n margin-top: ${({ $isLastYear }) => ($isLastYear ? '-46px' : '0')};\n background-image: url(${({ $img }) => $img});\n background-size: cover;\n background-position: center;\n`;\n\ninterface MonthBreakProps {\n fromMonth: number;\n isLastDayOfMth: boolean;\n}\n\nconst MonthBreak = ({ fromMonth, isLastDayOfMth }: MonthBreakProps) => {\n const Image = monthImageMap[String(fromMonth).padStart(2, '0') as keyof typeof monthImageMap];\n\n if (fromMonth && isLastDayOfMth)\n return (\n <MonthImageWrapper $isLastYear={isLastDayOfMth} $img={Image} $width={'100%'} $height={246} />\n );\n\n return null;\n};\n\nexport default MonthBreak;\n"],"names":["MonthImageWrapper","styled","FlexView","$isLastYear","$img","MonthBreak","fromMonth","isLastDayOfMth","Image","monthImageMap","jsx"],"mappings":";;;;AAKA,MAAMA,IAAoBC,EAAOC,CAAQ;AAAA,gBACzB,CAAC,EAAE,aAAAC,EAAA,MAAmBA,IAAc,UAAU,GAAI;AAAA,0BACxC,CAAC,EAAE,MAAAC,EAAK,MAAMA,CAAI;AAAA;AAAA;AAAA,GAUtCC,IAAa,CAAC,EAAE,WAAAC,GAAW,gBAAAC,QAAsC;AAC/D,QAAAC,IAAQC,EAAc,OAAOH,CAAS,EAAE,SAAS,GAAG,GAAG,CAA+B;AAE5F,SAAIA,KAAaC,IAEb,gBAAAG,EAACV,KAAkB,aAAaO,GAAgB,MAAMC,GAAO,QAAQ,QAAQ,SAAS,IAAK,CAAA,IAGxF;AACT;"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { ILLUSTRATIONS as e } from "
|
|
2
|
-
import { IMAGES as t } from "
|
|
3
|
-
import o from "
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import { formatDate as
|
|
7
|
-
const
|
|
1
|
+
import { ILLUSTRATIONS as e } from "../../../assets/illustrations/illustrations.js";
|
|
2
|
+
import { IMAGES as t } from "../../../assets/images/images.js";
|
|
3
|
+
import o from "../../../assets/line-icons/icons/check2.js";
|
|
4
|
+
import I from "../../../assets/line-icons/icons/cross.js";
|
|
5
|
+
import n from "../../../assets/line-icons/icons/status.js";
|
|
6
|
+
import { formatDate as a } from "../../../node_modules/date-fns/format.js";
|
|
7
|
+
const _ = (r) => {
|
|
8
8
|
switch (r) {
|
|
9
9
|
case "COMPLETED":
|
|
10
10
|
return o;
|
|
11
11
|
case "IN_PROGRESS":
|
|
12
|
-
return a;
|
|
13
|
-
case "PENDING":
|
|
14
12
|
return n;
|
|
13
|
+
case "PENDING":
|
|
14
|
+
return I;
|
|
15
15
|
}
|
|
16
|
-
},
|
|
16
|
+
}, T = (r) => {
|
|
17
17
|
switch (r) {
|
|
18
18
|
case "COMPLETED":
|
|
19
19
|
return "GREEN_2";
|
|
@@ -24,7 +24,7 @@ const u = (r) => {
|
|
|
24
24
|
default:
|
|
25
25
|
return "GREY_2";
|
|
26
26
|
}
|
|
27
|
-
},
|
|
27
|
+
}, u = (r) => {
|
|
28
28
|
switch (r) {
|
|
29
29
|
case "CW":
|
|
30
30
|
return e.CW_ICON;
|
|
@@ -37,7 +37,7 @@ const u = (r) => {
|
|
|
37
37
|
default:
|
|
38
38
|
return null;
|
|
39
39
|
}
|
|
40
|
-
},
|
|
40
|
+
}, R = {
|
|
41
41
|
"01": t.JAN,
|
|
42
42
|
"02": t.FEB,
|
|
43
43
|
"03": t.MAR,
|
|
@@ -50,17 +50,24 @@ const u = (r) => {
|
|
|
50
50
|
10: t.OCT,
|
|
51
51
|
11: t.NOV,
|
|
52
52
|
12: t.DEC
|
|
53
|
-
},
|
|
53
|
+
}, S = [
|
|
54
|
+
"TURING_BASIC",
|
|
55
|
+
"TURING_LINK",
|
|
56
|
+
"TURING_SHARE",
|
|
57
|
+
"PYTHON_BASIC",
|
|
58
|
+
"PYTHON_VISUAL"
|
|
59
|
+
], A = (r) => ({
|
|
54
60
|
day: r.getDate(),
|
|
55
61
|
month: r.getMonth() + 1,
|
|
56
62
|
year: r.getFullYear(),
|
|
57
|
-
monthName:
|
|
63
|
+
monthName: a(r, "MMM")
|
|
58
64
|
});
|
|
59
65
|
export {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
66
|
+
S as CODING_ACTIVITY_NODE_TYPES,
|
|
67
|
+
A as getDayMonthYear,
|
|
68
|
+
T as getStateColor,
|
|
69
|
+
_ as getStateIcon,
|
|
70
|
+
u as getTimelineCardIcon,
|
|
71
|
+
R as monthImageMap
|
|
65
72
|
};
|
|
66
73
|
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../src/features/timeline/comps/utils.ts"],"sourcesContent":["import { format } from 'date-fns';\n\nimport { ILLUSTRATIONS } from '../../../assets/illustrations/illustrations';\nimport { IMAGES } from '../../../assets/images/images';\nimport Check2Icon from '../../../assets/line-icons/icons/check2';\nimport CrossIcon from '../../../assets/line-icons/icons/cross';\nimport StatusIcon from '../../../assets/line-icons/icons/status';\n\nexport const getStateIcon = (state: string) => {\n switch (state) {\n case 'COMPLETED':\n return Check2Icon;\n case 'IN_PROGRESS':\n return StatusIcon;\n case 'PENDING':\n return CrossIcon;\n }\n};\n\nexport const getStateColor = ($state: string) => {\n switch ($state) {\n case 'COMPLETED':\n return 'GREEN_2';\n case 'IN_PROGRESS':\n return 'YELLOW_2';\n case 'PENDING':\n return 'ORANGE_2';\n default:\n return 'GREY_2';\n }\n};\n\nexport const getTimelineCardIcon = (type: 'CW' | 'HW' | 'CIRCLE' | 'NO_ACTIVITY') => {\n switch (type) {\n case 'CW':\n return ILLUSTRATIONS.CW_ICON;\n case 'HW':\n return ILLUSTRATIONS.HW_ICON;\n case 'CIRCLE':\n return ILLUSTRATIONS.CIRCLE_ICON;\n case 'NO_ACTIVITY':\n return ILLUSTRATIONS.NO_ACTIVITY;\n default:\n return null;\n }\n};\n\nexport const monthImageMap = {\n '01': IMAGES.JAN,\n '02': IMAGES.FEB,\n '03': IMAGES.MAR,\n '04': IMAGES.APR,\n '05': IMAGES.MAY,\n '06': IMAGES.JUN,\n '07': IMAGES.JUL,\n '08': IMAGES.AUG,\n '09': IMAGES.SEP,\n '10': IMAGES.OCT,\n '11': IMAGES.NOV,\n '12': IMAGES.DEC,\n};\n\nexport const CODING_ACTIVITY_NODE_TYPES = [\n 'TURING_BASIC',\n 'TURING_LINK',\n 'TURING_SHARE',\n 'PYTHON_BASIC',\n 'PYTHON_VISUAL',\n];\n\nexport const getDayMonthYear = (dateObj: Date) => ({\n day: dateObj.getDate(),\n month: dateObj.getMonth() + 1,\n year: dateObj.getFullYear(),\n monthName: format(dateObj, 'MMM'),\n});\n"],"names":["getStateIcon","state","Check2Icon","StatusIcon","CrossIcon","getStateColor","$state","getTimelineCardIcon","type","ILLUSTRATIONS","monthImageMap","IMAGES","CODING_ACTIVITY_NODE_TYPES","getDayMonthYear","dateObj","format"],"mappings":";;;;;;AAQa,MAAAA,IAAe,CAACC,MAAkB;AAC7C,UAAQA,GAAO;AAAA,IACb,KAAK;AACI,aAAAC;AAAA,IACT,KAAK;AACI,aAAAC;AAAA,IACT,KAAK;AACI,aAAAC;AAAA,EACX;AACF,GAEaC,IAAgB,CAACC,MAAmB;AAC/C,UAAQA,GAAQ;AAAA,IACd,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT;AACS,aAAA;AAAA,EACX;AACF,GAEaC,IAAsB,CAACC,MAAiD;AACnF,UAAQA,GAAM;AAAA,IACZ,KAAK;AACH,aAAOC,EAAc;AAAA,IACvB,KAAK;AACH,aAAOA,EAAc;AAAA,IACvB,KAAK;AACH,aAAOA,EAAc;AAAA,IACvB,KAAK;AACH,aAAOA,EAAc;AAAA,IACvB;AACS,aAAA;AAAA,EACX;AACF,GAEaC,IAAgB;AAAA,EAC3B,MAAMC,EAAO;AAAA,EACb,MAAMA,EAAO;AAAA,EACb,MAAMA,EAAO;AAAA,EACb,MAAMA,EAAO;AAAA,EACb,MAAMA,EAAO;AAAA,EACb,MAAMA,EAAO;AAAA,EACb,MAAMA,EAAO;AAAA,EACb,MAAMA,EAAO;AAAA,EACb,MAAMA,EAAO;AAAA,EACb,IAAMA,EAAO;AAAA,EACb,IAAMA,EAAO;AAAA,EACb,IAAMA,EAAO;AACf,GAEaC,IAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEaC,IAAkB,CAACC,OAAmB;AAAA,EACjD,KAAKA,EAAQ,QAAQ;AAAA,EACrB,OAAOA,EAAQ,SAAA,IAAa;AAAA,EAC5B,MAAMA,EAAQ,YAAY;AAAA,EAC1B,WAAWC,EAAOD,GAAS,KAAK;AAClC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daily-timeline-styled.js","sources":["../../../src/features/timeline/daily-timeline-styled.tsx"],"sourcesContent":["import styled from 'styled-components';\n\nimport FlexView from '../ui/layout/flex-view';\nimport { type TColorNames } from '../ui/types';\n\nconst ScrollWrapper = styled(FlexView)`\n overflow-y: auto;\n width: 100%;\n`;\n\nconst DailyTimelineContainer = styled(FlexView)`\n max-width: 512px;\n width: 100%;\n`;\n\nconst DailyTimelineItemsContainer = styled(FlexView)<{ $borderBottomColor: TColorNames }>`\n & > div {\n border-bottom: none;\n }\n & > div:last-child {\n border-bottom: 1px solid ${({ theme, $borderBottomColor }) => theme.colors[$borderBottomColor]};\n }\n`;\n\nconst DailyItems = styled(FlexView)<{ $addedmonthbreak?: boolean }>`\n margin-top: ${({ $addedmonthbreak }) => ($addedmonthbreak ? '-122px' : '0')};\n z-index: 1;\n`;\n\nexport { DailyTimelineContainer, DailyItems, DailyTimelineItemsContainer, ScrollWrapper };\n"],"names":["ScrollWrapper","styled","FlexView","DailyTimelineContainer","DailyTimelineItemsContainer","theme","$borderBottomColor","DailyItems","$addedmonthbreak"],"mappings":";;AAKM,MAAAA,IAAgBC,EAAOC,CAAQ;AAAA;AAAA;AAAA,GAK/BC,IAAyBF,EAAOC,CAAQ;AAAA;AAAA;AAAA,GAKxCE,IAA8BH,EAAOC,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,+BAKpB,CAAC,EAAE,OAAAG,GAAO,oBAAAC,EAAA,MAAyBD,EAAM,OAAOC,CAAkB,CAAC;AAAA;AAAA,GAI5FC,IAAaN,EAAOC,CAAQ;AAAA,gBAClB,CAAC,EAAE,kBAAAM,EAAA,MAAwBA,IAAmB,WAAW,GAAI;AAAA;AAAA;"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { jsx as e, jsxs as g } from "react/jsx-runtime";
|
|
2
2
|
import { memo as G, useMemo as x, useState as B, useRef as U, useCallback as W, useEffect as p } from "react";
|
|
3
|
-
import { ILLUSTRATIONS as Z } from "
|
|
4
|
-
import { Loader as q } from "
|
|
5
|
-
import J from "
|
|
6
|
-
import u from "
|
|
7
|
-
import Q from "
|
|
8
|
-
import l from "
|
|
9
|
-
import ee from "
|
|
10
|
-
import te from "
|
|
11
|
-
import { useDailyTimelineGet as oe } from "
|
|
12
|
-
import { getTimelineCardIcon as re, getDayMonthYear as N } from "
|
|
13
|
-
import ie from "./daily-timeline-items/daily-timeline-items.js";
|
|
3
|
+
import { ILLUSTRATIONS as Z } from "../../assets/illustrations/illustrations.js";
|
|
4
|
+
import { Loader as q } from "../ui/buttons/button/button-styled.js";
|
|
5
|
+
import J from "../ui/error/error.js";
|
|
6
|
+
import u from "../ui/layout/flex-view.js";
|
|
7
|
+
import Q from "../ui/loader/app-loader/app-loader.js";
|
|
8
|
+
import l from "../ui/separator/separator.js";
|
|
9
|
+
import ee from "../ui/simple-accordian/accordion.js";
|
|
10
|
+
import te from "../ui/text/text.js";
|
|
11
|
+
import { useDailyTimelineGet as oe } from "./api/use-daily-timeline-get.js";
|
|
12
|
+
import { getTimelineCardIcon as re, getDayMonthYear as N } from "./comps/utils.js";
|
|
13
|
+
import ie from "./comps/daily-timeline-items/daily-timeline-items.js";
|
|
14
14
|
import { ScrollWrapper as ne, DailyTimelineContainer as ae, DailyItems as me, DailyTimelineItemsContainer as se } from "./daily-timeline-styled.js";
|
|
15
|
-
import le from "
|
|
16
|
-
import ce from "
|
|
17
|
-
import { parseISO as k } from "
|
|
18
|
-
import { isLastDayOfMonth as he } from "
|
|
15
|
+
import le from "./comps/month-break.js";
|
|
16
|
+
import ce from "./comps/year-break.js";
|
|
17
|
+
import { parseISO as k } from "../../node_modules/date-fns/parseISO.js";
|
|
18
|
+
import { isLastDayOfMonth as he } from "../../node_modules/date-fns/isLastDayOfMonth.js";
|
|
19
19
|
const fe = G(
|
|
20
20
|
({ userType: c, studentId: h, courseStreams: a, onPuzzlesClick: S, onReviewClick: j, scrollAreaHeight: R }) => {
|
|
21
21
|
const y = x(() => Intl.DateTimeFormat().resolvedOptions().timeZone, []), [T, $] = B([]), [f, L] = B(!1), C = U(null), z = x(() => re("NO_ACTIVITY"), []), {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daily-timeline.js","sources":["../../../src/features/timeline/daily-timeline.tsx"],"sourcesContent":["import { isLastDayOfMonth, parseISO } from 'date-fns';\nimport { memo, useCallback, useEffect, useMemo, useRef, useState, type FC } from 'react';\n\nimport { ILLUSTRATIONS } from '../../assets/illustrations/illustrations';\nimport { Loader } from '../ui/buttons/button/button-styled';\nimport Error from '../ui/error/error';\nimport FlexView from '../ui/layout/flex-view';\nimport AppLoader from '../ui/loader/app-loader/app-loader';\nimport Separator from '../ui/separator/separator';\nimport Accordion from '../ui/simple-accordian/accordion';\nimport Text from '../ui/text/text';\nimport { type TimelineData, useDailyTimelineGet } from './api/use-daily-timeline-get';\nimport { getDayMonthYear, getTimelineCardIcon } from './comps/utils';\nimport DailyTimelineItems from './comps/daily-timeline-items/daily-timeline-items';\nimport * as Styled from './daily-timeline-styled';\nimport { type DailyTimelineProps } from './daily-timeline-types';\nimport MonthBreak from './comps/month-break';\nimport YearBreak from './comps/year-break';\n\nconst DailyTimeline: FC<DailyTimelineProps> = memo(\n ({ userType, studentId, courseStreams, onPuzzlesClick, onReviewClick, scrollAreaHeight }) => {\n const timezone = useMemo(() => Intl.DateTimeFormat().resolvedOptions().timeZone, []);\n const [allTimelineData, setAllTimelineData] = useState<TimelineData[]>([]);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const NoActivityIcon = useMemo(() => getTimelineCardIcon('NO_ACTIVITY'), []);\n const {\n get: getTimeline,\n data: timelineData,\n isProcessingFailed,\n isProcessing,\n } = useDailyTimelineGet(studentId);\n const { user_logs: userLogs } = timelineData ?? {};\n\n const fetchTimeline = useCallback(\n (page = 1, append = false) => {\n if (append) {\n setIsLoadingMore(true);\n }\n\n getTimeline(studentId, {\n page,\n size: 10,\n timezone,\n course_stream: userType === 'TEACHER' ? courseStreams : [],\n });\n },\n [getTimeline, studentId, timezone, userType, courseStreams],\n );\n\n useEffect(() => {\n if (timelineData) {\n if (timelineData.curr_page === 1) {\n setAllTimelineData(userLogs ?? []);\n } else {\n setAllTimelineData(prev => [...prev, ...(userLogs ?? [])]);\n setIsLoadingMore(false);\n }\n }\n }, [timelineData, userLogs]);\n\n useEffect(() => {\n fetchTimeline(1, false);\n }, [fetchTimeline]);\n\n useEffect(() => {\n const container = scrollContainerRef.current;\n\n if (!container) return;\n\n const handleScroll = () => {\n if (\n timelineData?.next_page &&\n !isLoadingMore &&\n container.scrollTop + container.clientHeight >= container.scrollHeight - 100\n ) {\n fetchTimeline(timelineData.next_page, true);\n }\n };\n\n container.addEventListener('scroll', handleScroll);\n\n return () => {\n container.removeEventListener('scroll', handleScroll);\n };\n }, [timelineData, isLoadingMore, fetchTimeline]);\n\n if (isProcessingFailed) {\n return <Error height=\"70vh\" onTryAgain={() => fetchTimeline(1, false)} />;\n }\n\n if (isProcessing && !allTimelineData.length) {\n return (\n <FlexView $alignItems=\"center\" $justifyContent=\"center\" $height=\"100%\">\n <AppLoader width=\"100%\" height=\"100%\" />\n </FlexView>\n );\n }\n\n return (\n <Styled.ScrollWrapper\n ref={scrollContainerRef}\n $height={scrollAreaHeight}\n $alignItems=\"center\"\n >\n <Styled.DailyTimelineContainer>\n {allTimelineData.map((entry, index) => {\n const { daily_logs: dailyLogs, from_date: fromDate, to_date: toDate } = entry;\n\n if (dailyLogs) {\n const fromDateObj = parseISO(fromDate);\n const toDateObj = parseISO(toDate);\n\n const {\n day: fromDay,\n month: fromMonth,\n monthName: fromMonthName,\n } = getDayMonthYear(fromDateObj);\n\n const {\n day: toDay,\n month: toMonth,\n year: toYear,\n monthName: toMonthName,\n } = getDayMonthYear(toDateObj);\n\n const isLastDayOfMth = isLastDayOfMonth(toDateObj);\n const isLastDayOfYear = isLastDayOfMth && toMonth === 12 && toDay === 31;\n const shouldShowTag = !!(courseStreams && courseStreams.length > 1);\n\n return (\n <FlexView key={`timeline-entry-${index}`}>\n <YearBreak toYear={toYear} isLastDayOfYear={isLastDayOfYear} />\n {!isLastDayOfYear && fromMonth && isLastDayOfMth && <Separator heightX={1} />}\n <MonthBreak fromMonth={fromMonth} isLastDayOfMth={isLastDayOfMth} />\n <Styled.DailyItems $gutterX={1} $addedmonthbreak={!!(isLastDayOfMth && toMonth)}>\n <Separator heightX={1} />\n <Text $renderAs=\"ac4-black\" $color=\"BLACK_T_60\">\n {fromDate === toDate\n ? `${fromDay} ${fromMonthName}`\n : `${fromDay} - ${toDay} ${toMonthName}`}\n </Text>\n <Separator heightX={1} />\n <Styled.DailyTimelineItemsContainer\n $borderBottomColor={dailyLogs.length > 0 ? 'BLACK' : 'BLACK_T_04'}\n >\n {dailyLogs.length > 0 ? (\n dailyLogs.map((log, logIndex) => (\n <DailyTimelineItems\n key={`timeline-${logIndex}`}\n type={log.type}\n summary={log.summary ?? ''}\n courseStream={log.course_stream ?? undefined}\n cards={log.cards}\n onPuzzleClick={onPuzzlesClick}\n onReviewClick={onReviewClick}\n userType={userType}\n shouldShowTag={shouldShowTag && log.course_stream !== 'CIRCLE'}\n />\n ))\n ) : (\n <Accordion\n icon={NoActivityIcon ?? ''}\n title=\"No Activity\"\n defaultExpanded={false}\n $borderColor=\"BLACK_T_04\"\n $backgroundColor=\"BLACK_T_15\"\n />\n )}\n </Styled.DailyTimelineItemsContainer>\n <Separator heightX={1} />\n </Styled.DailyItems>\n </FlexView>\n );\n }\n })}\n\n {isLoadingMore && (\n <FlexView $alignItems=\"center\" $justifyContent=\"center\" $height=\"100%\">\n <Loader src={ILLUSTRATIONS.LOADER} alt=\"Loader\" $size=\"large\" />\n </FlexView>\n )}\n </Styled.DailyTimelineContainer>\n </Styled.ScrollWrapper>\n );\n },\n);\n\nexport default DailyTimeline;\n"],"names":["DailyTimeline","memo","userType","studentId","courseStreams","onPuzzlesClick","onReviewClick","scrollAreaHeight","timezone","useMemo","allTimelineData","setAllTimelineData","useState","isLoadingMore","setIsLoadingMore","scrollContainerRef","useRef","NoActivityIcon","getTimelineCardIcon","getTimeline","timelineData","isProcessingFailed","isProcessing","useDailyTimelineGet","userLogs","fetchTimeline","useCallback","page","append","useEffect","prev","container","handleScroll","jsx","Error","FlexView","AppLoader","Styled.ScrollWrapper","jsxs","Styled.DailyTimelineContainer","entry","index","dailyLogs","fromDate","toDate","fromDateObj","parseISO","toDateObj","fromDay","fromMonth","fromMonthName","getDayMonthYear","toDay","toMonth","toYear","toMonthName","isLastDayOfMth","isLastDayOfMonth","isLastDayOfYear","shouldShowTag","YearBreak","Separator","MonthBreak","Styled.DailyItems","Text","Styled.DailyTimelineItemsContainer","log","logIndex","DailyTimelineItems","Accordion","Loader","ILLUSTRATIONS","DailyTimeline$1"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -252,7 +252,7 @@ import { EClassTimeAlertLevel as Au } from "./features/trial-session/trial-sessi
|
|
|
252
252
|
import { ESessionStatus as hu } from "./features/parent-dashboard/comps/upcoming-sessions/upcoming-sessions-types.js";
|
|
253
253
|
import { useGetSessionReports as Ru } from "./features/trial-session/api/trial-home.js";
|
|
254
254
|
import { useClassTimeAlerts as ku } from "./features/trial-session/hooks/use-class-time-alerts.js";
|
|
255
|
-
import { default as Nu } from "./features/timeline/daily-timeline
|
|
255
|
+
import { default as Nu } from "./features/timeline/daily-timeline.js";
|
|
256
256
|
import { default as gu } from "./features/talk-meter/talk-meter.js";
|
|
257
257
|
import { default as yu } from "./features/extra-practice/extra-practice.js";
|
|
258
258
|
import { default as Uu } from "./features/homework/hw-card-list/hw-card-list.js";
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../src/features/timeline/comps/accordion-item/utils.ts"],"sourcesContent":["import { format } from 'date-fns';\n\nimport { ILLUSTRATIONS } from '../../../../assets/illustrations/illustrations';\nimport { IMAGES } from '../../../../assets/images/images';\nimport Check2Icon from '../../../../assets/line-icons/icons/check2';\nimport CrossIcon from '../../../../assets/line-icons/icons/cross';\nimport StatusIcon from '../../../../assets/line-icons/icons/status';\n\nexport const getStateIcon = (state: string) => {\n switch (state) {\n case 'COMPLETED':\n return Check2Icon;\n case 'IN_PROGRESS':\n return StatusIcon;\n case 'PENDING':\n return CrossIcon;\n }\n};\n\nexport const getStateColor = ($state: string) => {\n switch ($state) {\n case 'COMPLETED':\n return 'GREEN_2';\n case 'IN_PROGRESS':\n return 'YELLOW_2';\n case 'PENDING':\n return 'ORANGE_2';\n default:\n return 'GREY_2';\n }\n};\n\nexport const getTimelineCardIcon = (type: 'CW' | 'HW' | 'CIRCLE' | 'NO_ACTIVITY') => {\n switch (type) {\n case 'CW':\n return ILLUSTRATIONS.CW_ICON;\n case 'HW':\n return ILLUSTRATIONS.HW_ICON;\n case 'CIRCLE':\n return ILLUSTRATIONS.CIRCLE_ICON;\n case 'NO_ACTIVITY':\n return ILLUSTRATIONS.NO_ACTIVITY;\n default:\n return null;\n }\n};\n\nexport const monthImageMap = {\n '01': IMAGES.JAN,\n '02': IMAGES.FEB,\n '03': IMAGES.MAR,\n '04': IMAGES.APR,\n '05': IMAGES.MAY,\n '06': IMAGES.JUN,\n '07': IMAGES.JUL,\n '08': IMAGES.AUG,\n '09': IMAGES.SEP,\n '10': IMAGES.OCT,\n '11': IMAGES.NOV,\n '12': IMAGES.DEC,\n};\n\nexport const getDayMonthYear = (dateObj: Date) => ({\n day: dateObj.getDate(),\n month: dateObj.getMonth() + 1,\n year: dateObj.getFullYear(),\n monthName: format(dateObj, 'MMM'),\n});\n"],"names":["getStateIcon","state","Check2Icon","StatusIcon","CrossIcon","getStateColor","$state","getTimelineCardIcon","type","ILLUSTRATIONS","monthImageMap","IMAGES","getDayMonthYear","dateObj","format"],"mappings":";;;;;;AAQa,MAAAA,IAAe,CAACC,MAAkB;AAC7C,UAAQA,GAAO;AAAA,IACb,KAAK;AACI,aAAAC;AAAA,IACT,KAAK;AACI,aAAAC;AAAA,IACT,KAAK;AACI,aAAAC;AAAA,EACX;AACF,GAEaC,IAAgB,CAACC,MAAmB;AAC/C,UAAQA,GAAQ;AAAA,IACd,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT;AACS,aAAA;AAAA,EACX;AACF,GAEaC,IAAsB,CAACC,MAAiD;AACnF,UAAQA,GAAM;AAAA,IACZ,KAAK;AACH,aAAOC,EAAc;AAAA,IACvB,KAAK;AACH,aAAOA,EAAc;AAAA,IACvB,KAAK;AACH,aAAOA,EAAc;AAAA,IACvB,KAAK;AACH,aAAOA,EAAc;AAAA,IACvB;AACS,aAAA;AAAA,EACX;AACF,GAEaC,IAAgB;AAAA,EAC3B,MAAMC,EAAO;AAAA,EACb,MAAMA,EAAO;AAAA,EACb,MAAMA,EAAO;AAAA,EACb,MAAMA,EAAO;AAAA,EACb,MAAMA,EAAO;AAAA,EACb,MAAMA,EAAO;AAAA,EACb,MAAMA,EAAO;AAAA,EACb,MAAMA,EAAO;AAAA,EACb,MAAMA,EAAO;AAAA,EACb,IAAMA,EAAO;AAAA,EACb,IAAMA,EAAO;AAAA,EACb,IAAMA,EAAO;AACf,GAEaC,IAAkB,CAACC,OAAmB;AAAA,EACjD,KAAKA,EAAQ,QAAQ;AAAA,EACrB,OAAOA,EAAQ,SAAA,IAAa;AAAA,EAC5B,MAAMA,EAAQ,YAAY;AAAA,EAC1B,WAAWC,EAAOD,GAAS,KAAK;AAClC;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daily-timeline-items-styled.js","sources":["../../../../../src/features/timeline/daily-timeline/daily-timeline-items/daily-timeline-items-styled.tsx"],"sourcesContent":["import styled from 'styled-components';\n\nimport FlexView from '../../../ui/layout/flex-view';\n\nexport const Card = styled(FlexView)<{ $isLastCard: boolean }>`\n border-left: ${({ $isLastCard, theme }) =>\n $isLastCard ? 'none' : `1px dashed ${theme.colors.GREY_3}`};\n padding-bottom: ${({ $isLastCard }) => ($isLastCard ? '0' : '20px')};\n > div {\n margin-left: -8px;\n }\n`;\n"],"names":["Card","styled","FlexView","$isLastCard","theme"],"mappings":";;AAIa,MAAAA,IAAOC,EAAOC,CAAQ;AAAA,iBAClB,CAAC,EAAE,aAAAC,GAAa,OAAAC,EAAM,MACnCD,IAAc,SAAS,cAAcC,EAAM,OAAO,MAAM,EAAE;AAAA,oBAC1C,CAAC,EAAE,aAAAD,EAAA,MAAmBA,IAAc,MAAM,MAAO;AAAA;AAAA;AAAA;AAAA;"}
|
package/dist/features/timeline/daily-timeline/daily-timeline-items/daily-timeline-items.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daily-timeline-items.js","sources":["../../../../../src/features/timeline/daily-timeline/daily-timeline-items/daily-timeline-items.tsx"],"sourcesContent":["import { memo, useMemo, type FC } from 'react';\n\nimport FlexView from '../../../ui/layout/flex-view';\nimport Accordion from '../../../ui/simple-accordian/accordion';\nimport AccordionItem from '../../comps/accordion-item/accordion-item';\nimport { getTimelineCardIcon } from '../../comps/accordion-item/utils';\nimport * as Styled from './daily-timeline-items-styled';\nimport type { DailyTimelineItemsProps } from './daily-timeline-items.types';\n\nconst DailyTimelineItems: FC<DailyTimelineItemsProps> = memo(\n ({\n type,\n summary,\n cards,\n onPuzzleClick,\n onReviewClick,\n courseStream,\n shouldShowTag,\n userType,\n }) => {\n const icon = useMemo(() => getTimelineCardIcon(type), [type]);\n\n return (\n <Accordion\n tag={shouldShowTag ? courseStream : undefined}\n title={summary}\n defaultExpanded={false}\n icon={icon ?? ''}\n >\n {cards.length > 0 && (\n <FlexView $gutter={32} $marginBottom={24}>\n {cards.map((card, index) => (\n <Styled.Card\n key={`${card.node_id}-${index}`}\n $isLastCard={index === cards.length - 1}\n >\n <AccordionItem\n card={card}\n onPuzzleClick={onPuzzleClick}\n onReviewClick={onReviewClick}\n type={type}\n userType={userType}\n />\n </Styled.Card>\n ))}\n </FlexView>\n )}\n </Accordion>\n );\n },\n);\n\nexport default DailyTimelineItems;\n"],"names":["DailyTimelineItems","memo","type","summary","cards","onPuzzleClick","onReviewClick","courseStream","shouldShowTag","userType","icon","useMemo","getTimelineCardIcon","jsx","Accordion","FlexView","card","index","Styled.Card","AccordionItem"],"mappings":";;;;;;;AASA,MAAMA,IAAkDC;AAAA,EACtD,CAAC;AAAA,IACC,MAAAC;AAAA,IACA,SAAAC;AAAA,IACA,OAAAC;AAAA,IACA,eAAAC;AAAA,IACA,eAAAC;AAAA,IACA,cAAAC;AAAA,IACA,eAAAC;AAAA,IACA,UAAAC;AAAA,EAAA,MACI;AACE,UAAAC,IAAOC,EAAQ,MAAMC,EAAoBV,CAAI,GAAG,CAACA,CAAI,CAAC;AAG1D,WAAA,gBAAAW;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,KAAKN,IAAgBD,IAAe;AAAA,QACpC,OAAOJ;AAAA,QACP,iBAAiB;AAAA,QACjB,MAAMO,KAAQ;AAAA,QAEb,UAAMN,EAAA,SAAS,KACd,gBAAAS,EAACE,GAAS,EAAA,SAAS,IAAI,eAAe,IACnC,UAAAX,EAAM,IAAI,CAACY,GAAMC,MAChB,gBAAAJ;AAAA,UAACK;AAAAA,UAAA;AAAA,YAEC,aAAaD,MAAUb,EAAM,SAAS;AAAA,YAEtC,UAAA,gBAAAS;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,MAAAH;AAAA,gBACA,eAAAX;AAAA,gBACA,eAAAC;AAAA,gBACA,MAAAJ;AAAA,gBACA,UAAAO;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,UATK,GAAGO,EAAK,OAAO,IAAIC,CAAK;AAAA,QAWhC,CAAA,GACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daily-timeline-styled.js","sources":["../../../../src/features/timeline/daily-timeline/daily-timeline-styled.tsx"],"sourcesContent":["import styled from 'styled-components';\n\nimport FlexView from '../../ui/layout/flex-view';\nimport { type TColorNames } from '../../ui/types';\n\nconst ScrollWrapper = styled(FlexView)`\n overflow-y: auto;\n width: 100%;\n`;\n\nconst DailyTimelineContainer = styled(FlexView)`\n max-width: 512px;\n width: 100%;\n`;\n\nconst DailyTimelineItemsContainer = styled(FlexView)<{ $borderBottomColor: TColorNames }>`\n & > div {\n border-bottom: none;\n }\n & > div:last-child {\n border-bottom: 1px solid ${({ theme, $borderBottomColor }) => theme.colors[$borderBottomColor]};\n }\n`;\n\nconst DailyItems = styled(FlexView)<{ $addedmonthbreak?: boolean }>`\n margin-top: ${({ $addedmonthbreak }) => ($addedmonthbreak ? '-122px' : '0')};\n z-index: 1;\n`;\n\nexport { DailyTimelineContainer, DailyItems, DailyTimelineItemsContainer, ScrollWrapper };\n"],"names":["ScrollWrapper","styled","FlexView","DailyTimelineContainer","DailyTimelineItemsContainer","theme","$borderBottomColor","DailyItems","$addedmonthbreak"],"mappings":";;AAKM,MAAAA,IAAgBC,EAAOC,CAAQ;AAAA;AAAA;AAAA,GAK/BC,IAAyBF,EAAOC,CAAQ;AAAA;AAAA;AAAA,GAKxCE,IAA8BH,EAAOC,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,+BAKpB,CAAC,EAAE,OAAAG,GAAO,oBAAAC,EAAA,MAAyBD,EAAM,OAAOC,CAAkB,CAAC;AAAA;AAAA,GAI5FC,IAAaN,EAAOC,CAAQ;AAAA,gBAClB,CAAC,EAAE,kBAAAM,EAAA,MAAwBA,IAAmB,WAAW,GAAI;AAAA;AAAA;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daily-timeline.js","sources":["../../../../src/features/timeline/daily-timeline/daily-timeline.tsx"],"sourcesContent":["import { isLastDayOfMonth, parseISO } from 'date-fns';\nimport { memo, useCallback, useEffect, useMemo, useRef, useState, type FC } from 'react';\n\nimport { ILLUSTRATIONS } from '../../../assets/illustrations/illustrations';\nimport { Loader } from '../../ui/buttons/button/button-styled';\nimport Error from '../../ui/error/error';\nimport FlexView from '../../ui/layout/flex-view';\nimport AppLoader from '../../ui/loader/app-loader/app-loader';\nimport Separator from '../../ui/separator/separator';\nimport Accordion from '../../ui/simple-accordian/accordion';\nimport Text from '../../ui/text/text';\nimport { type TimelineData, useDailyTimelineGet } from '../api/use-daily-timeline-get';\nimport { getDayMonthYear, getTimelineCardIcon } from '../comps/accordion-item/utils';\nimport DailyTimelineItems from './daily-timeline-items/daily-timeline-items';\nimport * as Styled from './daily-timeline-styled';\nimport { type DailyTimelineProps } from './daily-timeline-types';\nimport MonthBreak from '../comps/month-break';\nimport YearBreak from '../comps/year-break';\n\nconst DailyTimeline: FC<DailyTimelineProps> = memo(\n ({ userType, studentId, courseStreams, onPuzzlesClick, onReviewClick, scrollAreaHeight }) => {\n const timezone = useMemo(() => Intl.DateTimeFormat().resolvedOptions().timeZone, []);\n const [allTimelineData, setAllTimelineData] = useState<TimelineData[]>([]);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const NoActivityIcon = useMemo(() => getTimelineCardIcon('NO_ACTIVITY'), []);\n const {\n get: getTimeline,\n data: timelineData,\n isProcessingFailed,\n isProcessing,\n } = useDailyTimelineGet(studentId);\n const { user_logs: userLogs } = timelineData ?? {};\n\n const fetchTimeline = useCallback(\n (page = 1, append = false) => {\n if (append) {\n setIsLoadingMore(true);\n }\n\n getTimeline(studentId, {\n page,\n size: 10,\n timezone,\n course_stream: userType === 'TEACHER' ? courseStreams : [],\n });\n },\n [getTimeline, studentId, timezone, userType, courseStreams],\n );\n\n useEffect(() => {\n if (timelineData) {\n if (timelineData.curr_page === 1) {\n setAllTimelineData(userLogs ?? []);\n } else {\n setAllTimelineData(prev => [...prev, ...(userLogs ?? [])]);\n setIsLoadingMore(false);\n }\n }\n }, [timelineData, userLogs]);\n\n useEffect(() => {\n fetchTimeline(1, false);\n }, [fetchTimeline]);\n\n useEffect(() => {\n const container = scrollContainerRef.current;\n\n if (!container) return;\n\n const handleScroll = () => {\n if (\n timelineData?.next_page &&\n !isLoadingMore &&\n container.scrollTop + container.clientHeight >= container.scrollHeight - 100\n ) {\n fetchTimeline(timelineData.next_page, true);\n }\n };\n\n container.addEventListener('scroll', handleScroll);\n\n return () => {\n container.removeEventListener('scroll', handleScroll);\n };\n }, [timelineData, isLoadingMore, fetchTimeline]);\n\n if (isProcessingFailed) {\n return <Error height=\"70vh\" onTryAgain={() => fetchTimeline(1, false)} />;\n }\n\n if (isProcessing && !allTimelineData.length) {\n return (\n <FlexView $alignItems=\"center\" $justifyContent=\"center\" $height=\"100%\">\n <AppLoader width=\"100%\" height=\"100%\" />\n </FlexView>\n );\n }\n\n return (\n <Styled.ScrollWrapper\n ref={scrollContainerRef}\n $height={scrollAreaHeight}\n $alignItems=\"center\"\n >\n <Styled.DailyTimelineContainer>\n {allTimelineData.map((entry, index) => {\n const { daily_logs: dailyLogs, from_date: fromDate, to_date: toDate } = entry;\n\n if (dailyLogs) {\n const fromDateObj = parseISO(fromDate);\n const toDateObj = parseISO(toDate);\n\n const {\n day: fromDay,\n month: fromMonth,\n monthName: fromMonthName,\n } = getDayMonthYear(fromDateObj);\n\n const {\n day: toDay,\n month: toMonth,\n year: toYear,\n monthName: toMonthName,\n } = getDayMonthYear(toDateObj);\n\n const isLastDayOfMth = isLastDayOfMonth(toDateObj);\n const isLastDayOfYear = isLastDayOfMth && toMonth === 12 && toDay === 31;\n const shouldShowTag = !!(courseStreams && courseStreams.length > 1);\n\n return (\n <FlexView key={`timeline-entry-${index}`}>\n <YearBreak toYear={toYear} isLastDayOfYear={isLastDayOfYear} />\n {!isLastDayOfYear && fromMonth && isLastDayOfMth && <Separator heightX={1} />}\n <MonthBreak fromMonth={fromMonth} isLastDayOfMth={isLastDayOfMth} />\n <Styled.DailyItems $gutterX={1} $addedmonthbreak={!!(isLastDayOfMth && toMonth)}>\n <Separator heightX={1} />\n <Text $renderAs=\"ac4-black\" $color=\"BLACK_T_60\">\n {fromDate === toDate\n ? `${fromDay} ${fromMonthName}`\n : `${fromDay} - ${toDay} ${toMonthName}`}\n </Text>\n <Separator heightX={1} />\n <Styled.DailyTimelineItemsContainer\n $borderBottomColor={dailyLogs.length > 0 ? 'BLACK' : 'BLACK_T_04'}\n >\n {dailyLogs.length > 0 ? (\n dailyLogs.map((log, logIndex) => (\n <DailyTimelineItems\n key={`timeline-${logIndex}`}\n type={log.type}\n summary={log.summary ?? ''}\n courseStream={log.course_stream ?? undefined}\n cards={log.cards}\n onPuzzleClick={onPuzzlesClick}\n onReviewClick={onReviewClick}\n userType={userType}\n shouldShowTag={shouldShowTag && log.course_stream !== 'CIRCLE'}\n />\n ))\n ) : (\n <Accordion\n icon={NoActivityIcon ?? ''}\n title=\"No Activity\"\n defaultExpanded={false}\n $borderColor=\"BLACK_T_04\"\n $backgroundColor=\"BLACK_T_15\"\n />\n )}\n </Styled.DailyTimelineItemsContainer>\n <Separator heightX={1} />\n </Styled.DailyItems>\n </FlexView>\n );\n }\n })}\n\n {isLoadingMore && (\n <FlexView $alignItems=\"center\" $justifyContent=\"center\" $height=\"100%\">\n <Loader src={ILLUSTRATIONS.LOADER} alt=\"Loader\" $size=\"large\" />\n </FlexView>\n )}\n </Styled.DailyTimelineContainer>\n </Styled.ScrollWrapper>\n );\n },\n);\n\nexport default DailyTimeline;\n"],"names":["DailyTimeline","memo","userType","studentId","courseStreams","onPuzzlesClick","onReviewClick","scrollAreaHeight","timezone","useMemo","allTimelineData","setAllTimelineData","useState","isLoadingMore","setIsLoadingMore","scrollContainerRef","useRef","NoActivityIcon","getTimelineCardIcon","getTimeline","timelineData","isProcessingFailed","isProcessing","useDailyTimelineGet","userLogs","fetchTimeline","useCallback","page","append","useEffect","prev","container","handleScroll","jsx","Error","FlexView","AppLoader","Styled.ScrollWrapper","jsxs","Styled.DailyTimelineContainer","entry","index","dailyLogs","fromDate","toDate","fromDateObj","parseISO","toDateObj","fromDay","fromMonth","fromMonthName","getDayMonthYear","toDay","toMonth","toYear","toMonthName","isLastDayOfMth","isLastDayOfMonth","isLastDayOfYear","shouldShowTag","YearBreak","Separator","MonthBreak","Styled.DailyItems","Text","Styled.DailyTimelineItemsContainer","log","logIndex","DailyTimelineItems","Accordion","Loader","ILLUSTRATIONS","DailyTimeline$1"],"mappings":"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"}
|
|
File without changes
|