summaryrefslogtreecommitdiff
path: root/apps/web/src/voiceover/use-recording-elapsed.ts
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/src/voiceover/use-recording-elapsed.ts')
-rw-r--r--apps/web/src/voiceover/use-recording-elapsed.ts26
1 files changed, 26 insertions, 0 deletions
diff --git a/apps/web/src/voiceover/use-recording-elapsed.ts b/apps/web/src/voiceover/use-recording-elapsed.ts
new file mode 100644
index 00000000..1eeb7f90
--- /dev/null
+++ b/apps/web/src/voiceover/use-recording-elapsed.ts
@@ -0,0 +1,26 @@
+import { useEffect, useState } from "react";
+import { useVoiceOverStore } from "@/voiceover/voiceover-store";
+
+const ELAPSED_TICK_MS = 250;
+
+/**
+ * Elapsed seconds of the active voice-over recording, ticking while recording.
+ * Returns 0 when idle.
+ */
+export function useRecordingElapsedSeconds(): number {
+ const status = useVoiceOverStore((state) => state.status);
+ const startedAtMs = useVoiceOverStore((state) => state.startedAtMs);
+ const [elapsedSeconds, setElapsedSeconds] = useState(0);
+
+ useEffect(() => {
+ if (status !== "recording" || startedAtMs === null) {
+ return;
+ }
+ const interval = setInterval(() => {
+ setElapsedSeconds((Date.now() - startedAtMs) / 1000);
+ }, ELAPSED_TICK_MS);
+ return () => clearInterval(interval);
+ }, [status, startedAtMs]);
+
+ return status === "recording" ? elapsedSeconds : 0;
+}