import { useEffect, useState } from "react"; import { useParams, useNavigate } from "react-router-dom"; import ArtistView from "./ArtistView"; import ListenerView from "./ListenerView"; interface MusicalEntityDTO { id: number; title: string; genre: string; type: string; } interface ArtistContributionDTO { musicalEntityId: number; title: string; role: string; entityType: string; } interface Playlist { id: number; name: string; cover: string; creatorName: string; } interface User { id: number; username: string; fullName: string; userType: string; followers: number; following: number; musicalEntities?: { contributions: ArtistContributionDTO[]; }; likes?: { likedEntities: MusicalEntityDTO[]; }; createdPlaylists?: Playlist[]; } const UserDetail = () => { 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 fetch(`http://localhost:8080/users/${userId}`); if (!response.ok) { const errorData = await response.json(); throw new Error(errorData.error || "Failed to fetch user"); } const data = await response.json(); setUser(data); } catch (err: any) { setError(err.message); } }; 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;