import React, { useState, useEffect } from "react"; import { useParams } from "react-router-dom"; import ListRow from "../components/Layout/ListRow"; import { useNavigate } from "react-router-dom"; import DynamicPageContent from "../components/Layout/DynamicPageContent"; interface StreamData { type: "stream"; id: number; title: string; streamer: string; streamCategory: string; viewers: number; thumbnail?: string; } const CategoryPage: React.FC = () => { const { category_name } = useParams<{ category_name: string }>(); const [streams, setStreams] = useState([]); const [isLoading, setIsLoading] = useState(true); const navigate = useNavigate(); useEffect(() => { const fetchCategoryStreams = async () => { try { const response = await fetch(`/api/streams/popular/${category_name}`); if (!response.ok) { throw new Error("Failed to fetch category streams"); } const data = await response.json(); const formattedData = data.map((stream: any) => ({ type: "stream", id: stream.user_id, title: stream.title, streamer: stream.username, streamCategory: category_name, viewers: stream.num_viewers, thumbnail: stream.thumbnail || (category_name && `/images/category_thumbnails/${category_name .toLowerCase() .replace(/ /g, "_")}.webp`), })); setStreams(formattedData); } catch (error) { console.error("Error fetching category streams:", error); } finally { setIsLoading(false); } }; fetchCategoryStreams(); }, [category_name]); const handleStreamClick = (streamerName: string) => { navigate(`/${streamerName}`); }; if (isLoading) { return (
Loading...
); } return (
{streams.length === 0 && !isLoading && (
No live streams found in this category
)}
); }; export default CategoryPage;