"use client"; import { useEffect, use } from "react"; import { Heading, Text, VStack, Spinner, Button, Center, } from "@chakra-ui/react"; import { useRouter } from "next/navigation"; import { useTranscriptGet } from "../../../../lib/apiHooks"; import { parseNonEmptyString } from "../../../../lib/utils"; import { useWebSockets } from "../../useWebSockets"; import type { DagTask } from "../../useWebSockets"; import DagProgressTable from "./DagProgressTable"; type TranscriptProcessing = { params: Promise<{ transcriptId: string; }>; }; export default function TranscriptProcessing(details: TranscriptProcessing) { const params = use(details.params); const transcriptId = parseNonEmptyString(params.transcriptId); const router = useRouter(); const transcript = useTranscriptGet(transcriptId); const { status: wsStatus, dagStatus: wsDagStatus } = useWebSockets(transcriptId); const restDagStatus: DagTask[] | null = ((transcript.data as Record)?.dag_status as | DagTask[] | null) ?? null; const dagStatus = wsDagStatus ?? restDagStatus; useEffect(() => { const status = wsStatus?.value ?? transcript.data?.status; if (!status) return; if (status === "ended" || status === "error") { router.replace(`/transcripts/${transcriptId}`); } else if (status === "recording") { router.replace(`/transcripts/${transcriptId}/record`); } else if (status === "idle") { const dest = transcript.data?.source_kind === "file" ? `/transcripts/${transcriptId}/upload` : `/transcripts/${transcriptId}/record`; router.replace(dest); } }, [ wsStatus?.value, transcript.data?.status, transcript.data?.source_kind, router, transcriptId, ]); if (transcript.isLoading) { return ( Loading transcript... ); } if (transcript.error) { return ( Transcript not found We couldn't load this transcript. ); } return ( <>
{dagStatus ? ( <> Processing recording ) : ( <> Processing recording )} You can safely return to the library while your recording is being processed.
); }