@cuemath/leap 3.5.34-j1 → 3.5.35-j1

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.
@@ -50,7 +50,7 @@ const p = 360 / 100, j = m(
50
50
  c,
51
51
  {
52
52
  startAngle: o * p,
53
- targetAngle: t * p,
53
+ targetAngle: (t - 1e-5) * p,
54
54
  strokeWidth: 2,
55
55
  color: n,
56
56
  radius: r / 2,
@@ -1 +1 @@
1
- {"version":3,"file":"chapter-circular-progress.js","sources":["../../../../../../src/features/chapters/chapters-list/chapter-item/chapter-circular-progress/chapter-circular-progress.tsx"],"sourcesContent":["import { memo, type FC } from 'react';\n\nimport * as Styled from './chapter-circular-progress.styled';\nimport { type IChapterCircularProgressProps } from './chapter-circular-progress.types';\nimport Check2Icon from '../../../../../assets/line-icons/icons/check2';\nimport AnimatedArc from '../../../../ui/animated-arc/animated-arc';\n\nconst CIRCLE_DEGREES = 360 / 100;\n\nconst ChapterCircularProgress: FC<IChapterCircularProgressProps> = memo(\n function ChapterCircularProgress({\n completionPercentage,\n imageUrl,\n delta,\n imageWidth = 96,\n iconWidth = 20,\n iconColor = 'BLACK_1',\n iconPosition = { top: 5, right: 5 },\n iconBackgroundColor = 'WHITE_1',\n deltaProgressColor = 'GREEN_5',\n }) {\n const showAdditionalProgress = delta && delta > 0 && deltaProgressColor;\n const isChapterComplete = completionPercentage + (delta ?? 0) === 100;\n\n return (\n <Styled.ChapterImageWrapper\n $width=\"fit-content\"\n $position=\"relative\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n >\n <Styled.ChapterProgressWrapper>\n <Styled.ChapterProgressSVG width={`${imageWidth}px`} height={`${imageWidth}px`}>\n <Styled.ChapterProgressSVGCircle\n $progress={0}\n r={imageWidth / 2 - 1}\n cx={imageWidth / 2}\n cy={imageWidth / 2}\n />\n <AnimatedArc\n startAngle={0}\n targetAngle={(completionPercentage - 0.00001) * CIRCLE_DEGREES} // added .00001 to avoid full circle bug\n strokeWidth={2}\n radius={imageWidth / 2}\n zIndex={2}\n color=\"BLACK_1\"\n mode=\"fade\"\n />\n {!!showAdditionalProgress && (\n <AnimatedArc\n startAngle={completionPercentage * CIRCLE_DEGREES}\n targetAngle={delta * CIRCLE_DEGREES}\n strokeWidth={2}\n color={deltaProgressColor}\n radius={imageWidth / 2}\n showAnimatedRainbowArc={false}\n zIndex={2}\n mode=\"fade\"\n />\n )}\n </Styled.ChapterProgressSVG>\n </Styled.ChapterProgressWrapper>\n <Styled.ChapterImage src={imageUrl} alt=\"Chapter Image\" $imageWidth={imageWidth} />\n {isChapterComplete && (\n <Styled.StyledCheckIconWrapper\n $top={iconPosition.top}\n $right={iconPosition.right}\n $width={iconWidth}\n $background={iconBackgroundColor}\n >\n <Check2Icon width={iconWidth} height={iconWidth} color={iconColor} />\n </Styled.StyledCheckIconWrapper>\n )}\n </Styled.ChapterImageWrapper>\n );\n },\n);\n\nexport default ChapterCircularProgress;\n"],"names":["CIRCLE_DEGREES","ChapterCircularProgress","memo","completionPercentage","imageUrl","delta","imageWidth","iconWidth","iconColor","iconPosition","iconBackgroundColor","deltaProgressColor","showAdditionalProgress","isChapterComplete","jsxs","Styled.ChapterImageWrapper","jsx","Styled.ChapterProgressWrapper","Styled.ChapterProgressSVG","Styled.ChapterProgressSVGCircle","AnimatedArc","Styled.ChapterImage","Styled.StyledCheckIconWrapper","Check2Icon"],"mappings":";;;;;AAOA,MAAMA,IAAiB,MAAM,KAEvBC,IAA6DC;AAAA,EACjE,SAAiC;AAAA,IAC/B,sBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,OAAAC;AAAA,IACA,YAAAC,IAAa;AAAA,IACb,WAAAC,IAAY;AAAA,IACZ,WAAAC,IAAY;AAAA,IACZ,cAAAC,IAAe,EAAE,KAAK,GAAG,OAAO,EAAE;AAAA,IAClC,qBAAAC,IAAsB;AAAA,IACtB,oBAAAC,IAAqB;AAAA,EAAA,GACpB;AACK,UAAAC,IAAyBP,KAASA,IAAQ,KAAKM,GAC/CE,IAAoBV,KAAwBE,KAAS,OAAO;AAGhE,WAAA,gBAAAS;AAAA,MAACC;AAAAA,MAAA;AAAA,QACC,QAAO;AAAA,QACP,WAAU;AAAA,QACV,iBAAgB;AAAA,QAChB,aAAY;AAAA,QAEZ,UAAA;AAAA,UAAA,gBAAAC,EAACC,GAAA,EACC,UAAA,gBAAAH,EAACI,GAAA,EAA0B,OAAO,GAAGZ,CAAU,MAAM,QAAQ,GAAGA,CAAU,MACxE,UAAA;AAAA,YAAA,gBAAAU;AAAA,cAACG;AAAAA,cAAA;AAAA,gBACC,WAAW;AAAA,gBACX,GAAGb,IAAa,IAAI;AAAA,gBACpB,IAAIA,IAAa;AAAA,gBACjB,IAAIA,IAAa;AAAA,cAAA;AAAA,YACnB;AAAA,YACA,gBAAAU;AAAA,cAACI;AAAA,cAAA;AAAA,gBACC,YAAY;AAAA,gBACZ,cAAcjB,IAAuB,QAAWH;AAAA,gBAChD,aAAa;AAAA,gBACb,QAAQM,IAAa;AAAA,gBACrB,QAAQ;AAAA,gBACR,OAAM;AAAA,gBACN,MAAK;AAAA,cAAA;AAAA,YACP;AAAA,YACC,CAAC,CAACM,KACD,gBAAAI;AAAA,cAACI;AAAA,cAAA;AAAA,gBACC,YAAYjB,IAAuBH;AAAA,gBACnC,aAAaK,IAAQL;AAAA,gBACrB,aAAa;AAAA,gBACb,OAAOW;AAAA,gBACP,QAAQL,IAAa;AAAA,gBACrB,wBAAwB;AAAA,gBACxB,QAAQ;AAAA,gBACR,MAAK;AAAA,cAAA;AAAA,YACP;AAAA,UAAA,EAAA,CAEJ,EACF,CAAA;AAAA,UACA,gBAAAU,EAACK,GAAA,EAAoB,KAAKjB,GAAU,KAAI,iBAAgB,aAAaE,GAAY;AAAA,UAChFO,KACC,gBAAAG;AAAA,YAACM;AAAAA,YAAA;AAAA,cACC,MAAMb,EAAa;AAAA,cACnB,QAAQA,EAAa;AAAA,cACrB,QAAQF;AAAA,cACR,aAAaG;AAAA,cAEb,4BAACa,GAAW,EAAA,OAAOhB,GAAW,QAAQA,GAAW,OAAOC,GAAW;AAAA,YAAA;AAAA,UACrE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;"}
1
+ {"version":3,"file":"chapter-circular-progress.js","sources":["../../../../../../src/features/chapters/chapters-list/chapter-item/chapter-circular-progress/chapter-circular-progress.tsx"],"sourcesContent":["import { memo, type FC } from 'react';\n\nimport * as Styled from './chapter-circular-progress.styled';\nimport { type IChapterCircularProgressProps } from './chapter-circular-progress.types';\nimport Check2Icon from '../../../../../assets/line-icons/icons/check2';\nimport AnimatedArc from '../../../../ui/animated-arc/animated-arc';\n\nconst CIRCLE_DEGREES = 360 / 100;\n\nconst ChapterCircularProgress: FC<IChapterCircularProgressProps> = memo(\n function ChapterCircularProgress({\n completionPercentage,\n imageUrl,\n delta,\n imageWidth = 96,\n iconWidth = 20,\n iconColor = 'BLACK_1',\n iconPosition = { top: 5, right: 5 },\n iconBackgroundColor = 'WHITE_1',\n deltaProgressColor = 'GREEN_5',\n }) {\n const showAdditionalProgress = delta && delta > 0 && deltaProgressColor;\n const isChapterComplete = completionPercentage + (delta ?? 0) === 100;\n\n return (\n <Styled.ChapterImageWrapper\n $width=\"fit-content\"\n $position=\"relative\"\n $justifyContent=\"center\"\n $alignItems=\"center\"\n >\n <Styled.ChapterProgressWrapper>\n <Styled.ChapterProgressSVG width={`${imageWidth}px`} height={`${imageWidth}px`}>\n <Styled.ChapterProgressSVGCircle\n $progress={0}\n r={imageWidth / 2 - 1}\n cx={imageWidth / 2}\n cy={imageWidth / 2}\n />\n <AnimatedArc\n startAngle={0}\n targetAngle={(completionPercentage - 0.00001) * CIRCLE_DEGREES} // added .00001 to avoid full circle bug\n strokeWidth={2}\n radius={imageWidth / 2}\n zIndex={2}\n color=\"BLACK_1\"\n mode=\"fade\"\n />\n {!!showAdditionalProgress && (\n <AnimatedArc\n startAngle={completionPercentage * CIRCLE_DEGREES}\n targetAngle={(delta - 0.00001) * CIRCLE_DEGREES}\n strokeWidth={2}\n color={deltaProgressColor}\n radius={imageWidth / 2}\n showAnimatedRainbowArc={false}\n zIndex={2}\n mode=\"fade\"\n />\n )}\n </Styled.ChapterProgressSVG>\n </Styled.ChapterProgressWrapper>\n <Styled.ChapterImage src={imageUrl} alt=\"Chapter Image\" $imageWidth={imageWidth} />\n {isChapterComplete && (\n <Styled.StyledCheckIconWrapper\n $top={iconPosition.top}\n $right={iconPosition.right}\n $width={iconWidth}\n $background={iconBackgroundColor}\n >\n <Check2Icon width={iconWidth} height={iconWidth} color={iconColor} />\n </Styled.StyledCheckIconWrapper>\n )}\n </Styled.ChapterImageWrapper>\n );\n },\n);\n\nexport default ChapterCircularProgress;\n"],"names":["CIRCLE_DEGREES","ChapterCircularProgress","memo","completionPercentage","imageUrl","delta","imageWidth","iconWidth","iconColor","iconPosition","iconBackgroundColor","deltaProgressColor","showAdditionalProgress","isChapterComplete","jsxs","Styled.ChapterImageWrapper","jsx","Styled.ChapterProgressWrapper","Styled.ChapterProgressSVG","Styled.ChapterProgressSVGCircle","AnimatedArc","Styled.ChapterImage","Styled.StyledCheckIconWrapper","Check2Icon"],"mappings":";;;;;AAOA,MAAMA,IAAiB,MAAM,KAEvBC,IAA6DC;AAAA,EACjE,SAAiC;AAAA,IAC/B,sBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,OAAAC;AAAA,IACA,YAAAC,IAAa;AAAA,IACb,WAAAC,IAAY;AAAA,IACZ,WAAAC,IAAY;AAAA,IACZ,cAAAC,IAAe,EAAE,KAAK,GAAG,OAAO,EAAE;AAAA,IAClC,qBAAAC,IAAsB;AAAA,IACtB,oBAAAC,IAAqB;AAAA,EAAA,GACpB;AACK,UAAAC,IAAyBP,KAASA,IAAQ,KAAKM,GAC/CE,IAAoBV,KAAwBE,KAAS,OAAO;AAGhE,WAAA,gBAAAS;AAAA,MAACC;AAAAA,MAAA;AAAA,QACC,QAAO;AAAA,QACP,WAAU;AAAA,QACV,iBAAgB;AAAA,QAChB,aAAY;AAAA,QAEZ,UAAA;AAAA,UAAA,gBAAAC,EAACC,GAAA,EACC,UAAA,gBAAAH,EAACI,GAAA,EAA0B,OAAO,GAAGZ,CAAU,MAAM,QAAQ,GAAGA,CAAU,MACxE,UAAA;AAAA,YAAA,gBAAAU;AAAA,cAACG;AAAAA,cAAA;AAAA,gBACC,WAAW;AAAA,gBACX,GAAGb,IAAa,IAAI;AAAA,gBACpB,IAAIA,IAAa;AAAA,gBACjB,IAAIA,IAAa;AAAA,cAAA;AAAA,YACnB;AAAA,YACA,gBAAAU;AAAA,cAACI;AAAA,cAAA;AAAA,gBACC,YAAY;AAAA,gBACZ,cAAcjB,IAAuB,QAAWH;AAAA,gBAChD,aAAa;AAAA,gBACb,QAAQM,IAAa;AAAA,gBACrB,QAAQ;AAAA,gBACR,OAAM;AAAA,gBACN,MAAK;AAAA,cAAA;AAAA,YACP;AAAA,YACC,CAAC,CAACM,KACD,gBAAAI;AAAA,cAACI;AAAA,cAAA;AAAA,gBACC,YAAYjB,IAAuBH;AAAA,gBACnC,cAAcK,IAAQ,QAAWL;AAAA,gBACjC,aAAa;AAAA,gBACb,OAAOW;AAAA,gBACP,QAAQL,IAAa;AAAA,gBACrB,wBAAwB;AAAA,gBACxB,QAAQ;AAAA,gBACR,MAAK;AAAA,cAAA;AAAA,YACP;AAAA,UAAA,EAAA,CAEJ,EACF,CAAA;AAAA,UACA,gBAAAU,EAACK,GAAA,EAAoB,KAAKjB,GAAU,KAAI,iBAAgB,aAAaE,GAAY;AAAA,UAChFO,KACC,gBAAAG;AAAA,YAACM;AAAAA,YAAA;AAAA,cACC,MAAMb,EAAa;AAAA,cACnB,QAAQA,EAAa;AAAA,cACrB,QAAQF;AAAA,cACR,aAAaG;AAAA,cAEb,4BAACa,GAAW,EAAA,OAAOhB,GAAW,QAAQA,GAAW,OAAOC,GAAW;AAAA,YAAA;AAAA,UACrE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"daily-timeline-types.js","sources":["../../../../src/features/timeline/daily-timeline/daily-timeline-types.ts"],"sourcesContent":["import { type TCourseStream } from '../../milestone/create/milestone-create-types';\nimport { type ITimeLineItem, type ITimelineData } from './api/use-daily-timeline-get';\n\nexport enum NODE_STATE {\n COMPLETED = 'COMPLETED',\n IN_PROGRESS = 'IN_PROGRESS',\n PENDING = 'PENDING',\n NOT_STARTED = 'NOT_STARTED',\n WAIT_FOR_REVIEW = 'WAIT_FOR_REVIEW',\n}\n\nexport enum USER_TYPE {\n TEACHER = 'TEACHER',\n STUDENT = 'STUDENT',\n PARENT = 'PARENT',\n}\n\nexport enum CARD_TYPE {\n CW = 'CW',\n HW = 'HW',\n CIRCLE = 'CIRCLE',\n}\n\nexport interface IDailyTimelineProps {\n userType: USER_TYPE;\n studentId: string;\n courseStreams?: TCourseStream[];\n onPuzzleClick?: (card: ITimeLineItem) => void;\n onReviewClick?: (\n userNodeId: string | null,\n isSatMockTestBlock: boolean,\n userBlockId: string | null,\n ) => void;\n scrollAreaHeight?: string | number;\n onAPIComplete?: () => void;\n}\n\nexport interface IDailyTimelineItemsProps extends IDailyTimelineProps {\n entry: ITimelineData;\n isFirstElement: boolean;\n shouldShowTag: boolean;\n}\n"],"names":["NODE_STATE","USER_TYPE","CARD_TYPE"],"mappings":"AAGY,IAAAA,sBAAAA,OACVA,EAAA,YAAY,aACZA,EAAA,cAAc,eACdA,EAAA,UAAU,WACVA,EAAA,cAAc,eACdA,EAAA,kBAAkB,mBALRA,IAAAA,KAAA,CAAA,CAAA,GAQAC,sBAAAA,OACVA,EAAA,UAAU,WACVA,EAAA,UAAU,WACVA,EAAA,SAAS,UAHCA,IAAAA,KAAA,CAAA,CAAA,GAMAC,sBAAAA,OACVA,EAAA,KAAK,MACLA,EAAA,KAAK,MACLA,EAAA,SAAS,UAHCA,IAAAA,KAAA,CAAA,CAAA;"}
1
+ {"version":3,"file":"daily-timeline-types.js","sources":["../../../../src/features/timeline/daily-timeline/daily-timeline-types.ts"],"sourcesContent":["import { type TCourseStream } from '../../milestone/create/milestone-create-types';\nimport { type ITimeLineItem, type ITimelineData } from './api/use-daily-timeline-get';\n\nexport enum NODE_STATE {\n COMPLETED = 'COMPLETED',\n IN_PROGRESS = 'IN_PROGRESS',\n PENDING = 'PENDING',\n NOT_STARTED = 'NOT_STARTED',\n WAIT_FOR_REVIEW = 'WAIT_FOR_REVIEW',\n}\n\nexport enum USER_TYPE {\n TEACHER = 'TEACHER',\n STUDENT = 'STUDENT',\n PARENT = 'PARENT',\n}\n\nexport enum CARD_TYPE {\n CW = 'CW',\n HW = 'HW',\n CIRCLE = 'CIRCLE',\n}\n\nexport interface IDailyTimelineProps {\n userType: USER_TYPE;\n studentId: string;\n courseStreams?: TCourseStream[];\n onPuzzleClick?: (card: ITimeLineItem) => void;\n onReviewClick?: (\n userNodeId: string | null,\n isSatMockTestBlock: boolean,\n userBlockId: string | null,\n ) => void;\n scrollAreaHeight?: string | number;\n onAPIComplete?: (success: boolean) => void;\n}\n\nexport interface IDailyTimelineItemsProps extends IDailyTimelineProps {\n entry: ITimelineData;\n isFirstElement: boolean;\n shouldShowTag: boolean;\n}\n"],"names":["NODE_STATE","USER_TYPE","CARD_TYPE"],"mappings":"AAGY,IAAAA,sBAAAA,OACVA,EAAA,YAAY,aACZA,EAAA,cAAc,eACdA,EAAA,UAAU,WACVA,EAAA,cAAc,eACdA,EAAA,kBAAkB,mBALRA,IAAAA,KAAA,CAAA,CAAA,GAQAC,sBAAAA,OACVA,EAAA,UAAU,WACVA,EAAA,UAAU,WACVA,EAAA,SAAS,UAHCA,IAAAA,KAAA,CAAA,CAAA,GAMAC,sBAAAA,OACVA,EAAA,KAAK,MACLA,EAAA,KAAK,MACLA,EAAA,SAAS,UAHCA,IAAAA,KAAA,CAAA,CAAA;"}
@@ -1,11 +1,11 @@
1
1
  import { jsx as s, jsxs as R } from "react/jsx-runtime";
2
- import { memo as A, useState as C, useCallback as h, useMemo as F, useEffect as m, Fragment as V } from "react";
2
+ import { memo as A, useState as M, useCallback as T, useMemo as F, useEffect as m, Fragment as V } from "react";
3
3
  import { useDailyTimelineGet as Y } from "./api/use-daily-timeline-get.js";
4
4
  import { ScrollWrapper as j, DailyTimelineContainer as P } from "./daily-timeline-styled.js";
5
- import { USER_TYPE as k, CARD_TYPE as M } from "./daily-timeline-types.js";
5
+ import { USER_TYPE as k, CARD_TYPE as z } from "./daily-timeline-types.js";
6
6
  import { INITIAL_PAGE as G } from "./comps/constants.js";
7
7
  import { getTimezone as O } from "../../../helpers/date-time.js";
8
- import { DAILY_TIMELINE_ANALYTICS_EVENTS as T } from "./daily-timeline-events.js";
8
+ import { DAILY_TIMELINE_ANALYTICS_EVENTS as L } from "./daily-timeline-events.js";
9
9
  import U from "./daily-timeline-view.js";
10
10
  import { useUIContext as W } from "../../ui/context/context.js";
11
11
  import b from "../../hooks/use-previous.js";
@@ -13,69 +13,69 @@ import X from "../../ui/error/error.js";
13
13
  import q from "../../ui/layout/flex-view.js";
14
14
  import B from "../../ui/intersection-loader/intersection-loader.js";
15
15
  import H from "../../ui/loader/app-loader/app-loader.js";
16
- const z = A(
16
+ const N = A(
17
17
  ({
18
- userType: E,
18
+ userType: g,
19
19
  studentId: i,
20
20
  courseStreams: f,
21
- onPuzzleClick: N,
22
- onReviewClick: v,
23
- scrollAreaHeight: u,
21
+ onPuzzleClick: v,
22
+ onReviewClick: x,
23
+ scrollAreaHeight: y,
24
24
  onAPIComplete: l
25
25
  }) => {
26
- const [c, g] = C([]), [_, L] = C(!1), { onEvent: t } = W(), {
27
- get: y,
26
+ const [c, _] = M([]), [p, S] = M(!1), { onEvent: t } = W(), {
27
+ get: d,
28
28
  data: e,
29
- isProcessingFailed: x,
29
+ isProcessingFailed: E,
30
30
  isProcessing: I,
31
- isProcessed: S
32
- } = Y(i), d = b(e == null ? void 0 : e.curr_page), n = h(
31
+ isProcessed: h
32
+ } = Y(i), C = b(e == null ? void 0 : e.curr_page), a = T(
33
33
  (r = G, o = !1) => {
34
- o && L(!0), y(i, {
34
+ o && S(!0), d(i, {
35
35
  page: r,
36
36
  timezone: O(),
37
- course_stream: E === k.TEACHER ? f : []
37
+ course_stream: g === k.TEACHER ? f : []
38
38
  });
39
39
  },
40
- [y, i, E, f]
40
+ [d, i, g, f]
41
41
  ), $ = F(() => {
42
42
  const r = /* @__PURE__ */ new Set();
43
- c.forEach((a) => {
44
- a.daily_logs && a.daily_logs.forEach((p) => {
45
- p.course_stream && p.course_stream !== M.CIRCLE && r.add(p.course_stream);
43
+ c.forEach((n) => {
44
+ n.daily_logs && n.daily_logs.forEach((u) => {
45
+ u.course_stream && u.course_stream !== z.CIRCLE && r.add(u.course_stream);
46
46
  });
47
47
  });
48
48
  const o = new Set(
49
- (f || []).filter((a) => String(a) !== M.CIRCLE)
49
+ (f || []).filter((n) => String(n) !== z.CIRCLE)
50
50
  );
51
- return o.size > 1 || r.size > 1 || o.size > 0 && r.size > 0 && (o.size !== r.size || !Array.from(o).every((a) => r.has(a)));
52
- }, [c, f]), w = h(() => {
53
- e != null && e.next_page && !_ && (n(e.next_page, !0), t(T.TIMELINE_SCROLLED, {
51
+ return o.size > 1 || r.size > 1 || o.size > 0 && r.size > 0 && (o.size !== r.size || !Array.from(o).every((n) => r.has(n)));
52
+ }, [c, f]), w = T(() => {
53
+ e != null && e.next_page && !p && (a(e.next_page, !0), t(L.TIMELINE_SCROLLED, {
54
54
  student_id: i
55
55
  }));
56
- }, [e, i, t, _, n]), D = h(() => {
57
- n(1, !1), g([]);
58
- }, [n]);
56
+ }, [e, i, t, p, a]), D = T(() => {
57
+ a(1, !1), _([]);
58
+ }, [a]);
59
59
  return m(() => {
60
- e && (e.curr_page === 1 ? g((e == null ? void 0 : e.user_logs) ?? []) : e.curr_page && d !== e.curr_page && (g((r) => [...r, ...e.user_logs ?? []]), L(!1)));
61
- }, [e, d]), m(() => {
62
- t(T.TIMELINE_VIEWED, {
60
+ e && (e.curr_page === 1 ? _((e == null ? void 0 : e.user_logs) ?? []) : e.curr_page && C !== e.curr_page && (_((r) => [...r, ...e.user_logs ?? []]), S(!1)));
61
+ }, [e, C]), m(() => {
62
+ t(L.TIMELINE_VIEWED, {
63
63
  student_id: i
64
64
  });
65
65
  }, [i, t]), m(() => () => {
66
- t(T.TIMELINE_CLOSED, {
66
+ t(L.TIMELINE_CLOSED, {
67
67
  student_id: i
68
68
  });
69
69
  }, [i, t]), m(() => {
70
- n(1, !1);
71
- }, [n]), m(() => {
72
- S && (l == null || l());
73
- }, [S, l]), x ? /* @__PURE__ */ s(X, { height: u ?? "100vh", onTryAgain: D }) : I && !c.length ? /* @__PURE__ */ s(
70
+ a(1, !1);
71
+ }, [a]), m(() => {
72
+ (h || E) && (l == null || l(!!(h && !E)));
73
+ }, [h, E, l]), E ? /* @__PURE__ */ s(X, { height: y ?? "100vh", onTryAgain: D }) : I && !c.length ? /* @__PURE__ */ s(
74
74
  q,
75
75
  {
76
76
  $alignItems: "center",
77
77
  $justifyContent: "center",
78
- $height: u || "100vh",
78
+ $height: y || "100vh",
79
79
  children: /* @__PURE__ */ s(H, { width: "100%", height: "100%" })
80
80
  }
81
81
  ) : /* @__PURE__ */ s(j, { $alignItems: "center", $gapX: 1, children: /* @__PURE__ */ R(P, { children: [
@@ -85,9 +85,9 @@ const z = A(
85
85
  entry: r,
86
86
  isFirstElement: o === 0,
87
87
  shouldShowTag: $,
88
- onPuzzleClick: N,
89
- onReviewClick: v,
90
- userType: E,
88
+ onPuzzleClick: v,
89
+ onReviewClick: x,
90
+ userType: g,
91
91
  studentId: i
92
92
  }
93
93
  ) }, `timeline-entry-${o}`)),
@@ -95,15 +95,15 @@ const z = A(
95
95
  B,
96
96
  {
97
97
  onLoadMore: w,
98
- isLoading: _,
98
+ isLoading: p,
99
99
  hasMore: !!(e != null && e.next_page)
100
100
  }
101
101
  )
102
102
  ] }) });
103
103
  }
104
104
  );
105
- z.displayName = "DailyTimeline";
106
- const ce = z;
105
+ N.displayName = "DailyTimeline";
106
+ const ce = N;
107
107
  export {
108
108
  ce as default
109
109
  };
@@ -1 +1 @@
1
- {"version":3,"file":"daily-timeline.js","sources":["../../../../src/features/timeline/daily-timeline/daily-timeline.tsx"],"sourcesContent":["import { Fragment, memo, useCallback, useEffect, useMemo, useState, type FC } from 'react';\n\nimport { type ITimelineData, useDailyTimelineGet } from './api/use-daily-timeline-get';\nimport * as Styled from './daily-timeline-styled';\nimport { CARD_TYPE, USER_TYPE, type IDailyTimelineProps } from './daily-timeline-types';\nimport { INITIAL_PAGE } from './comps/constants';\nimport { getTimezone } from '../../../helpers/date-time';\nimport { DAILY_TIMELINE_ANALYTICS_EVENTS } from './daily-timeline-events';\nimport DailyTimelineView from './daily-timeline-view';\nimport { useUIContext } from '../../ui/context/context';\nimport usePrevious from '../../hooks/use-previous';\nimport Error from '../../ui/error/error';\nimport FlexView from '../../ui/layout/flex-view';\nimport IntersectionLoader from '../../ui/intersection-loader/intersection-loader';\nimport AppLoader from '../../ui/loader/app-loader/app-loader';\n\nconst DailyTimeline: FC<IDailyTimelineProps> = memo(\n ({\n userType,\n studentId,\n courseStreams,\n onPuzzleClick,\n onReviewClick,\n scrollAreaHeight,\n onAPIComplete,\n }) => {\n const [allTimelineData, setAllTimelineData] = useState<ITimelineData[]>([]);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const { onEvent: trackEvent } = useUIContext();\n const {\n get: getTimeline,\n data: timelineData,\n isProcessingFailed,\n isProcessing,\n isProcessed,\n } = useDailyTimelineGet(studentId);\n\n const prevCurrentPage = usePrevious(timelineData?.curr_page);\n\n const fetchTimeline = useCallback(\n (page = INITIAL_PAGE, append = false) => {\n if (append) {\n setIsLoadingMore(true);\n }\n\n getTimeline(studentId, {\n page,\n timezone: getTimezone(),\n course_stream: userType === USER_TYPE.TEACHER ? courseStreams : [],\n });\n },\n [getTimeline, studentId, userType, courseStreams],\n );\n\n const shouldShowTag = useMemo(() => {\n const allCourseStreams = new Set<string>();\n\n allTimelineData.forEach(entry => {\n if (entry.daily_logs) {\n entry.daily_logs.forEach(log => {\n if (log.course_stream && log.course_stream !== CARD_TYPE.CIRCLE) {\n allCourseStreams.add(log.course_stream);\n }\n });\n }\n });\n\n const courseStreamsSet = new Set(\n (courseStreams || []).filter(stream => String(stream) !== CARD_TYPE.CIRCLE),\n );\n\n return (\n courseStreamsSet.size > 1 ||\n allCourseStreams.size > 1 ||\n (courseStreamsSet.size > 0 &&\n allCourseStreams.size > 0 &&\n (courseStreamsSet.size !== allCourseStreams.size ||\n !Array.from(courseStreamsSet).every(stream => allCourseStreams.has(stream))))\n );\n }, [allTimelineData, courseStreams]);\n\n const handleLoadMore = useCallback(() => {\n if (timelineData?.next_page && !isLoadingMore) {\n fetchTimeline(timelineData.next_page, true);\n trackEvent(DAILY_TIMELINE_ANALYTICS_EVENTS.TIMELINE_SCROLLED, {\n student_id: studentId,\n });\n }\n }, [timelineData, studentId, trackEvent, isLoadingMore, fetchTimeline]);\n\n const onTryAgain = useCallback(() => {\n fetchTimeline(1, false);\n setAllTimelineData([]);\n }, [fetchTimeline]);\n\n useEffect(() => {\n if (timelineData) {\n if (timelineData.curr_page === 1) {\n setAllTimelineData(timelineData?.user_logs ?? []);\n } else if (timelineData.curr_page && prevCurrentPage !== timelineData.curr_page) {\n setAllTimelineData(prev => [...prev, ...(timelineData.user_logs ?? [])]);\n setIsLoadingMore(false);\n }\n }\n }, [timelineData, prevCurrentPage]);\n\n useEffect(() => {\n trackEvent(DAILY_TIMELINE_ANALYTICS_EVENTS.TIMELINE_VIEWED, {\n student_id: studentId,\n });\n }, [studentId, trackEvent]);\n\n useEffect(() => {\n return () => {\n trackEvent(DAILY_TIMELINE_ANALYTICS_EVENTS.TIMELINE_CLOSED, {\n student_id: studentId,\n });\n };\n }, [studentId, trackEvent]);\n\n useEffect(() => {\n fetchTimeline(1, false);\n }, [fetchTimeline]);\n\n useEffect(() => {\n if (isProcessed) {\n onAPIComplete?.();\n }\n }, [isProcessed, onAPIComplete]);\n\n if (isProcessingFailed) {\n return <Error height={scrollAreaHeight ?? '100vh'} onTryAgain={onTryAgain} />;\n }\n\n if (isProcessing && !allTimelineData.length) {\n return (\n <FlexView\n $alignItems=\"center\"\n $justifyContent=\"center\"\n $height={scrollAreaHeight || '100vh'}\n >\n <AppLoader width=\"100%\" height=\"100%\" />\n </FlexView>\n );\n }\n\n return (\n <Styled.ScrollWrapper $alignItems=\"center\" $gapX={1}>\n <Styled.DailyTimelineContainer>\n {allTimelineData.map((entry, index) => (\n <Fragment key={`timeline-entry-${index}`}>\n <DailyTimelineView\n entry={entry}\n isFirstElement={index === 0}\n shouldShowTag={shouldShowTag}\n onPuzzleClick={onPuzzleClick}\n onReviewClick={onReviewClick}\n userType={userType}\n studentId={studentId}\n />\n </Fragment>\n ))}\n <IntersectionLoader\n onLoadMore={handleLoadMore}\n isLoading={isLoadingMore}\n hasMore={!!timelineData?.next_page}\n />\n </Styled.DailyTimelineContainer>\n </Styled.ScrollWrapper>\n );\n },\n);\n\nDailyTimeline.displayName = 'DailyTimeline';\n\nexport default DailyTimeline;\n"],"names":["DailyTimeline","memo","userType","studentId","courseStreams","onPuzzleClick","onReviewClick","scrollAreaHeight","onAPIComplete","allTimelineData","setAllTimelineData","useState","isLoadingMore","setIsLoadingMore","trackEvent","useUIContext","getTimeline","timelineData","isProcessingFailed","isProcessing","isProcessed","useDailyTimelineGet","prevCurrentPage","usePrevious","fetchTimeline","useCallback","page","INITIAL_PAGE","append","getTimezone","USER_TYPE","shouldShowTag","useMemo","allCourseStreams","entry","log","CARD_TYPE","courseStreamsSet","stream","handleLoadMore","DAILY_TIMELINE_ANALYTICS_EVENTS","onTryAgain","useEffect","prev","jsx","Error","FlexView","AppLoader","Styled.ScrollWrapper","jsxs","Styled.DailyTimelineContainer","index","Fragment","DailyTimelineView","IntersectionLoader","DailyTimeline$1"],"mappings":"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"}
1
+ {"version":3,"file":"daily-timeline.js","sources":["../../../../src/features/timeline/daily-timeline/daily-timeline.tsx"],"sourcesContent":["import { Fragment, memo, useCallback, useEffect, useMemo, useState, type FC } from 'react';\n\nimport { type ITimelineData, useDailyTimelineGet } from './api/use-daily-timeline-get';\nimport * as Styled from './daily-timeline-styled';\nimport { CARD_TYPE, USER_TYPE, type IDailyTimelineProps } from './daily-timeline-types';\nimport { INITIAL_PAGE } from './comps/constants';\nimport { getTimezone } from '../../../helpers/date-time';\nimport { DAILY_TIMELINE_ANALYTICS_EVENTS } from './daily-timeline-events';\nimport DailyTimelineView from './daily-timeline-view';\nimport { useUIContext } from '../../ui/context/context';\nimport usePrevious from '../../hooks/use-previous';\nimport Error from '../../ui/error/error';\nimport FlexView from '../../ui/layout/flex-view';\nimport IntersectionLoader from '../../ui/intersection-loader/intersection-loader';\nimport AppLoader from '../../ui/loader/app-loader/app-loader';\n\nconst DailyTimeline: FC<IDailyTimelineProps> = memo(\n ({\n userType,\n studentId,\n courseStreams,\n onPuzzleClick,\n onReviewClick,\n scrollAreaHeight,\n onAPIComplete,\n }) => {\n const [allTimelineData, setAllTimelineData] = useState<ITimelineData[]>([]);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const { onEvent: trackEvent } = useUIContext();\n const {\n get: getTimeline,\n data: timelineData,\n isProcessingFailed,\n isProcessing,\n isProcessed,\n } = useDailyTimelineGet(studentId);\n\n const prevCurrentPage = usePrevious(timelineData?.curr_page);\n\n const fetchTimeline = useCallback(\n (page = INITIAL_PAGE, append = false) => {\n if (append) {\n setIsLoadingMore(true);\n }\n\n getTimeline(studentId, {\n page,\n timezone: getTimezone(),\n course_stream: userType === USER_TYPE.TEACHER ? courseStreams : [],\n });\n },\n [getTimeline, studentId, userType, courseStreams],\n );\n\n const shouldShowTag = useMemo(() => {\n const allCourseStreams = new Set<string>();\n\n allTimelineData.forEach(entry => {\n if (entry.daily_logs) {\n entry.daily_logs.forEach(log => {\n if (log.course_stream && log.course_stream !== CARD_TYPE.CIRCLE) {\n allCourseStreams.add(log.course_stream);\n }\n });\n }\n });\n\n const courseStreamsSet = new Set(\n (courseStreams || []).filter(stream => String(stream) !== CARD_TYPE.CIRCLE),\n );\n\n return (\n courseStreamsSet.size > 1 ||\n allCourseStreams.size > 1 ||\n (courseStreamsSet.size > 0 &&\n allCourseStreams.size > 0 &&\n (courseStreamsSet.size !== allCourseStreams.size ||\n !Array.from(courseStreamsSet).every(stream => allCourseStreams.has(stream))))\n );\n }, [allTimelineData, courseStreams]);\n\n const handleLoadMore = useCallback(() => {\n if (timelineData?.next_page && !isLoadingMore) {\n fetchTimeline(timelineData.next_page, true);\n trackEvent(DAILY_TIMELINE_ANALYTICS_EVENTS.TIMELINE_SCROLLED, {\n student_id: studentId,\n });\n }\n }, [timelineData, studentId, trackEvent, isLoadingMore, fetchTimeline]);\n\n const onTryAgain = useCallback(() => {\n fetchTimeline(1, false);\n setAllTimelineData([]);\n }, [fetchTimeline]);\n\n useEffect(() => {\n if (timelineData) {\n if (timelineData.curr_page === 1) {\n setAllTimelineData(timelineData?.user_logs ?? []);\n } else if (timelineData.curr_page && prevCurrentPage !== timelineData.curr_page) {\n setAllTimelineData(prev => [...prev, ...(timelineData.user_logs ?? [])]);\n setIsLoadingMore(false);\n }\n }\n }, [timelineData, prevCurrentPage]);\n\n useEffect(() => {\n trackEvent(DAILY_TIMELINE_ANALYTICS_EVENTS.TIMELINE_VIEWED, {\n student_id: studentId,\n });\n }, [studentId, trackEvent]);\n\n useEffect(() => {\n return () => {\n trackEvent(DAILY_TIMELINE_ANALYTICS_EVENTS.TIMELINE_CLOSED, {\n student_id: studentId,\n });\n };\n }, [studentId, trackEvent]);\n\n useEffect(() => {\n fetchTimeline(1, false);\n }, [fetchTimeline]);\n\n useEffect(() => {\n if (isProcessed || isProcessingFailed) {\n onAPIComplete?.(isProcessed && !isProcessingFailed ? true : false);\n }\n }, [isProcessed, isProcessingFailed, onAPIComplete]);\n\n if (isProcessingFailed) {\n return <Error height={scrollAreaHeight ?? '100vh'} onTryAgain={onTryAgain} />;\n }\n\n if (isProcessing && !allTimelineData.length) {\n return (\n <FlexView\n $alignItems=\"center\"\n $justifyContent=\"center\"\n $height={scrollAreaHeight || '100vh'}\n >\n <AppLoader width=\"100%\" height=\"100%\" />\n </FlexView>\n );\n }\n\n return (\n <Styled.ScrollWrapper $alignItems=\"center\" $gapX={1}>\n <Styled.DailyTimelineContainer>\n {allTimelineData.map((entry, index) => (\n <Fragment key={`timeline-entry-${index}`}>\n <DailyTimelineView\n entry={entry}\n isFirstElement={index === 0}\n shouldShowTag={shouldShowTag}\n onPuzzleClick={onPuzzleClick}\n onReviewClick={onReviewClick}\n userType={userType}\n studentId={studentId}\n />\n </Fragment>\n ))}\n <IntersectionLoader\n onLoadMore={handleLoadMore}\n isLoading={isLoadingMore}\n hasMore={!!timelineData?.next_page}\n />\n </Styled.DailyTimelineContainer>\n </Styled.ScrollWrapper>\n );\n },\n);\n\nDailyTimeline.displayName = 'DailyTimeline';\n\nexport default DailyTimeline;\n"],"names":["DailyTimeline","memo","userType","studentId","courseStreams","onPuzzleClick","onReviewClick","scrollAreaHeight","onAPIComplete","allTimelineData","setAllTimelineData","useState","isLoadingMore","setIsLoadingMore","trackEvent","useUIContext","getTimeline","timelineData","isProcessingFailed","isProcessing","isProcessed","useDailyTimelineGet","prevCurrentPage","usePrevious","fetchTimeline","useCallback","page","INITIAL_PAGE","append","getTimezone","USER_TYPE","shouldShowTag","useMemo","allCourseStreams","entry","log","CARD_TYPE","courseStreamsSet","stream","handleLoadMore","DAILY_TIMELINE_ANALYTICS_EVENTS","onTryAgain","useEffect","prev","jsx","Error","FlexView","AppLoader","Styled.ScrollWrapper","jsxs","Styled.DailyTimelineContainer","index","Fragment","DailyTimelineView","IntersectionLoader","DailyTimeline$1"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"monthly-timeline-types.js","sources":["../../../../src/features/timeline/monthly-timeline/monthly-timeline-types.ts"],"sourcesContent":["import { type TCourseStream } from '../../milestone/create/milestone-create-types';\n\nexport enum REPORT_TYPE {\n MPR_V1 = 'MPR_V1',\n MPR_V2 = 'MPR_V2',\n PTM = 'PTM',\n}\n\nexport enum EGoalCategory {\n SCHOOL_SUCCESS = 'SCHOOL_SUCCESS',\n ENRICHMENT = 'ENRICHMENT',\n TEST_PREP = 'TEST_PREP',\n}\n\nexport interface IMonthlyTimeline {\n year: number;\n month: number;\n reports: IMonthlyTimelineReport[];\n}\n\nexport interface IMonthlyTimelineReport {\n report_data: TimelineReportData | null;\n course_stream: TCourseStream | null;\n report_type: REPORT_TYPE;\n}\n\nexport interface TimelineReportData {\n id: string | null;\n progress_data: ProgressData | null;\n}\n\nexport interface ProgressData {\n user_milestones: IUserMilestone[];\n}\n\nexport interface IUserMilestone {\n goal_category: EGoalCategory;\n goal_code: string;\n milestone_name: string;\n previous_progress_stat: ProgressStat | null;\n progress_stat: ProgressStat;\n user_chapters: IUserChapter[];\n user_milestone_id: string;\n}\n\nexport interface IUserChapter {\n chapter_code: string;\n chapter_name: string;\n image_url: string;\n previous_progress_stat: ProgressStat | null;\n progress_stat: ProgressStat;\n user_chapter_id: string;\n}\n\nexport interface ProgressStat {\n completed: number;\n total: number;\n}\n\nexport interface IMonthlyTimelineProps {\n userType: 'PARENT' | 'TEACHER' | 'STUDENT';\n studentId: string;\n courseStreams?: string[];\n onReportClick?: (reportId: string, reportType: REPORT_TYPE, year: number, month: string) => void;\n scrollAreaHeight?: string | number;\n onAPIComplete?: () => void;\n}\n\nexport interface IMonthlyTimelineViewProps {\n reports: IMonthlyTimelineReport[];\n onReportClick?: IMonthlyTimelineProps['onReportClick'];\n year: number;\n month: number;\n}\n"],"names":["REPORT_TYPE","EGoalCategory"],"mappings":"AAEY,IAAAA,sBAAAA,OACVA,EAAA,SAAS,UACTA,EAAA,SAAS,UACTA,EAAA,MAAM,OAHIA,IAAAA,KAAA,CAAA,CAAA,GAMAC,sBAAAA,OACVA,EAAA,iBAAiB,kBACjBA,EAAA,aAAa,cACbA,EAAA,YAAY,aAHFA,IAAAA,KAAA,CAAA,CAAA;"}
1
+ {"version":3,"file":"monthly-timeline-types.js","sources":["../../../../src/features/timeline/monthly-timeline/monthly-timeline-types.ts"],"sourcesContent":["import { type TCourseStream } from '../../milestone/create/milestone-create-types';\n\nexport enum REPORT_TYPE {\n MPR_V1 = 'MPR_V1',\n MPR_V2 = 'MPR_V2',\n PTM = 'PTM',\n}\n\nexport enum EGoalCategory {\n SCHOOL_SUCCESS = 'SCHOOL_SUCCESS',\n ENRICHMENT = 'ENRICHMENT',\n TEST_PREP = 'TEST_PREP',\n}\n\nexport interface IMonthlyTimeline {\n year: number;\n month: number;\n reports: IMonthlyTimelineReport[];\n}\n\nexport interface IMonthlyTimelineReport {\n report_data: TimelineReportData | null;\n course_stream: TCourseStream | null;\n report_type: REPORT_TYPE;\n}\n\nexport interface TimelineReportData {\n id: string | null;\n progress_data: ProgressData | null;\n}\n\nexport interface ProgressData {\n user_milestones: IUserMilestone[];\n}\n\nexport interface IUserMilestone {\n goal_category: EGoalCategory;\n goal_code: string;\n milestone_name: string;\n previous_progress_stat: ProgressStat | null;\n progress_stat: ProgressStat;\n user_chapters: IUserChapter[];\n user_milestone_id: string;\n}\n\nexport interface IUserChapter {\n chapter_code: string;\n chapter_name: string;\n image_url: string;\n previous_progress_stat: ProgressStat | null;\n progress_stat: ProgressStat;\n user_chapter_id: string;\n}\n\nexport interface ProgressStat {\n completed: number;\n total: number;\n}\n\nexport interface IMonthlyTimelineProps {\n userType: 'PARENT' | 'TEACHER' | 'STUDENT';\n studentId: string;\n courseStreams?: string[];\n onReportClick?: (reportId: string, reportType: REPORT_TYPE, year: number, month: string) => void;\n scrollAreaHeight?: string | number;\n onAPIComplete?: (success: boolean) => void;\n}\n\nexport interface IMonthlyTimelineViewProps {\n reports: IMonthlyTimelineReport[];\n onReportClick?: IMonthlyTimelineProps['onReportClick'];\n year: number;\n month: number;\n}\n"],"names":["REPORT_TYPE","EGoalCategory"],"mappings":"AAEY,IAAAA,sBAAAA,OACVA,EAAA,SAAS,UACTA,EAAA,SAAS,UACTA,EAAA,MAAM,OAHIA,IAAAA,KAAA,CAAA,CAAA,GAMAC,sBAAAA,OACVA,EAAA,iBAAiB,kBACjBA,EAAA,aAAa,cACbA,EAAA,YAAY,aAHFA,IAAAA,KAAA,CAAA,CAAA;"}
@@ -1,65 +1,65 @@
1
- import { jsx as r, Fragment as w, jsxs as s } from "react/jsx-runtime";
2
- import { memo as L, useMemo as R, useCallback as X, useEffect as d } from "react";
1
+ import { jsx as r, Fragment as w, jsxs as c } from "react/jsx-runtime";
2
+ import { memo as L, useMemo as R, useCallback as X, useEffect as y } from "react";
3
3
  import { monthlyTimelineGet as j } from "./api/use-monthly-timeline-get.js";
4
4
  import F from "./monthly-timeline-view.js";
5
5
  import M from "../../ui/loader/app-loader/app-loader.js";
6
6
  import t from "../../ui/layout/flex-view.js";
7
7
  import S from "../../ui/text/text.js";
8
- import y from "../../ui/image/image.js";
9
- import h from "../../ui/separator/separator.js";
8
+ import u from "../../ui/image/image.js";
9
+ import l from "../../ui/separator/separator.js";
10
10
  import { yearImages as A, monthNames as B } from "./constants.js";
11
11
  import I from "../../ui/error/error.js";
12
12
  import { ImageContainer as v, DateText as z } from "./monthly-timeline-styled.js";
13
13
  import { getTimezone as C } from "../../../helpers/date-time.js";
14
14
  import { ILLUSTRATIONS as D } from "../../../assets/illustrations/illustrations.js";
15
15
  const K = ({
16
- userType: c,
17
- studentId: n,
18
- courseStreams: l,
19
- onReportClick: u,
16
+ userType: f,
17
+ studentId: m,
18
+ courseStreams: g,
19
+ onReportClick: x,
20
20
  onAPIComplete: o
21
21
  }) => {
22
- const m = R(
22
+ const a = R(
23
23
  () => ({
24
- course_streams: c === "TEACHER" ? l : [],
24
+ course_streams: f === "TEACHER" ? g : [],
25
25
  timezone: C()
26
26
  }),
27
- [l, c]
27
+ [g, f]
28
28
  ), {
29
- get: f,
29
+ get: p,
30
30
  data: i = [],
31
- isProcessing: x,
32
- isProcessingFailed: E,
33
- isProcessed: g
34
- } = j(n, m), a = X(() => {
35
- f(n, m);
36
- }, [f, m, n]);
37
- return d(() => {
38
- a();
39
- }, [a]), d(() => {
40
- g && (o == null || o());
41
- }, [g, o]), x ? /* @__PURE__ */ r(M, { height: "100dvh" }) : E ? /* @__PURE__ */ r(t, { $flex: 1, $alignItems: "center", $justifyContent: "center", children: /* @__PURE__ */ r(I, { onTryAgain: a }) }) : /* @__PURE__ */ r(w, { children: (i == null ? void 0 : i.length) > 0 ? /* @__PURE__ */ r(t, { $gapX: 2, children: i.map((e, _) => {
42
- const p = _ === 0, b = e.month === 12, T = !p && b, $ = A[e.year];
43
- return /* @__PURE__ */ s(t, { $width: "100%", children: [
44
- !p && !T && /* @__PURE__ */ r(h, { heightX: 2 }),
45
- T && $ && /* @__PURE__ */ r(v, { $marginBottom: -122, children: /* @__PURE__ */ r(y, { src: $, alt: e.year.toString() }) }),
46
- /* @__PURE__ */ s(t, { $gutterX: 1, children: [
31
+ isProcessing: E,
32
+ isProcessingFailed: n,
33
+ isProcessed: s
34
+ } = j(m, a), h = X(() => {
35
+ p(m, a);
36
+ }, [p, a, m]);
37
+ return y(() => {
38
+ h();
39
+ }, [h]), y(() => {
40
+ (s || n) && (o == null || o(!!(s && !n)));
41
+ }, [s, n, o]), E ? /* @__PURE__ */ r(M, { height: "100dvh" }) : n ? /* @__PURE__ */ r(t, { $flex: 1, $alignItems: "center", $justifyContent: "center", children: /* @__PURE__ */ r(I, { onTryAgain: h }) }) : /* @__PURE__ */ r(w, { children: (i == null ? void 0 : i.length) > 0 ? /* @__PURE__ */ r(t, { $gapX: 2, children: i.map((e, _) => {
42
+ const T = _ === 0, b = e.month === 12, $ = !T && b, d = A[e.year];
43
+ return /* @__PURE__ */ c(t, { $width: "100%", children: [
44
+ !T && !$ && /* @__PURE__ */ r(l, { heightX: 2 }),
45
+ $ && d && /* @__PURE__ */ r(v, { $marginBottom: -122, children: /* @__PURE__ */ r(u, { src: d, alt: e.year.toString() }) }),
46
+ /* @__PURE__ */ c(t, { $gutterX: 1, children: [
47
47
  /* @__PURE__ */ r(z, { $renderAs: "ac4", $color: "BLACK_T_60", children: B[e.month - 1] }),
48
- /* @__PURE__ */ r(h, { heightX: 1 }),
48
+ /* @__PURE__ */ r(l, { heightX: 1 }),
49
49
  /* @__PURE__ */ r(
50
50
  F,
51
51
  {
52
52
  reports: e.reports,
53
53
  month: e.month,
54
54
  year: e.year,
55
- onReportClick: u
55
+ onReportClick: x
56
56
  }
57
57
  )
58
58
  ] })
59
59
  ] }, `${e.month}-${e.year}`);
60
- }) }) : /* @__PURE__ */ s(t, { $justifyContent: "center", $alignItems: "center", $height: "100%", children: [
61
- /* @__PURE__ */ r(y, { src: D.EMPTY_REPORTS }),
62
- /* @__PURE__ */ r(h, { heightX: 1.5 }),
60
+ }) }) : /* @__PURE__ */ c(t, { $justifyContent: "center", $alignItems: "center", $height: "100%", children: [
61
+ /* @__PURE__ */ r(u, { src: D.EMPTY_REPORTS }),
62
+ /* @__PURE__ */ r(l, { heightX: 1.5 }),
63
63
  /* @__PURE__ */ r(S, { $renderAs: "ab2", color: "BLACK_T_60", children: "Report will be available next month." })
64
64
  ] }) });
65
65
  }, rr = L(K);
@@ -1 +1 @@
1
- {"version":3,"file":"monthly-timeline.js","sources":["../../../../src/features/timeline/monthly-timeline/monthly-timeline.tsx"],"sourcesContent":["import { type FC, memo, useCallback, useEffect, useMemo } from 'react';\n\nimport { type IMonthlyTimelineProps } from './monthly-timeline-types';\nimport { monthlyTimelineGet } from './api/use-monthly-timeline-get';\nimport MonthlyTimelineView from './monthly-timeline-view';\nimport AppLoader from '../../ui/loader/app-loader/app-loader';\nimport FlexView from '../../ui/layout/flex-view';\nimport Text from '../../ui/text/text';\nimport Image from '../../ui/image/image';\nimport Separator from '../../ui/separator/separator';\nimport { monthNames, yearImages } from './constants';\nimport Error from '../../ui/error/error';\nimport * as Styled from './monthly-timeline-styled';\nimport { getTimezone } from '../../../helpers/date-time';\nimport { ILLUSTRATIONS } from '../../../assets/illustrations/illustrations';\n\nconst MonthlyTimeline: FC<IMonthlyTimelineProps> = ({\n userType,\n studentId,\n courseStreams,\n onReportClick,\n onAPIComplete,\n}) => {\n const initialQueryParams = useMemo(\n () => ({\n course_streams: userType === 'TEACHER' ? courseStreams : [],\n timezone: getTimezone(),\n }),\n [courseStreams, userType],\n );\n\n const {\n get: getTimeline,\n data: timelineData = [],\n isProcessing,\n isProcessingFailed,\n isProcessed,\n } = monthlyTimelineGet(studentId, initialQueryParams);\n\n const fetchData = useCallback(() => {\n getTimeline(studentId, initialQueryParams);\n }, [getTimeline, initialQueryParams, studentId]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n useEffect(() => {\n if (isProcessed) {\n onAPIComplete?.();\n }\n }, [isProcessed, onAPIComplete]);\n\n if (isProcessing) {\n return <AppLoader height=\"100dvh\" />;\n }\n\n if (isProcessingFailed) {\n return (\n <FlexView $flex={1} $alignItems=\"center\" $justifyContent=\"center\">\n <Error onTryAgain={fetchData} />\n </FlexView>\n );\n }\n\n return (\n <>\n {timelineData?.length > 0 ? (\n <FlexView $gapX={2}>\n {timelineData.map((item, index) => {\n const isFirstItem = index === 0;\n const isDecember = item.month === 12;\n const showYearImage = !isFirstItem && isDecember;\n const yearImage = yearImages[item.year];\n\n return (\n <FlexView key={`${item.month}-${item.year}`} $width=\"100%\">\n {!isFirstItem && !showYearImage && <Separator heightX={2} />}\n {showYearImage && yearImage && (\n <Styled.ImageContainer $marginBottom={-122}>\n <Image src={yearImage} alt={item.year.toString()} />\n </Styled.ImageContainer>\n )}\n <FlexView $gutterX={1}>\n <Styled.DateText $renderAs=\"ac4\" $color=\"BLACK_T_60\">\n {monthNames[item.month - 1]}\n </Styled.DateText>\n <Separator heightX={1} />\n <MonthlyTimelineView\n reports={item.reports}\n month={item.month}\n year={item.year}\n onReportClick={onReportClick}\n />\n </FlexView>\n </FlexView>\n );\n })}\n </FlexView>\n ) : (\n <FlexView $justifyContent=\"center\" $alignItems=\"center\" $height=\"100%\">\n <Image src={ILLUSTRATIONS.EMPTY_REPORTS} />\n <Separator heightX={1.5} />\n <Text $renderAs=\"ab2\" color=\"BLACK_T_60\">\n Report will be available next month.\n </Text>\n </FlexView>\n )}\n </>\n );\n};\n\nexport default memo(MonthlyTimeline);\n"],"names":["MonthlyTimeline","userType","studentId","courseStreams","onReportClick","onAPIComplete","initialQueryParams","useMemo","getTimezone","getTimeline","timelineData","isProcessing","isProcessingFailed","isProcessed","monthlyTimelineGet","fetchData","useCallback","useEffect","jsx","AppLoader","FlexView","Error","Fragment","item","index","isFirstItem","isDecember","showYearImage","yearImage","yearImages","jsxs","Separator","Styled.ImageContainer","Image","Styled.DateText","monthNames","MonthlyTimelineView","ILLUSTRATIONS","Text","monthlyTimeline","memo"],"mappings":"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"}
1
+ {"version":3,"file":"monthly-timeline.js","sources":["../../../../src/features/timeline/monthly-timeline/monthly-timeline.tsx"],"sourcesContent":["import { type FC, memo, useCallback, useEffect, useMemo } from 'react';\n\nimport { type IMonthlyTimelineProps } from './monthly-timeline-types';\nimport { monthlyTimelineGet } from './api/use-monthly-timeline-get';\nimport MonthlyTimelineView from './monthly-timeline-view';\nimport AppLoader from '../../ui/loader/app-loader/app-loader';\nimport FlexView from '../../ui/layout/flex-view';\nimport Text from '../../ui/text/text';\nimport Image from '../../ui/image/image';\nimport Separator from '../../ui/separator/separator';\nimport { monthNames, yearImages } from './constants';\nimport Error from '../../ui/error/error';\nimport * as Styled from './monthly-timeline-styled';\nimport { getTimezone } from '../../../helpers/date-time';\nimport { ILLUSTRATIONS } from '../../../assets/illustrations/illustrations';\n\nconst MonthlyTimeline: FC<IMonthlyTimelineProps> = ({\n userType,\n studentId,\n courseStreams,\n onReportClick,\n onAPIComplete,\n}) => {\n const initialQueryParams = useMemo(\n () => ({\n course_streams: userType === 'TEACHER' ? courseStreams : [],\n timezone: getTimezone(),\n }),\n [courseStreams, userType],\n );\n\n const {\n get: getTimeline,\n data: timelineData = [],\n isProcessing,\n isProcessingFailed,\n isProcessed,\n } = monthlyTimelineGet(studentId, initialQueryParams);\n\n const fetchData = useCallback(() => {\n getTimeline(studentId, initialQueryParams);\n }, [getTimeline, initialQueryParams, studentId]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n useEffect(() => {\n if (isProcessed || isProcessingFailed) {\n onAPIComplete?.(isProcessed && !isProcessingFailed ? true : false);\n }\n }, [isProcessed, isProcessingFailed, onAPIComplete]);\n\n if (isProcessing) {\n return <AppLoader height=\"100dvh\" />;\n }\n\n if (isProcessingFailed) {\n return (\n <FlexView $flex={1} $alignItems=\"center\" $justifyContent=\"center\">\n <Error onTryAgain={fetchData} />\n </FlexView>\n );\n }\n\n return (\n <>\n {timelineData?.length > 0 ? (\n <FlexView $gapX={2}>\n {timelineData.map((item, index) => {\n const isFirstItem = index === 0;\n const isDecember = item.month === 12;\n const showYearImage = !isFirstItem && isDecember;\n const yearImage = yearImages[item.year];\n\n return (\n <FlexView key={`${item.month}-${item.year}`} $width=\"100%\">\n {!isFirstItem && !showYearImage && <Separator heightX={2} />}\n {showYearImage && yearImage && (\n <Styled.ImageContainer $marginBottom={-122}>\n <Image src={yearImage} alt={item.year.toString()} />\n </Styled.ImageContainer>\n )}\n <FlexView $gutterX={1}>\n <Styled.DateText $renderAs=\"ac4\" $color=\"BLACK_T_60\">\n {monthNames[item.month - 1]}\n </Styled.DateText>\n <Separator heightX={1} />\n <MonthlyTimelineView\n reports={item.reports}\n month={item.month}\n year={item.year}\n onReportClick={onReportClick}\n />\n </FlexView>\n </FlexView>\n );\n })}\n </FlexView>\n ) : (\n <FlexView $justifyContent=\"center\" $alignItems=\"center\" $height=\"100%\">\n <Image src={ILLUSTRATIONS.EMPTY_REPORTS} />\n <Separator heightX={1.5} />\n <Text $renderAs=\"ab2\" color=\"BLACK_T_60\">\n Report will be available next month.\n </Text>\n </FlexView>\n )}\n </>\n );\n};\n\nexport default memo(MonthlyTimeline);\n"],"names":["MonthlyTimeline","userType","studentId","courseStreams","onReportClick","onAPIComplete","initialQueryParams","useMemo","getTimezone","getTimeline","timelineData","isProcessing","isProcessingFailed","isProcessed","monthlyTimelineGet","fetchData","useCallback","useEffect","jsx","AppLoader","FlexView","Error","Fragment","item","index","isFirstItem","isDecember","showYearImage","yearImage","yearImages","jsxs","Separator","Styled.ImageContainer","Image","Styled.DateText","monthNames","MonthlyTimelineView","ILLUSTRATIONS","Text","monthlyTimeline","memo"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1633,7 +1633,7 @@ declare interface IDailyTimelineProps {
1633
1633
  onPuzzleClick?: (card: ITimeLineItem) => void;
1634
1634
  onReviewClick?: (userNodeId: string | null, isSatMockTestBlock: boolean, userBlockId: string | null) => void;
1635
1635
  scrollAreaHeight?: string | number;
1636
- onAPIComplete?: () => void;
1636
+ onAPIComplete?: (success: boolean) => void;
1637
1637
  }
1638
1638
 
1639
1639
  declare interface IDatePickerInputProps extends Omit<ICustomInputFieldProps, 'value' | 'onChange'> {
@@ -3029,7 +3029,7 @@ declare interface IMonthlyTimelineProps {
3029
3029
  courseStreams?: string[];
3030
3030
  onReportClick?: (reportId: string, reportType: REPORT_TYPE, year: number, month: string) => void;
3031
3031
  scrollAreaHeight?: string | number;
3032
- onAPIComplete?: () => void;
3032
+ onAPIComplete?: (success: boolean) => void;
3033
3033
  }
3034
3034
 
3035
3035
  export declare interface IMultiplayerWebGameProps extends IBaseWebGameProps, ISyncableWebGameProps {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cuemath/leap",
3
- "version": "3.5.34-j1",
3
+ "version": "3.5.35-j1",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"