'use client'; import { useState } from 'react'; const HomePage = () => { const [videoID, setVideoID] = useState(''); const [lang, setLang] = useState(''); const [subtitles, setSubtitles] = useState([]); const [videoDetails, setVideoDetails] = useState<{ title?: string; description?: string; }>({}); const [error, setError] = useState(null); const [isFetching, setIsFetching] = useState(false); const fetchData = async () => { setIsFetching(true); try { // Fetch subtitles and video details in parallel const [subtitlesResponse, videoDetailsResponse] = await Promise.all([ fetch(`/api/subtitles?videoID=${videoID}&lang=${lang}`), fetch(`/api/videoDetails?videoID=${videoID}&lang=${lang}`), ]); if (!subtitlesResponse.ok) { throw new Error(`Subtitles API Error: ${subtitlesResponse.status}`); } if (!videoDetailsResponse.ok) { throw new Error( `Video Details API Error: ${videoDetailsResponse.status}` ); } const subtitlesResult = await subtitlesResponse.json(); const videoDetailsResult = await videoDetailsResponse.json(); setSubtitles(subtitlesResult.subtitles); setVideoDetails(videoDetailsResult.videoDetails); setError(null); } catch (err) { if (err instanceof Error) { setError(err.message); } else { setError('An unknown error occurred'); } } finally { setIsFetching(false); } }; return (

Fetch YouTube Subtitles and Video Details

{error && (

Error: {error}

)} {subtitles.length > 0 && (

Title

Description

Subtitles

{subtitles .map((subtitle: { text: string }) => subtitle.text) .join(' ')}

)}
); }; export default HomePage;