diff --git a/www/app/[domain]/transcripts/[transcriptId]/page.tsx b/www/app/[domain]/transcripts/[transcriptId]/page.tsx index 5faa31e1..519fe7e1 100644 --- a/www/app/[domain]/transcripts/[transcriptId]/page.tsx +++ b/www/app/[domain]/transcripts/[transcriptId]/page.tsx @@ -23,16 +23,20 @@ type TranscriptDetails = { export default function TranscriptDetails(details: TranscriptDetails) { const transcriptId = details.params.transcriptId; const router = useRouter(); + const statusToRedirect = ["idle", "recording", "processing"]; const transcript = useTranscript(transcriptId); + const transcriptStatus = transcript.response?.status; + const waiting = + !transcriptStatus || statusToRedirect.includes(transcriptStatus); + const topics = useTopics(transcriptId); - const waveform = useWaveform(transcriptId); + const waveform = useWaveform(transcriptId, waiting); const useActiveTopic = useState(null); - const mp3 = useMp3(transcriptId); + const mp3 = useMp3(transcriptId, waiting); useEffect(() => { - const statusToRedirect = ["idle", "recording", "processing"]; - if (statusToRedirect.includes(transcript.response?.status || "")) { + if (waiting) { const newUrl = "/transcripts/" + details.params.transcriptId + "/record"; // Shallow redirection does not work on NextJS 13 // https://github.com/vercel/next.js/discussions/48110 @@ -40,7 +44,7 @@ export default function TranscriptDetails(details: TranscriptDetails) { router.replace(newUrl); // history.replaceState({}, "", newUrl); } - }, [transcript.response?.status]); + }, [waiting]); if (transcript.error || topics?.error) { return ( diff --git a/www/app/[domain]/transcripts/useWaveform.ts b/www/app/[domain]/transcripts/useWaveform.ts index 3fbf2187..709fd321 100644 --- a/www/app/[domain]/transcripts/useWaveform.ts +++ b/www/app/[domain]/transcripts/useWaveform.ts @@ -10,7 +10,7 @@ type AudioWaveFormResponse = { error: Error | null; }; -const useWaveform = (id: string): AudioWaveFormResponse => { +const useWaveform = (id: string, waiting: boolean): AudioWaveFormResponse => { const [waveform, setWaveform] = useState(null); const [loading, setLoading] = useState(true); const [error, setErrorState] = useState(null); @@ -18,7 +18,7 @@ const useWaveform = (id: string): AudioWaveFormResponse => { const api = useApi(); useEffect(() => { - if (!id || !api) return; + if (!id || !api || waiting) return; setLoading(true); api .v1TranscriptGetAudioWaveform({ transcriptId: id }) @@ -36,7 +36,7 @@ const useWaveform = (id: string): AudioWaveFormResponse => { setError(err); } }); - }, [id, api]); + }, [id, api, waiting]); return { waveform, loading, error }; };