@cuemath/leap 3.3.17-j1 → 3.3.17-m-af

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.
Files changed (95) hide show
  1. package/dist/assets/lottie/lottie.js +2 -2
  2. package/dist/assets/lottie/lottie.js.map +1 -1
  3. package/dist/features/auth/comps/auth-page-layout/auth-page-layout.js +6 -6
  4. package/dist/features/auth/comps/auth-page-layout/auth-page-layout.js.map +1 -1
  5. package/dist/features/auth/comps/pill-button/pill-button.js +19 -19
  6. package/dist/features/auth/comps/pill-button/pill-button.js.map +1 -1
  7. package/dist/features/auth/pla-signup/pla-analytics-events.js +4 -5
  8. package/dist/features/auth/pla-signup/pla-analytics-events.js.map +1 -1
  9. package/dist/features/auth/pla-signup/signup-header/signup-header.js +1 -1
  10. package/dist/features/auth/pla-signup/signup-header/signup-header.js.map +1 -1
  11. package/dist/features/auth/signup/circular-step-wrapper/circular-step-wrapper.js +24 -24
  12. package/dist/features/auth/signup/circular-step-wrapper/circular-step-wrapper.js.map +1 -1
  13. package/dist/features/circle-games/hooks/use-circle-sounds/constants.js +5 -7
  14. package/dist/features/circle-games/hooks/use-circle-sounds/constants.js.map +1 -1
  15. package/dist/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.js +69 -73
  16. package/dist/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.js.map +1 -1
  17. package/dist/features/parent-dashboard/hooks/use-parent-home-data.js +42 -45
  18. package/dist/features/parent-dashboard/hooks/use-parent-home-data.js.map +1 -1
  19. package/dist/features/parent-dashboard/parent-dashboard-types.js +2 -3
  20. package/dist/features/parent-dashboard/parent-dashboard-types.js.map +1 -1
  21. package/dist/features/parent-dashboard/parent-dashboard-view.js +127 -139
  22. package/dist/features/parent-dashboard/parent-dashboard-view.js.map +1 -1
  23. package/dist/features/trial-session/comps/pla/session-summary/session-summary-constants.js +7 -8
  24. package/dist/features/trial-session/comps/pla/session-summary/session-summary-constants.js.map +1 -1
  25. package/dist/features/trial-session/comps/pla/session-summary/session-summary.js +26 -27
  26. package/dist/features/trial-session/comps/pla/session-summary/session-summary.js.map +1 -1
  27. package/dist/features/trial-session/comps/pla/session-summary/summary-card/summary-card.js +16 -16
  28. package/dist/features/trial-session/comps/pla/session-summary/summary-card/summary-card.js.map +1 -1
  29. package/dist/features/trial-session/comps/session-report/report-information/report-information-styled.js +13 -15
  30. package/dist/features/trial-session/comps/session-report/report-information/report-information-styled.js.map +1 -1
  31. package/dist/features/trial-session/comps/session-report/report-information/report-information.js +1 -1
  32. package/dist/features/trial-session/comps/session-report/report-information/report-information.js.map +1 -1
  33. package/dist/features/trial-session/comps/worksheet/worksheet.js +23 -23
  34. package/dist/features/trial-session/comps/worksheet/worksheet.js.map +1 -1
  35. package/dist/features/trial-session/trial-session-types.js.map +1 -1
  36. package/dist/index.d.ts +18 -61
  37. package/dist/index.js +367 -383
  38. package/dist/index.js.map +1 -1
  39. package/dist/node_modules/query-string/base.js +1 -1
  40. package/dist/node_modules/query-string/node_modules/decode-uri-component/index.js.map +1 -0
  41. package/dist/node_modules/uuid/dist/esm-browser/regex.js +5 -0
  42. package/dist/node_modules/uuid/dist/esm-browser/regex.js.map +1 -0
  43. package/dist/node_modules/uuid/dist/esm-browser/rng.js +2 -3
  44. package/dist/node_modules/uuid/dist/esm-browser/rng.js.map +1 -1
  45. package/dist/node_modules/uuid/dist/esm-browser/stringify.js +10 -6
  46. package/dist/node_modules/uuid/dist/esm-browser/stringify.js.map +1 -1
  47. package/dist/node_modules/uuid/dist/esm-browser/v4.js +9 -12
  48. package/dist/node_modules/uuid/dist/esm-browser/v4.js.map +1 -1
  49. package/dist/node_modules/uuid/dist/esm-browser/validate.js +8 -0
  50. package/dist/node_modules/uuid/dist/esm-browser/validate.js.map +1 -0
  51. package/dist/static/error.cbe1ddde.json +1 -0
  52. package/dist/static/username.9e034d51.json +1 -0
  53. package/package.json +1 -1
  54. package/dist/features/auth/signup-unavailable/signup-unavailable-styled.js +0 -16
  55. package/dist/features/auth/signup-unavailable/signup-unavailable-styled.js.map +0 -1
  56. package/dist/features/auth/signup-unavailable/signup-unavailable-view.js +0 -60
  57. package/dist/features/auth/signup-unavailable/signup-unavailable-view.js.map +0 -1
  58. package/dist/features/auth/signup-unavailable/signup-unavailable.js +0 -16
  59. package/dist/features/auth/signup-unavailable/signup-unavailable.js.map +0 -1
  60. package/dist/features/circle-games/hooks/use-circle-sounds/helper.js +0 -19
  61. package/dist/features/circle-games/hooks/use-circle-sounds/helper.js.map +0 -1
  62. package/dist/features/parent-dashboard/api/get-student-profile-summary.js +0 -9
  63. package/dist/features/parent-dashboard/api/get-student-profile-summary.js.map +0 -1
  64. package/dist/features/parent-dashboard/comps/pla-first-session-introduction/pla-first-session-introduction-styled.js +0 -10
  65. package/dist/features/parent-dashboard/comps/pla-first-session-introduction/pla-first-session-introduction-styled.js.map +0 -1
  66. package/dist/features/parent-dashboard/comps/pla-first-session-introduction/pla-first-session-introduction.js +0 -42
  67. package/dist/features/parent-dashboard/comps/pla-first-session-introduction/pla-first-session-introduction.js.map +0 -1
  68. package/dist/features/parent-dashboard/hooks/use-student-profile-summary-data.js +0 -24
  69. package/dist/features/parent-dashboard/hooks/use-student-profile-summary-data.js.map +0 -1
  70. package/dist/features/parent-dashboard/modals/help-and-support/help-and-support.js +0 -40
  71. package/dist/features/parent-dashboard/modals/help-and-support/help-and-support.js.map +0 -1
  72. package/dist/features/parent-dashboard/modals/student-login-info/student-login-info.js +0 -44
  73. package/dist/features/parent-dashboard/modals/student-login-info/student-login-info.js.map +0 -1
  74. package/dist/features/parent-dashboard/modals/student-profile-summary/student-profile-summary-helpers.js +0 -32
  75. package/dist/features/parent-dashboard/modals/student-profile-summary/student-profile-summary-helpers.js.map +0 -1
  76. package/dist/features/parent-dashboard/modals/student-profile-summary/student-profile-summary-styled.js +0 -12
  77. package/dist/features/parent-dashboard/modals/student-profile-summary/student-profile-summary-styled.js.map +0 -1
  78. package/dist/features/parent-dashboard/modals/student-profile-summary/student-profile-summary.js +0 -44
  79. package/dist/features/parent-dashboard/modals/student-profile-summary/student-profile-summary.js.map +0 -1
  80. package/dist/features/parent-dashboard/modals/trial-report/trial-report-styled.js +0 -13
  81. package/dist/features/parent-dashboard/modals/trial-report/trial-report-styled.js.map +0 -1
  82. package/dist/features/parent-dashboard/modals/trial-report/trial-report.js +0 -28
  83. package/dist/features/parent-dashboard/modals/trial-report/trial-report.js.map +0 -1
  84. package/dist/features/parent-dashboard/modals/tutor-change/tutor-change-constants.js +0 -43
  85. package/dist/features/parent-dashboard/modals/tutor-change/tutor-change-constants.js.map +0 -1
  86. package/dist/features/parent-dashboard/modals/tutor-change/tutor-change-styled.js +0 -59
  87. package/dist/features/parent-dashboard/modals/tutor-change/tutor-change-styled.js.map +0 -1
  88. package/dist/features/parent-dashboard/modals/tutor-change/tutor-change.js +0 -86
  89. package/dist/features/parent-dashboard/modals/tutor-change/tutor-change.js.map +0 -1
  90. package/dist/node_modules/decode-uri-component/index.js.map +0 -1
  91. package/dist/node_modules/uuid/dist/esm-browser/native.js +0 -7
  92. package/dist/node_modules/uuid/dist/esm-browser/native.js.map +0 -1
  93. package/dist/static/error.dd744fa5.json +0 -1
  94. package/dist/static/username.2c755605.json +0 -1
  95. /package/dist/node_modules/{decode-uri-component → query-string/node_modules/decode-uri-component}/index.js +0 -0
@@ -1,10 +1,9 @@
1
- import { useCallback as s, useRef as R, useEffect as m } from "react";
2
- import { useAutoPlayPermission as P } from "../../../hooks/use-auto-play-permission/use-auto-play-permission.js";
3
- import { CircleSoundKeyMapper as U, SWIPE_SOUND_ORDER as O } from "./constants.js";
4
- import { fadeInSound as p, fadeOutSound as D } from "./helper.js";
1
+ import { useRef as p, useCallback as s, useEffect as v } from "react";
2
+ import { useAutoPlayPermission as D } from "../../../hooks/use-auto-play-permission/use-auto-play-permission.js";
3
+ import { CircleSoundKeyMapper as L, SWIPE_SOUND_ORDER as I } from "./constants.js";
5
4
  import { CircleSoundKey as n } from "./use-circle-sounds-enums.js";
6
- let S = 0;
7
- const c = {
5
+ let T = 0;
6
+ const u = new (window.AudioContext || window.webkitAudioContext)(), A = {
8
7
  [n.BACKGROUND]: null,
9
8
  [n.BACKGROUND_RUSHHOUR]: null,
10
9
  [n.TUTORIAL]: null,
@@ -33,81 +32,78 @@ const c = {
33
32
  [n.KEEP_IT_UP]: null,
34
33
  [n.DOING_GREAT]: null,
35
34
  [n.ALL_DONE]: null
36
- }, f = {}, b = () => {
37
- const { canAutoPlayAudio: _ } = P(), C = s((t) => {
38
- if (!c[t]) {
39
- const l = new Audio(U[t]);
40
- c[t] = l;
35
+ }, r = {}, g = () => {
36
+ const { canAutoPlayAudio: m } = D(), d = p(/* @__PURE__ */ new Set()), C = p({}), R = s(async (e) => {
37
+ if (!A[e]) {
38
+ const l = await (await fetch(L[e])).arrayBuffer(), t = await u.decodeAudioData(l);
39
+ A[e] = t;
41
40
  }
42
- }, []), i = R(/* @__PURE__ */ new Set()), o = R({}), r = s(
43
- (t, l = !0, e = !1) => {
44
- C(t);
45
- const u = c[t];
46
- if (!u || !_) return;
47
- if (e && (u.loop = e), o.current[t] && clearInterval(o.current[t]), !u.paused && u.currentTime > 0 && !u.ended) {
48
- if (l)
49
- u.volume = 1;
50
- else {
51
- const I = p(u);
52
- o.current[t] = I;
53
- }
54
- return u;
41
+ }, []), _ = async () => {
42
+ if (u.state === "suspended")
43
+ try {
44
+ await u.resume();
45
+ } catch (e) {
46
+ console.warn("Failed to resume AudioContext:", e);
55
47
  }
56
- u.volume = l ? 1 : 0;
57
- const A = u.play();
58
- if (A && (f[t] = A), !l) {
59
- const I = p(u);
60
- o.current[t] = I;
61
- }
62
- return u;
63
- },
64
- [C, _]
65
- ), a = s((t, l) => {
66
- const e = c[t];
67
- if (!e) return;
68
- if (o.current[t] && clearInterval(o.current[t]), l) {
69
- e.pause();
70
- return;
71
- }
72
- const u = D(e);
73
- o.current[t] = u;
74
- }, []), d = s(
75
- (t, l = !0) => {
76
- var e;
77
- if (f[t] !== void 0) {
78
- (e = f[t]) == null || e.then(() => {
79
- a(t, l);
80
- }).catch((u) => {
81
- console.log("sound not playing", u);
82
- });
48
+ }, S = (e) => {
49
+ e.gain.setValueAtTime(0, u.currentTime), e.gain.linearRampToValueAtTime(1, u.currentTime + 0.5);
50
+ }, w = (e, o) => {
51
+ e.gain.setValueAtTime(e.gain.value, u.currentTime), e.gain.linearRampToValueAtTime(0, u.currentTime + 0.5);
52
+ const l = setTimeout(() => {
53
+ var t;
54
+ (t = r[o]) == null || t.source.stop(), delete r[o];
55
+ }, 500);
56
+ C.current[o] = l;
57
+ }, i = s(
58
+ async (e, o = !0, l = !1) => {
59
+ await R(e);
60
+ const t = A[e];
61
+ if (!t || !m) return;
62
+ if (r[e]) {
63
+ const { gainNode: O } = r[e];
64
+ o ? O.gain.setValueAtTime(1, u.currentTime) : S(O);
83
65
  return;
84
66
  }
85
- a(t, l);
67
+ const a = u.createBufferSource(), c = u.createGain();
68
+ a.buffer = t, a.loop = l, a.connect(c).connect(u.destination), o ? c.gain.setValueAtTime(1, u.currentTime) : S(c), a.start(), r[e] = { source: a, gainNode: c };
86
69
  },
87
- [a]
88
- ), T = s(() => {
89
- const t = O[S] || n.SWIPE_01;
90
- S = (S + 1) % O.length, r(t);
91
- }, [r]), v = s(() => r(n.TOGGLE), [r]), E = s(() => {
92
- const t = document.visibilityState;
93
- t === "hidden" && Object.entries(c).forEach(([l, e]) => {
94
- e && !e.paused && (d(l, !0), i.current.add(l));
95
- }), t === "visible" && (i.current.forEach((l) => {
96
- r(l);
97
- }), i.current.clear());
98
- }, [r, d]);
99
- return m(() => {
100
- document.addEventListener("visibilitychange", E);
101
- const t = o.current;
70
+ [m, R]
71
+ ), f = s(async (e, o = !0) => {
72
+ const l = r[e];
73
+ l && (o ? (l.source.stop(), delete r[e]) : w(l.gainNode, e));
74
+ }, []), P = s(() => {
75
+ const e = I[T] || n.SWIPE_01;
76
+ T = (T + 1) % I.length, i(e);
77
+ }, [i]), U = s(() => {
78
+ i(n.TOGGLE);
79
+ }, [i]), E = s(async () => {
80
+ document.visibilityState === "visible" ? (await _(), d.current.forEach((e) => {
81
+ i(e);
82
+ }), d.current.clear()) : Object.keys(r).forEach((e) => {
83
+ f(e, !0), d.current.add(e);
84
+ });
85
+ }, [i, f]);
86
+ return v(() => {
87
+ const e = ["pointerdown", "touchstart"], o = () => {
88
+ _();
89
+ };
90
+ document.addEventListener("visibilitychange", E), e.forEach((t) => {
91
+ window.addEventListener(t, o, { once: !0 });
92
+ });
93
+ const l = C.current;
102
94
  return () => {
103
- document.removeEventListener("visibilitychange", E), Object.values(t).forEach((l) => {
104
- l && clearInterval(l);
105
- });
95
+ document.removeEventListener("visibilitychange", E), e.forEach((t) => {
96
+ window.removeEventListener(t, o);
97
+ }), Object.values(l).forEach((t) => clearTimeout(t));
106
98
  };
107
- }, [E]), { playSwipeSound: T, play: r, stop: d, playButtonSound: v };
99
+ }, [E]), {
100
+ playSwipeSound: P,
101
+ play: i,
102
+ stop: f,
103
+ playButtonSound: U
104
+ };
108
105
  };
109
106
  export {
110
- c as soundMapper,
111
- b as useCircleSounds
107
+ g as useCircleSounds
112
108
  };
113
109
  //# sourceMappingURL=use-circle-sounds.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-circle-sounds.js","sources":["../../../../../src/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.ts"],"sourcesContent":["import type { TimeoutMap } from './use-circle-sound-types';\n\nimport { useCallback, useEffect, useRef } from 'react';\n\nimport { useAutoPlayPermission } from '../../../hooks/use-auto-play-permission/use-auto-play-permission';\nimport { CircleSoundKeyMapper, SWIPE_SOUND_ORDER } from './constants';\nimport { fadeInSound, fadeOutSound } from './helper';\nimport { CircleSoundKey } from './use-circle-sounds-enums';\n\nlet swipeSoundIndex = 0;\n\nexport const soundMapper: Record<keyof typeof CircleSoundKeyMapper, null | HTMLAudioElement> = {\n [CircleSoundKey.BACKGROUND]: null,\n [CircleSoundKey.BACKGROUND_RUSHHOUR]: null,\n [CircleSoundKey.TUTORIAL]: null,\n [CircleSoundKey.SWIPE_01]: null,\n [CircleSoundKey.SWIPE_02]: null,\n [CircleSoundKey.SWIPE_03]: null,\n [CircleSoundKey.SWIPE_04]: null,\n [CircleSoundKey.SWIPE_DOWN]: null,\n [CircleSoundKey.TOGGLE]: null,\n [CircleSoundKey.POINTS_AWARDED]: null,\n [CircleSoundKey.POINTS_ADDED]: null,\n [CircleSoundKey.GAME_CARD_CLICK]: null,\n [CircleSoundKey.CLOCK_IN]: null,\n [CircleSoundKey.CLOCK_OUT]: null,\n [CircleSoundKey.ACCURACY_IN]: null,\n [CircleSoundKey.ACCURACY_OUT]: null,\n [CircleSoundKey.STREAK_IN]: null,\n [CircleSoundKey.STREAK_OUT]: null,\n [CircleSoundKey.ACCURACY_INTRO]: null,\n [CircleSoundKey.ACCURACY_TARGET]: null,\n [CircleSoundKey.TIME_INTRO]: null,\n [CircleSoundKey.TIME_TARGET]: null,\n [CircleSoundKey.METER_FILL]: null,\n [CircleSoundKey.YOUR_SCORE]: null,\n [CircleSoundKey.HIGH_SCORE]: null,\n [CircleSoundKey.KEEP_IT_UP]: null,\n [CircleSoundKey.DOING_GREAT]: null,\n [CircleSoundKey.ALL_DONE]: null,\n};\n\nconst soundInstancePromise: Partial<Record<keyof typeof CircleSoundKeyMapper, Promise<void>>> = {};\n\nexport const useCircleSounds = () => {\n const { canAutoPlayAudio: canPlayAudio } = useAutoPlayPermission();\n\n const loadSound = useCallback((key: CircleSoundKey) => {\n if (!soundMapper[key]) {\n const loadedSound = new Audio(CircleSoundKeyMapper[key]);\n\n soundMapper[key] = loadedSound;\n }\n }, []);\n\n const pausedSoundsRef = useRef<Set<CircleSoundKey>>(new Set());\n const timeoutRefs = useRef<TimeoutMap>({});\n\n const play = useCallback(\n (key: CircleSoundKey, immediately: boolean = true, loop = false) => {\n loadSound(key);\n const soundInstance = soundMapper[key];\n\n if (!soundInstance || !canPlayAudio) return;\n\n // this makes sure that it keeps the default loop value at the time it was requested to be loaded\n // helps in visibility change where we only want to resume\n if (loop) {\n soundInstance.loop = loop;\n }\n\n if (timeoutRefs.current[key]) {\n clearInterval(timeoutRefs.current[key]);\n }\n\n // resume sound\n if (!soundInstance.paused && soundInstance.currentTime > 0 && !soundInstance.ended) {\n if (!immediately) {\n const intervalId = fadeInSound(soundInstance);\n\n timeoutRefs.current[key] = intervalId;\n } else {\n soundInstance.volume = 1;\n }\n\n return soundInstance;\n }\n\n // play sound\n soundInstance.volume = immediately ? 1 : 0;\n const promise = soundInstance.play();\n\n if (promise) {\n soundInstancePromise[key] = promise;\n }\n\n if (!immediately) {\n const intervalId = fadeInSound(soundInstance);\n\n timeoutRefs.current[key] = intervalId;\n }\n\n return soundInstance;\n },\n [loadSound, canPlayAudio],\n );\n\n const handleSoundStop = useCallback((key: CircleSoundKey, immediately: boolean) => {\n const soundInstance = soundMapper[key];\n\n if (!soundInstance) return;\n\n if (timeoutRefs.current[key]) {\n clearInterval(timeoutRefs.current[key]);\n }\n\n if (immediately) {\n soundInstance.pause();\n\n return;\n }\n\n const intervalId = fadeOutSound(soundInstance);\n\n timeoutRefs.current[key] = intervalId;\n }, []);\n\n const stop = useCallback(\n (key: CircleSoundKey, immediately: boolean = true) => {\n // if play returned a promise\n if (soundInstancePromise[key] !== undefined) {\n soundInstancePromise[key]\n ?.then(() => {\n handleSoundStop(key, immediately);\n })\n .catch(err => {\n // eslint-disable-next-line no-console\n console.log('sound not playing', err);\n });\n\n return;\n }\n\n handleSoundStop(key, immediately);\n },\n [handleSoundStop],\n );\n\n const playSwipeSound = useCallback(() => {\n const key = SWIPE_SOUND_ORDER[swipeSoundIndex] || CircleSoundKey.SWIPE_01;\n\n swipeSoundIndex = (swipeSoundIndex + 1) % SWIPE_SOUND_ORDER.length;\n\n play(key);\n }, [play]);\n\n const playButtonSound = useCallback(() => {\n const sound = play(CircleSoundKey.TOGGLE);\n\n return sound;\n }, [play]);\n\n const handleVisibilityChange = useCallback(() => {\n const visibilityState = document.visibilityState;\n\n if (visibilityState === 'hidden') {\n Object.entries(soundMapper).forEach(([key, sound]) => {\n if (sound && !sound.paused) {\n stop(key as CircleSoundKey, true);\n pausedSoundsRef.current.add(key as CircleSoundKey);\n }\n });\n }\n\n if (visibilityState === 'visible') {\n pausedSoundsRef.current.forEach(key => {\n play(key);\n });\n pausedSoundsRef.current.clear();\n }\n }, [play, stop]);\n\n useEffect(() => {\n document.addEventListener('visibilitychange', handleVisibilityChange);\n const timeouts = timeoutRefs.current;\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n Object.values(timeouts).forEach(id => {\n id && clearInterval(id);\n });\n };\n }, [handleVisibilityChange]);\n\n return { playSwipeSound, play, stop, playButtonSound };\n};\n"],"names":["swipeSoundIndex","soundMapper","CircleSoundKey","soundInstancePromise","useCircleSounds","canPlayAudio","useAutoPlayPermission","loadSound","useCallback","key","loadedSound","CircleSoundKeyMapper","pausedSoundsRef","useRef","timeoutRefs","play","immediately","loop","soundInstance","intervalId","fadeInSound","promise","handleSoundStop","fadeOutSound","stop","_a","err","playSwipeSound","SWIPE_SOUND_ORDER","playButtonSound","handleVisibilityChange","visibilityState","sound","useEffect","timeouts","id"],"mappings":"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"}
1
+ {"version":3,"file":"use-circle-sounds.js","sources":["../../../../../src/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.ts"],"sourcesContent":["import type { TimeoutMap } from './use-circle-sound-types';\n\nimport { useCallback, useEffect, useRef } from 'react';\n\nimport { useAutoPlayPermission } from '../../../hooks/use-auto-play-permission/use-auto-play-permission';\nimport { CircleSoundKeyMapper, SWIPE_SOUND_ORDER } from './constants';\nimport { CircleSoundKey } from './use-circle-sounds-enums';\n\nlet swipeSoundIndex = 0;\nconst audioContext = new (window.AudioContext || window.webkitAudioContext)();\n\nconst bufferMapper: Record<CircleSoundKey, AudioBuffer | null> = {\n [CircleSoundKey.BACKGROUND]: null,\n [CircleSoundKey.BACKGROUND_RUSHHOUR]: null,\n [CircleSoundKey.TUTORIAL]: null,\n [CircleSoundKey.SWIPE_01]: null,\n [CircleSoundKey.SWIPE_02]: null,\n [CircleSoundKey.SWIPE_03]: null,\n [CircleSoundKey.SWIPE_04]: null,\n [CircleSoundKey.SWIPE_DOWN]: null,\n [CircleSoundKey.TOGGLE]: null,\n [CircleSoundKey.POINTS_AWARDED]: null,\n [CircleSoundKey.POINTS_ADDED]: null,\n [CircleSoundKey.GAME_CARD_CLICK]: null,\n [CircleSoundKey.CLOCK_IN]: null,\n [CircleSoundKey.CLOCK_OUT]: null,\n [CircleSoundKey.ACCURACY_IN]: null,\n [CircleSoundKey.ACCURACY_OUT]: null,\n [CircleSoundKey.STREAK_IN]: null,\n [CircleSoundKey.STREAK_OUT]: null,\n [CircleSoundKey.ACCURACY_INTRO]: null,\n [CircleSoundKey.ACCURACY_TARGET]: null,\n [CircleSoundKey.TIME_INTRO]: null,\n [CircleSoundKey.TIME_TARGET]: null,\n [CircleSoundKey.METER_FILL]: null,\n [CircleSoundKey.YOUR_SCORE]: null,\n [CircleSoundKey.HIGH_SCORE]: null,\n [CircleSoundKey.KEEP_IT_UP]: null,\n [CircleSoundKey.DOING_GREAT]: null,\n [CircleSoundKey.ALL_DONE]: null,\n};\n\ntype ActiveSound = {\n source: AudioBufferSourceNode;\n gainNode: GainNode;\n};\n\nconst activeSounds: Partial<Record<CircleSoundKey, ActiveSound>> = {};\n\nexport const useCircleSounds = () => {\n const { canAutoPlayAudio: canPlayAudio } = useAutoPlayPermission();\n\n const pausedSoundsRef = useRef<Set<CircleSoundKey>>(new Set());\n const timeoutRefs = useRef<TimeoutMap>({});\n\n const loadSound = useCallback(async (key: CircleSoundKey) => {\n if (!bufferMapper[key]) {\n const response = await fetch(CircleSoundKeyMapper[key]);\n const arrayBuffer = await response.arrayBuffer();\n const decoded = await audioContext.decodeAudioData(arrayBuffer);\n\n bufferMapper[key] = decoded;\n }\n }, []);\n\n const resumeAudioContext = async () => {\n if (audioContext.state === 'suspended') {\n try {\n await audioContext.resume();\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn('Failed to resume AudioContext:', err);\n }\n }\n };\n\n const fadeIn = (gainNode: GainNode) => {\n gainNode.gain.setValueAtTime(0, audioContext.currentTime);\n gainNode.gain.linearRampToValueAtTime(1, audioContext.currentTime + 0.5);\n };\n\n const fadeOut = (gainNode: GainNode, key: CircleSoundKey) => {\n gainNode.gain.setValueAtTime(gainNode.gain.value, audioContext.currentTime);\n gainNode.gain.linearRampToValueAtTime(0, audioContext.currentTime + 0.5);\n const timeout = setTimeout(() => {\n activeSounds[key]?.source.stop();\n delete activeSounds[key];\n }, 500);\n\n timeoutRefs.current[key] = timeout as unknown as number;\n };\n\n const play = useCallback(\n async (key: CircleSoundKey, immediately = true, loop = false) => {\n await loadSound(key);\n const buffer = bufferMapper[key];\n\n if (!buffer || !canPlayAudio) return;\n\n if (activeSounds[key]) {\n const { gainNode } = activeSounds[key]!;\n\n if (!immediately) fadeIn(gainNode);\n else gainNode.gain.setValueAtTime(1, audioContext.currentTime);\n\n return;\n }\n\n const source = audioContext.createBufferSource();\n const gainNode = audioContext.createGain();\n\n source.buffer = buffer;\n source.loop = loop;\n source.connect(gainNode).connect(audioContext.destination);\n if (immediately) gainNode.gain.setValueAtTime(1, audioContext.currentTime);\n else fadeIn(gainNode);\n source.start();\n\n activeSounds[key] = { source, gainNode };\n },\n [canPlayAudio, loadSound],\n );\n\n const stop = useCallback(async (key: CircleSoundKey, immediately = true) => {\n const sound = activeSounds[key];\n\n if (!sound) return;\n\n if (immediately) {\n sound.source.stop();\n delete activeSounds[key];\n } else {\n fadeOut(sound.gainNode, key);\n }\n }, []);\n\n const playSwipeSound = useCallback(() => {\n const key = SWIPE_SOUND_ORDER[swipeSoundIndex] || CircleSoundKey.SWIPE_01;\n\n swipeSoundIndex = (swipeSoundIndex + 1) % SWIPE_SOUND_ORDER.length;\n play(key);\n }, [play]);\n\n const playButtonSound = useCallback(() => {\n play(CircleSoundKey.TOGGLE);\n }, [play]);\n\n const handleVisibilityChange = useCallback(async () => {\n if (document.visibilityState === 'visible') {\n await resumeAudioContext();\n pausedSoundsRef.current.forEach(key => {\n play(key);\n });\n pausedSoundsRef.current.clear();\n } else {\n Object.keys(activeSounds).forEach(key => {\n stop(key as CircleSoundKey, true);\n pausedSoundsRef.current.add(key as CircleSoundKey);\n });\n }\n }, [play, stop]);\n\n useEffect(() => {\n const interactionEvents = ['pointerdown', 'touchstart'];\n const tryResume = () => {\n resumeAudioContext();\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n interactionEvents.forEach(event => {\n window.addEventListener(event, tryResume, { once: true });\n });\n\n const timeouts = timeoutRefs.current;\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n interactionEvents.forEach(event => {\n window.removeEventListener(event, tryResume);\n });\n Object.values(timeouts).forEach(id => clearTimeout(id));\n };\n }, [handleVisibilityChange]);\n\n return {\n playSwipeSound,\n play,\n stop,\n playButtonSound,\n };\n};\n"],"names":["swipeSoundIndex","audioContext","bufferMapper","CircleSoundKey","activeSounds","useCircleSounds","canPlayAudio","useAutoPlayPermission","pausedSoundsRef","useRef","timeoutRefs","loadSound","useCallback","key","arrayBuffer","CircleSoundKeyMapper","decoded","resumeAudioContext","err","fadeIn","gainNode","fadeOut","timeout","_a","play","immediately","loop","buffer","source","stop","sound","playSwipeSound","SWIPE_SOUND_ORDER","playButtonSound","handleVisibilityChange","useEffect","interactionEvents","tryResume","event","timeouts","id"],"mappings":";;;;AAQA,IAAIA,IAAkB;AACtB,MAAMC,IAAe,KAAK,OAAO,gBAAgB,OAAO,oBAAoB,GAEtEC,IAA2D;AAAA,EAC/D,CAACC,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,mBAAmB,GAAG;AAAA,EACtC,CAACA,EAAe,QAAQ,GAAG;AAAA,EAC3B,CAACA,EAAe,QAAQ,GAAG;AAAA,EAC3B,CAACA,EAAe,QAAQ,GAAG;AAAA,EAC3B,CAACA,EAAe,QAAQ,GAAG;AAAA,EAC3B,CAACA,EAAe,QAAQ,GAAG;AAAA,EAC3B,CAACA,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,MAAM,GAAG;AAAA,EACzB,CAACA,EAAe,cAAc,GAAG;AAAA,EACjC,CAACA,EAAe,YAAY,GAAG;AAAA,EAC/B,CAACA,EAAe,eAAe,GAAG;AAAA,EAClC,CAACA,EAAe,QAAQ,GAAG;AAAA,EAC3B,CAACA,EAAe,SAAS,GAAG;AAAA,EAC5B,CAACA,EAAe,WAAW,GAAG;AAAA,EAC9B,CAACA,EAAe,YAAY,GAAG;AAAA,EAC/B,CAACA,EAAe,SAAS,GAAG;AAAA,EAC5B,CAACA,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,cAAc,GAAG;AAAA,EACjC,CAACA,EAAe,eAAe,GAAG;AAAA,EAClC,CAACA,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,WAAW,GAAG;AAAA,EAC9B,CAACA,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,WAAW,GAAG;AAAA,EAC9B,CAACA,EAAe,QAAQ,GAAG;AAC7B,GAOMC,IAA6D,CAAA,GAEtDC,IAAkB,MAAM;AACnC,QAAM,EAAE,kBAAkBC,EAAa,IAAIC,EAAsB,GAE3DC,IAAkBC,EAAgC,oBAAA,IAAK,CAAA,GACvDC,IAAcD,EAAmB,CAAA,CAAE,GAEnCE,IAAYC,EAAY,OAAOC,MAAwB;AACvD,QAAA,CAACX,EAAaW,CAAG,GAAG;AAEhB,YAAAC,IAAc,OADH,MAAM,MAAMC,EAAqBF,CAAG,CAAC,GACnB,eAC7BG,IAAU,MAAMf,EAAa,gBAAgBa,CAAW;AAE9D,MAAAZ,EAAaW,CAAG,IAAIG;AAAA,IACtB;AAAA,EACF,GAAG,CAAE,CAAA,GAECC,IAAqB,YAAY;AACjC,QAAAhB,EAAa,UAAU;AACrB,UAAA;AACF,cAAMA,EAAa;eACZiB,GAAK;AAEJ,gBAAA,KAAK,kCAAkCA,CAAG;AAAA,MACpD;AAAA,EACF,GAGIC,IAAS,CAACC,MAAuB;AACrC,IAAAA,EAAS,KAAK,eAAe,GAAGnB,EAAa,WAAW,GACxDmB,EAAS,KAAK,wBAAwB,GAAGnB,EAAa,cAAc,GAAG;AAAA,EAAA,GAGnEoB,IAAU,CAACD,GAAoBP,MAAwB;AAC3D,IAAAO,EAAS,KAAK,eAAeA,EAAS,KAAK,OAAOnB,EAAa,WAAW,GAC1EmB,EAAS,KAAK,wBAAwB,GAAGnB,EAAa,cAAc,GAAG;AACjE,UAAAqB,IAAU,WAAW,MAAM;;AAClB,OAAAC,IAAAnB,EAAAS,CAAG,MAAH,QAAAU,EAAM,OAAO,QAC1B,OAAOnB,EAAaS,CAAG;AAAA,OACtB,GAAG;AAEM,IAAAH,EAAA,QAAQG,CAAG,IAAIS;AAAA,EAAA,GAGvBE,IAAOZ;AAAA,IACX,OAAOC,GAAqBY,IAAc,IAAMC,IAAO,OAAU;AAC/D,YAAMf,EAAUE,CAAG;AACb,YAAAc,IAASzB,EAAaW,CAAG;AAE3B,UAAA,CAACc,KAAU,CAACrB,EAAc;AAE1B,UAAAF,EAAaS,CAAG,GAAG;AACrB,cAAM,EAAE,UAAAO,EAAS,IAAIhB,EAAaS,CAAG;AAEjC,QAACY,IACAL,EAAS,KAAK,eAAe,GAAGnB,EAAa,WAAW,IAD3CkB,EAAOC,CAAQ;AAGjC;AAAA,MACF;AAEM,YAAAQ,IAAS3B,EAAa,sBACtBmB,IAAWnB,EAAa;AAE9B,MAAA2B,EAAO,SAASD,GAChBC,EAAO,OAAOF,GACdE,EAAO,QAAQR,CAAQ,EAAE,QAAQnB,EAAa,WAAW,GACrDwB,IAAsBL,EAAA,KAAK,eAAe,GAAGnB,EAAa,WAAW,MAC7DmB,CAAQ,GACpBQ,EAAO,MAAM,GAEbxB,EAAaS,CAAG,IAAI,EAAE,QAAAe,GAAQ,UAAAR,EAAS;AAAA,IACzC;AAAA,IACA,CAACd,GAAcK,CAAS;AAAA,EAAA,GAGpBkB,IAAOjB,EAAY,OAAOC,GAAqBY,IAAc,OAAS;AACpE,UAAAK,IAAQ1B,EAAaS,CAAG;AAE9B,IAAKiB,MAEDL,KACFK,EAAM,OAAO,QACb,OAAO1B,EAAaS,CAAG,KAEfQ,EAAAS,EAAM,UAAUjB,CAAG;AAAA,EAE/B,GAAG,CAAE,CAAA,GAECkB,IAAiBnB,EAAY,MAAM;AACvC,UAAMC,IAAMmB,EAAkBhC,CAAe,KAAKG,EAAe;AAE9C,IAAAH,KAAAA,IAAkB,KAAKgC,EAAkB,QAC5DR,EAAKX,CAAG;AAAA,EAAA,GACP,CAACW,CAAI,CAAC,GAEHS,IAAkBrB,EAAY,MAAM;AACxC,IAAAY,EAAKrB,EAAe,MAAM;AAAA,EAAA,GACzB,CAACqB,CAAI,CAAC,GAEHU,IAAyBtB,EAAY,YAAY;AACjD,IAAA,SAAS,oBAAoB,aAC/B,MAAMK,EAAmB,GACTT,EAAA,QAAQ,QAAQ,CAAOK,MAAA;AACrC,MAAAW,EAAKX,CAAG;AAAA,IAAA,CACT,GACDL,EAAgB,QAAQ,WAExB,OAAO,KAAKJ,CAAY,EAAE,QAAQ,CAAOS,MAAA;AACvC,MAAAgB,EAAKhB,GAAuB,EAAI,GAChBL,EAAA,QAAQ,IAAIK,CAAqB;AAAA,IAAA,CAClD;AAAA,EACH,GACC,CAACW,GAAMK,CAAI,CAAC;AAEf,SAAAM,EAAU,MAAM;AACR,UAAAC,IAAoB,CAAC,eAAe,YAAY,GAChDC,IAAY,MAAM;AACH,MAAApB;IAAA;AAGZ,aAAA,iBAAiB,oBAAoBiB,CAAsB,GACpEE,EAAkB,QAAQ,CAASE,MAAA;AACjC,aAAO,iBAAiBA,GAAOD,GAAW,EAAE,MAAM,IAAM;AAAA,IAAA,CACzD;AAED,UAAME,IAAW7B,EAAY;AAE7B,WAAO,MAAM;AACF,eAAA,oBAAoB,oBAAoBwB,CAAsB,GACvEE,EAAkB,QAAQ,CAASE,MAAA;AAC1B,eAAA,oBAAoBA,GAAOD,CAAS;AAAA,MAAA,CAC5C,GACD,OAAO,OAAOE,CAAQ,EAAE,QAAQ,CAAMC,MAAA,aAAaA,CAAE,CAAC;AAAA,IAAA;AAAA,EACxD,GACC,CAACN,CAAsB,CAAC,GAEpB;AAAA,IACL,gBAAAH;AAAA,IACA,MAAAP;AAAA,IACA,MAAAK;AAAA,IACA,iBAAAI;AAAA,EAAA;AAEJ;"}
@@ -1,26 +1,27 @@
1
- import { useCallback as H, useEffect as p, useMemo as O } from "react";
2
- import { useParentHomeGet as P } from "../api/parent-home.js";
3
- import { formatDate as b } from "../../../node_modules/date-fns/format.js";
4
- const k = (s) => {
1
+ import { useEffect as O, useMemo as P } from "react";
2
+ import { useParentHomeGet as C } from "../api/parent-home.js";
3
+ const T = ({
4
+ studentName: o,
5
+ studentServiceId: s
6
+ }) => {
5
7
  const {
6
- get: n,
7
- data: a,
8
- isStale: i,
9
- isProcessingFailed: m
10
- } = P(s), e = H(() => {
11
- s && n(s);
12
- }, [n, s]);
13
- return p(() => {
14
- e();
15
- }, [e]), p(() => {
16
- i && e();
17
- }, [e, i]), O(() => {
18
- var d;
19
- const { teacher_details: r = null, session_details: o } = a ?? {};
20
- if (!o)
8
+ get: t,
9
+ data: i,
10
+ isProcessing: a,
11
+ isProcessed: l,
12
+ isStale: m,
13
+ isProcessingFailed: r
14
+ } = C(s);
15
+ return O(() => {
16
+ s && (!a && !r && !l || m) && t(s);
17
+ }, [s, m, a, t, r, l]), P(() => {
18
+ const { teacher_details: c = null, session_details: n } = i ?? {};
19
+ if (!n)
21
20
  return {
22
21
  sessionDetails: null,
23
22
  teacherDetails: null,
23
+ studentName: o,
24
+ teacherName: "",
24
25
  isOnlyOneSessionCompleted: !1,
25
26
  isMoreThanOneSessionCompleted: !1,
26
27
  isDemoDone: !1,
@@ -28,40 +29,36 @@ const k = (s) => {
28
29
  completedSessions: 0,
29
30
  nextSessionEnd: 0,
30
31
  nextSessionStart: 0,
32
+ classStatus: void 0,
31
33
  upcomingSessions: [],
32
- showLoading: !0,
33
- isProcessingFailed: m,
34
- fetchData: e
34
+ showLoading: !0
35
35
  };
36
36
  const {
37
- completed_sessions: t = 0,
38
- next_session_end: u,
39
- next_session_start: l,
37
+ completed_sessions: e = 0,
38
+ next_session_end: p,
39
+ next_session_start: u,
40
40
  demo_class_status: S,
41
- upcoming_sessions: f = [],
42
- student_demo_id: _,
43
- user_attempt_id: D
44
- } = o, { first_name: h = "", last_name: x = "" } = r ?? {}, M = (d = `${h} ${x}`) == null ? void 0 : d.trim(), c = t > 0, g = c && t === 1, E = t > 1, C = b(l, "EEEE, MMM d 'at' h:mm a");
41
+ upcoming_sessions: _ = [],
42
+ student_demo_id: f
43
+ } = n, { first_name: D = "", last_name: g = "" } = c ?? {}, h = `${D} ${g}`.trim(), d = e > 0, x = d && e === 1, H = e > 1;
45
44
  return {
46
- sessionDetails: o,
47
- teacherDetails: r,
48
- teacherName: M,
49
- completedSessions: t,
50
- nextSessionEnd: u,
51
- nextSessionStart: l,
45
+ sessionDetails: n,
46
+ teacherDetails: c,
47
+ studentName: o,
48
+ teacherName: h,
49
+ completedSessions: e,
50
+ nextSessionEnd: p,
51
+ nextSessionStart: u,
52
52
  classStatus: S,
53
- upcomingSessions: f,
54
- isDemoDone: c,
55
- isOnlyOneSessionCompleted: g,
56
- isMoreThanOneSessionCompleted: E,
57
- demoId: _,
58
- userAttemptId: D,
59
- fetchData: e,
60
- formattedNextSessionStart: C
53
+ upcomingSessions: _,
54
+ isDemoDone: d,
55
+ isOnlyOneSessionCompleted: x,
56
+ isMoreThanOneSessionCompleted: H,
57
+ demoId: f
61
58
  };
62
- }, [e, m, a]);
59
+ }, [i, o]);
63
60
  };
64
61
  export {
65
- k as default
62
+ T as default
66
63
  };
67
64
  //# sourceMappingURL=use-parent-home-data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-parent-home-data.js","sources":["../../../../src/features/parent-dashboard/hooks/use-parent-home-data.ts"],"sourcesContent":["import type { TSession } from '../../trial-session/comps/pla/upcoming-sessions/upcoming-sessions-types';\nimport type { EClassStatus, ISessionDetails, ITeacherDetails } from '../parent-dashboard-types';\n\nimport { format } from 'date-fns';\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport { useParentHomeGet } from '../api/parent-home';\n\ninterface IUseParentHomeDataReturn {\n sessionDetails: ISessionDetails | null;\n teacherDetails: ITeacherDetails | null;\n completedSessions: number;\n nextSessionEnd: number;\n nextSessionStart: number;\n classStatus?: EClassStatus | null;\n teacherName?: string;\n upcomingSessions?: TSession[];\n isDemoDone: boolean;\n isOnlyOneSessionCompleted: boolean;\n isMoreThanOneSessionCompleted: boolean;\n showLoading?: boolean;\n demoId?: string;\n userAttemptId?: string;\n isProcessingFailed?: boolean;\n fetchData: () => void;\n formattedNextSessionStart?: string;\n}\n\nconst useParentHomeData = (studentId: string): IUseParentHomeDataReturn => {\n const {\n get: getParentHome,\n data: parentHomeData,\n isStale,\n isProcessingFailed,\n } = useParentHomeGet(studentId);\n\n const fetchData = useCallback(() => {\n studentId && getParentHome(studentId);\n }, [getParentHome, studentId]);\n\n useEffect(() => {\n fetchData();\n }, [fetchData]);\n\n useEffect(() => {\n if (isStale) {\n fetchData();\n }\n }, [fetchData, isStale]);\n\n const parentHomeDataMemoised = useMemo(() => {\n const { teacher_details: teacherDetails = null, session_details: sessionDetails } =\n parentHomeData ?? {};\n\n if (!sessionDetails) {\n return {\n sessionDetails: null,\n teacherDetails: null,\n isOnlyOneSessionCompleted: false,\n isMoreThanOneSessionCompleted: false,\n isDemoDone: false,\n isSubscriptionCancelled: false,\n completedSessions: 0,\n nextSessionEnd: 0,\n nextSessionStart: 0,\n upcomingSessions: [],\n showLoading: true,\n isProcessingFailed,\n fetchData,\n };\n }\n\n const {\n completed_sessions: completedSessions = 0,\n next_session_end: nextSessionEnd,\n next_session_start: nextSessionStart,\n demo_class_status: classStatus,\n upcoming_sessions: upcomingSessions = [],\n student_demo_id: demoId,\n user_attempt_id: userAttemptId,\n } = sessionDetails;\n\n const { first_name = '', last_name = '' } = teacherDetails ?? {};\n const teacherName = `${first_name} ${last_name}`?.trim();\n\n const isDemoDone = completedSessions > 0;\n const isOnlyOneSessionCompleted = isDemoDone && completedSessions === 1;\n const isMoreThanOneSessionCompleted = completedSessions > 1;\n\n const formattedNextSessionStart = format(nextSessionStart, \"EEEE, MMM d 'at' h:mm a\");\n\n return {\n sessionDetails,\n teacherDetails,\n teacherName,\n completedSessions,\n nextSessionEnd,\n nextSessionStart,\n classStatus,\n upcomingSessions,\n isDemoDone,\n isOnlyOneSessionCompleted,\n isMoreThanOneSessionCompleted,\n demoId,\n userAttemptId,\n fetchData,\n formattedNextSessionStart,\n };\n }, [fetchData, isProcessingFailed, parentHomeData]);\n\n return parentHomeDataMemoised;\n};\n\nexport default useParentHomeData;\n"],"names":["useParentHomeData","studentId","getParentHome","parentHomeData","isStale","isProcessingFailed","useParentHomeGet","fetchData","useCallback","useEffect","useMemo","teacherDetails","sessionDetails","completedSessions","nextSessionEnd","nextSessionStart","classStatus","upcomingSessions","demoId","userAttemptId","first_name","last_name","teacherName","_a","isDemoDone","isOnlyOneSessionCompleted","isMoreThanOneSessionCompleted","formattedNextSessionStart","format"],"mappings":";;;AA4BM,MAAAA,IAAoB,CAACC,MAAgD;AACnE,QAAA;AAAA,IACJ,KAAKC;AAAA,IACL,MAAMC;AAAA,IACN,SAAAC;AAAA,IACA,oBAAAC;AAAA,EAAA,IACEC,EAAiBL,CAAS,GAExBM,IAAYC,EAAY,MAAM;AAClC,IAAAP,KAAaC,EAAcD,CAAS;AAAA,EAAA,GACnC,CAACC,GAAeD,CAAS,CAAC;AAE7B,SAAAQ,EAAU,MAAM;AACJ,IAAAF;EAAA,GACT,CAACA,CAAS,CAAC,GAEdE,EAAU,MAAM;AACd,IAAIL,KACQG;EACZ,GACC,CAACA,GAAWH,CAAO,CAAC,GAEQM,EAAQ,MAAM;;AACrC,UAAA,EAAE,iBAAiBC,IAAiB,MAAM,iBAAiBC,EAAe,IAC9ET,KAAkB;AAEpB,QAAI,CAACS;AACI,aAAA;AAAA,QACL,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,2BAA2B;AAAA,QAC3B,+BAA+B;AAAA,QAC/B,YAAY;AAAA,QACZ,yBAAyB;AAAA,QACzB,mBAAmB;AAAA,QACnB,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,QAClB,kBAAkB,CAAC;AAAA,QACnB,aAAa;AAAA,QACb,oBAAAP;AAAA,QACA,WAAAE;AAAA,MAAA;AAIE,UAAA;AAAA,MACJ,oBAAoBM,IAAoB;AAAA,MACxC,kBAAkBC;AAAA,MAClB,oBAAoBC;AAAA,MACpB,mBAAmBC;AAAA,MACnB,mBAAmBC,IAAmB,CAAC;AAAA,MACvC,iBAAiBC;AAAA,MACjB,iBAAiBC;AAAA,IACf,IAAAP,GAEE,EAAE,YAAAQ,IAAa,IAAI,WAAAC,IAAY,GAAG,IAAIV,KAAkB,IACxDW,KAAcC,IAAA,GAAGH,CAAU,IAAIC,CAAS,OAA1B,gBAAAE,EAA8B,QAE5CC,IAAaX,IAAoB,GACjCY,IAA4BD,KAAcX,MAAsB,GAChEa,IAAgCb,IAAoB,GAEpDc,IAA4BC,EAAOb,GAAkB,yBAAyB;AAE7E,WAAA;AAAA,MACL,gBAAAH;AAAA,MACA,gBAAAD;AAAA,MACA,aAAAW;AAAA,MACA,mBAAAT;AAAA,MACA,gBAAAC;AAAA,MACA,kBAAAC;AAAA,MACA,aAAAC;AAAA,MACA,kBAAAC;AAAA,MACA,YAAAO;AAAA,MACA,2BAAAC;AAAA,MACA,+BAAAC;AAAA,MACA,QAAAR;AAAA,MACA,eAAAC;AAAA,MACA,WAAAZ;AAAA,MACA,2BAAAoB;AAAA,IAAA;AAAA,EAED,GAAA,CAACpB,GAAWF,GAAoBF,CAAc,CAAC;AAGpD;"}
1
+ {"version":3,"file":"use-parent-home-data.js","sources":["../../../../src/features/parent-dashboard/hooks/use-parent-home-data.ts"],"sourcesContent":["import type { TSession } from '../../trial-session/comps/pla/upcoming-sessions/upcoming-sessions-types';\nimport type { EClassStatus, ISessionDetails, ITeacherDetails } from '../parent-dashboard-types';\n\nimport { useEffect, useMemo } from 'react';\n\nimport { useParentHomeGet } from '../api/parent-home';\n\ninterface IUseParentHomeData {\n studentName: string;\n studentServiceId: string;\n}\ninterface IUseParentHomeDataReturn {\n sessionDetails: ISessionDetails | null;\n teacherDetails: ITeacherDetails | null;\n completedSessions: number;\n nextSessionEnd: number;\n nextSessionStart: number;\n classStatus?: EClassStatus | null;\n teacherName: string;\n upcomingSessions?: TSession[];\n isDemoDone: boolean;\n isOnlyOneSessionCompleted: boolean;\n isMoreThanOneSessionCompleted: boolean;\n showLoading?: boolean;\n demoId?: string;\n}\n\nconst useParentHomeData = ({\n studentName,\n studentServiceId,\n}: IUseParentHomeData): IUseParentHomeDataReturn => {\n const {\n get: getParentHome,\n data: parentHomeData,\n isProcessing,\n isProcessed,\n isStale,\n isProcessingFailed,\n } = useParentHomeGet(studentServiceId);\n\n useEffect(() => {\n if (studentServiceId && ((!isProcessing && !isProcessingFailed && !isProcessed) || isStale)) {\n getParentHome(studentServiceId);\n }\n }, [studentServiceId, isStale, isProcessing, getParentHome, isProcessingFailed, isProcessed]);\n\n const parentHomeDataMemoised = useMemo(() => {\n const { teacher_details: teacherDetails = null, session_details: sessionDetails } =\n parentHomeData ?? {};\n\n if (!sessionDetails) {\n return {\n sessionDetails: null,\n teacherDetails: null,\n studentName,\n teacherName: '',\n isOnlyOneSessionCompleted: false,\n isMoreThanOneSessionCompleted: false,\n isDemoDone: false,\n isSubscriptionCancelled: false,\n completedSessions: 0,\n nextSessionEnd: 0,\n nextSessionStart: 0,\n classStatus: undefined,\n upcomingSessions: [],\n showLoading: true,\n };\n }\n\n const {\n completed_sessions: completedSessions = 0,\n next_session_end: nextSessionEnd,\n next_session_start: nextSessionStart,\n demo_class_status: classStatus,\n upcoming_sessions: upcomingSessions = [],\n student_demo_id: demoId,\n } = sessionDetails;\n\n const { first_name = '', last_name = '' } = teacherDetails ?? {};\n const teacherName = `${first_name} ${last_name}`.trim();\n\n const isDemoDone = completedSessions > 0;\n const isOnlyOneSessionCompleted = isDemoDone && completedSessions === 1;\n const isMoreThanOneSessionCompleted = completedSessions > 1;\n\n return {\n sessionDetails,\n teacherDetails,\n studentName,\n teacherName,\n completedSessions,\n nextSessionEnd,\n nextSessionStart,\n classStatus,\n upcomingSessions,\n isDemoDone,\n isOnlyOneSessionCompleted,\n isMoreThanOneSessionCompleted,\n demoId,\n };\n }, [parentHomeData, studentName]);\n\n return parentHomeDataMemoised;\n};\n\nexport default useParentHomeData;\n"],"names":["useParentHomeData","studentName","studentServiceId","getParentHome","parentHomeData","isProcessing","isProcessed","isStale","isProcessingFailed","useParentHomeGet","useEffect","useMemo","teacherDetails","sessionDetails","completedSessions","nextSessionEnd","nextSessionStart","classStatus","upcomingSessions","demoId","first_name","last_name","teacherName","isDemoDone","isOnlyOneSessionCompleted","isMoreThanOneSessionCompleted"],"mappings":";;AA2BA,MAAMA,IAAoB,CAAC;AAAA,EACzB,aAAAC;AAAA,EACA,kBAAAC;AACF,MAAoD;AAC5C,QAAA;AAAA,IACJ,KAAKC;AAAA,IACL,MAAMC;AAAA,IACN,cAAAC;AAAA,IACA,aAAAC;AAAA,IACA,SAAAC;AAAA,IACA,oBAAAC;AAAA,EAAA,IACEC,EAAiBP,CAAgB;AAErC,SAAAQ,EAAU,MAAM;AACd,IAAIR,MAAsB,CAACG,KAAgB,CAACG,KAAsB,CAACF,KAAgBC,MACjFJ,EAAcD,CAAgB;AAAA,EAChC,GACC,CAACA,GAAkBK,GAASF,GAAcF,GAAeK,GAAoBF,CAAW,CAAC,GAE7DK,EAAQ,MAAM;AACrC,UAAA,EAAE,iBAAiBC,IAAiB,MAAM,iBAAiBC,EAAe,IAC9ET,KAAkB;AAEpB,QAAI,CAACS;AACI,aAAA;AAAA,QACL,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,aAAAZ;AAAA,QACA,aAAa;AAAA,QACb,2BAA2B;AAAA,QAC3B,+BAA+B;AAAA,QAC/B,YAAY;AAAA,QACZ,yBAAyB;AAAA,QACzB,mBAAmB;AAAA,QACnB,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,QAClB,aAAa;AAAA,QACb,kBAAkB,CAAC;AAAA,QACnB,aAAa;AAAA,MAAA;AAIX,UAAA;AAAA,MACJ,oBAAoBa,IAAoB;AAAA,MACxC,kBAAkBC;AAAA,MAClB,oBAAoBC;AAAA,MACpB,mBAAmBC;AAAA,MACnB,mBAAmBC,IAAmB,CAAC;AAAA,MACvC,iBAAiBC;AAAA,IACf,IAAAN,GAEE,EAAE,YAAAO,IAAa,IAAI,WAAAC,IAAY,GAAG,IAAIT,KAAkB,IACxDU,IAAc,GAAGF,CAAU,IAAIC,CAAS,GAAG,QAE3CE,IAAaT,IAAoB,GACjCU,IAA4BD,KAAcT,MAAsB,GAChEW,IAAgCX,IAAoB;AAEnD,WAAA;AAAA,MACL,gBAAAD;AAAA,MACA,gBAAAD;AAAA,MACA,aAAAX;AAAA,MACA,aAAAqB;AAAA,MACA,mBAAAR;AAAA,MACA,gBAAAC;AAAA,MACA,kBAAAC;AAAA,MACA,aAAAC;AAAA,MACA,kBAAAC;AAAA,MACA,YAAAK;AAAA,MACA,2BAAAC;AAAA,MACA,+BAAAC;AAAA,MACA,QAAAN;AAAA,IAAA;AAAA,EACF,GACC,CAACf,GAAgBH,CAAW,CAAC;AAGlC;"}
@@ -1,6 +1,5 @@
1
- var N = /* @__PURE__ */ ((_) => (_.S_NO_SHOW = "S_NO_SHOW", _.T_NO_SHOW = "T_NO_SHOW", _))(N || {}), O = /* @__PURE__ */ ((_) => (_.STUDENT_PROFILE = "studentProfile", _.INSIGHTS = "insights", _.LEARNING_PLAN = "learningPlan", _))(O || {});
1
+ var _ = /* @__PURE__ */ ((O) => (O.S_NO_SHOW = "S_NO_SHOW", O.T_NO_SHOW = "T_NO_SHOW", O))(_ || {});
2
2
  export {
3
- N as EClassStatus,
4
- O as ESummaryType
3
+ _ as EClassStatus
5
4
  };
6
5
  //# sourceMappingURL=parent-dashboard-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parent-dashboard-types.js","sources":["../../../src/features/parent-dashboard/parent-dashboard-types.ts"],"sourcesContent":["import type { TSession } from '../trial-session/comps/pla/upcoming-sessions/upcoming-sessions-types';\nimport type { ReactElement } from 'react';\n\nexport enum EClassStatus {\n S_NO_SHOW = 'S_NO_SHOW',\n T_NO_SHOW = 'T_NO_SHOW',\n}\nexport interface ISessionDetails {\n completed_sessions: number;\n next_session_start: number;\n next_session_end: number;\n student_demo_id: string;\n upcoming_sessions: TSession[];\n demo_class_status: EClassStatus | null;\n user_attempt_id?: string;\n}\n\ninterface IDegreeInfo {\n degree_name: string;\n degree_code: string;\n field_of_study: string;\n}\nexport interface ITeacherDetails {\n first_name: string;\n last_name: string;\n years_of_experience: number;\n number_of_students_taught: number;\n lower_grade: string;\n higher_grade: string;\n degree: IDegreeInfo;\n countries: string[];\n teacher_profile_url: string;\n header_image: string;\n}\n\ninterface PaymentMethodDetails {\n brand: string;\n last_4_digits: string;\n type: string;\n exp_month: number;\n exp_year: number;\n}\n\ninterface IBillingDetails {\n amount: number;\n next_due_date: string;\n payment_method_details: PaymentMethodDetails;\n}\n\nexport interface IParentHome {\n session_details: ISessionDetails;\n teacher_details: ITeacherDetails | null;\n billing_details: IBillingDetails;\n}\n\nexport interface IStudentProfileSummary {\n studentLevel: string;\n studentObjectives: string[] | string;\n learningPlan: string[] | string;\n levelPreference?: string;\n}\n\nexport interface IOnViewSummaryParams extends IStudentProfileSummary {\n userAttemptId?: string;\n}\nexport enum ESummaryType {\n STUDENT_PROFILE = 'studentProfile',\n INSIGHTS = 'insights',\n LEARNING_PLAN = 'learningPlan',\n}\n\nexport interface IParentDashboardProps {\n studentName: string;\n studentId: string;\n onRescheduleDemo: (demoId?: string) => void;\n onChangeTutor: (demoId: string) => void;\n onGetStartedAgain?: () => void;\n onViewSummary?: (key: ESummaryType, summaryData: IOnViewSummaryParams) => void;\n onSwitchUser?: () => void;\n canChangeTutor: boolean;\n isSubscriptionCancelled: boolean;\n HeaderAvatar: ReactElement;\n}\n\nexport interface ISpacingConfig {\n small: number;\n medium: number;\n large: number;\n separator: {\n small: number;\n medium: number;\n large: number;\n extraLarge: number;\n };\n}\n"],"names":["EClassStatus","ESummaryType"],"mappings":"AAGY,IAAAA,sBAAAA,OACVA,EAAA,YAAY,aACZA,EAAA,YAAY,aAFFA,IAAAA,KAAA,CAAA,CAAA,GA8DAC,sBAAAA,OACVA,EAAA,kBAAkB,kBAClBA,EAAA,WAAW,YACXA,EAAA,gBAAgB,gBAHNA,IAAAA,KAAA,CAAA,CAAA;"}
1
+ {"version":3,"file":"parent-dashboard-types.js","sources":["../../../src/features/parent-dashboard/parent-dashboard-types.ts"],"sourcesContent":["import type { TSession } from '../trial-session/comps/pla/upcoming-sessions/upcoming-sessions-types';\nimport type { ReactElement } from 'react';\n\nexport enum EClassStatus {\n S_NO_SHOW = 'S_NO_SHOW',\n T_NO_SHOW = 'T_NO_SHOW',\n}\nexport interface ISessionDetails {\n completed_sessions: number;\n next_session_start: number;\n next_session_end: number;\n student_demo_id: string;\n upcoming_sessions: TSession[];\n demo_class_status: EClassStatus | null;\n}\n\ninterface IDegreeInfo {\n degree_name: string;\n degree_code: string;\n field_of_study: string;\n}\nexport interface ITeacherDetails {\n first_name: string;\n last_name: string;\n years_of_experience: number;\n number_of_students_taught: number;\n lower_grade: string;\n higher_grade: string;\n degree: IDegreeInfo;\n countries: string[];\n teacher_profile_url: string;\n header_image: string;\n}\n\ninterface PaymentMethodDetails {\n brand: string;\n last_4_digits: string;\n type: string;\n exp_month: number;\n exp_year: number;\n}\n\ninterface IBillingDetails {\n amount: number;\n next_due_date: string;\n payment_method_details: PaymentMethodDetails;\n}\n\nexport interface IParentHome {\n session_details: ISessionDetails;\n teacher_details: ITeacherDetails | null;\n billing_details: IBillingDetails;\n}\n\nexport interface IParentDashboardProps {\n studentName: string;\n studentServiceId: string;\n onRescheduleDemo: (demoId?: string) => void;\n onChangeTutor: (demoId: string) => void;\n onGetStartedAgain?: () => void;\n onViewSummary?: (key: string) => void;\n onSwitchUser?: () => void;\n canChangeTutor: boolean;\n isSubscriptionCancelled: boolean;\n HeaderAvatar: ReactElement;\n}\n\nexport interface ISpacingConfig {\n small: number;\n medium: number;\n large: number;\n separator: {\n small: number;\n medium: number;\n large: number;\n extraLarge: number;\n };\n}\n"],"names":["EClassStatus"],"mappings":"AAGY,IAAAA,sBAAAA,OACVA,EAAA,YAAY,aACZA,EAAA,YAAY,aAFFA,IAAAA,KAAA,CAAA,CAAA;"}