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 { ArtistContributionDTO, MusicalEntityDTO, Playlist, } from "../utils/types"; interface User { id: number; username: string; fullName: string; userType: string; followers: number; following: number; isFollowedByCurrentUser: boolean; musicalEntities?: { contributions: ArtistContributionDTO[]; }; likes?: { likedEntities: MusicalEntityDTO[]; }; createdPlaylists?: Playlist[]; } 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}`, ); setUser(response.data); } 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}`); 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" && user.musicalEntities?.contributions && ( )} {user.userType === "LISTENER" && user.likes?.likedEntities && ( )}
); }; export default UserDetail;