@cuemath/leap 2.8.36-link.1 → 2.8.36-link.2
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.
@@ -26,7 +26,7 @@ const N = 1e3 * 60, S = 20, v = 40, W = (p, i) => {
|
|
26
26
|
canDisplayBatch: u,
|
27
27
|
onMessageReceive: C,
|
28
28
|
onDismissMeter: P
|
29
|
-
} = p, [r, U] = F(!1), [Y, k] = F(!1), { onEvent: y } = X(), { sendMessage: L } = z(), g = G(), H = (V = g.find((e) => e.userId === _)) == null ? void 0 : V.id, b = (w = g.find((e) => e.userType === "teacher")) == null ? void 0 : w.id,
|
29
|
+
} = p, [r, U] = F(!1), [Y, k] = F(!1), { onEvent: y } = X(), { sendMessage: L } = z(), g = G(), H = (V = g.find((e) => e.userId === _)) == null ? void 0 : V.id, b = (w = g.find((e) => e.userType === "teacher")) == null ? void 0 : w.id, c = i === "TEACHER", d = B(T), o = B(l), K = B(0), O = o.current + d.current, j = Math.ceil(o.current * 100 / O) || 0, q = Math.floor(d.current * 100 / O) || 0, m = Q(
|
30
30
|
() => ({
|
31
31
|
teacher_classroom_id: f,
|
32
32
|
teacher_id: E,
|
@@ -36,35 +36,35 @@ const N = 1e3 * 60, S = 20, v = 40, W = (p, i) => {
|
|
36
36
|
), R = I(() => {
|
37
37
|
k(!0), U(!1), P();
|
38
38
|
}, [P]), A = I(
|
39
|
-
(e,
|
40
|
-
y(e, { ...m, ...
|
39
|
+
(e, n = {}) => {
|
40
|
+
y(e, { ...m, ...n });
|
41
41
|
},
|
42
42
|
[y, m]
|
43
43
|
), h = I(
|
44
44
|
(e) => {
|
45
|
-
const
|
45
|
+
const n = c ? "TEACHER_TALK_TIME_UPDATED" : "STUDENT_TALK_TIME_UPDATED", M = c ? { teacher_speech_time: d.current } : { student_speech_time: o.current };
|
46
46
|
A("TALK_METER_BATCH_SENT", {
|
47
47
|
batch_no: e,
|
48
48
|
...M
|
49
49
|
}), t && L(
|
50
|
-
|
50
|
+
n,
|
51
51
|
{
|
52
52
|
...m,
|
53
53
|
...M,
|
54
54
|
batch_no: e
|
55
55
|
},
|
56
|
-
|
56
|
+
c ? H : b
|
57
57
|
), K.current = o.current;
|
58
58
|
},
|
59
|
-
[t,
|
59
|
+
[t, c, m, L, H, b, A]
|
60
60
|
);
|
61
61
|
return J({
|
62
|
-
type:
|
62
|
+
type: c ? "STUDENT_TALK_TIME_UPDATED" : "TEACHER_TALK_TIME_UPDATED",
|
63
63
|
onMessage: I(
|
64
|
-
(e,
|
65
|
-
C(),
|
64
|
+
(e, n) => {
|
65
|
+
C(n), c && h(n.batch_no);
|
66
66
|
},
|
67
|
-
[
|
67
|
+
[c, C, h]
|
68
68
|
)
|
69
69
|
}), D(() => {
|
70
70
|
r || (d.current = T, o.current = l);
|
@@ -78,8 +78,8 @@ const N = 1e3 * 60, S = 20, v = 40, W = (p, i) => {
|
|
78
78
|
}, [r, R]), D(() => {
|
79
79
|
let e;
|
80
80
|
return a && u && !r && (e = setInterval(() => {
|
81
|
-
const { canDisplay:
|
82
|
-
|
81
|
+
const { canDisplay: n } = W(a, s);
|
82
|
+
n && (A("TALK_METER_BATCH_DISPLAYED", {
|
83
83
|
student_speech_time: o.current,
|
84
84
|
teacher_speech_time: d.current,
|
85
85
|
batch_no: s
|
@@ -89,16 +89,16 @@ const N = 1e3 * 60, S = 20, v = 40, W = (p, i) => {
|
|
89
89
|
};
|
90
90
|
}, [r, u, a, s, A]), D(() => {
|
91
91
|
let e;
|
92
|
-
return a && !
|
93
|
-
const { lastMinutesLeft:
|
92
|
+
return a && !c && (e = setInterval(() => {
|
93
|
+
const { lastMinutesLeft: n, canSendBatch: M, batchNoToSend: x } = W(
|
94
94
|
a,
|
95
95
|
s
|
96
96
|
);
|
97
|
-
|
97
|
+
n ? K.current !== o.current && h(x) : M && h(x);
|
98
98
|
}, N / 6)), () => {
|
99
99
|
e && clearInterval(e);
|
100
100
|
};
|
101
|
-
}, [a,
|
101
|
+
}, [a, c, s, h]), {
|
102
102
|
canAnimateIn: r,
|
103
103
|
canAnimateOut: Y,
|
104
104
|
stdRatio: j,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"use-talk-meter.js","sources":["../../../../src/features/talk-meter/hooks/use-talk-meter.ts"],"sourcesContent":["import type { ITalkMeterHook } from '../talk-meter-types';\n\nimport { useAVActions, useAVMessage, useRemotePeers } from '@cuemath/av';\nimport { useRef, useMemo, useCallback, useState, useEffect } from 'react';\n\nimport { useUIContext } from '../../ui/context/context';\n\nconst ONE_MINUTE = 1000 * 60;\nconst BATCH_ONE_MINUTE = 20;\nconst BATCH_TWO_MINUTE = 40;\n\nconst getBatchToSendInfo = (classStartTime: Date, batchSeen: number) => {\n const now = Date.now();\n const classTS = classStartTime.getTime();\n const diff = Math.abs(now - classTS);\n const minutes = Math.floor(diff / 1000 / 60);\n const canSendFirstBatch =\n (batchSeen === 0 || batchSeen === 1) &&\n minutes >= BATCH_ONE_MINUTE - 2 &&\n minutes <= BATCH_ONE_MINUTE;\n const canSendSecondBatch =\n (batchSeen === 1 || batchSeen === 2) &&\n minutes >= BATCH_TWO_MINUTE - 2 &&\n minutes <= BATCH_TWO_MINUTE;\n\n const lastMinutesLeft = minutes >= 50;\n\n let batchNo = 0;\n let canDisplayBatch = false;\n\n if (lastMinutesLeft) {\n batchNo = 0;\n } else if (canSendSecondBatch) {\n batchNo = 2;\n canDisplayBatch = minutes >= BATCH_TWO_MINUTE;\n } else if (canSendFirstBatch) {\n batchNo = 1;\n canDisplayBatch = minutes >= BATCH_ONE_MINUTE;\n }\n\n return {\n lastMinutesLeft,\n canSendBatch: canSendFirstBatch || canSendSecondBatch,\n batchNoToSend: batchNo,\n minutes,\n canDisplay: canDisplayBatch,\n };\n};\n\nexport const useTalkMeter = (props: ITalkMeterHook) => {\n const {\n userType,\n studentId,\n teacherId,\n classStartTime,\n avPackageEnabled,\n teacherClassroomId,\n teacherTalkTime,\n studentTalkTime,\n lastBatchReceivedNo,\n canDisplayBatch,\n onMessageReceive,\n onDismissMeter,\n } = props;\n const [canAnimateIn, setCanAnimateIn] = useState(false);\n const [canAnimateOut, setCanAnimateOut] = useState(false);\n\n const { onEvent } = useUIContext();\n const { sendMessage } = useAVActions();\n\n const remotePeers = useRemotePeers();\n const studentPeerId = remotePeers.find(peer => peer.userId === studentId)?.id;\n const teacherPeerId = remotePeers.find(p => p.userType === 'teacher')?.id;\n\n const isTeacher = userType === 'TEACHER';\n\n const teacherTalkRef = useRef(teacherTalkTime);\n const studentTalkRef = useRef(studentTalkTime);\n const prevSentRef = useRef(0);\n\n const totalTalkTime = studentTalkRef.current + teacherTalkRef.current;\n const stdRatio = Math.ceil((studentTalkRef.current * 100) / totalTalkTime) || 0;\n const tchRatio = Math.floor((teacherTalkRef.current * 100) / totalTalkTime) || 0;\n\n const payload = useMemo(\n () => ({\n teacher_classroom_id: teacherClassroomId,\n teacher_id: teacherId,\n studentId: studentId,\n }),\n [studentId, teacherClassroomId, teacherId],\n );\n\n const handleDismiss = useCallback(() => {\n setCanAnimateOut(true);\n setCanAnimateIn(false);\n onDismissMeter();\n }, [onDismissMeter]);\n\n const trackEvent = useCallback(\n (eventName: string, data = {}) => {\n onEvent(eventName, { ...payload, ...data });\n },\n [onEvent, payload],\n );\n\n const sendBatch = useCallback(\n (batchNo: number) => {\n const EVENT_NAME = isTeacher ? 'TEACHER_TALK_TIME_UPDATED' : 'STUDENT_TALK_TIME_UPDATED';\n const speechTimePayload = isTeacher\n ? { teacher_speech_time: teacherTalkRef.current }\n : { student_speech_time: studentTalkRef.current };\n\n trackEvent('TALK_METER_BATCH_SENT', {\n batch_no: batchNo,\n ...speechTimePayload,\n });\n if (avPackageEnabled) {\n sendMessage(\n EVENT_NAME,\n {\n ...payload,\n ...speechTimePayload,\n batch_no: batchNo,\n },\n isTeacher ? studentPeerId : teacherPeerId,\n );\n }\n\n prevSentRef.current = studentTalkRef.current;\n },\n [avPackageEnabled, isTeacher, payload, sendMessage, studentPeerId, teacherPeerId, trackEvent],\n );\n\n useAVMessage<{\n teacher_classroom_id: string;\n student_classroom_id: string;\n student_speech_time: number;\n batch_no: 0 | 1 | 2;\n }>({\n type: isTeacher ? 'STUDENT_TALK_TIME_UPDATED' : 'TEACHER_TALK_TIME_UPDATED',\n onMessage: useCallback(\n (_, data) => {\n onMessageReceive();\n if (isTeacher) sendBatch(data.batch_no);\n },\n [isTeacher, onMessageReceive, sendBatch],\n ),\n });\n\n useEffect(() => {\n if (!canAnimateIn) {\n teacherTalkRef.current = teacherTalkTime;\n studentTalkRef.current = studentTalkTime;\n }\n }, [teacherTalkTime, studentTalkTime, canAnimateIn]);\n\n useEffect(() => {\n let dismissTimer: NodeJS.Timeout | undefined;\n\n if (canAnimateIn) {\n dismissTimer = setTimeout(() => {\n handleDismiss();\n }, ONE_MINUTE);\n }\n\n return () => {\n if (dismissTimer) clearTimeout(dismissTimer);\n };\n }, [canAnimateIn, handleDismiss]);\n\n useEffect(() => {\n let interval: NodeJS.Timeout | undefined;\n\n if (classStartTime && canDisplayBatch && !canAnimateIn) {\n interval = setInterval(() => {\n const { canDisplay } = getBatchToSendInfo(classStartTime, lastBatchReceivedNo);\n\n if (canDisplay) {\n trackEvent('TALK_METER_BATCH_DISPLAYED', {\n student_speech_time: studentTalkRef.current,\n teacher_speech_time: teacherTalkRef.current,\n batch_no: lastBatchReceivedNo,\n });\n setCanAnimateIn(true);\n setCanAnimateOut(false);\n }\n }, ONE_MINUTE / 30);\n }\n\n return () => {\n if (interval) {\n clearInterval(interval);\n }\n };\n }, [canAnimateIn, canDisplayBatch, classStartTime, lastBatchReceivedNo, trackEvent]);\n\n useEffect(() => {\n let interval: NodeJS.Timeout | undefined;\n\n if (classStartTime && !isTeacher) {\n interval = setInterval(() => {\n const { lastMinutesLeft, canSendBatch, batchNoToSend } = getBatchToSendInfo(\n classStartTime,\n lastBatchReceivedNo,\n );\n\n if (lastMinutesLeft) {\n if (prevSentRef.current !== studentTalkRef.current) {\n sendBatch(batchNoToSend);\n }\n } else if (canSendBatch) {\n sendBatch(batchNoToSend);\n }\n }, ONE_MINUTE / 6);\n }\n\n return () => {\n if (interval) {\n clearInterval(interval);\n }\n };\n }, [classStartTime, isTeacher, lastBatchReceivedNo, sendBatch]);\n\n return {\n canAnimateIn,\n canAnimateOut,\n stdRatio,\n tchRatio,\n handleDismiss,\n };\n};\n"],"names":["ONE_MINUTE","BATCH_ONE_MINUTE","BATCH_TWO_MINUTE","getBatchToSendInfo","classStartTime","batchSeen","now","classTS","diff","minutes","canSendFirstBatch","canSendSecondBatch","lastMinutesLeft","batchNo","canDisplayBatch","useTalkMeter","props","userType","studentId","teacherId","avPackageEnabled","teacherClassroomId","teacherTalkTime","studentTalkTime","lastBatchReceivedNo","onMessageReceive","onDismissMeter","canAnimateIn","setCanAnimateIn","useState","canAnimateOut","setCanAnimateOut","onEvent","useUIContext","sendMessage","useAVActions","remotePeers","useRemotePeers","studentPeerId","_a","peer","teacherPeerId","_b","p","isTeacher","teacherTalkRef","useRef","studentTalkRef","prevSentRef","totalTalkTime","stdRatio","tchRatio","payload","useMemo","handleDismiss","useCallback","trackEvent","eventName","data","sendBatch","EVENT_NAME","speechTimePayload","useAVMessage","_","useEffect","dismissTimer","interval","canDisplay","canSendBatch","batchNoToSend"],"mappings":";;;AAOA,MAAMA,IAAa,MAAO,IACpBC,IAAmB,IACnBC,IAAmB,IAEnBC,IAAqB,CAACC,GAAsBC,MAAsB;AAChE,QAAAC,IAAM,KAAK,OACXC,IAAUH,EAAe,WACzBI,IAAO,KAAK,IAAIF,IAAMC,CAAO,GAC7BE,IAAU,KAAK,MAAMD,IAAO,MAAO,EAAE,GACrCE,KACHL,MAAc,KAAKA,MAAc,MAClCI,KAAWR,IAAmB,KAC9BQ,KAAWR,GACPU,KACHN,MAAc,KAAKA,MAAc,MAClCI,KAAWP,IAAmB,KAC9BO,KAAWP,GAEPU,IAAkBH,KAAW;AAEnC,MAAII,IAAU,GACVC,IAAkB;AAEtB,SAAIF,IACQC,IAAA,IACDF,KACCE,IAAA,GACVC,IAAkBL,KAAWP,KACpBQ,MACCG,IAAA,GACVC,IAAkBL,KAAWR,IAGxB;AAAA,IACL,iBAAAW;AAAA,IACA,cAAcF,KAAqBC;AAAA,IACnC,eAAeE;AAAA,IACf,SAAAJ;AAAA,IACA,YAAYK;AAAA,EAAA;AAEhB,GAEaC,KAAe,CAACC,MAA0B;;AAC/C,QAAA;AAAA,IACJ,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC;AAAA,IACA,gBAAAf;AAAA,IACA,kBAAAgB;AAAA,IACA,oBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,iBAAAV;AAAA,IACA,kBAAAW;AAAA,IACA,gBAAAC;AAAA,EACE,IAAAV,GACE,CAACW,GAAcC,CAAe,IAAIC,EAAS,EAAK,GAChD,CAACC,GAAeC,CAAgB,IAAIF,EAAS,EAAK,GAElD,EAAE,SAAAG,MAAYC,KACd,EAAE,aAAAC,MAAgBC,KAElBC,IAAcC,KACdC,KAAgBC,IAAAH,EAAY,KAAK,OAAQI,EAAK,WAAWtB,CAAS,MAAlD,gBAAAqB,EAAqD,IACrEE,KAAgBC,IAAAN,EAAY,KAAK,OAAKO,EAAE,aAAa,SAAS,MAA9C,gBAAAD,EAAiD,IAEjEE,IAAY3B,MAAa,WAEzB4B,IAAiBC,EAAOxB,CAAe,GACvCyB,IAAiBD,EAAOvB,CAAe,GACvCyB,IAAcF,EAAO,CAAC,GAEtBG,IAAgBF,EAAe,UAAUF,EAAe,SACxDK,IAAW,KAAK,KAAMH,EAAe,UAAU,MAAOE,CAAa,KAAK,GACxEE,IAAW,KAAK,MAAON,EAAe,UAAU,MAAOI,CAAa,KAAK,GAEzEG,IAAUC;AAAA,IACd,OAAO;AAAA,MACL,sBAAsBhC;AAAA,MACtB,YAAYF;AAAA,MACZ,WAAAD;AAAA,IAAA;AAAA,IAEF,CAACA,GAAWG,GAAoBF,CAAS;AAAA,EAAA,GAGrCmC,IAAgBC,EAAY,MAAM;AACtC,IAAAxB,EAAiB,EAAI,GACrBH,EAAgB,EAAK,GACNF;EAAA,GACd,CAACA,CAAc,CAAC,GAEb8B,IAAaD;AAAA,IACjB,CAACE,GAAmBC,IAAO,OAAO;AAChC,MAAA1B,EAAQyB,GAAW,EAAE,GAAGL,GAAS,GAAGM,EAAM,CAAA;AAAA,IAC5C;AAAA,IACA,CAAC1B,GAASoB,CAAO;AAAA,EAAA,GAGbO,IAAYJ;AAAA,IAChB,CAAC1C,MAAoB;AACb,YAAA+C,IAAahB,IAAY,8BAA8B,6BACvDiB,IAAoBjB,IACtB,EAAE,qBAAqBC,EAAe,QACtC,IAAA,EAAE,qBAAqBE,EAAe;AAE1C,MAAAS,EAAW,yBAAyB;AAAA,QAClC,UAAU3C;AAAA,QACV,GAAGgD;AAAA,MAAA,CACJ,GACGzC,KACFc;AAAA,QACE0B;AAAA,QACA;AAAA,UACE,GAAGR;AAAA,UACH,GAAGS;AAAA,UACH,UAAUhD;AAAA,QACZ;AAAA,QACA+B,IAAYN,IAAgBG;AAAA,MAAA,GAIhCO,EAAY,UAAUD,EAAe;AAAA,IACvC;AAAA,IACA,CAAC3B,GAAkBwB,GAAWQ,GAASlB,GAAaI,GAAeG,GAAee,CAAU;AAAA,EAAA;AAQ3F,SAAAM,EAAA;AAAA,IACD,MAAMlB,IAAY,8BAA8B;AAAA,IAChD,WAAWW;AAAA,MACT,CAACQ,GAAGL,MAAS;AACM,QAAAjC,KACbmB,KAAqBe,EAAAD,EAAK,QAAQ;AAAA,MACxC;AAAA,MACA,CAACd,GAAWnB,GAAkBkC,CAAS;AAAA,IACzC;AAAA,EAAA,CACD,GAEDK,EAAU,MAAM;AACd,IAAKrC,MACHkB,EAAe,UAAUvB,GACzByB,EAAe,UAAUxB;AAAA,EAE1B,GAAA,CAACD,GAAiBC,GAAiBI,CAAY,CAAC,GAEnDqC,EAAU,MAAM;AACV,QAAAC;AAEJ,WAAItC,MACFsC,IAAe,WAAW,MAAM;AAChB,MAAAX;OACbtD,CAAU,IAGR,MAAM;AACP,MAAAiE,kBAA2BA,CAAY;AAAA,IAAA;AAAA,EAC7C,GACC,CAACtC,GAAc2B,CAAa,CAAC,GAEhCU,EAAU,MAAM;AACV,QAAAE;AAEA,WAAA9D,KAAkBU,KAAmB,CAACa,MACxCuC,IAAW,YAAY,MAAM;AAC3B,YAAM,EAAE,YAAAC,EAAe,IAAAhE,EAAmBC,GAAgBoB,CAAmB;AAE7E,MAAI2C,MACFX,EAAW,8BAA8B;AAAA,QACvC,qBAAqBT,EAAe;AAAA,QACpC,qBAAqBF,EAAe;AAAA,QACpC,UAAUrB;AAAA,MAAA,CACX,GACDI,EAAgB,EAAI,GACpBG,EAAiB,EAAK;AAAA,IACxB,GACC/B,IAAa,EAAE,IAGb,MAAM;AACX,MAAIkE,KACF,cAAcA,CAAQ;AAAA,IACxB;AAAA,EACF,GACC,CAACvC,GAAcb,GAAiBV,GAAgBoB,GAAqBgC,CAAU,CAAC,GAEnFQ,EAAU,MAAM;AACV,QAAAE;AAEA,WAAA9D,KAAkB,CAACwC,MACrBsB,IAAW,YAAY,MAAM;AAC3B,YAAM,EAAE,iBAAAtD,GAAiB,cAAAwD,GAAc,eAAAC,EAAkB,IAAAlE;AAAA,QACvDC;AAAA,QACAoB;AAAA,MAAA;AAGF,MAAIZ,IACEoC,EAAY,YAAYD,EAAe,WACzCY,EAAUU,CAAa,IAEhBD,KACTT,EAAUU,CAAa;AAAA,IACzB,GACCrE,IAAa,CAAC,IAGZ,MAAM;AACX,MAAIkE,KACF,cAAcA,CAAQ;AAAA,IACxB;AAAA,KAED,CAAC9D,GAAgBwC,GAAWpB,GAAqBmC,CAAS,CAAC,GAEvD;AAAA,IACL,cAAAhC;AAAA,IACA,eAAAG;AAAA,IACA,UAAAoB;AAAA,IACA,UAAAC;AAAA,IACA,eAAAG;AAAA,EAAA;AAEJ;"}
|
1
|
+
{"version":3,"file":"use-talk-meter.js","sources":["../../../../src/features/talk-meter/hooks/use-talk-meter.ts"],"sourcesContent":["import type { ITalkMeterHook } from '../talk-meter-types';\n\nimport { useAVActions, useAVMessage, useRemotePeers } from '@cuemath/av';\nimport { useRef, useMemo, useCallback, useState, useEffect } from 'react';\n\nimport { useUIContext } from '../../ui/context/context';\n\nconst ONE_MINUTE = 1000 * 60;\nconst BATCH_ONE_MINUTE = 20;\nconst BATCH_TWO_MINUTE = 40;\n\nconst getBatchToSendInfo = (classStartTime: Date, batchSeen: number) => {\n const now = Date.now();\n const classTS = classStartTime.getTime();\n const diff = Math.abs(now - classTS);\n const minutes = Math.floor(diff / 1000 / 60);\n const canSendFirstBatch =\n (batchSeen === 0 || batchSeen === 1) &&\n minutes >= BATCH_ONE_MINUTE - 2 &&\n minutes <= BATCH_ONE_MINUTE;\n const canSendSecondBatch =\n (batchSeen === 1 || batchSeen === 2) &&\n minutes >= BATCH_TWO_MINUTE - 2 &&\n minutes <= BATCH_TWO_MINUTE;\n\n const lastMinutesLeft = minutes >= 50;\n\n let batchNo = 0;\n let canDisplayBatch = false;\n\n if (lastMinutesLeft) {\n batchNo = 0;\n } else if (canSendSecondBatch) {\n batchNo = 2;\n canDisplayBatch = minutes >= BATCH_TWO_MINUTE;\n } else if (canSendFirstBatch) {\n batchNo = 1;\n canDisplayBatch = minutes >= BATCH_ONE_MINUTE;\n }\n\n return {\n lastMinutesLeft,\n canSendBatch: canSendFirstBatch || canSendSecondBatch,\n batchNoToSend: batchNo,\n minutes,\n canDisplay: canDisplayBatch,\n };\n};\n\nexport const useTalkMeter = (props: ITalkMeterHook) => {\n const {\n userType,\n studentId,\n teacherId,\n classStartTime,\n avPackageEnabled,\n teacherClassroomId,\n teacherTalkTime,\n studentTalkTime,\n lastBatchReceivedNo,\n canDisplayBatch,\n onMessageReceive,\n onDismissMeter,\n } = props;\n const [canAnimateIn, setCanAnimateIn] = useState(false);\n const [canAnimateOut, setCanAnimateOut] = useState(false);\n\n const { onEvent } = useUIContext();\n const { sendMessage } = useAVActions();\n\n const remotePeers = useRemotePeers();\n const studentPeerId = remotePeers.find(peer => peer.userId === studentId)?.id;\n const teacherPeerId = remotePeers.find(p => p.userType === 'teacher')?.id;\n\n const isTeacher = userType === 'TEACHER';\n\n const teacherTalkRef = useRef(teacherTalkTime);\n const studentTalkRef = useRef(studentTalkTime);\n const prevSentRef = useRef(0);\n\n const totalTalkTime = studentTalkRef.current + teacherTalkRef.current;\n const stdRatio = Math.ceil((studentTalkRef.current * 100) / totalTalkTime) || 0;\n const tchRatio = Math.floor((teacherTalkRef.current * 100) / totalTalkTime) || 0;\n\n const payload = useMemo(\n () => ({\n teacher_classroom_id: teacherClassroomId,\n teacher_id: teacherId,\n studentId: studentId,\n }),\n [studentId, teacherClassroomId, teacherId],\n );\n\n const handleDismiss = useCallback(() => {\n setCanAnimateOut(true);\n setCanAnimateIn(false);\n onDismissMeter();\n }, [onDismissMeter]);\n\n const trackEvent = useCallback(\n (eventName: string, data = {}) => {\n onEvent(eventName, { ...payload, ...data });\n },\n [onEvent, payload],\n );\n\n const sendBatch = useCallback(\n (batchNo: number) => {\n const EVENT_NAME = isTeacher ? 'TEACHER_TALK_TIME_UPDATED' : 'STUDENT_TALK_TIME_UPDATED';\n const speechTimePayload = isTeacher\n ? { teacher_speech_time: teacherTalkRef.current }\n : { student_speech_time: studentTalkRef.current };\n\n trackEvent('TALK_METER_BATCH_SENT', {\n batch_no: batchNo,\n ...speechTimePayload,\n });\n if (avPackageEnabled) {\n sendMessage(\n EVENT_NAME,\n {\n ...payload,\n ...speechTimePayload,\n batch_no: batchNo,\n },\n isTeacher ? studentPeerId : teacherPeerId,\n );\n }\n\n prevSentRef.current = studentTalkRef.current;\n },\n [avPackageEnabled, isTeacher, payload, sendMessage, studentPeerId, teacherPeerId, trackEvent],\n );\n\n useAVMessage<{\n teacher_classroom_id: string;\n student_classroom_id: string;\n student_speech_time: number;\n batch_no: 0 | 1 | 2;\n }>({\n type: isTeacher ? 'STUDENT_TALK_TIME_UPDATED' : 'TEACHER_TALK_TIME_UPDATED',\n onMessage: useCallback(\n (_, data) => {\n onMessageReceive(data);\n if (isTeacher) sendBatch(data.batch_no);\n },\n [isTeacher, onMessageReceive, sendBatch],\n ),\n });\n\n useEffect(() => {\n if (!canAnimateIn) {\n teacherTalkRef.current = teacherTalkTime;\n studentTalkRef.current = studentTalkTime;\n }\n }, [teacherTalkTime, studentTalkTime, canAnimateIn]);\n\n useEffect(() => {\n let dismissTimer: NodeJS.Timeout | undefined;\n\n if (canAnimateIn) {\n dismissTimer = setTimeout(() => {\n handleDismiss();\n }, ONE_MINUTE);\n }\n\n return () => {\n if (dismissTimer) clearTimeout(dismissTimer);\n };\n }, [canAnimateIn, handleDismiss]);\n\n useEffect(() => {\n let interval: NodeJS.Timeout | undefined;\n\n if (classStartTime && canDisplayBatch && !canAnimateIn) {\n interval = setInterval(() => {\n const { canDisplay } = getBatchToSendInfo(classStartTime, lastBatchReceivedNo);\n\n if (canDisplay) {\n trackEvent('TALK_METER_BATCH_DISPLAYED', {\n student_speech_time: studentTalkRef.current,\n teacher_speech_time: teacherTalkRef.current,\n batch_no: lastBatchReceivedNo,\n });\n setCanAnimateIn(true);\n setCanAnimateOut(false);\n }\n }, ONE_MINUTE / 30);\n }\n\n return () => {\n if (interval) {\n clearInterval(interval);\n }\n };\n }, [canAnimateIn, canDisplayBatch, classStartTime, lastBatchReceivedNo, trackEvent]);\n\n useEffect(() => {\n let interval: NodeJS.Timeout | undefined;\n\n if (classStartTime && !isTeacher) {\n interval = setInterval(() => {\n const { lastMinutesLeft, canSendBatch, batchNoToSend } = getBatchToSendInfo(\n classStartTime,\n lastBatchReceivedNo,\n );\n\n if (lastMinutesLeft) {\n if (prevSentRef.current !== studentTalkRef.current) {\n sendBatch(batchNoToSend);\n }\n } else if (canSendBatch) {\n sendBatch(batchNoToSend);\n }\n }, ONE_MINUTE / 6);\n }\n\n return () => {\n if (interval) {\n clearInterval(interval);\n }\n };\n }, [classStartTime, isTeacher, lastBatchReceivedNo, sendBatch]);\n\n return {\n canAnimateIn,\n canAnimateOut,\n stdRatio,\n tchRatio,\n handleDismiss,\n };\n};\n"],"names":["ONE_MINUTE","BATCH_ONE_MINUTE","BATCH_TWO_MINUTE","getBatchToSendInfo","classStartTime","batchSeen","now","classTS","diff","minutes","canSendFirstBatch","canSendSecondBatch","lastMinutesLeft","batchNo","canDisplayBatch","useTalkMeter","props","userType","studentId","teacherId","avPackageEnabled","teacherClassroomId","teacherTalkTime","studentTalkTime","lastBatchReceivedNo","onMessageReceive","onDismissMeter","canAnimateIn","setCanAnimateIn","useState","canAnimateOut","setCanAnimateOut","onEvent","useUIContext","sendMessage","useAVActions","remotePeers","useRemotePeers","studentPeerId","_a","peer","teacherPeerId","_b","p","isTeacher","teacherTalkRef","useRef","studentTalkRef","prevSentRef","totalTalkTime","stdRatio","tchRatio","payload","useMemo","handleDismiss","useCallback","trackEvent","eventName","data","sendBatch","EVENT_NAME","speechTimePayload","useAVMessage","_","useEffect","dismissTimer","interval","canDisplay","canSendBatch","batchNoToSend"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
@@ -2640,7 +2640,7 @@ declare interface ITalkMeter {
|
|
2640
2640
|
studentTalkTime: number;
|
2641
2641
|
lastBatchReceivedNo: number;
|
2642
2642
|
canDisplayBatch: boolean;
|
2643
|
-
onMessageReceive: () => void;
|
2643
|
+
onMessageReceive: (data: Record<string, unknown>) => void;
|
2644
2644
|
onDismissMeter: () => void;
|
2645
2645
|
}
|
2646
2646
|
|