@cuemath/leap 3.3.15 → 3.3.16-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 (80) 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/pill-button/pill-button.js +19 -19
  4. package/dist/features/auth/comps/pill-button/pill-button.js.map +1 -1
  5. package/dist/features/auth/pla-signup/pla-analytics-events.js +4 -5
  6. package/dist/features/auth/pla-signup/pla-analytics-events.js.map +1 -1
  7. package/dist/features/auth/pla-signup/signup-header/signup-header.js +1 -1
  8. package/dist/features/auth/pla-signup/signup-header/signup-header.js.map +1 -1
  9. package/dist/features/auth/signup/circular-step-wrapper/circular-step-wrapper.js +24 -24
  10. package/dist/features/auth/signup/circular-step-wrapper/circular-step-wrapper.js.map +1 -1
  11. package/dist/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.js +86 -98
  12. package/dist/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.js.map +1 -1
  13. package/dist/features/parent-dashboard/hooks/use-parent-home-data.js +42 -45
  14. package/dist/features/parent-dashboard/hooks/use-parent-home-data.js.map +1 -1
  15. package/dist/features/parent-dashboard/parent-dashboard-types.js +2 -3
  16. package/dist/features/parent-dashboard/parent-dashboard-types.js.map +1 -1
  17. package/dist/features/parent-dashboard/parent-dashboard-view.js +127 -139
  18. package/dist/features/parent-dashboard/parent-dashboard-view.js.map +1 -1
  19. package/dist/features/trial-session/comps/pla/session-summary/session-summary-constants.js +7 -8
  20. package/dist/features/trial-session/comps/pla/session-summary/session-summary-constants.js.map +1 -1
  21. package/dist/features/trial-session/comps/pla/session-summary/session-summary.js +26 -27
  22. package/dist/features/trial-session/comps/pla/session-summary/session-summary.js.map +1 -1
  23. package/dist/features/trial-session/comps/pla/session-summary/summary-card/summary-card.js +16 -16
  24. package/dist/features/trial-session/comps/pla/session-summary/summary-card/summary-card.js.map +1 -1
  25. package/dist/features/trial-session/comps/session-report/report-information/report-information-styled.js +13 -15
  26. package/dist/features/trial-session/comps/session-report/report-information/report-information-styled.js.map +1 -1
  27. package/dist/features/trial-session/comps/session-report/report-information/report-information.js +1 -1
  28. package/dist/features/trial-session/comps/session-report/report-information/report-information.js.map +1 -1
  29. package/dist/index.d.ts +15 -52
  30. package/dist/index.js +262 -276
  31. package/dist/index.js.map +1 -1
  32. package/dist/node_modules/query-string/base.js +1 -1
  33. package/dist/node_modules/query-string/node_modules/decode-uri-component/index.js.map +1 -0
  34. package/dist/node_modules/uuid/dist/esm-browser/regex.js +5 -0
  35. package/dist/node_modules/uuid/dist/esm-browser/regex.js.map +1 -0
  36. package/dist/node_modules/uuid/dist/esm-browser/rng.js +2 -3
  37. package/dist/node_modules/uuid/dist/esm-browser/rng.js.map +1 -1
  38. package/dist/node_modules/uuid/dist/esm-browser/stringify.js +10 -6
  39. package/dist/node_modules/uuid/dist/esm-browser/stringify.js.map +1 -1
  40. package/dist/node_modules/uuid/dist/esm-browser/v4.js +9 -12
  41. package/dist/node_modules/uuid/dist/esm-browser/v4.js.map +1 -1
  42. package/dist/node_modules/uuid/dist/esm-browser/validate.js +8 -0
  43. package/dist/node_modules/uuid/dist/esm-browser/validate.js.map +1 -0
  44. package/dist/static/error.cbe1ddde.json +1 -0
  45. package/dist/static/username.9e034d51.json +1 -0
  46. package/package.json +1 -1
  47. package/dist/features/parent-dashboard/api/get-student-profile-summary.js +0 -9
  48. package/dist/features/parent-dashboard/api/get-student-profile-summary.js.map +0 -1
  49. package/dist/features/parent-dashboard/comps/pla-first-session-introduction/pla-first-session-introduction-styled.js +0 -10
  50. package/dist/features/parent-dashboard/comps/pla-first-session-introduction/pla-first-session-introduction-styled.js.map +0 -1
  51. package/dist/features/parent-dashboard/comps/pla-first-session-introduction/pla-first-session-introduction.js +0 -42
  52. package/dist/features/parent-dashboard/comps/pla-first-session-introduction/pla-first-session-introduction.js.map +0 -1
  53. package/dist/features/parent-dashboard/hooks/use-student-profile-summary-data.js +0 -24
  54. package/dist/features/parent-dashboard/hooks/use-student-profile-summary-data.js.map +0 -1
  55. package/dist/features/parent-dashboard/modals/help-and-support/help-and-support.js +0 -40
  56. package/dist/features/parent-dashboard/modals/help-and-support/help-and-support.js.map +0 -1
  57. package/dist/features/parent-dashboard/modals/student-login-info/student-login-info.js +0 -44
  58. package/dist/features/parent-dashboard/modals/student-login-info/student-login-info.js.map +0 -1
  59. package/dist/features/parent-dashboard/modals/student-profile-summary/student-profile-summary-helpers.js +0 -32
  60. package/dist/features/parent-dashboard/modals/student-profile-summary/student-profile-summary-helpers.js.map +0 -1
  61. package/dist/features/parent-dashboard/modals/student-profile-summary/student-profile-summary-styled.js +0 -12
  62. package/dist/features/parent-dashboard/modals/student-profile-summary/student-profile-summary-styled.js.map +0 -1
  63. package/dist/features/parent-dashboard/modals/student-profile-summary/student-profile-summary.js +0 -44
  64. package/dist/features/parent-dashboard/modals/student-profile-summary/student-profile-summary.js.map +0 -1
  65. package/dist/features/parent-dashboard/modals/trial-report/trial-report-styled.js +0 -13
  66. package/dist/features/parent-dashboard/modals/trial-report/trial-report-styled.js.map +0 -1
  67. package/dist/features/parent-dashboard/modals/trial-report/trial-report.js +0 -28
  68. package/dist/features/parent-dashboard/modals/trial-report/trial-report.js.map +0 -1
  69. package/dist/features/parent-dashboard/modals/tutor-change/tutor-change-constants.js +0 -43
  70. package/dist/features/parent-dashboard/modals/tutor-change/tutor-change-constants.js.map +0 -1
  71. package/dist/features/parent-dashboard/modals/tutor-change/tutor-change-styled.js +0 -59
  72. package/dist/features/parent-dashboard/modals/tutor-change/tutor-change-styled.js.map +0 -1
  73. package/dist/features/parent-dashboard/modals/tutor-change/tutor-change.js +0 -86
  74. package/dist/features/parent-dashboard/modals/tutor-change/tutor-change.js.map +0 -1
  75. package/dist/node_modules/decode-uri-component/index.js.map +0 -1
  76. package/dist/node_modules/uuid/dist/esm-browser/native.js +0 -7
  77. package/dist/node_modules/uuid/dist/esm-browser/native.js.map +0 -1
  78. package/dist/static/error.dd744fa5.json +0 -1
  79. package/dist/static/username.2c755605.json +0 -1
  80. /package/dist/node_modules/{decode-uri-component → query-string/node_modules/decode-uri-component}/index.js +0 -0
@@ -1,113 +1,101 @@
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";
5
- import { CircleSoundKey as n } from "./use-circle-sounds-enums.js";
6
- let S = 0;
7
- const c = {
8
- [n.BACKGROUND]: null,
9
- [n.BACKGROUND_RUSHHOUR]: null,
10
- [n.TUTORIAL]: null,
11
- [n.SWIPE_01]: null,
12
- [n.SWIPE_02]: null,
13
- [n.SWIPE_03]: null,
14
- [n.SWIPE_04]: null,
15
- [n.SWIPE_DOWN]: null,
16
- [n.TOGGLE]: null,
17
- [n.POINTS_AWARDED]: null,
18
- [n.POINTS_ADDED]: null,
19
- [n.GAME_CARD_CLICK]: null,
20
- [n.CLOCK_IN]: null,
21
- [n.CLOCK_OUT]: null,
22
- [n.ACCURACY_IN]: null,
23
- [n.ACCURACY_OUT]: null,
24
- [n.STREAK_IN]: null,
25
- [n.STREAK_OUT]: null,
26
- [n.ACCURACY_INTRO]: null,
27
- [n.ACCURACY_TARGET]: null,
28
- [n.TIME_INTRO]: null,
29
- [n.TIME_TARGET]: null,
30
- [n.METER_FILL]: null,
31
- [n.YOUR_SCORE]: null,
32
- [n.HIGH_SCORE]: null,
33
- [n.KEEP_IT_UP]: null,
34
- [n.DOING_GREAT]: null,
35
- [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;
41
- }
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;
1
+ import { useMemo as v, useRef as O, useCallback as c, useEffect as h } from "react";
2
+ import D from "../../../hooks/use-audio-player.js";
3
+ import { useAutoPlayPermission as N } from "../../../hooks/use-auto-play-permission/use-auto-play-permission.js";
4
+ import { CircleSoundKeyMapper as R, SWIPE_SOUND_ORDER as p } from "./constants.js";
5
+ import { fadeInSound as T, fadeOutSound as G } from "./helper.js";
6
+ import { CircleSoundKey as u } from "./use-circle-sounds-enums.js";
7
+ let E = 0;
8
+ const s = {
9
+ [u.BACKGROUND]: null,
10
+ [u.BACKGROUND_RUSHHOUR]: null,
11
+ [u.TUTORIAL]: null,
12
+ [u.SWIPE_01]: null,
13
+ [u.SWIPE_02]: null,
14
+ [u.SWIPE_03]: null,
15
+ [u.SWIPE_04]: null,
16
+ [u.SWIPE_DOWN]: null,
17
+ [u.TOGGLE]: null,
18
+ [u.POINTS_AWARDED]: null,
19
+ [u.POINTS_ADDED]: null,
20
+ [u.GAME_CARD_CLICK]: null,
21
+ [u.CLOCK_IN]: null,
22
+ [u.CLOCK_OUT]: null,
23
+ [u.ACCURACY_IN]: null,
24
+ [u.ACCURACY_OUT]: null,
25
+ [u.STREAK_IN]: null,
26
+ [u.STREAK_OUT]: null,
27
+ [u.ACCURACY_INTRO]: null,
28
+ [u.ACCURACY_TARGET]: null,
29
+ [u.TIME_INTRO]: null,
30
+ [u.TIME_TARGET]: null,
31
+ [u.METER_FILL]: null,
32
+ [u.YOUR_SCORE]: null,
33
+ [u.HIGH_SCORE]: null,
34
+ [u.KEEP_IT_UP]: null,
35
+ [u.DOING_GREAT]: null,
36
+ [u.ALL_DONE]: null
37
+ }, S = {}, g = () => {
38
+ const { canAutoPlayAudio: I } = N(), m = v(
39
+ () => Object.entries(R).map(([n, t]) => ({ name: n, url: t })),
40
+ []
41
+ ), _ = D(m), i = O(/* @__PURE__ */ new Set()), r = O({}), A = c((n) => {
42
+ s[n] || (s[n] = new Audio(R[n]));
43
+ }, []), o = c(
44
+ (n, t = !0, e = !1) => {
45
+ if (I)
46
+ try {
47
+ _(n);
48
+ return;
49
+ } catch {
50
+ A(n);
51
+ const l = s[n];
52
+ if (!l) return;
53
+ if (e && (l.loop = e), r.current[n] && clearInterval(r.current[n]), !l.paused && l.currentTime > 0 && !l.ended)
54
+ return t ? l.volume = 1 : r.current[n] = T(l), l;
55
+ l.volume = t ? 1 : 0;
56
+ const C = l.play();
57
+ return C && (S[n] = C), t || (r.current[n] = T(l)), l;
53
58
  }
54
- return u;
55
- }
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
59
  },
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;
60
+ [A, I, _]
61
+ ), a = c((n, t) => {
62
+ const e = s[n];
63
+ if (e) {
64
+ if (r.current[n] && clearInterval(r.current[n]), t) {
65
+ e.pause();
66
+ return;
67
+ }
68
+ r.current[n] = G(e);
71
69
  }
72
- const u = D(e);
73
- o.current[t] = u;
74
- }, []), d = s(
75
- (t, l = !0) => {
70
+ }, []), d = c(
71
+ (n, t = !0) => {
76
72
  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);
73
+ if (S[n] !== void 0) {
74
+ (e = S[n]) == null || e.then(() => a(n, t)).catch(() => {
82
75
  });
83
76
  return;
84
77
  }
85
- a(t, l);
78
+ a(n, t);
86
79
  },
87
80
  [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;
81
+ ), P = c(() => {
82
+ const n = p[E] || u.SWIPE_01;
83
+ E = (E + 1) % p.length, o(n);
84
+ }, [o]), U = c(() => o(u.TOGGLE), [o]), f = c(() => {
85
+ const n = document.visibilityState;
86
+ n === "hidden" && Object.entries(s).forEach(([t, e]) => {
87
+ e && !e.paused && (d(t, !0), i.current.add(t));
88
+ }), n === "visible" && (i.current.forEach((t) => o(t)), i.current.clear());
89
+ }, [o, d]);
90
+ return h(() => {
91
+ document.addEventListener("visibilitychange", f);
92
+ const n = r.current;
102
93
  return () => {
103
- document.removeEventListener("visibilitychange", E), Object.values(t).forEach((l) => {
104
- l && clearInterval(l);
105
- });
94
+ document.removeEventListener("visibilitychange", f), Object.values(n).forEach((t) => t && clearInterval(t));
106
95
  };
107
- }, [E]), { playSwipeSound: T, play: r, stop: d, playButtonSound: v };
96
+ }, [f]), { playSwipeSound: P, play: o, stop: d, playButtonSound: U };
108
97
  };
109
98
  export {
110
- c as soundMapper,
111
- b as useCircleSounds
99
+ g as useCircleSounds
112
100
  };
113
101
  //# 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, useMemo } from 'react';\n\nimport useAudioPlayer from '../../../hooks/use-audio-player';\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\nconst 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 audioUrls = useMemo(\n () => Object.entries(CircleSoundKeyMapper).map(([name, url]) => ({ name, url })),\n [],\n );\n\n const playAudioBuffer = useAudioPlayer(audioUrls);\n\n const pausedSoundsRef = useRef<Set<CircleSoundKey>>(new Set());\n const timeoutRefs = useRef<TimeoutMap>({});\n\n const loadSound = useCallback((key: CircleSoundKey) => {\n if (!soundMapper[key]) {\n soundMapper[key] = new Audio(CircleSoundKeyMapper[key]);\n }\n }, []);\n\n const play = useCallback(\n (key: CircleSoundKey, immediately: boolean = true, loop = false) => {\n if (!canPlayAudio) return;\n\n try {\n playAudioBuffer(key);\n\n return;\n } catch {\n loadSound(key);\n const soundInstance = soundMapper[key];\n\n if (!soundInstance) return;\n\n if (loop) {\n soundInstance.loop = loop;\n }\n\n if (timeoutRefs.current[key]) {\n clearInterval(timeoutRefs.current[key]);\n }\n\n if (!soundInstance.paused && soundInstance.currentTime > 0 && !soundInstance.ended) {\n if (!immediately) {\n timeoutRefs.current[key] = fadeInSound(soundInstance);\n } else {\n soundInstance.volume = 1;\n }\n\n return soundInstance;\n }\n\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 timeoutRefs.current[key] = fadeInSound(soundInstance);\n }\n\n return soundInstance;\n }\n },\n [loadSound, canPlayAudio, playAudioBuffer],\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 timeoutRefs.current[key] = fadeOutSound(soundInstance);\n }, []);\n\n const stop = useCallback(\n (key: CircleSoundKey, immediately: boolean = true) => {\n if (soundInstancePromise[key] !== undefined) {\n soundInstancePromise[key]?.then(() => handleSoundStop(key, immediately)).catch(() => {});\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 play(key);\n }, [play]);\n\n const playButtonSound = useCallback(() => play(CircleSoundKey.TOGGLE), [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 => play(key));\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 => id && clearInterval(id));\n };\n }, [handleVisibilityChange]);\n\n return { playSwipeSound, play, stop, playButtonSound };\n};\n"],"names":["swipeSoundIndex","soundMapper","CircleSoundKey","soundInstancePromise","useCircleSounds","canPlayAudio","useAutoPlayPermission","audioUrls","useMemo","CircleSoundKeyMapper","name","url","playAudioBuffer","useAudioPlayer","pausedSoundsRef","useRef","timeoutRefs","loadSound","useCallback","key","play","immediately","loop","soundInstance","fadeInSound","promise","handleSoundStop","fadeOutSound","stop","_a","playSwipeSound","SWIPE_SOUND_ORDER","playButtonSound","handleVisibilityChange","visibilityState","sound","useEffect","timeouts","id"],"mappings":"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"}
@@ -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;"}