@cuemath/leap 3.5.63 → 3.5.64

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.
@@ -1,100 +1,91 @@
1
- import { jsx as s, jsxs as R } from "react/jsx-runtime";
2
- import { memo as A, useState as M, useCallback as u, useMemo as F, useEffect as m, Fragment as V } from "react";
3
- import { useDailyTimelineGet as Y } from "./api/use-daily-timeline-get.js";
4
- import { ScrollWrapper as j, DailyTimelineContainer as P } from "./daily-timeline-styled.js";
5
- import { USER_TYPE as k, CARD_TYPE as z } from "./daily-timeline-types.js";
1
+ import { jsx as n, jsxs as w } from "react/jsx-runtime";
2
+ import { memo as Y, useState as M, useCallback as u, useMemo as $, useEffect as m, Fragment as F } from "react";
3
+ import { useDailyTimelineGet as P } from "./api/use-daily-timeline-get.js";
4
+ import { ScrollWrapper as V, DailyTimelineContainer as j } from "./daily-timeline-styled.js";
5
+ import { USER_TYPE as k, CARD_TYPE as C } 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
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";
12
- import X from "../../ui/error/error.js";
13
- import q from "../../ui/layout/flex-view.js";
14
- import B from "../../ui/intersection-loader/intersection-loader.js";
15
- import H from "../../ui/loader/app-loader/app-loader.js";
16
- const N = A(
12
+ import H from "../../ui/error/error.js";
13
+ import X from "../../ui/intersection-loader/intersection-loader.js";
14
+ import q from "../../ui/loader/app-loader/app-loader.js";
15
+ const z = Y(
17
16
  ({
18
17
  userType: g,
19
18
  studentId: i,
20
19
  courseStreams: f,
21
- onPuzzleClick: v,
22
- onReviewClick: x,
23
- scrollAreaHeight: y,
20
+ onPuzzleClick: N,
21
+ onReviewClick: v,
22
+ scrollAreaHeight: x,
24
23
  onAPIComplete: l
25
24
  }) => {
26
- const [c, _] = M([]), [p, S] = M(!1), { onEvent: t } = W(), {
27
- get: d,
25
+ const [c, _] = M([]), [p, d] = M(!1), { onEvent: s } = W(), {
26
+ get: S,
28
27
  data: e,
29
28
  isProcessingFailed: E,
30
- isProcessing: I,
31
- isProcessed: h
32
- } = Y(i), C = b(e == null ? void 0 : e.curr_page), n = u(
29
+ isProcessing: A,
30
+ isProcessed: T
31
+ } = P(i), y = b(e == null ? void 0 : e.curr_page), a = u(
33
32
  (r = G, o = !1) => {
34
- o && S(!0), d(i, {
33
+ o && d(!0), S(i, {
35
34
  page: r,
36
35
  timezone: O(),
37
36
  course_stream: g === k.TEACHER ? f : []
38
37
  });
39
38
  },
40
- [d, i, g, f]
41
- ), $ = F(() => {
39
+ [S, i, g, f]
40
+ ), D = $(() => {
42
41
  const r = /* @__PURE__ */ new Set();
43
- c.forEach((a) => {
44
- a.daily_logs && a.daily_logs.forEach((T) => {
45
- T.course_stream && T.course_stream !== z.CIRCLE && r.add(T.course_stream);
42
+ c.forEach((t) => {
43
+ t.daily_logs && t.daily_logs.forEach((h) => {
44
+ h.course_stream && h.course_stream !== C.CIRCLE && r.add(h.course_stream);
46
45
  });
47
46
  });
48
47
  const o = new Set(
49
- (f || []).filter((a) => String(a) !== z.CIRCLE)
48
+ (f || []).filter((t) => String(t) !== C.CIRCLE)
50
49
  );
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 = u(() => {
53
- e != null && e.next_page && !p && (n(e.next_page, !0), t(L.TIMELINE_SCROLLED, {
50
+ return o.size > 1 || r.size > 1 || o.size > 0 && r.size > 0 && (o.size !== r.size || !Array.from(o).every((t) => r.has(t)));
51
+ }, [c, f]), I = u(() => {
52
+ e != null && e.next_page && !p && (a(e.next_page, !0), s(L.TIMELINE_SCROLLED, {
54
53
  student_id: i
55
54
  }));
56
- }, [e, i, t, p, n]), D = u(() => {
57
- n(1, !1), _([]);
58
- }, [n]);
55
+ }, [e, i, s, p, a]), R = u(() => {
56
+ a(1, !1), _([]);
57
+ }, [a]);
59
58
  return m(() => {
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, {
59
+ e && (e.curr_page === 1 ? _((e == null ? void 0 : e.user_logs) ?? []) : e.curr_page && y !== e.curr_page && (_((r) => [...r, ...e.user_logs ?? []]), d(!1)));
60
+ }, [e, y]), m(() => {
61
+ s(L.TIMELINE_VIEWED, {
63
62
  student_id: i
64
63
  });
65
- }, [i, t]), m(() => () => {
66
- t(L.TIMELINE_CLOSED, {
64
+ }, [i, s]), m(() => () => {
65
+ s(L.TIMELINE_CLOSED, {
67
66
  student_id: i
68
67
  });
69
- }, [i, t]), m(() => {
70
- n(1, !1);
71
- }, [n]), 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
- q,
75
- {
76
- $alignItems: "center",
77
- $justifyContent: "center",
78
- $height: y || "100vh",
79
- children: /* @__PURE__ */ s(H, { width: "100%", height: "100%" })
80
- }
81
- ) : /* @__PURE__ */ s(j, { $alignItems: "center", $gapX: 1, children: /* @__PURE__ */ R(P, { children: [
82
- c.map((r, o) => /* @__PURE__ */ s(V, { children: /* @__PURE__ */ s(
68
+ }, [i, s]), m(() => {
69
+ a(1, !1);
70
+ }, [a]), m(() => {
71
+ (T || E) && (l == null || l(T && !E));
72
+ }, [T, E, l]), E ? /* @__PURE__ */ n(H, { height: x ?? "100dvh", onTryAgain: R }) : A && !c.length ? /* @__PURE__ */ n(q, { width: "100%", height: "100dvh" }) : /* @__PURE__ */ n(V, { $alignItems: "center", $gapX: 1, children: /* @__PURE__ */ w(j, { children: [
73
+ c.map((r, o) => /* @__PURE__ */ n(F, { children: /* @__PURE__ */ n(
83
74
  U,
84
75
  {
85
76
  entry: r,
86
77
  isFirstElement: o === 0,
87
- shouldShowTag: $,
88
- onPuzzleClick: v,
89
- onReviewClick: x,
78
+ shouldShowTag: D,
79
+ onPuzzleClick: N,
80
+ onReviewClick: v,
90
81
  userType: g,
91
82
  studentId: i
92
83
  }
93
84
  ) }, `timeline-entry-${o}`)),
94
- /* @__PURE__ */ s(
95
- B,
85
+ /* @__PURE__ */ n(
86
+ X,
96
87
  {
97
- onLoadMore: w,
88
+ onLoadMore: I,
98
89
  isLoading: p,
99
90
  hasMore: !!(e != null && e.next_page)
100
91
  }
@@ -102,9 +93,9 @@ const N = A(
102
93
  ] }) });
103
94
  }
104
95
  );
105
- N.displayName = "DailyTimeline";
106
- const ce = N;
96
+ z.displayName = "DailyTimeline";
97
+ const fe = z;
107
98
  export {
108
- ce as default
99
+ fe as default
109
100
  };
110
101
  //# sourceMappingURL=daily-timeline.js.map
@@ -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 || isProcessingFailed) {\n onAPIComplete?.(isProcessed && !isProcessingFailed);\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
+ {"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 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);\n }\n }, [isProcessed, isProcessingFailed, onAPIComplete]);\n\n if (isProcessingFailed) {\n return <Error height={scrollAreaHeight ?? '100dvh'} onTryAgain={onTryAgain} />;\n }\n\n if (isProcessing && !allTimelineData.length) {\n return <AppLoader width=\"100%\" height=\"100dvh\" />;\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","AppLoader","Styled.ScrollWrapper","jsxs","Styled.DailyTimelineContainer","index","Fragment","DailyTimelineView","IntersectionLoader","DailyTimeline$1"],"mappings":"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"}
@@ -1,23 +1,22 @@
1
- import { jsx as t, jsxs as S } from "react/jsx-runtime";
2
- import { memo as b, useCallback as N, useEffect as f } from "react";
1
+ import { jsx as t, jsxs as j } from "react/jsx-runtime";
2
+ import { memo as x, useCallback as N, useEffect as l } from "react";
3
3
  import { monthlyReportGet as Y } from "./api/use-monthly-report-api.js";
4
- import w from "../../../ui/loader/app-loader/app-loader.js";
5
- import C from "../../../ui/error/error.js";
6
- import { MonthlyReportContainer as E } from "./monthly-report-styled.js";
7
- import G from "./comps/goals/goals.js";
8
- import A from "./comps/activities/activities.js";
9
- import F from "../../../ui/layout/flex-view.js";
4
+ import E from "../../../ui/loader/app-loader/app-loader.js";
5
+ import G from "../../../ui/error/error.js";
6
+ import { MonthlyReportContainer as w } from "./monthly-report-styled.js";
7
+ import A from "./comps/goals/goals.js";
8
+ import C from "./comps/activities/activities.js";
10
9
  import T from "./comps/attendance/attendance.js";
11
10
  import U from "./comps/feedback/feedback.js";
12
- import V from "./comps/achievements/achievements.js";
13
- import { IS_APP_RUNNING_IN_RN as X } from "../../../../constants/app-config.js";
14
- import q from "../../../ui/separator/separator.js";
15
- const z = ({
11
+ import X from "./comps/achievements/achievements.js";
12
+ import { IS_APP_RUNNING_IN_RN as q } from "../../../../constants/app-config.js";
13
+ import z from "../../../ui/separator/separator.js";
14
+ const B = ({
16
15
  studentName: p,
17
16
  reportId: r,
18
- onPuzzleClick: R,
17
+ onPuzzleClick: F,
19
18
  showSnackbar: u,
20
- onFeedback: j,
19
+ onFeedback: k,
21
20
  onAPIComplete: o
22
21
  }) => {
23
22
  const {
@@ -28,56 +27,56 @@ const z = ({
28
27
  isStale: M,
29
28
  isProcessed: n
30
29
  } = Y(r), {
31
- progress_data: $,
32
- calendar_data: y,
30
+ progress_data: L,
31
+ calendar_data: D,
33
32
  report_month: i,
34
33
  report_year: c,
35
- feedback: k,
36
- student_course_ids: m
34
+ feedback: S,
35
+ student_course_ids: h
37
36
  } = _ || {}, {
38
- user_milestones: D,
39
- activities: v,
40
- user_achievements: x
41
- } = $ || {}, e = N(() => {
37
+ user_milestones: v,
38
+ activities: y,
39
+ user_achievements: R
40
+ } = L || {}, e = N(() => {
42
41
  g(r);
43
42
  }, [g, r]);
44
- if (f(() => {
43
+ if (l(() => {
45
44
  e();
46
- }, [e]), f(() => {
45
+ }, [e]), l(() => {
47
46
  M && !a && e();
48
- }, [M, a, e]), f(() => {
47
+ }, [M, a, e]), l(() => {
49
48
  (n || s) && (o == null || o(n && !s));
50
49
  }, [n, s, o]), a && !_)
51
- return /* @__PURE__ */ t(F, { $flex: 1, $alignItems: "center", $justifyContent: "center", children: /* @__PURE__ */ t(w, { height: "100dvh" }) });
50
+ return /* @__PURE__ */ t(E, { height: "100dvh" });
52
51
  if (s)
53
- return /* @__PURE__ */ t(F, { $flex: 1, $alignItems: "center", $justifyContent: "center", children: /* @__PURE__ */ t(C, { onTryAgain: e }) });
54
- const h = m == null ? void 0 : m[0], l = /* @__PURE__ */ new Date(), d = l.getMonth(), L = d === 0 ? l.getFullYear() - 1 : l.getFullYear();
55
- return /* @__PURE__ */ S(E, { children: [
56
- D && /* @__PURE__ */ t(G, { milestones: D, isExpended: !0 }),
57
- v && /* @__PURE__ */ t(A, { activities: v, onPuzzleClick: R }),
58
- x && /* @__PURE__ */ t(V, { achievements: x, studentName: p }),
59
- y && i && c && /* @__PURE__ */ t(
52
+ return /* @__PURE__ */ t(G, { height: "100dvh", onTryAgain: e });
53
+ const m = h == null ? void 0 : h[0], d = /* @__PURE__ */ new Date(), f = d.getMonth(), b = f === 0 ? d.getFullYear() - 1 : d.getFullYear();
54
+ return /* @__PURE__ */ j(w, { children: [
55
+ v && /* @__PURE__ */ t(A, { milestones: v, isExpended: !0 }),
56
+ y && /* @__PURE__ */ t(C, { activities: y, onPuzzleClick: F }),
57
+ R && /* @__PURE__ */ t(X, { achievements: R, studentName: p }),
58
+ D && i && c && /* @__PURE__ */ t(
60
59
  T,
61
60
  {
62
- calendarData: y,
61
+ calendarData: D,
63
62
  reportMonth: i,
64
63
  reportYear: c,
65
64
  onDateClick: u
66
65
  }
67
66
  ),
68
- X && !k && h && (i === (d === 0 ? 12 : d) && c === L) && h ? /* @__PURE__ */ t(
67
+ q && !S && m && (i === (f === 0 ? 12 : f) && c === b) && m ? /* @__PURE__ */ t(
69
68
  U,
70
69
  {
71
70
  reportId: r,
72
71
  studentName: p,
73
- onFeedback: j,
74
- studentCourseId: h,
72
+ onFeedback: k,
73
+ studentCourseId: m,
75
74
  showSnackbar: u
76
75
  }
77
- ) : /* @__PURE__ */ t(q, { heightX: 1 })
76
+ ) : /* @__PURE__ */ t(z, { heightX: 1 })
78
77
  ] });
79
- }, ct = b(z);
78
+ }, nt = x(B);
80
79
  export {
81
- ct as default
80
+ nt as default
82
81
  };
83
82
  //# sourceMappingURL=monthly-report.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"monthly-report.js","sources":["../../../../../src/features/timeline/monthly-timeline/monthly-report/monthly-report.tsx"],"sourcesContent":["import { type FC, memo, useCallback, useEffect } from 'react';\n\nimport { type IMonthlyReportProps } from './monthly-report-types';\nimport { monthlyReportGet } from './api/use-monthly-report-api';\nimport AppLoader from '../../../ui/loader/app-loader/app-loader';\nimport Error from '../../../ui/error/error';\nimport * as Styled from './monthly-report-styled';\nimport Goals from './comps/goals/goals';\nimport Activities from './comps/activities/activities';\nimport FlexView from '../../../ui/layout/flex-view';\nimport Attendance from './comps/attendance/attendance';\nimport Feedback from './comps/feedback/feedback';\nimport Achievements from './comps/achievements/achievements';\nimport { IS_APP_RUNNING_IN_RN } from '../../../../constants/app-config';\nimport Separator from '../../../ui/separator/separator';\n\nconst MonthlyReport: FC<IMonthlyReportProps> = ({\n studentName,\n reportId,\n onPuzzleClick,\n showSnackbar,\n onFeedback,\n onAPIComplete,\n}) => {\n const {\n get: getReport,\n data: reportData,\n isProcessing,\n isProcessingFailed,\n isStale,\n isProcessed,\n } = monthlyReportGet(reportId);\n\n const {\n progress_data: progressData,\n calendar_data: calendarData,\n report_month: month,\n report_year: year,\n feedback,\n student_course_ids: studentCourseIds,\n } = reportData || {};\n\n const {\n user_milestones: userMilestones,\n activities,\n user_achievements: userAchievements,\n } = progressData || {};\n\n const fetchData = useCallback(() => {\n getReport(reportId);\n }, [getReport, reportId]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n useEffect(() => {\n if (isStale && !isProcessing) {\n fetchData();\n }\n }, [isStale, isProcessing, fetchData]);\n\n useEffect(() => {\n if (isProcessed || isProcessingFailed) {\n onAPIComplete?.(isProcessed && !isProcessingFailed);\n }\n }, [isProcessed, isProcessingFailed, onAPIComplete]);\n\n if (isProcessing && !reportData) {\n return (\n <FlexView $flex={1} $alignItems=\"center\" $justifyContent=\"center\">\n <AppLoader height=\"100dvh\" />\n </FlexView>\n );\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 const firstStudentCourseId = studentCourseIds?.[0];\n\n // Check if the report is for the last month (previous month)\n const currentDate = new Date();\n const lastMonth = currentDate.getMonth(); // Current month - 1 (getMonth() returns 0-11)\n const lastMonthYear = lastMonth === 0 ? currentDate.getFullYear() - 1 : currentDate.getFullYear();\n const adjustedLastMonth = lastMonth === 0 ? 12 : lastMonth; // Handle January edge case\n const isLastMonth = month === adjustedLastMonth && year === lastMonthYear;\n\n const shouldShowFeedback =\n IS_APP_RUNNING_IN_RN && !feedback && firstStudentCourseId && isLastMonth;\n const hasCalendarData = calendarData && month && year;\n\n return (\n <Styled.MonthlyReportContainer>\n {userMilestones && <Goals milestones={userMilestones} isExpended={true} />}\n\n {activities && <Activities activities={activities} onPuzzleClick={onPuzzleClick} />}\n\n {userAchievements && (\n <Achievements achievements={userAchievements} studentName={studentName} />\n )}\n\n {hasCalendarData && (\n <Attendance\n calendarData={calendarData}\n reportMonth={month}\n reportYear={year}\n onDateClick={showSnackbar}\n />\n )}\n\n {shouldShowFeedback && firstStudentCourseId ? (\n <Feedback\n reportId={reportId}\n studentName={studentName}\n onFeedback={onFeedback}\n studentCourseId={firstStudentCourseId}\n showSnackbar={showSnackbar}\n />\n ) : (\n <Separator heightX={1} />\n )}\n </Styled.MonthlyReportContainer>\n );\n};\n\nexport default memo(MonthlyReport);\n"],"names":["MonthlyReport","studentName","reportId","onPuzzleClick","showSnackbar","onFeedback","onAPIComplete","getReport","reportData","isProcessing","isProcessingFailed","isStale","isProcessed","monthlyReportGet","progressData","calendarData","month","year","feedback","studentCourseIds","userMilestones","activities","userAchievements","fetchData","useCallback","useEffect","jsx","FlexView","AppLoader","Error","firstStudentCourseId","currentDate","lastMonth","lastMonthYear","jsxs","Styled.MonthlyReportContainer","Goals","Activities","Achievements","Attendance","IS_APP_RUNNING_IN_RN","Feedback","Separator","monthlyReport","memo"],"mappings":";;;;;;;;;;;;;;AAgBA,MAAMA,IAAyC,CAAC;AAAA,EAC9C,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,eAAAC;AACF,MAAM;AACE,QAAA;AAAA,IACJ,KAAKC;AAAA,IACL,MAAMC;AAAA,IACN,cAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,aAAAC;AAAA,EAAA,IACEC,EAAiBX,CAAQ,GAEvB;AAAA,IACJ,eAAeY;AAAA,IACf,eAAeC;AAAA,IACf,cAAcC;AAAA,IACd,aAAaC;AAAA,IACb,UAAAC;AAAA,IACA,oBAAoBC;AAAA,EAAA,IAClBX,KAAc,CAAA,GAEZ;AAAA,IACJ,iBAAiBY;AAAA,IACjB,YAAAC;AAAA,IACA,mBAAmBC;AAAA,EAAA,IACjBR,KAAgB,CAAA,GAEdS,IAAYC,EAAY,MAAM;AAClC,IAAAjB,EAAUL,CAAQ;AAAA,EAAA,GACjB,CAACK,GAAWL,CAAQ,CAAC;AAkBpB,MAhBJuB,EAAU,MAAM;AACJ,IAAAF;EAAA,GACT,CAACA,CAAS,CAAC,GAEdE,EAAU,MAAM;AACV,IAAAd,KAAW,CAACF,KACJc;EAEX,GAAA,CAACZ,GAASF,GAAcc,CAAS,CAAC,GAErCE,EAAU,MAAM;AACd,KAAIb,KAAeF,OACDJ,KAAA,QAAAA,EAAAM,KAAe,CAACF;AAAA,EAEjC,GAAA,CAACE,GAAaF,GAAoBJ,CAAa,CAAC,GAE/CG,KAAgB,CAACD;AACnB,WACG,gBAAAkB,EAAAC,GAAA,EAAS,OAAO,GAAG,aAAY,UAAS,iBAAgB,UACvD,UAAC,gBAAAD,EAAAE,GAAA,EAAU,QAAO,SAAA,CAAS,EAC7B,CAAA;AAIJ,MAAIlB;AACF,WACG,gBAAAgB,EAAAC,GAAA,EAAS,OAAO,GAAG,aAAY,UAAS,iBAAgB,UACvD,UAAC,gBAAAD,EAAAG,GAAA,EAAM,YAAYN,EAAA,CAAW,EAChC,CAAA;AAIE,QAAAO,IAAuBX,KAAA,gBAAAA,EAAmB,IAG1CY,wBAAkB,QAClBC,IAAYD,EAAY,YACxBE,IAAgBD,MAAc,IAAID,EAAY,gBAAgB,IAAIA,EAAY;AASlF,SAAA,gBAAAG,EAACC,GAAA,EACE,UAAA;AAAA,IAAAf,KAAmB,gBAAAM,EAAAU,GAAA,EAAM,YAAYhB,GAAgB,YAAY,IAAM;AAAA,IAEvEC,KAAc,gBAAAK,EAACW,GAAW,EAAA,YAAAhB,GAAwB,eAAAlB,EAA8B,CAAA;AAAA,IAEhFmB,KACC,gBAAAI,EAACY,GAAa,EAAA,cAAchB,GAAkB,aAAArB,GAA0B;AAAA,IATtDc,KAAgBC,KAASC,KAa3C,gBAAAS;AAAA,MAACa;AAAA,MAAA;AAAA,QACC,cAAAxB;AAAA,QACA,aAAaC;AAAA,QACb,YAAYC;AAAA,QACZ,aAAab;AAAA,MAAA;AAAA,IACf;AAAA,IAnBJoC,KAAwB,CAACtB,KAAYY,MAHnBd,OADMgB,MAAc,IAAI,KAAKA,MACEf,MAASgB,MAyBjCH,IACrB,gBAAAJ;AAAA,MAACe;AAAA,MAAA;AAAA,QACC,UAAAvC;AAAA,QACA,aAAAD;AAAA,QACA,YAAAI;AAAA,QACA,iBAAiByB;AAAA,QACjB,cAAA1B;AAAA,MAAA;AAAA,IAGF,IAAA,gBAAAsB,EAACgB,GAAU,EAAA,SAAS,EAAG,CAAA;AAAA,EAE3B,EAAA,CAAA;AAEJ,GAEeC,KAAAC,EAAK5C,CAAa;"}
1
+ {"version":3,"file":"monthly-report.js","sources":["../../../../../src/features/timeline/monthly-timeline/monthly-report/monthly-report.tsx"],"sourcesContent":["import { type FC, memo, useCallback, useEffect } from 'react';\n\nimport { type IMonthlyReportProps } from './monthly-report-types';\nimport { monthlyReportGet } from './api/use-monthly-report-api';\nimport AppLoader from '../../../ui/loader/app-loader/app-loader';\nimport Error from '../../../ui/error/error';\nimport * as Styled from './monthly-report-styled';\nimport Goals from './comps/goals/goals';\nimport Activities from './comps/activities/activities';\nimport Attendance from './comps/attendance/attendance';\nimport Feedback from './comps/feedback/feedback';\nimport Achievements from './comps/achievements/achievements';\nimport { IS_APP_RUNNING_IN_RN } from '../../../../constants/app-config';\nimport Separator from '../../../ui/separator/separator';\n\nconst MonthlyReport: FC<IMonthlyReportProps> = ({\n studentName,\n reportId,\n onPuzzleClick,\n showSnackbar,\n onFeedback,\n onAPIComplete,\n}) => {\n const {\n get: getReport,\n data: reportData,\n isProcessing,\n isProcessingFailed,\n isStale,\n isProcessed,\n } = monthlyReportGet(reportId);\n\n const {\n progress_data: progressData,\n calendar_data: calendarData,\n report_month: month,\n report_year: year,\n feedback,\n student_course_ids: studentCourseIds,\n } = reportData || {};\n\n const {\n user_milestones: userMilestones,\n activities,\n user_achievements: userAchievements,\n } = progressData || {};\n\n const fetchData = useCallback(() => {\n getReport(reportId);\n }, [getReport, reportId]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n useEffect(() => {\n if (isStale && !isProcessing) {\n fetchData();\n }\n }, [isStale, isProcessing, fetchData]);\n\n useEffect(() => {\n if (isProcessed || isProcessingFailed) {\n onAPIComplete?.(isProcessed && !isProcessingFailed);\n }\n }, [isProcessed, isProcessingFailed, onAPIComplete]);\n\n if (isProcessing && !reportData) {\n return <AppLoader height=\"100dvh\" />;\n }\n\n if (isProcessingFailed) {\n return <Error height=\"100dvh\" onTryAgain={fetchData} />;\n }\n\n const firstStudentCourseId = studentCourseIds?.[0];\n\n // Check if the report is for the last month (previous month)\n const currentDate = new Date();\n const lastMonth = currentDate.getMonth(); // Current month - 1 (getMonth() returns 0-11)\n const lastMonthYear = lastMonth === 0 ? currentDate.getFullYear() - 1 : currentDate.getFullYear();\n const adjustedLastMonth = lastMonth === 0 ? 12 : lastMonth; // Handle January edge case\n const isLastMonth = month === adjustedLastMonth && year === lastMonthYear;\n\n const shouldShowFeedback =\n IS_APP_RUNNING_IN_RN && !feedback && firstStudentCourseId && isLastMonth;\n const hasCalendarData = calendarData && month && year;\n\n return (\n <Styled.MonthlyReportContainer>\n {userMilestones && <Goals milestones={userMilestones} isExpended={true} />}\n\n {activities && <Activities activities={activities} onPuzzleClick={onPuzzleClick} />}\n\n {userAchievements && (\n <Achievements achievements={userAchievements} studentName={studentName} />\n )}\n\n {hasCalendarData && (\n <Attendance\n calendarData={calendarData}\n reportMonth={month}\n reportYear={year}\n onDateClick={showSnackbar}\n />\n )}\n\n {shouldShowFeedback && firstStudentCourseId ? (\n <Feedback\n reportId={reportId}\n studentName={studentName}\n onFeedback={onFeedback}\n studentCourseId={firstStudentCourseId}\n showSnackbar={showSnackbar}\n />\n ) : (\n <Separator heightX={1} />\n )}\n </Styled.MonthlyReportContainer>\n );\n};\n\nexport default memo(MonthlyReport);\n"],"names":["MonthlyReport","studentName","reportId","onPuzzleClick","showSnackbar","onFeedback","onAPIComplete","getReport","reportData","isProcessing","isProcessingFailed","isStale","isProcessed","monthlyReportGet","progressData","calendarData","month","year","feedback","studentCourseIds","userMilestones","activities","userAchievements","fetchData","useCallback","useEffect","jsx","AppLoader","Error","firstStudentCourseId","currentDate","lastMonth","lastMonthYear","jsxs","Styled.MonthlyReportContainer","Goals","Activities","Achievements","Attendance","IS_APP_RUNNING_IN_RN","Feedback","Separator","monthlyReport","memo"],"mappings":";;;;;;;;;;;;;AAeA,MAAMA,IAAyC,CAAC;AAAA,EAC9C,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,eAAAC;AACF,MAAM;AACE,QAAA;AAAA,IACJ,KAAKC;AAAA,IACL,MAAMC;AAAA,IACN,cAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,aAAAC;AAAA,EAAA,IACEC,EAAiBX,CAAQ,GAEvB;AAAA,IACJ,eAAeY;AAAA,IACf,eAAeC;AAAA,IACf,cAAcC;AAAA,IACd,aAAaC;AAAA,IACb,UAAAC;AAAA,IACA,oBAAoBC;AAAA,EAAA,IAClBX,KAAc,CAAA,GAEZ;AAAA,IACJ,iBAAiBY;AAAA,IACjB,YAAAC;AAAA,IACA,mBAAmBC;AAAA,EAAA,IACjBR,KAAgB,CAAA,GAEdS,IAAYC,EAAY,MAAM;AAClC,IAAAjB,EAAUL,CAAQ;AAAA,EAAA,GACjB,CAACK,GAAWL,CAAQ,CAAC;AAkBpB,MAhBJuB,EAAU,MAAM;AACJ,IAAAF;EAAA,GACT,CAACA,CAAS,CAAC,GAEdE,EAAU,MAAM;AACV,IAAAd,KAAW,CAACF,KACJc;EAEX,GAAA,CAACZ,GAASF,GAAcc,CAAS,CAAC,GAErCE,EAAU,MAAM;AACd,KAAIb,KAAeF,OACDJ,KAAA,QAAAA,EAAAM,KAAe,CAACF;AAAA,EAEjC,GAAA,CAACE,GAAaF,GAAoBJ,CAAa,CAAC,GAE/CG,KAAgB,CAACD;AACZ,WAAA,gBAAAkB,EAACC,GAAU,EAAA,QAAO,SAAS,CAAA;AAGpC,MAAIjB;AACF,WAAQ,gBAAAgB,EAAAE,GAAA,EAAM,QAAO,UAAS,YAAYL,EAAW,CAAA;AAGjD,QAAAM,IAAuBV,KAAA,gBAAAA,EAAmB,IAG1CW,wBAAkB,QAClBC,IAAYD,EAAY,YACxBE,IAAgBD,MAAc,IAAID,EAAY,gBAAgB,IAAIA,EAAY;AASlF,SAAA,gBAAAG,EAACC,GAAA,EACE,UAAA;AAAA,IAAAd,KAAmB,gBAAAM,EAAAS,GAAA,EAAM,YAAYf,GAAgB,YAAY,IAAM;AAAA,IAEvEC,KAAc,gBAAAK,EAACU,GAAW,EAAA,YAAAf,GAAwB,eAAAlB,EAA8B,CAAA;AAAA,IAEhFmB,KACC,gBAAAI,EAACW,GAAa,EAAA,cAAcf,GAAkB,aAAArB,GAA0B;AAAA,IATtDc,KAAgBC,KAASC,KAa3C,gBAAAS;AAAA,MAACY;AAAA,MAAA;AAAA,QACC,cAAAvB;AAAA,QACA,aAAaC;AAAA,QACb,YAAYC;AAAA,QACZ,aAAab;AAAA,MAAA;AAAA,IACf;AAAA,IAnBJmC,KAAwB,CAACrB,KAAYW,MAHnBb,OADMe,MAAc,IAAI,KAAKA,MACEd,MAASe,MAyBjCH,IACrB,gBAAAH;AAAA,MAACc;AAAA,MAAA;AAAA,QACC,UAAAtC;AAAA,QACA,aAAAD;AAAA,QACA,YAAAI;AAAA,QACA,iBAAiBwB;AAAA,QACjB,cAAAzB;AAAA,MAAA;AAAA,IAGF,IAAA,gBAAAsB,EAACe,GAAU,EAAA,SAAS,EAAG,CAAA;AAAA,EAE3B,EAAA,CAAA;AAEJ,GAEeC,KAAAC,EAAK3C,CAAa;"}
@@ -1,50 +1,50 @@
1
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
- import { monthlyTimelineGet as j } from "./api/use-monthly-timeline-get.js";
2
+ import { memo as L, useMemo as R, useCallback as X, useEffect as $ } from "react";
3
+ import { monthlyTimelineGet as v } 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
- import t from "../../ui/layout/flex-view.js";
6
+ import n from "../../ui/layout/flex-view.js";
7
7
  import S from "../../ui/text/text.js";
8
8
  import u from "../../ui/image/image.js";
9
9
  import l from "../../ui/separator/separator.js";
10
- import { yearImages as A, monthNames as B } from "./constants.js";
11
- import I from "../../ui/error/error.js";
12
- import { ImageContainer as v, DateText as z } from "./monthly-timeline-styled.js";
13
- import { getTimezone as C } from "../../../helpers/date-time.js";
14
- import { ILLUSTRATIONS as D } from "../../../assets/illustrations/illustrations.js";
15
- const K = ({
16
- userType: f,
10
+ import { yearImages as j, monthNames as A } from "./constants.js";
11
+ import B from "../../ui/error/error.js";
12
+ import { ImageContainer as z, DateText as D } from "./monthly-timeline-styled.js";
13
+ import { getTimezone as I } from "../../../helpers/date-time.js";
14
+ import { ILLUSTRATIONS as K } from "../../../assets/illustrations/illustrations.js";
15
+ const N = ({
16
+ userType: g,
17
17
  studentId: m,
18
- courseStreams: g,
18
+ courseStreams: f,
19
19
  onReportClick: x,
20
- onAPIComplete: o
20
+ onAPIComplete: t
21
21
  }) => {
22
22
  const a = R(
23
23
  () => ({
24
- course_streams: f === "TEACHER" ? g : [],
25
- timezone: C()
24
+ course_streams: g === "TEACHER" ? f : [],
25
+ timezone: I()
26
26
  }),
27
- [g, f]
27
+ [f, g]
28
28
  ), {
29
29
  get: p,
30
- data: i = [],
30
+ data: o = [],
31
31
  isProcessing: E,
32
- isProcessingFailed: n,
33
- isProcessed: s
34
- } = j(m, a), h = X(() => {
32
+ isProcessingFailed: i,
33
+ isProcessed: h
34
+ } = v(m, a), s = X(() => {
35
35
  p(m, a);
36
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
- /* @__PURE__ */ r(z, { $renderAs: "ac4", $color: "BLACK_T_60", children: B[e.month - 1] }),
37
+ return $(() => {
38
+ s();
39
+ }, [s]), $(() => {
40
+ (h || i) && (t == null || t(h && !i));
41
+ }, [h, i, t]), E ? /* @__PURE__ */ r(M, { height: "100dvh" }) : i ? /* @__PURE__ */ r(B, { onTryAgain: s, height: "100dvh" }) : /* @__PURE__ */ r(w, { children: (o == null ? void 0 : o.length) > 0 ? /* @__PURE__ */ r(n, { $gapX: 2, children: o.map((e, _) => {
42
+ const d = _ === 0, b = e.month === 12, T = !d && b, y = j[e.year];
43
+ return /* @__PURE__ */ c(n, { $width: "100%", children: [
44
+ !d && !T && /* @__PURE__ */ r(l, { heightX: 2 }),
45
+ T && y && /* @__PURE__ */ r(z, { $marginBottom: -122, children: /* @__PURE__ */ r(u, { src: y, alt: e.year.toString() }) }),
46
+ /* @__PURE__ */ c(n, { $gutterX: 1, children: [
47
+ /* @__PURE__ */ r(D, { $renderAs: "ac4", $color: "BLACK_T_60", children: A[e.month - 1] }),
48
48
  /* @__PURE__ */ r(l, { heightX: 1 }),
49
49
  /* @__PURE__ */ r(
50
50
  F,
@@ -57,12 +57,12 @@ const K = ({
57
57
  )
58
58
  ] })
59
59
  ] }, `${e.month}-${e.year}`);
60
- }) }) : /* @__PURE__ */ c(t, { $justifyContent: "center", $alignItems: "center", $height: "100%", children: [
61
- /* @__PURE__ */ r(u, { src: D.EMPTY_REPORTS }),
60
+ }) }) : /* @__PURE__ */ c(n, { $justifyContent: "center", $alignItems: "center", $height: "100dvh", children: [
61
+ /* @__PURE__ */ r(u, { src: K.EMPTY_REPORTS }),
62
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
- }, rr = L(K);
65
+ }, rr = L(N);
66
66
  export {
67
67
  rr as default
68
68
  };
@@ -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 || isProcessingFailed) {\n onAPIComplete?.(isProcessed && !isProcessingFailed);\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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"}
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);\n }\n }, [isProcessed, isProcessingFailed, onAPIComplete]);\n\n if (isProcessing) {\n return <AppLoader height=\"100dvh\" />;\n }\n\n if (isProcessingFailed) {\n return <Error onTryAgain={fetchData} height=\"100dvh\" />;\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=\"100dvh\">\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","Error","Fragment","FlexView","item","index","isFirstItem","isDecember","showYearImage","yearImage","yearImages","jsxs","Separator","Styled.ImageContainer","Image","Styled.DateText","monthNames","MonthlyTimelineView","ILLUSTRATIONS","Text","monthlyTimeline","memo"],"mappings":";;;;;;;;;;;;;;AAgBA,MAAMA,IAA6C,CAAC;AAAA,EAClD,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC;AAAA,EACA,eAAAC;AAAA,EACA,eAAAC;AACF,MAAM;AACJ,QAAMC,IAAqBC;AAAA,IACzB,OAAO;AAAA,MACL,gBAAgBN,MAAa,YAAYE,IAAgB,CAAC;AAAA,MAC1D,UAAUK,EAAY;AAAA,IAAA;AAAA,IAExB,CAACL,GAAeF,CAAQ;AAAA,EAAA,GAGpB;AAAA,IACJ,KAAKQ;AAAA,IACL,MAAMC,IAAe,CAAC;AAAA,IACtB,cAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,aAAAC;AAAA,EAAA,IACEC,EAAmBZ,GAAWI,CAAkB,GAE9CS,IAAYC,EAAY,MAAM;AAClC,IAAAP,EAAYP,GAAWI,CAAkB;AAAA,EACxC,GAAA,CAACG,GAAaH,GAAoBJ,CAAS,CAAC;AAY/C,SAVAe,EAAU,MAAM;AACJ,IAAAF;EAAA,GACT,CAACA,CAAS,CAAC,GAEdE,EAAU,MAAM;AACd,KAAIJ,KAAeD,OACDP,KAAA,QAAAA,EAAAQ,KAAe,CAACD;AAAA,EAEjC,GAAA,CAACC,GAAaD,GAAoBP,CAAa,CAAC,GAE/CM,IACK,gBAAAO,EAACC,GAAU,EAAA,QAAO,SAAS,CAAA,IAGhCP,IACM,gBAAAM,EAAAE,GAAA,EAAM,YAAYL,GAAW,QAAO,SAAS,CAAA,IAKlD,gBAAAG,EAAAG,GAAA,EAAA,WAAAX,KAAA,gBAAAA,EAAc,UAAS,IACrB,gBAAAQ,EAAAI,GAAA,EAAS,OAAO,GACd,UAAaZ,EAAA,IAAI,CAACa,GAAMC,MAAU;AACjC,UAAMC,IAAcD,MAAU,GACxBE,IAAaH,EAAK,UAAU,IAC5BI,IAAgB,CAACF,KAAeC,GAChCE,IAAYC,EAAWN,EAAK,IAAI;AAGpC,WAAA,gBAAAO,EAACR,GAA4C,EAAA,QAAO,QACjD,UAAA;AAAA,MAAA,CAACG,KAAe,CAACE,KAAkB,gBAAAT,EAAAa,GAAA,EAAU,SAAS,GAAG;AAAA,MACzDJ,KAAiBC,KAChB,gBAAAV,EAACc,GAAA,EAAsB,eAAe,MACpC,UAAC,gBAAAd,EAAAe,GAAA,EAAM,KAAKL,GAAW,KAAKL,EAAK,KAAK,SAAA,EAAY,CAAA,GACpD;AAAA,MAEF,gBAAAO,EAACR,GAAS,EAAA,UAAU,GAClB,UAAA;AAAA,QAAC,gBAAAJ,EAAAgB,GAAA,EAAgB,WAAU,OAAM,QAAO,cACrC,UAAWC,EAAAZ,EAAK,QAAQ,CAAC,EAC5B,CAAA;AAAA,QACA,gBAAAL,EAACa,GAAU,EAAA,SAAS,EAAG,CAAA;AAAA,QACvB,gBAAAb;AAAA,UAACkB;AAAA,UAAA;AAAA,YACC,SAASb,EAAK;AAAA,YACd,OAAOA,EAAK;AAAA,YACZ,MAAMA,EAAK;AAAA,YACX,eAAAnB;AAAA,UAAA;AAAA,QACF;AAAA,MAAA,GACF;AAAA,IAAA,KAlBa,GAAGmB,EAAK,KAAK,IAAIA,EAAK,IAAI,EAmBzC;AAAA,EAEH,CAAA,GACH,IAEC,gBAAAO,EAAAR,GAAA,EAAS,iBAAgB,UAAS,aAAY,UAAS,SAAQ,UAC9D,UAAA;AAAA,IAAC,gBAAAJ,EAAAe,GAAA,EAAM,KAAKI,EAAc,cAAe,CAAA;AAAA,IACzC,gBAAAnB,EAACa,GAAU,EAAA,SAAS,IAAK,CAAA;AAAA,sBACxBO,GAAK,EAAA,WAAU,OAAM,OAAM,cAAa,UAEzC,wCAAA;AAAA,EAAA,EACF,CAAA,EAEJ,CAAA;AAEJ,GAEeC,KAAAC,EAAKxC,CAAe;"}
@@ -1,12 +1,12 @@
1
- import { jsx as e, jsxs as i, Fragment as le } from "react/jsx-runtime";
2
- import { memo as fe, useCallback as he, useEffect as f } from "react";
3
- import { usePTMReportGet as de } from "./api/use-ptm-report-get.js";
4
- import { EPTMTypes as _e } from "./ptm-report-types.js";
5
- import ue from "../../../ui/loader/app-loader/app-loader.js";
6
- import Ce from "./comps/student-info/student-info.js";
1
+ import { jsx as e, jsxs as i, Fragment as ge } from "react/jsx-runtime";
2
+ import { memo as he, useCallback as fe, useEffect as f } from "react";
3
+ import { usePTMReportGet as le } from "./api/use-ptm-report-get.js";
4
+ import { EPTMTypes as de } from "./ptm-report-types.js";
5
+ import _e from "../../../ui/loader/app-loader/app-loader.js";
6
+ import ue from "./comps/student-info/student-info.js";
7
7
  import { Container as Re } from "./ptm-report-styled.js";
8
- import ke from "./comps/key-need/key-need.js";
9
- import h from "../../../ui/layout/flex-view.js";
8
+ import Ce from "./comps/key-need/key-need.js";
9
+ import ke from "../../../ui/layout/flex-view.js";
10
10
  import Te from "./comps/teacher-observations/teacher-observations.js";
11
11
  import Se from "./comps/strategies/strategies.js";
12
12
  import we from "./comps/parent-support/parent-support.js";
@@ -18,65 +18,65 @@ const De = ({ ptmId: r, onAPIComplete: t }) => {
18
18
  const {
19
19
  get: m,
20
20
  data: g,
21
- isProcessing: d,
21
+ isProcessing: l,
22
22
  isProcessed: s,
23
23
  isProcessingFailed: o
24
- } = de(r), a = he(() => {
24
+ } = le(r), a = fe(() => {
25
25
  m(r);
26
26
  }, [m, r]);
27
27
  if (f(() => {
28
28
  a();
29
29
  }, [a]), f(() => {
30
30
  (s || o) && (t == null || t(s && !o));
31
- }, [s, o, t]), d || !g)
32
- return /* @__PURE__ */ e(ue, { height: "100dvh" });
31
+ }, [s, o, t]), l || !g)
32
+ return /* @__PURE__ */ e(_e, { height: "100dvh" });
33
33
  if (o)
34
- return /* @__PURE__ */ e(h, { $flex: 1, $alignItems: "center", $justifyContent: "center", children: /* @__PURE__ */ e(be, { onTryAgain: a }) });
35
- const { ptm_config: _, report: u } = g, { ptm_type: n, config: C } = _ || {}, { ptm_report_sections: R, late_if_minutes: k } = C || {}, {
36
- teacher_observation: T,
37
- learning_strategy: S,
38
- parent_support: w,
39
- school_support: y
40
- } = R || {}, { subsections: M } = y || {}, { homework_help: P, test_help: b } = M || {}, { options: D } = w || {}, { strategies: O } = S || {}, { subsections: j } = T || {}, {
41
- focus_area: A,
42
- strengths: x,
34
+ return /* @__PURE__ */ e(be, { onTryAgain: a, height: "100dvh" });
35
+ const { ptm_config: d, report: _ } = g, { ptm_type: n, config: u } = d || {}, { ptm_report_sections: R, late_if_minutes: C } = u || {}, {
36
+ teacher_observation: k,
37
+ learning_strategy: T,
38
+ parent_support: S,
39
+ school_support: w
40
+ } = R || {}, { subsections: y } = w || {}, { homework_help: M, test_help: P } = y || {}, { options: b } = S || {}, { strategies: D } = T || {}, { subsections: O } = k || {}, {
41
+ focus_area: j,
42
+ strengths: A,
43
43
  teacher_remarks: v
44
- } = j || {}, { areas: E = [], report_tag: F } = A || {}, { areas: N = [] } = x || {}, { report_tag: U } = v || {}, { report_sections: $, student_data: H } = u, {
44
+ } = O || {}, { areas: x = [], report_tag: E } = j || {}, { areas: F = [] } = A || {}, { report_tag: N } = v || {}, { report_sections: U, student_data: H } = _, {
45
45
  teacher_observation: W,
46
46
  parent_support: G,
47
47
  strategies: K,
48
48
  real_world_project: X,
49
- school_support: L,
50
- upcoming_chapters: V
51
- } = $ || {}, { homework_help: q, test_help: z } = L || {}, { upcoming_chapters: B } = V || {}, {
52
- strengths: J = {},
53
- focus_area: Q,
54
- teacher_remarks: Y
49
+ school_support: $,
50
+ upcoming_chapters: L
51
+ } = U || {}, { homework_help: V, test_help: q } = $ || {}, { upcoming_chapters: z } = L || {}, {
52
+ strengths: B = {},
53
+ focus_area: J,
54
+ teacher_remarks: Q
55
55
  } = W || {}, {
56
- first_name: l,
57
- grade: Z,
56
+ first_name: h,
57
+ grade: Y,
58
58
  key_need: p,
59
- attendance_data: I,
60
- homework_data: ee,
61
- late_class_data: te = [],
62
- real_world_project: oe
63
- } = H || {}, { classes_completed: re, weeks_completed: se } = I || {}, { sheets_assigned: ae, sheets_not_completed: ne } = ee || {}, pe = E.find(
64
- ({ area_key: ge }) => ge === Q
65
- ), ce = (p == null ? void 0 : p.key_need) ?? "", c = n === _e.ON_DEMAND, ie = te.length, me = n && n.split("_").includes("UPGRADE");
59
+ attendance_data: Z,
60
+ homework_data: I,
61
+ late_class_data: ee = [],
62
+ real_world_project: te
63
+ } = H || {}, { classes_completed: oe, weeks_completed: re } = Z || {}, { sheets_assigned: se, sheets_not_completed: ae } = I || {}, ne = x.find(
64
+ ({ area_key: me }) => me === J
65
+ ), pe = (p == null ? void 0 : p.key_need) ?? "", c = n === de.ON_DEMAND, ce = ee.length, ie = n && n.split("_").includes("UPGRADE");
66
66
  return /* @__PURE__ */ i(Re, { children: [
67
- /* @__PURE__ */ e(Ce, { name: l, grade: Z }),
68
- /* @__PURE__ */ i(h, { $gutterX: 1, $gapX: 1, children: [
69
- /* @__PURE__ */ e(ke, { text: ce }),
70
- (c || me) && /* @__PURE__ */ i(le, { children: [
71
- /* @__PURE__ */ e(Me, { projectReport: X, projectInfo: oe }),
67
+ /* @__PURE__ */ e(ue, { name: h, grade: Y }),
68
+ /* @__PURE__ */ i(ke, { $gutterX: 1, $gapX: 1, children: [
69
+ /* @__PURE__ */ e(Ce, { text: pe }),
70
+ (c || ie) && /* @__PURE__ */ i(ge, { children: [
71
+ /* @__PURE__ */ e(Me, { projectReport: X, projectInfo: te }),
72
72
  /* @__PURE__ */ e(
73
73
  Pe,
74
74
  {
75
- homeworkHelpReport: q,
76
- homeworkHelpConfig: P,
77
- testHelpReport: z,
78
- testHelpConfig: b,
79
- studentName: l,
75
+ homeworkHelpReport: V,
76
+ homeworkHelpConfig: M,
77
+ testHelpReport: q,
78
+ testHelpConfig: P,
79
+ studentName: h,
80
80
  isOnDemandPTM: c
81
81
  }
82
82
  )
@@ -84,32 +84,32 @@ const De = ({ ptmId: r, onAPIComplete: t }) => {
84
84
  /* @__PURE__ */ e(
85
85
  Te,
86
86
  {
87
- strengthAreas: N,
88
- strengthsReport: J,
89
- focusArea: pe,
90
- focusAreaReportTag: F,
91
- teacherRemarks: Y,
92
- teacherRemarkTag: U
87
+ strengthAreas: F,
88
+ strengthsReport: B,
89
+ focusArea: ne,
90
+ focusAreaReportTag: E,
91
+ teacherRemarks: Q,
92
+ teacherRemarkTag: N
93
93
  }
94
94
  ),
95
- /* @__PURE__ */ e(Se, { report: K, strategyConfig: O }),
95
+ /* @__PURE__ */ e(Se, { report: K, strategyConfig: D }),
96
96
  /* @__PURE__ */ e(
97
97
  we,
98
98
  {
99
99
  report: G,
100
- options: D,
101
- classesCompleted: re,
102
- weeksCompleted: se,
103
- sheetsAssigned: ae,
104
- sheetsNotCompleted: ne,
105
- lateClassesCount: ie,
106
- lateIfMinutes: k
100
+ options: b,
101
+ classesCompleted: oe,
102
+ weeksCompleted: re,
103
+ sheetsAssigned: se,
104
+ sheetsNotCompleted: ae,
105
+ lateClassesCount: ce,
106
+ lateIfMinutes: C
107
107
  }
108
108
  ),
109
- c && /* @__PURE__ */ e(ye, { chapters: B })
109
+ c && /* @__PURE__ */ e(ye, { chapters: z })
110
110
  ] })
111
111
  ] });
112
- }, qe = fe(De);
112
+ }, qe = he(De);
113
113
  export {
114
114
  qe as default
115
115
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ptm-report.js","sources":["../../../../../src/features/timeline/monthly-timeline/ptm-report/ptm-report.tsx"],"sourcesContent":["import { memo, useCallback, useEffect, type FC } from 'react';\n\nimport { usePTMReportGet } from './api/use-ptm-report-get';\nimport { EPTMTypes, type IPTMReportProps } from './ptm-report-types';\nimport AppLoader from '../../../ui/loader/app-loader/app-loader';\nimport StudentInfo from './comps/student-info/student-info';\nimport * as Styled from './ptm-report-styled';\nimport KeyNeed from './comps/key-need/key-need';\nimport FlexView from '../../../ui/layout/flex-view';\nimport TeacherObservations from './comps/teacher-observations/teacher-observations';\nimport Strategies from './comps/strategies/strategies';\nimport ParentSupport from './comps/parent-support/parent-support';\nimport UpcomingChapters from './comps/upcoming-chapters/upcoming-chapters';\nimport RealWorldProjects from './comps/real-world-projects/real-world-projects';\nimport SchoolSupport from './comps/school-support/school-support';\nimport Error from '../../../ui/error/error';\n\nconst PTMReport: FC<IPTMReportProps> = ({ ptmId, onAPIComplete }) => {\n const {\n get: getPTMReport,\n data: ptmReportData,\n isProcessing,\n isProcessed,\n isProcessingFailed,\n } = usePTMReportGet(ptmId);\n\n const fetchPTMReport = useCallback(() => {\n getPTMReport(ptmId);\n }, [getPTMReport, ptmId]);\n\n useEffect(() => {\n fetchPTMReport();\n }, [fetchPTMReport]);\n\n useEffect(() => {\n if (isProcessed || isProcessingFailed) {\n onAPIComplete?.(isProcessed && !isProcessingFailed);\n }\n }, [isProcessed, isProcessingFailed, onAPIComplete]);\n\n if (isProcessing || !ptmReportData) {\n return <AppLoader height=\"100dvh\" />;\n }\n\n if (isProcessingFailed) {\n return (\n <FlexView $flex={1} $alignItems=\"center\" $justifyContent=\"center\">\n <Error onTryAgain={fetchPTMReport} />\n </FlexView>\n );\n }\n\n const { ptm_config: ptmConfig, report } = ptmReportData;\n const { ptm_type: ptmType, config } = ptmConfig || {};\n const { ptm_report_sections: sectionsConfig, late_if_minutes: lateIfMinutes } = config || {};\n\n const {\n teacher_observation: teacherObservationConfig,\n learning_strategy: strategyConfig,\n parent_support: parentSupportConfig,\n school_support: schoolSupportConfig,\n } = sectionsConfig || {};\n\n const { subsections: schoolSubsections } = schoolSupportConfig || {};\n const { homework_help: homeworkConfig, test_help: testConfig } = schoolSubsections || {};\n\n const { options: parentOptions } = parentSupportConfig || {};\n const { strategies: strategiesConfig } = strategyConfig || {};\n const { subsections: teacherSubsections } = teacherObservationConfig || {};\n\n const {\n focus_area: focusAreaConfig,\n strengths: strengthsConfig,\n teacher_remarks: remarksConfig,\n } = teacherSubsections || {};\n\n const { areas: focusAreas = [], report_tag: focusAreaTag } = focusAreaConfig || {};\n const { areas: strengthAreas = [] } = strengthsConfig || {};\n const { report_tag: remarksTag } = remarksConfig || {};\n\n const { report_sections: reportSections, student_data: studentData } = report;\n\n const {\n teacher_observation: teacherObservationReport,\n parent_support: parentSupportReport,\n strategies: strategiesReport,\n real_world_project: realWorldReport,\n school_support: schoolSupportReport,\n upcoming_chapters: upcomingChaptersReport,\n } = reportSections || {};\n\n const { homework_help: homeworkReport, test_help: testReport } = schoolSupportReport || {};\n\n const { upcoming_chapters: upcomingChapters } = upcomingChaptersReport || {};\n\n const {\n strengths: strengthsReport = {},\n focus_area: selectedFocusAreaKey,\n teacher_remarks: teacherRemarks,\n } = teacherObservationReport || {};\n\n const {\n first_name: studentName,\n grade: studentGrade,\n key_need: keyNeedData,\n attendance_data: attendanceData,\n homework_data: homeworkData,\n late_class_data: lateClasses = [],\n real_world_project: realWorldProjectData,\n } = studentData || {};\n\n const { classes_completed: completedClasses, weeks_completed: completedWeeks } =\n attendanceData || {};\n\n const { sheets_assigned: assignedSheets, sheets_not_completed: incompleteSheets } =\n homeworkData || {};\n\n const selectedFocusArea = focusAreas.find(\n ({ area_key: areaKey }) => areaKey === selectedFocusAreaKey,\n );\n\n const keyNeedText = keyNeedData?.key_need ?? '';\n const isOnDemandPTM = ptmType === EPTMTypes.ON_DEMAND;\n const lateClassesCount = lateClasses.length;\n const isUpgradePTM = ptmType && ptmType.split('_').includes('UPGRADE');\n const isUpgradeOrOnDemandPTM = isOnDemandPTM || isUpgradePTM;\n\n return (\n <Styled.Container>\n <StudentInfo name={studentName} grade={studentGrade} />\n <FlexView $gutterX={1} $gapX={1}>\n <KeyNeed text={keyNeedText} />\n {isUpgradeOrOnDemandPTM && (\n <>\n <RealWorldProjects projectReport={realWorldReport} projectInfo={realWorldProjectData} />\n <SchoolSupport\n homeworkHelpReport={homeworkReport}\n homeworkHelpConfig={homeworkConfig}\n testHelpReport={testReport}\n testHelpConfig={testConfig}\n studentName={studentName}\n isOnDemandPTM={isOnDemandPTM}\n />\n </>\n )}\n <TeacherObservations\n strengthAreas={strengthAreas}\n strengthsReport={strengthsReport}\n focusArea={selectedFocusArea}\n focusAreaReportTag={focusAreaTag}\n teacherRemarks={teacherRemarks}\n teacherRemarkTag={remarksTag}\n />\n <Strategies report={strategiesReport} strategyConfig={strategiesConfig} />\n <ParentSupport\n report={parentSupportReport}\n options={parentOptions}\n classesCompleted={completedClasses}\n weeksCompleted={completedWeeks}\n sheetsAssigned={assignedSheets}\n sheetsNotCompleted={incompleteSheets}\n lateClassesCount={lateClassesCount}\n lateIfMinutes={lateIfMinutes}\n />\n {isOnDemandPTM && <UpcomingChapters chapters={upcomingChapters} />}\n </FlexView>\n </Styled.Container>\n );\n};\n\nexport default memo(PTMReport);\n"],"names":["PTMReport","ptmId","onAPIComplete","getPTMReport","ptmReportData","isProcessing","isProcessed","isProcessingFailed","usePTMReportGet","fetchPTMReport","useCallback","useEffect","jsx","AppLoader","FlexView","Error","ptmConfig","report","ptmType","config","sectionsConfig","lateIfMinutes","teacherObservationConfig","strategyConfig","parentSupportConfig","schoolSupportConfig","schoolSubsections","homeworkConfig","testConfig","parentOptions","strategiesConfig","teacherSubsections","focusAreaConfig","strengthsConfig","remarksConfig","focusAreas","focusAreaTag","strengthAreas","remarksTag","reportSections","studentData","teacherObservationReport","parentSupportReport","strategiesReport","realWorldReport","schoolSupportReport","upcomingChaptersReport","homeworkReport","testReport","upcomingChapters","strengthsReport","selectedFocusAreaKey","teacherRemarks","studentName","studentGrade","keyNeedData","attendanceData","homeworkData","lateClasses","realWorldProjectData","completedClasses","completedWeeks","assignedSheets","incompleteSheets","selectedFocusArea","areaKey","keyNeedText","isOnDemandPTM","EPTMTypes","lateClassesCount","isUpgradePTM","jsxs","Styled.Container","StudentInfo","KeyNeed","Fragment","RealWorldProjects","SchoolSupport","TeacherObservations","Strategies","ParentSupport","UpcomingChapters","ptmReport","memo"],"mappings":"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"}
1
+ {"version":3,"file":"ptm-report.js","sources":["../../../../../src/features/timeline/monthly-timeline/ptm-report/ptm-report.tsx"],"sourcesContent":["import { memo, useCallback, useEffect, type FC } from 'react';\n\nimport { usePTMReportGet } from './api/use-ptm-report-get';\nimport { EPTMTypes, type IPTMReportProps } from './ptm-report-types';\nimport AppLoader from '../../../ui/loader/app-loader/app-loader';\nimport StudentInfo from './comps/student-info/student-info';\nimport * as Styled from './ptm-report-styled';\nimport KeyNeed from './comps/key-need/key-need';\nimport FlexView from '../../../ui/layout/flex-view';\nimport TeacherObservations from './comps/teacher-observations/teacher-observations';\nimport Strategies from './comps/strategies/strategies';\nimport ParentSupport from './comps/parent-support/parent-support';\nimport UpcomingChapters from './comps/upcoming-chapters/upcoming-chapters';\nimport RealWorldProjects from './comps/real-world-projects/real-world-projects';\nimport SchoolSupport from './comps/school-support/school-support';\nimport Error from '../../../ui/error/error';\n\nconst PTMReport: FC<IPTMReportProps> = ({ ptmId, onAPIComplete }) => {\n const {\n get: getPTMReport,\n data: ptmReportData,\n isProcessing,\n isProcessed,\n isProcessingFailed,\n } = usePTMReportGet(ptmId);\n\n const fetchPTMReport = useCallback(() => {\n getPTMReport(ptmId);\n }, [getPTMReport, ptmId]);\n\n useEffect(() => {\n fetchPTMReport();\n }, [fetchPTMReport]);\n\n useEffect(() => {\n if (isProcessed || isProcessingFailed) {\n onAPIComplete?.(isProcessed && !isProcessingFailed);\n }\n }, [isProcessed, isProcessingFailed, onAPIComplete]);\n\n if (isProcessing || !ptmReportData) {\n return <AppLoader height=\"100dvh\" />;\n }\n\n if (isProcessingFailed) {\n return <Error onTryAgain={fetchPTMReport} height=\"100dvh\" />;\n }\n\n const { ptm_config: ptmConfig, report } = ptmReportData;\n const { ptm_type: ptmType, config } = ptmConfig || {};\n const { ptm_report_sections: sectionsConfig, late_if_minutes: lateIfMinutes } = config || {};\n\n const {\n teacher_observation: teacherObservationConfig,\n learning_strategy: strategyConfig,\n parent_support: parentSupportConfig,\n school_support: schoolSupportConfig,\n } = sectionsConfig || {};\n\n const { subsections: schoolSubsections } = schoolSupportConfig || {};\n const { homework_help: homeworkConfig, test_help: testConfig } = schoolSubsections || {};\n\n const { options: parentOptions } = parentSupportConfig || {};\n const { strategies: strategiesConfig } = strategyConfig || {};\n const { subsections: teacherSubsections } = teacherObservationConfig || {};\n\n const {\n focus_area: focusAreaConfig,\n strengths: strengthsConfig,\n teacher_remarks: remarksConfig,\n } = teacherSubsections || {};\n\n const { areas: focusAreas = [], report_tag: focusAreaTag } = focusAreaConfig || {};\n const { areas: strengthAreas = [] } = strengthsConfig || {};\n const { report_tag: remarksTag } = remarksConfig || {};\n\n const { report_sections: reportSections, student_data: studentData } = report;\n\n const {\n teacher_observation: teacherObservationReport,\n parent_support: parentSupportReport,\n strategies: strategiesReport,\n real_world_project: realWorldReport,\n school_support: schoolSupportReport,\n upcoming_chapters: upcomingChaptersReport,\n } = reportSections || {};\n\n const { homework_help: homeworkReport, test_help: testReport } = schoolSupportReport || {};\n\n const { upcoming_chapters: upcomingChapters } = upcomingChaptersReport || {};\n\n const {\n strengths: strengthsReport = {},\n focus_area: selectedFocusAreaKey,\n teacher_remarks: teacherRemarks,\n } = teacherObservationReport || {};\n\n const {\n first_name: studentName,\n grade: studentGrade,\n key_need: keyNeedData,\n attendance_data: attendanceData,\n homework_data: homeworkData,\n late_class_data: lateClasses = [],\n real_world_project: realWorldProjectData,\n } = studentData || {};\n\n const { classes_completed: completedClasses, weeks_completed: completedWeeks } =\n attendanceData || {};\n\n const { sheets_assigned: assignedSheets, sheets_not_completed: incompleteSheets } =\n homeworkData || {};\n\n const selectedFocusArea = focusAreas.find(\n ({ area_key: areaKey }) => areaKey === selectedFocusAreaKey,\n );\n\n const keyNeedText = keyNeedData?.key_need ?? '';\n const isOnDemandPTM = ptmType === EPTMTypes.ON_DEMAND;\n const lateClassesCount = lateClasses.length;\n const isUpgradePTM = ptmType && ptmType.split('_').includes('UPGRADE');\n const isUpgradeOrOnDemandPTM = isOnDemandPTM || isUpgradePTM;\n\n return (\n <Styled.Container>\n <StudentInfo name={studentName} grade={studentGrade} />\n <FlexView $gutterX={1} $gapX={1}>\n <KeyNeed text={keyNeedText} />\n {isUpgradeOrOnDemandPTM && (\n <>\n <RealWorldProjects projectReport={realWorldReport} projectInfo={realWorldProjectData} />\n <SchoolSupport\n homeworkHelpReport={homeworkReport}\n homeworkHelpConfig={homeworkConfig}\n testHelpReport={testReport}\n testHelpConfig={testConfig}\n studentName={studentName}\n isOnDemandPTM={isOnDemandPTM}\n />\n </>\n )}\n <TeacherObservations\n strengthAreas={strengthAreas}\n strengthsReport={strengthsReport}\n focusArea={selectedFocusArea}\n focusAreaReportTag={focusAreaTag}\n teacherRemarks={teacherRemarks}\n teacherRemarkTag={remarksTag}\n />\n <Strategies report={strategiesReport} strategyConfig={strategiesConfig} />\n <ParentSupport\n report={parentSupportReport}\n options={parentOptions}\n classesCompleted={completedClasses}\n weeksCompleted={completedWeeks}\n sheetsAssigned={assignedSheets}\n sheetsNotCompleted={incompleteSheets}\n lateClassesCount={lateClassesCount}\n lateIfMinutes={lateIfMinutes}\n />\n {isOnDemandPTM && <UpcomingChapters chapters={upcomingChapters} />}\n </FlexView>\n </Styled.Container>\n );\n};\n\nexport default memo(PTMReport);\n"],"names":["PTMReport","ptmId","onAPIComplete","getPTMReport","ptmReportData","isProcessing","isProcessed","isProcessingFailed","usePTMReportGet","fetchPTMReport","useCallback","useEffect","jsx","AppLoader","Error","ptmConfig","report","ptmType","config","sectionsConfig","lateIfMinutes","teacherObservationConfig","strategyConfig","parentSupportConfig","schoolSupportConfig","schoolSubsections","homeworkConfig","testConfig","parentOptions","strategiesConfig","teacherSubsections","focusAreaConfig","strengthsConfig","remarksConfig","focusAreas","focusAreaTag","strengthAreas","remarksTag","reportSections","studentData","teacherObservationReport","parentSupportReport","strategiesReport","realWorldReport","schoolSupportReport","upcomingChaptersReport","homeworkReport","testReport","upcomingChapters","strengthsReport","selectedFocusAreaKey","teacherRemarks","studentName","studentGrade","keyNeedData","attendanceData","homeworkData","lateClasses","realWorldProjectData","completedClasses","completedWeeks","assignedSheets","incompleteSheets","selectedFocusArea","areaKey","keyNeedText","isOnDemandPTM","EPTMTypes","lateClassesCount","isUpgradePTM","jsxs","Styled.Container","StudentInfo","FlexView","KeyNeed","Fragment","RealWorldProjects","SchoolSupport","TeacherObservations","Strategies","ParentSupport","UpcomingChapters","ptmReport","memo"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ const o = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto), t = {
2
+ randomUUID: o
3
+ };
4
+ export {
5
+ t as default
6
+ };
7
+ //# sourceMappingURL=native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native.js","sources":["../../../../../node_modules/uuid/dist/esm-browser/native.js"],"sourcesContent":["const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};"],"names":["randomUUID","native"],"mappings":"AAAA,MAAMA,IAAa,OAAO,SAAW,OAAe,OAAO,cAAc,OAAO,WAAW,KAAK,MAAM,GACvFC,IAAA;AAAA,EACb,YAAAD;AACF;","x_google_ignoreList":[0]}
@@ -1,6 +1,7 @@
1
- var t, e = new Uint8Array(16);
1
+ let t;
2
+ const e = new Uint8Array(16);
2
3
  function o() {
3
- if (!t && (t = typeof crypto < "u" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto < "u" && typeof msCrypto.getRandomValues == "function" && msCrypto.getRandomValues.bind(msCrypto), !t))
4
+ if (!t && (t = typeof crypto < "u" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto), !t))
4
5
  throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
5
6
  return t(e);
6
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rng.js","sources":["../../../../../node_modules/uuid/dist/esm-browser/rng.js"],"sourcesContent":["// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}"],"names":["getRandomValues","rnds8","rng"],"mappings":"AAGA,IAAIA,GACAC,IAAQ,IAAI,WAAW,EAAE;AACd,SAASC,IAAM;AAE5B,MAAI,CAACF,MAGHA,IAAkB,OAAO,SAAW,OAAe,OAAO,mBAAmB,OAAO,gBAAgB,KAAK,MAAM,KAAK,OAAO,WAAa,OAAe,OAAO,SAAS,mBAAoB,cAAc,SAAS,gBAAgB,KAAK,QAAQ,GAE3O,CAACA;AACH,UAAM,IAAI,MAAM,0GAA0G;AAI9H,SAAOA,EAAgBC,CAAK;AAC9B;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"rng.js","sources":["../../../../../node_modules/uuid/dist/esm-browser/rng.js"],"sourcesContent":["// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}"],"names":["getRandomValues","rnds8","rng"],"mappings":"AAGA,IAAIA;AACJ,MAAMC,IAAQ,IAAI,WAAW,EAAE;AAChB,SAASC,IAAM;AAE5B,MAAI,CAACF,MAEHA,IAAkB,OAAO,SAAW,OAAe,OAAO,mBAAmB,OAAO,gBAAgB,KAAK,MAAM,GAE3G,CAACA;AACH,UAAM,IAAI,MAAM,0GAA0G;AAI9H,SAAOA,EAAgBC,CAAK;AAC9B;","x_google_ignoreList":[0]}
@@ -1,14 +1,10 @@
1
- import s from "./validate.js";
2
- var t = [];
3
- for (var n = 0; n < 256; ++n)
4
- t.push((n + 256).toString(16).substr(1));
5
- function f(e) {
6
- var i = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0, o = (t[e[i + 0]] + t[e[i + 1]] + t[e[i + 2]] + t[e[i + 3]] + "-" + t[e[i + 4]] + t[e[i + 5]] + "-" + t[e[i + 6]] + t[e[i + 7]] + "-" + t[e[i + 8]] + t[e[i + 9]] + "-" + t[e[i + 10]] + t[e[i + 11]] + t[e[i + 12]] + t[e[i + 13]] + t[e[i + 14]] + t[e[i + 15]]).toLowerCase();
7
- if (!s(o))
8
- throw TypeError("Stringified UUID is invalid");
9
- return o;
1
+ const i = [];
2
+ for (let n = 0; n < 256; ++n)
3
+ i.push((n + 256).toString(16).slice(1));
4
+ function c(n, u = 0) {
5
+ return (i[n[u + 0]] + i[n[u + 1]] + i[n[u + 2]] + i[n[u + 3]] + "-" + i[n[u + 4]] + i[n[u + 5]] + "-" + i[n[u + 6]] + i[n[u + 7]] + "-" + i[n[u + 8]] + i[n[u + 9]] + "-" + i[n[u + 10]] + i[n[u + 11]] + i[n[u + 12]] + i[n[u + 13]] + i[n[u + 14]] + i[n[u + 15]]).toLowerCase();
10
6
  }
11
7
  export {
12
- f as default
8
+ c as unsafeStringify
13
9
  };
14
10
  //# sourceMappingURL=stringify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stringify.js","sources":["../../../../../node_modules/uuid/dist/esm-browser/stringify.js"],"sourcesContent":["import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;"],"names":["byteToHex","i","stringify","arr","offset","uuid","validate"],"mappings":";AAMA,IAAIA,IAAY,CAAA;AAEhB,SAASC,IAAI,GAAGA,IAAI,KAAK,EAAEA;AACzB,EAAAD,EAAU,MAAMC,IAAI,KAAO,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;AAGnD,SAASC,EAAUC,GAAK;AACtB,MAAIC,IAAS,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,GAG7EC,KAAQL,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAI,MAAMJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAI,MAAMJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAI,MAAMJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAI,MAAMJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,GAAG;AAMzf,MAAI,CAACE,EAASD,CAAI;AAChB,UAAM,UAAU,6BAA6B;AAG/C,SAAOA;AACT;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"stringify.js","sources":["../../../../../node_modules/uuid/dist/esm-browser/stringify.js"],"sourcesContent":["import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;"],"names":["byteToHex","i","unsafeStringify","arr","offset"],"mappings":"AAMA,MAAMA,IAAY,CAAA;AAElB,SAASC,IAAI,GAAGA,IAAI,KAAK,EAAEA;AACzB,EAAAD,EAAU,MAAMC,IAAI,KAAO,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AAG3C,SAASC,EAAgBC,GAAKC,IAAS,GAAG;AAG/C,UAAQJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAI,MAAMJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAI,MAAMJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAI,MAAMJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,CAAC,CAAC,IAAI,MAAMJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,IAAIJ,EAAUG,EAAIC,IAAS,EAAE,CAAC,GAAG;AACvf;","x_google_ignoreList":[0]}
@@ -1,17 +1,20 @@
1
- import d from "./rng.js";
2
- import f from "./stringify.js";
3
- function v(n, m, x) {
1
+ import e from "./native.js";
2
+ import i from "./rng.js";
3
+ import { unsafeStringify as d } from "./stringify.js";
4
+ function g(n, m, t) {
5
+ if (e.randomUUID && !m && !n)
6
+ return e.randomUUID();
4
7
  n = n || {};
5
- var r = n.random || (n.rng || d)();
8
+ const r = n.random || (n.rng || i)();
6
9
  if (r[6] = r[6] & 15 | 64, r[8] = r[8] & 63 | 128, m) {
7
- x = x || 0;
8
- for (var a = 0; a < 16; ++a)
9
- m[x + a] = r[a];
10
+ t = t || 0;
11
+ for (let a = 0; a < 16; ++a)
12
+ m[t + a] = r[a];
10
13
  return m;
11
14
  }
12
- return f(r);
15
+ return d(r);
13
16
  }
14
17
  export {
15
- v as default
18
+ g as default
16
19
  };
17
20
  //# sourceMappingURL=v4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"v4.js","sources":["../../../../../node_modules/uuid/dist/esm-browser/v4.js"],"sourcesContent":["import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;"],"names":["v4","options","buf","offset","rnds","rng","i","stringify"],"mappings":";;AAGA,SAASA,EAAGC,GAASC,GAAKC,GAAQ;AAChC,EAAAF,IAAUA,KAAW;AACrB,MAAIG,IAAOH,EAAQ,WAAWA,EAAQ,OAAOI;AAK7C,MAHAD,EAAK,CAAC,IAAIA,EAAK,CAAC,IAAI,KAAO,IAC3BA,EAAK,CAAC,IAAIA,EAAK,CAAC,IAAI,KAAO,KAEvBF,GAAK;AACP,IAAAC,IAASA,KAAU;AAEnB,aAASG,IAAI,GAAGA,IAAI,IAAI,EAAEA;AACxB,MAAAJ,EAAIC,IAASG,CAAC,IAAIF,EAAKE,CAAC;AAG1B,WAAOJ;AAAA,EACR;AAED,SAAOK,EAAUH,CAAI;AACvB;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"v4.js","sources":["../../../../../node_modules/uuid/dist/esm-browser/v4.js"],"sourcesContent":["import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;"],"names":["v4","options","buf","offset","native","rnds","rng","i","unsafeStringify"],"mappings":";;;AAIA,SAASA,EAAGC,GAASC,GAAKC,GAAQ;AAChC,MAAIC,EAAO,cAAc,CAACF,KAAO,CAACD;AAChC,WAAOG,EAAO;AAGhB,EAAAH,IAAUA,KAAW;AACrB,QAAMI,IAAOJ,EAAQ,WAAWA,EAAQ,OAAOK;AAK/C,MAHAD,EAAK,CAAC,IAAIA,EAAK,CAAC,IAAI,KAAO,IAC3BA,EAAK,CAAC,IAAIA,EAAK,CAAC,IAAI,KAAO,KAEvBH,GAAK;AACP,IAAAC,IAASA,KAAU;AAEnB,aAASI,IAAI,GAAGA,IAAI,IAAI,EAAEA;AACxB,MAAAL,EAAIC,IAASI,CAAC,IAAIF,EAAKE,CAAC;AAG1B,WAAOL;AAAA,EACR;AAED,SAAOM,EAAgBH,CAAI;AAC7B;","x_google_ignoreList":[0]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cuemath/leap",
3
- "version": "3.5.63",
3
+ "version": "3.5.64",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -1,5 +0,0 @@
1
- const a = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
2
- export {
3
- a as default
4
- };
5
- //# sourceMappingURL=regex.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"regex.js","sources":["../../../../../node_modules/uuid/dist/esm-browser/regex.js"],"sourcesContent":["export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;"],"names":["REGEX"],"mappings":"AAAA,MAAAA,IAAe;","x_google_ignoreList":[0]}
@@ -1,8 +0,0 @@
1
- import e from "./regex.js";
2
- function o(t) {
3
- return typeof t == "string" && e.test(t);
4
- }
5
- export {
6
- o as default
7
- };
8
- //# sourceMappingURL=validate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate.js","sources":["../../../../../node_modules/uuid/dist/esm-browser/validate.js"],"sourcesContent":["import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;"],"names":["validate","uuid","REGEX"],"mappings":";AAEA,SAASA,EAASC,GAAM;AACtB,SAAO,OAAOA,KAAS,YAAYC,EAAM,KAAKD,CAAI;AACpD;","x_google_ignoreList":[0]}