@cuemath/leap 3.5.9-as7 → 3.5.9-as8
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/comps/daily-timeline-items/daily-timeline-items.js +31 -31
- package/dist/features/timeline/comps/daily-timeline-items/daily-timeline-items.js.map +1 -1
- package/dist/features/timeline/daily-timeline.js +36 -36
- package/dist/features/timeline/daily-timeline.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
import { jsx as e, jsxs as
|
|
1
|
+
import { jsx as e, jsxs as s, Fragment as y } from "react/jsx-runtime";
|
|
2
2
|
import { memo as w, useState as E, useMemo as A, useCallback as T } from "react";
|
|
3
3
|
import k from "../../../../assets/line-icons/icons/plus.js";
|
|
4
4
|
import S from "../../../ui/accordion-section/accordion-section.js";
|
|
5
|
-
import
|
|
5
|
+
import l from "../../../ui/layout/flex-view.js";
|
|
6
6
|
import j from "../../../../assets/line-icons/icons/minus.js";
|
|
7
7
|
import B from "../../../ui/image/image.js";
|
|
8
|
-
import
|
|
8
|
+
import h from "../../../ui/text/text.js";
|
|
9
9
|
import D from "../accordion-item/accordion-item.js";
|
|
10
10
|
import { SectionContainer as L, TagContainer as v, SectionFooter as F, Card as K } from "./daily-timeline-items-styled.js";
|
|
11
11
|
import { getTimelineCardIcon as V } from "../utils.js";
|
|
12
12
|
import { useUIContext as X } from "../../../ui/context/context.js";
|
|
13
|
-
const z = w((
|
|
13
|
+
const z = w(($) => {
|
|
14
14
|
const {
|
|
15
|
-
type:
|
|
15
|
+
type: t,
|
|
16
16
|
summary: o,
|
|
17
17
|
cards: n,
|
|
18
|
-
onPuzzleClick:
|
|
19
|
-
onReviewClick:
|
|
18
|
+
onPuzzleClick: f,
|
|
19
|
+
onReviewClick: g,
|
|
20
20
|
courseStream: m,
|
|
21
|
-
shouldShowTag:
|
|
22
|
-
userType:
|
|
21
|
+
shouldShowTag: C,
|
|
22
|
+
userType: I,
|
|
23
23
|
isLastItem: d,
|
|
24
24
|
fromDate: a,
|
|
25
25
|
studentId: c
|
|
26
|
-
} =
|
|
27
|
-
(
|
|
28
|
-
|
|
26
|
+
} = $, [r, b] = E(!1), p = A(() => V(t), [t]), { onEvent: x } = X(), _ = T(
|
|
27
|
+
(i) => {
|
|
28
|
+
b(i), x(i ? "timeline_view_expanded" : "timeline_view_collapsed", {
|
|
29
29
|
timeline_date: a,
|
|
30
30
|
student_id: c,
|
|
31
|
-
timeline_section_type:
|
|
31
|
+
timeline_section_type: t,
|
|
32
32
|
timeline_section_subject: o
|
|
33
33
|
});
|
|
34
34
|
},
|
|
35
|
-
[a, c,
|
|
35
|
+
[a, c, t, o]
|
|
36
36
|
);
|
|
37
37
|
return /* @__PURE__ */ e(
|
|
38
38
|
S,
|
|
39
39
|
{
|
|
40
|
-
headerElement: /* @__PURE__ */
|
|
40
|
+
headerElement: /* @__PURE__ */ s(
|
|
41
41
|
L,
|
|
42
42
|
{
|
|
43
43
|
$borderColor: "BLACK_1",
|
|
44
44
|
$shouldAddBorder: d && !r,
|
|
45
45
|
children: [
|
|
46
|
-
|
|
47
|
-
/* @__PURE__ */
|
|
48
|
-
|
|
46
|
+
C && m && /* @__PURE__ */ e(v, { $position: "absolute", $background: "BLACK", $gutter: 4, children: /* @__PURE__ */ e(h, { $renderAs: "ab4-black", $color: "WHITE", children: m }) }),
|
|
47
|
+
/* @__PURE__ */ s(
|
|
48
|
+
l,
|
|
49
49
|
{
|
|
50
50
|
$flexDirection: "row",
|
|
51
51
|
$alignItems: "center",
|
|
@@ -53,16 +53,16 @@ const z = w((h) => {
|
|
|
53
53
|
$gutterX: 1,
|
|
54
54
|
$gapX: 1.32,
|
|
55
55
|
children: [
|
|
56
|
-
/* @__PURE__ */
|
|
57
|
-
|
|
56
|
+
/* @__PURE__ */ s(
|
|
57
|
+
l,
|
|
58
58
|
{
|
|
59
59
|
$flexDirection: "row",
|
|
60
60
|
$alignItems: "center",
|
|
61
61
|
$justifyContent: "center",
|
|
62
62
|
$flexGapX: 1.125,
|
|
63
63
|
children: [
|
|
64
|
-
/* @__PURE__ */ e(
|
|
65
|
-
/* @__PURE__ */ e(
|
|
64
|
+
/* @__PURE__ */ e(l, { children: p && /* @__PURE__ */ e(B, { src: p }) }),
|
|
65
|
+
/* @__PURE__ */ e(h, { $renderAs: "ab2", children: o ?? "" })
|
|
66
66
|
]
|
|
67
67
|
}
|
|
68
68
|
),
|
|
@@ -79,27 +79,27 @@ const z = w((h) => {
|
|
|
79
79
|
$gutter: 32,
|
|
80
80
|
$borderColor: "BLACK_1",
|
|
81
81
|
$isExpanded: r && !d,
|
|
82
|
-
children: n.map((
|
|
82
|
+
children: n.map((i, u) => /* @__PURE__ */ e(
|
|
83
83
|
K,
|
|
84
84
|
{
|
|
85
|
-
$isLastCard:
|
|
85
|
+
$isLastCard: u === n.length - 1,
|
|
86
86
|
children: /* @__PURE__ */ e(
|
|
87
87
|
D,
|
|
88
88
|
{
|
|
89
|
-
card:
|
|
90
|
-
onPuzzleClick:
|
|
91
|
-
onReviewClick:
|
|
92
|
-
type:
|
|
93
|
-
userType:
|
|
89
|
+
card: i,
|
|
90
|
+
onPuzzleClick: f,
|
|
91
|
+
onReviewClick: g,
|
|
92
|
+
type: t,
|
|
93
|
+
userType: I
|
|
94
94
|
}
|
|
95
95
|
)
|
|
96
96
|
},
|
|
97
|
-
`${
|
|
97
|
+
`${i.node_id}-${u}`
|
|
98
98
|
))
|
|
99
99
|
}
|
|
100
100
|
) : /* @__PURE__ */ e(y, {}),
|
|
101
101
|
defaultVisible: !1,
|
|
102
|
-
onBodyVisibilityChange:
|
|
102
|
+
onBodyVisibilityChange: _
|
|
103
103
|
}
|
|
104
104
|
);
|
|
105
105
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daily-timeline-items.js","sources":["../../../../../src/features/timeline/comps/daily-timeline-items/daily-timeline-items.tsx"],"sourcesContent":["import { memo, useCallback, useMemo, useState, type FC } from 'react';\n\nimport PlusIcon from '../../../../assets/line-icons/icons/plus';\nimport AccordionSection from '../../../ui/accordion-section/accordion-section';\nimport FlexView from '../../../ui/layout/flex-view';\nimport MinusIcon from '../../../../assets/line-icons/icons/minus';\nimport Image from '../../../ui/image/image';\nimport Text from '../../../ui/text/text';\nimport AccordionItem from '../accordion-item/accordion-item';\nimport * as Styled from './daily-timeline-items-styled';\nimport { getTimelineCardIcon } from '../utils';\nimport { type IDailyTimelineItemsProps } from './daily-timeline-items.types';\nimport { useUIContext } from '../../../ui/context/context';\n\nconst DailyTimelineItems: FC<IDailyTimelineItemsProps> = memo(props => {\n const {\n type,\n summary,\n cards,\n onPuzzleClick,\n onReviewClick,\n courseStream,\n shouldShowTag,\n userType,\n isLastItem,\n fromDate,\n studentId,\n } = props;\n const [isExpended, setIsExpended] = useState(false);\n\n const timelineIcon = useMemo(() => getTimelineCardIcon(type), [type]);\n const { onEvent: trackEvent } = useUIContext();\n\n const handleExpand = useCallback(\n (val: boolean) => {\n setIsExpended(val);\n\n trackEvent(val ? 'timeline_view_expanded' : 'timeline_view_collapsed', {\n timeline_date: fromDate,\n student_id: studentId,\n timeline_section_type: type,\n timeline_section_subject: summary,\n });\n },\n [fromDate, studentId, type, summary],\n );\n\n return (\n <AccordionSection\n headerElement={\n <Styled.SectionContainer\n $borderColor={'BLACK_1'}\n $shouldAddBorder={isLastItem && !isExpended}\n >\n {shouldShowTag && courseStream && (\n <Styled.TagContainer $position=\"absolute\" $background=\"BLACK\" $gutter={4}>\n <Text $renderAs=\"ab4-black\" $color=\"WHITE\">\n {courseStream}\n </Text>\n </Styled.TagContainer>\n )}\n <FlexView\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $justifyContent=\"space-between\"\n $gutterX={1}\n $gapX={1.32}\n >\n <FlexView\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $justifyContent=\"center\"\n $flexGapX={1.125}\n >\n <FlexView>{timelineIcon && <Image src={timelineIcon} />}</FlexView>\n <Text $renderAs=\"ab2\">{summary ?? ''}</Text>\n </FlexView>\n {isExpended ? (\n <MinusIcon width={20} height={20} />\n ) : (\n <PlusIcon width={20} height={20} />\n )}\n </FlexView>\n </Styled.SectionContainer>\n }\n bodyElement={\n cards.length > 0 ? (\n <Styled.SectionFooter\n $gutter={32}\n $borderColor={'BLACK_1'}\n $isExpanded={isExpended && !isLastItem}\n >\n {cards.map((card, index) => (\n <Styled.Card\n key={`${card.node_id}-${
|
|
1
|
+
{"version":3,"file":"daily-timeline-items.js","sources":["../../../../../src/features/timeline/comps/daily-timeline-items/daily-timeline-items.tsx"],"sourcesContent":["import { memo, useCallback, useMemo, useState, type FC } from 'react';\n\nimport PlusIcon from '../../../../assets/line-icons/icons/plus';\nimport AccordionSection from '../../../ui/accordion-section/accordion-section';\nimport FlexView from '../../../ui/layout/flex-view';\nimport MinusIcon from '../../../../assets/line-icons/icons/minus';\nimport Image from '../../../ui/image/image';\nimport Text from '../../../ui/text/text';\nimport AccordionItem from '../accordion-item/accordion-item';\nimport * as Styled from './daily-timeline-items-styled';\nimport { getTimelineCardIcon } from '../utils';\nimport { type IDailyTimelineItemsProps } from './daily-timeline-items.types';\nimport { useUIContext } from '../../../ui/context/context';\n\nconst DailyTimelineItems: FC<IDailyTimelineItemsProps> = memo(props => {\n const {\n type,\n summary,\n cards,\n onPuzzleClick,\n onReviewClick,\n courseStream,\n shouldShowTag,\n userType,\n isLastItem,\n fromDate,\n studentId,\n } = props;\n const [isExpended, setIsExpended] = useState(false);\n\n const timelineIcon = useMemo(() => getTimelineCardIcon(type), [type]);\n const { onEvent: trackEvent } = useUIContext();\n\n const handleExpand = useCallback(\n (val: boolean) => {\n setIsExpended(val);\n\n trackEvent(val ? 'timeline_view_expanded' : 'timeline_view_collapsed', {\n timeline_date: fromDate,\n student_id: studentId,\n timeline_section_type: type,\n timeline_section_subject: summary,\n });\n },\n [fromDate, studentId, type, summary],\n );\n\n return (\n <AccordionSection\n headerElement={\n <Styled.SectionContainer\n $borderColor={'BLACK_1'}\n $shouldAddBorder={isLastItem && !isExpended}\n >\n {shouldShowTag && courseStream && (\n <Styled.TagContainer $position=\"absolute\" $background=\"BLACK\" $gutter={4}>\n <Text $renderAs=\"ab4-black\" $color=\"WHITE\">\n {courseStream}\n </Text>\n </Styled.TagContainer>\n )}\n <FlexView\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $justifyContent=\"space-between\"\n $gutterX={1}\n $gapX={1.32}\n >\n <FlexView\n $flexDirection=\"row\"\n $alignItems=\"center\"\n $justifyContent=\"center\"\n $flexGapX={1.125}\n >\n <FlexView>{timelineIcon && <Image src={timelineIcon} />}</FlexView>\n <Text $renderAs=\"ab2\">{summary ?? ''}</Text>\n </FlexView>\n {isExpended ? (\n <MinusIcon width={20} height={20} />\n ) : (\n <PlusIcon width={20} height={20} />\n )}\n </FlexView>\n </Styled.SectionContainer>\n }\n bodyElement={\n cards.length > 0 ? (\n <Styled.SectionFooter\n $gutter={32}\n $borderColor={'BLACK_1'}\n $isExpanded={isExpended && !isLastItem}\n >\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 </Styled.SectionFooter>\n ) : (\n <></>\n )\n }\n defaultVisible={false}\n onBodyVisibilityChange={handleExpand}\n />\n );\n});\n\nDailyTimelineItems.displayName = 'DailyTimelineItems';\n\nexport default DailyTimelineItems;\n"],"names":["DailyTimelineItems","memo","props","type","summary","cards","onPuzzleClick","onReviewClick","courseStream","shouldShowTag","userType","isLastItem","fromDate","studentId","isExpended","setIsExpended","useState","timelineIcon","useMemo","getTimelineCardIcon","trackEvent","useUIContext","handleExpand","useCallback","val","jsx","AccordionSection","jsxs","Styled.SectionContainer","Styled.TagContainer","Text","FlexView","Image","MinusIcon","PlusIcon","Styled.SectionFooter","card","index","Styled.Card","AccordionItem","Fragment"],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { jsx as o, jsxs as u } from "react/jsx-runtime";
|
|
2
|
-
import { memo as W, useState as
|
|
2
|
+
import { memo as W, useState as w, useCallback as I, useMemo as q, useEffect as p } from "react";
|
|
3
3
|
import H from "../ui/error/error.js";
|
|
4
|
-
import
|
|
4
|
+
import N from "../ui/layout/flex-view.js";
|
|
5
5
|
import J from "../ui/loader/app-loader/app-loader.js";
|
|
6
6
|
import Q from "../ui/intersection-loader/intersection-loader.js";
|
|
7
7
|
import g from "../ui/separator/separator.js";
|
|
8
8
|
import Z from "../ui/text/text.js";
|
|
9
9
|
import { useDailyTimelineGet as ee } from "./api/use-daily-timeline-get.js";
|
|
10
|
-
import { getDayMonthYear as
|
|
10
|
+
import { getDayMonthYear as O } from "./comps/utils.js";
|
|
11
11
|
import oe from "./comps/daily-timeline-items/daily-timeline-items.js";
|
|
12
12
|
import { ScrollWrapper as te, DailyTimelineContainer as re, DailyItems as ie } from "./daily-timeline-styled.js";
|
|
13
13
|
import ae from "./comps/month-break/month-break.js";
|
|
@@ -17,16 +17,16 @@ import { getTimezone as ne } from "../../helpers/date-time.js";
|
|
|
17
17
|
import le from "./comps/no-activity.js";
|
|
18
18
|
import { useUIContext as fe } from "../ui/context/context.js";
|
|
19
19
|
import { USER_TYPE as ce, CARD_TYPE as L } from "./enums/enums.js";
|
|
20
|
-
import { parseISO as
|
|
20
|
+
import { parseISO as P } from "../../node_modules/date-fns/parseISO.js";
|
|
21
21
|
import { isLastDayOfMonth as he } from "../../node_modules/date-fns/isLastDayOfMonth.js";
|
|
22
|
-
const
|
|
23
|
-
({ userType: d, studentId: i, courseStreams: l, onPuzzlesClick:
|
|
24
|
-
const [f, $] =
|
|
22
|
+
const R = W(
|
|
23
|
+
({ userType: d, studentId: i, courseStreams: l, onPuzzlesClick: Y, onReviewClick: j, scrollAreaHeight: T }) => {
|
|
24
|
+
const [f, $] = w([]), [y, C] = w(!1), { onEvent: c } = fe(), {
|
|
25
25
|
get: D,
|
|
26
26
|
data: e,
|
|
27
|
-
isProcessingFailed:
|
|
28
|
-
isProcessing:
|
|
29
|
-
} = ee(i), { user_logs: _ } = e ?? {}, s =
|
|
27
|
+
isProcessingFailed: X,
|
|
28
|
+
isProcessing: b
|
|
29
|
+
} = ee(i), { user_logs: _ } = e ?? {}, s = I(
|
|
30
30
|
(t = se, a = !1) => {
|
|
31
31
|
a && C(!0), D(i, {
|
|
32
32
|
page: t,
|
|
@@ -36,7 +36,7 @@ const P = W(
|
|
|
36
36
|
});
|
|
37
37
|
},
|
|
38
38
|
[D, i, d, l]
|
|
39
|
-
),
|
|
39
|
+
), B = q(() => {
|
|
40
40
|
const t = /* @__PURE__ */ new Set();
|
|
41
41
|
f.forEach((r) => {
|
|
42
42
|
r.daily_logs && r.daily_logs.forEach((m) => {
|
|
@@ -47,7 +47,7 @@ const P = W(
|
|
|
47
47
|
(l || []).filter((r) => String(r) !== L.CIRCLE)
|
|
48
48
|
);
|
|
49
49
|
return a.size > 1 || t.size > 1 || a.size > 0 && t.size > 0 && (a.size !== t.size || !Array.from(a).every((r) => t.has(r)));
|
|
50
|
-
}, [f, l]),
|
|
50
|
+
}, [f, l]), F = I(() => {
|
|
51
51
|
e != null && e.next_page && !y && s(e.next_page, !0);
|
|
52
52
|
}, [e == null ? void 0 : e.next_page, y, s]);
|
|
53
53
|
return p(() => {
|
|
@@ -62,8 +62,8 @@ const P = W(
|
|
|
62
62
|
});
|
|
63
63
|
}, [i, c]), p(() => {
|
|
64
64
|
s(1, !1);
|
|
65
|
-
}, [s]),
|
|
66
|
-
|
|
65
|
+
}, [s]), X ? /* @__PURE__ */ o(H, { height: T || "100vh", onTryAgain: s }) : b && !f.length ? /* @__PURE__ */ o(
|
|
66
|
+
N,
|
|
67
67
|
{
|
|
68
68
|
$alignItems: "center",
|
|
69
69
|
$justifyContent: "center",
|
|
@@ -74,40 +74,40 @@ const P = W(
|
|
|
74
74
|
f.map((t, a) => {
|
|
75
75
|
const { daily_logs: r, from_date: m, to_date: E } = t;
|
|
76
76
|
if (r) {
|
|
77
|
-
const
|
|
77
|
+
const G = P(m), M = P(E), {
|
|
78
78
|
day: z,
|
|
79
79
|
month: S,
|
|
80
|
-
monthName:
|
|
81
|
-
} =
|
|
82
|
-
day:
|
|
83
|
-
month:
|
|
84
|
-
year:
|
|
85
|
-
monthName:
|
|
86
|
-
} =
|
|
87
|
-
return /* @__PURE__ */ u(
|
|
88
|
-
/* @__PURE__ */ o(me, { toYear:
|
|
89
|
-
!
|
|
80
|
+
monthName: U
|
|
81
|
+
} = O(G), {
|
|
82
|
+
day: A,
|
|
83
|
+
month: x,
|
|
84
|
+
year: K,
|
|
85
|
+
monthName: V
|
|
86
|
+
} = O(M), h = he(M), k = h && x === 12 && A === 31;
|
|
87
|
+
return /* @__PURE__ */ u(N, { children: [
|
|
88
|
+
/* @__PURE__ */ o(me, { toYear: K, isLastDayOfYear: k }),
|
|
89
|
+
!k && S && h && /* @__PURE__ */ o(g, { heightX: 1 }),
|
|
90
90
|
/* @__PURE__ */ o(ae, { fromMonth: S, isLastDayOfMth: h }),
|
|
91
|
-
/* @__PURE__ */ u(ie, { $gutterX: 1, $addedMonthBreak: !!(h &&
|
|
91
|
+
/* @__PURE__ */ u(ie, { $gutterX: 1, $addedMonthBreak: !!(h && x), children: [
|
|
92
92
|
/* @__PURE__ */ o(g, { heightX: 1 }),
|
|
93
|
-
/* @__PURE__ */ o(Z, { $renderAs: "ac4-black", $color: "BLACK_T_60", children: m === E ? `${z} ${
|
|
93
|
+
/* @__PURE__ */ o(Z, { $renderAs: "ac4-black", $color: "BLACK_T_60", children: m === E ? `${z} ${U}` : `${z} - ${A} ${V}` }),
|
|
94
94
|
/* @__PURE__ */ o(g, { heightX: 1 }),
|
|
95
|
-
r.length > 0 ? r.map((n,
|
|
95
|
+
r.length > 0 ? r.map((n, v) => /* @__PURE__ */ o(
|
|
96
96
|
oe,
|
|
97
97
|
{
|
|
98
98
|
type: n.type,
|
|
99
99
|
summary: n.summary ?? "",
|
|
100
100
|
courseStream: n.course_stream,
|
|
101
101
|
cards: n.cards,
|
|
102
|
-
onPuzzleClick:
|
|
103
|
-
onReviewClick:
|
|
102
|
+
onPuzzleClick: Y,
|
|
103
|
+
onReviewClick: j,
|
|
104
104
|
userType: d,
|
|
105
|
-
shouldShowTag:
|
|
106
|
-
isLastItem:
|
|
105
|
+
shouldShowTag: B && n.course_stream !== L.CIRCLE,
|
|
106
|
+
isLastItem: v === r.length - 1,
|
|
107
107
|
fromDate: m,
|
|
108
108
|
studentId: i
|
|
109
109
|
},
|
|
110
|
-
`timeline-${
|
|
110
|
+
`timeline-${v}`
|
|
111
111
|
)) : /* @__PURE__ */ o(le, {}),
|
|
112
112
|
/* @__PURE__ */ o(g, { heightX: 1 })
|
|
113
113
|
] })
|
|
@@ -117,7 +117,7 @@ const P = W(
|
|
|
117
117
|
/* @__PURE__ */ o(
|
|
118
118
|
Q,
|
|
119
119
|
{
|
|
120
|
-
onLoadMore:
|
|
120
|
+
onLoadMore: F,
|
|
121
121
|
isLoading: y,
|
|
122
122
|
hasMore: !!(e != null && e.next_page)
|
|
123
123
|
}
|
|
@@ -125,8 +125,8 @@ const P = W(
|
|
|
125
125
|
] }) });
|
|
126
126
|
}
|
|
127
127
|
);
|
|
128
|
-
|
|
129
|
-
const Ne =
|
|
128
|
+
R.displayName = "DailyTimeline";
|
|
129
|
+
const Ne = R;
|
|
130
130
|
export {
|
|
131
131
|
Ne as default
|
|
132
132
|
};
|
|
@@ -1 +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, useState, type FC } from 'react';\n\nimport Error from '../ui/error/error';\nimport FlexView from '../ui/layout/flex-view';\nimport AppLoader from '../ui/loader/app-loader/app-loader';\nimport IntersectionLoader from '../ui/intersection-loader/intersection-loader';\nimport Separator from '../ui/separator/separator';\nimport Text from '../ui/text/text';\nimport { type ITimelineData, useDailyTimelineGet } from './api/use-daily-timeline-get';\nimport { getDayMonthYear } from './comps/utils';\nimport DailyTimelineItems from './comps/daily-timeline-items/daily-timeline-items';\nimport * as Styled from './daily-timeline-styled';\nimport { type IDailyTimelineProps } from './daily-timeline-types';\nimport MonthBreak from './comps/month-break/month-break';\nimport YearBreak from './comps/year-break/year-break';\nimport { INITIAL_PAGE } from './comps/constants';\nimport { getTimezone } from '../../helpers/date-time';\nimport NoActivity from './comps/no-activity';\nimport { useUIContext } from '../ui/context/context';\nimport { CARD_TYPE, USER_TYPE } from './enums/enums';\n\nconst DailyTimeline: FC<IDailyTimelineProps> = memo(\n ({ userType, studentId, courseStreams, onPuzzlesClick, onReviewClick, scrollAreaHeight }) => {\n const [allTimelineData, setAllTimelineData] = useState<ITimelineData[]>([]);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const { onEvent: trackEvent } = useUIContext();\n\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 = INITIAL_PAGE, append = false) => {\n if (append) {\n setIsLoadingMore(true);\n }\n\n getTimeline(studentId, {\n page,\n size: 10,\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 }\n }, [timelineData?.next_page, isLoadingMore, fetchTimeline]);\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 trackEvent('timeline_viewed', {\n student_id: studentId,\n });\n }, [studentId, trackEvent]);\n\n useEffect(() => {\n return () => {\n trackEvent('timeline_closed', {\n student_id: studentId,\n });\n };\n }, [studentId, trackEvent]);\n\n useEffect(() => {\n fetchTimeline(1, false);\n }, [fetchTimeline]);\n\n if (isProcessingFailed) {\n return <Error height={scrollAreaHeight || '100vh'} onTryAgain={fetchTimeline} />;\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\">\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\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 {dailyLogs.length > 0 ? (\n dailyLogs.map((log, logIndex) => (\n <DailyTimelineItems\n key={`timeline-${fromDate}`}\n type={log.type}\n summary={log.summary ?? ''}\n courseStream={log.course_stream}\n cards={log.cards}\n onPuzzleClick={onPuzzlesClick}\n onReviewClick={onReviewClick}\n userType={userType}\n shouldShowTag={shouldShowTag && log.course_stream !== CARD_TYPE.CIRCLE}\n isLastItem={logIndex === dailyLogs.length - 1}\n fromDate={fromDate}\n studentId={studentId}\n />\n ))\n ) : (\n <NoActivity />\n )}\n <Separator heightX={1} />\n </Styled.DailyItems>\n </FlexView>\n );\n }\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","onPuzzlesClick","onReviewClick","scrollAreaHeight","allTimelineData","setAllTimelineData","useState","isLoadingMore","setIsLoadingMore","trackEvent","useUIContext","getTimeline","timelineData","isProcessingFailed","isProcessing","useDailyTimelineGet","userLogs","fetchTimeline","useCallback","page","INITIAL_PAGE","append","getTimezone","USER_TYPE","shouldShowTag","useMemo","allCourseStreams","entry","log","CARD_TYPE","courseStreamsSet","stream","handleLoadMore","useEffect","prev","Error","jsx","FlexView","AppLoader","Styled.ScrollWrapper","jsxs","Styled.DailyTimelineContainer","index","dailyLogs","fromDate","toDate","fromDateObj","parseISO","toDateObj","fromDay","fromMonth","fromMonthName","getDayMonthYear","toDay","toMonth","toYear","toMonthName","isLastDayOfMth","isLastDayOfMonth","isLastDayOfYear","YearBreak","Separator","MonthBreak","Styled.DailyItems","Text","logIndex","DailyTimelineItems","NoActivity","IntersectionLoader","DailyTimeline$1"],"mappings":"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"}
|
|
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, useState, type FC } from 'react';\n\nimport Error from '../ui/error/error';\nimport FlexView from '../ui/layout/flex-view';\nimport AppLoader from '../ui/loader/app-loader/app-loader';\nimport IntersectionLoader from '../ui/intersection-loader/intersection-loader';\nimport Separator from '../ui/separator/separator';\nimport Text from '../ui/text/text';\nimport { type ITimelineData, useDailyTimelineGet } from './api/use-daily-timeline-get';\nimport { getDayMonthYear } from './comps/utils';\nimport DailyTimelineItems from './comps/daily-timeline-items/daily-timeline-items';\nimport * as Styled from './daily-timeline-styled';\nimport { type IDailyTimelineProps } from './daily-timeline-types';\nimport MonthBreak from './comps/month-break/month-break';\nimport YearBreak from './comps/year-break/year-break';\nimport { INITIAL_PAGE } from './comps/constants';\nimport { getTimezone } from '../../helpers/date-time';\nimport NoActivity from './comps/no-activity';\nimport { useUIContext } from '../ui/context/context';\nimport { CARD_TYPE, USER_TYPE } from './enums/enums';\n\nconst DailyTimeline: FC<IDailyTimelineProps> = memo(\n ({ userType, studentId, courseStreams, onPuzzlesClick, onReviewClick, scrollAreaHeight }) => {\n const [allTimelineData, setAllTimelineData] = useState<ITimelineData[]>([]);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const { onEvent: trackEvent } = useUIContext();\n\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 = INITIAL_PAGE, append = false) => {\n if (append) {\n setIsLoadingMore(true);\n }\n\n getTimeline(studentId, {\n page,\n size: 10,\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 }\n }, [timelineData?.next_page, isLoadingMore, fetchTimeline]);\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 trackEvent('timeline_viewed', {\n student_id: studentId,\n });\n }, [studentId, trackEvent]);\n\n useEffect(() => {\n return () => {\n trackEvent('timeline_closed', {\n student_id: studentId,\n });\n };\n }, [studentId, trackEvent]);\n\n useEffect(() => {\n fetchTimeline(1, false);\n }, [fetchTimeline]);\n\n if (isProcessingFailed) {\n return <Error height={scrollAreaHeight || '100vh'} onTryAgain={fetchTimeline} />;\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\">\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\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 {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}\n cards={log.cards}\n onPuzzleClick={onPuzzlesClick}\n onReviewClick={onReviewClick}\n userType={userType}\n shouldShowTag={shouldShowTag && log.course_stream !== CARD_TYPE.CIRCLE}\n isLastItem={logIndex === dailyLogs.length - 1}\n fromDate={fromDate}\n studentId={studentId}\n />\n ))\n ) : (\n <NoActivity />\n )}\n <Separator heightX={1} />\n </Styled.DailyItems>\n </FlexView>\n );\n }\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","onPuzzlesClick","onReviewClick","scrollAreaHeight","allTimelineData","setAllTimelineData","useState","isLoadingMore","setIsLoadingMore","trackEvent","useUIContext","getTimeline","timelineData","isProcessingFailed","isProcessing","useDailyTimelineGet","userLogs","fetchTimeline","useCallback","page","INITIAL_PAGE","append","getTimezone","USER_TYPE","shouldShowTag","useMemo","allCourseStreams","entry","log","CARD_TYPE","courseStreamsSet","stream","handleLoadMore","useEffect","prev","Error","jsx","FlexView","AppLoader","Styled.ScrollWrapper","jsxs","Styled.DailyTimelineContainer","index","dailyLogs","fromDate","toDate","fromDateObj","parseISO","toDateObj","fromDay","fromMonth","fromMonthName","getDayMonthYear","toDay","toMonth","toYear","toMonthName","isLastDayOfMth","isLastDayOfMonth","isLastDayOfYear","YearBreak","Separator","MonthBreak","Styled.DailyItems","Text","logIndex","DailyTimelineItems","NoActivity","IntersectionLoader","DailyTimeline$1"],"mappings":"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"}
|