import React, { useEffect, useState } from "react"; import { useAuth } from "../context/AuthContext"; import { useNavigate, useParams } from "react-router-dom"; import DynamicPageContent from "../components/Layout/DynamicPageContent"; interface Vod { vod_id: number; title: string; datetime: string; username: string; category_name: string; length: number; views: number; } const Vods: React.FC = () => { const navigate = useNavigate(); const { username } = useParams<{ username?: string }>(); const { isLoggedIn } = useAuth(); const [ownedVods, setOwnedVods] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { if (!username) return; const fetchVods = async () => { try { const response = await fetch(`/api/vods/${username}`); if (!response.ok) throw new Error(`Failed to fetch VODs: ${response.statusText}`); const data = await response.json(); setOwnedVods(data); } catch (err) { const errorMessage = err instanceof Error ? err.message : "Error fetching VODs."; setError(errorMessage); } finally { setLoading(false); } }; fetchVods(); }, [username]); if (loading) return

Loading VODs...

; if (error) return

{error}

; return (

{username}'s VODs

{ownedVods.length === 0 ? (

No VODs available.

) : ( ownedVods.map((vod) => { const thumbnailUrl = `/stream/${username}/vods/${vod.vod_id}.png`; return (
navigate(`/stream/${username}/vods/${vod.vod_id}`)} > {/* Thumbnail */} {`Thumbnail { e.currentTarget.onerror = null; e.currentTarget.src = "/default-thumbnail.png"; }} /> {/* Video Info */}

{vod.title}

📅 {new Date(vod.datetime).toLocaleString()}

🎮 {vod.category_name}

⏱ {Math.floor(vod.length / 60)} min

👀 {vod.views} views

); }) )}
); }; export default Vods;