import { useEffect, useState } from "react"; import { useParams, useNavigate } from "react-router-dom"; import ArtistView from "./ArtistView"; import ListenerView from "./ListenerView"; import axiosInstance from "../../api/axiosInstance"; import type { ArtistContributionDTO } from "../../types"; import type { MusicalEntityDTO } from "../../types"; import type { Playlist } from "../../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); 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;