import { useEffect, useState } from "react"; import { useNavigate, useParams } from "react-router-dom"; import axiosInstance from "../api/axiosInstance"; import ArtistView from "../components/userProfile/ArtistView"; import ListenerView from "../components/userProfile/ListenerView"; import type { MusicalEntity, Playlist, ArtistContribution, } from "../utils/types"; interface BaseUser { id: number; fullName: string; userType: string; followers: number; following: number; isFollowedByCurrentUser: boolean; } interface Artist extends BaseUser { userType: "ARTIST"; contributions: ArtistContribution[]; } interface Listener extends BaseUser { userType: "LISTENER"; likedEntities: MusicalEntity[]; createdPlaylists: Playlist[]; } type UserProfile = Artist | Listener; const UserDetail = () => { // user refers to the selected user NOT to the user from context const { userId } = useParams(); const navigate = useNavigate(); const [user, setUser] = useState(null); const [error, setError] = useState(null); const [isFollowing, setIsFollowing] = useState(false); const handleFollow = async () => { if (!user) return; setIsFollowing(true); try { const response = await axiosInstance.post( `/users/follow/${userId}`, ); } catch (err: any) { console.error(err.response?.data?.error); } finally { setIsFollowing(false); } }; useEffect(() => { const fetchUser = async () => { setError(null); try { const response = await axiosInstance.get(`/users/${userId}`); console.log(response.data); setUser(response.data); } catch (err: any) { const errorMessage = err.response?.data?.error || "Failed to fetch user"; setError(errorMessage); } }; fetchUser(); }, [userId]); if (error) { return (

Error

{error}

); } if (!user) return
Loading...
; return (
{user.fullName.charAt(0).toUpperCase()}

{user.fullName}

{user.userType}
{user.followers} Followers
{user.following} Following
{user.userType === "ARTIST" ? ( ) : ( )}
); }; export default UserDetail;