import React, { useEffect, useState } from "react"; import { useAuth } from "../context/AuthContext"; import { useLocation, useNavigate } from "react-router-dom"; import DynamicPageContent from "../components/Layout/DynamicPageContent"; import { useFollow } from "../hooks/useFollow"; import FollowUserButton from "../components/Input/FollowUserButton"; import FollowButton from "../components/Input/FollowButton"; import Footer from "../components/Layout/Footer"; interface Streamer { user_id: number; username: string; } interface Category { isFollowing: boolean; category_id: number; category_name: string; } interface FollowingProps { extraClasses?: string; } const Following: React.FC = ({ extraClasses = "" }) => { const navigate = useNavigate(); const { isLoggedIn } = useAuth(); const [followedStreamers, setFollowedStreamers] = useState([]); const [followedCategories, setFollowedCategories] = useState([]); const [followingStatus, setFollowingStatus] = useState<{ [key: number]: boolean }>({}); const { checkFollowStatus, followUser, unfollowUser } = useFollow(); const location = useLocation(); const queryParams = new URLSearchParams(location.search); const initialTab = queryParams.get("tab") === "streamers" ? "categories" : "categories"; const [activeTab, setActiveTab] = useState<"categories" | "streamers">(initialTab); //const [followingStatus, setFollowingStatus] = useState>({}); const profileImageUrl = "/user/ { const newTab = queryParams.get("tab") as "categories" | "streamers"; if (newTab) { setActiveTab(newTab); } }, [location.search]); useEffect(() => { const fetchFollowedContent = async () => { try { const response = await fetch("/api/user/following"); if (!response.ok) throw new Error("Failed to fetch followed content"); const data = await response.json(); if (!Array.isArray(data.streams) || !Array.isArray(data.categories)) { throw new Error("API response structure is incorrect"); } setFollowedStreamers(data.streams); setFollowedCategories(data.categories); // Fetch follow status for streamers const updatedStatus: { [key: number]: boolean } = {}; for (const streamer of data.streams) { const status = await checkFollowStatus(streamer.username); updatedStatus[streamer.user_id] = Boolean(status); } setFollowingStatus(updatedStatus); } catch (error) { console.error("Error fetching followed content:", error); setFollowedStreamers([]); setFollowedCategories([]); } }; if (isLoggedIn) { fetchFollowedContent(); } }, [isLoggedIn]); return (
{activeTab === "streamers" && (
{followedStreamers.length > 0 ? (
{followedStreamers.map((streamer: any) => (
{`${streamer.username}'s { e.currentTarget.onerror = null; e.currentTarget.src = "/default-profile.png"; }} />

{streamer.username}

))}
) : (

No followed streamers.

)}
)} {activeTab === "categories" && (
{followedCategories.length > 0 ? (
{followedCategories.map((category) => (
navigate(`/category/${category.category_name}`)} > {category.category_name}
{category.category_name}
))}
) : (

No followed categories.

)}
)}
); }; export default Following;