import { Box, Typography, Card, CardContent, Grid, Stack, Checkbox, Button } from '@mui/material' import { useEffect, useState } from 'react' import { useNavigate, useParams } from 'react-router-dom' import api from '../lib/api' interface Character { id: number name: string server: string } interface Homework { id: number title: string reset_type: string clear_count: number complete_cnt: number } export default function FriendCharacterDashboard() { const { friend_id } = useParams() const [characters, setCharacters] = useState([]) const [homeworks, setHomeworks] = useState>({}) const navigate = useNavigate() useEffect(() => { const fetchData = async () => { try { const res = await api.get(`/friends/${friend_id}/characters`) setCharacters(res.data) const hwResults = await Promise.all( res.data.map((char: Character) => api .get(`/friends/${friend_id}/characters/${char.id}/homeworks`) .then(r => ({ id: char.id, data: r.data })) ) ) const map: Record = {} hwResults.forEach(item => { map[item.id] = item.data }) setHomeworks(map) } catch (err) { console.error('친구 대시보드 데이터를 불러오는 데 실패했습니다.', err) } } fetchData() }, [friend_id]) return ( 친구 캐릭터 보기 {characters.map(char => ( {char.server} : {char.name} {(homeworks[char.id] || []).map(hw => ( {hw.title} ({hw.clear_count}회) {Array.from({ length: hw.clear_count }).map((_, idx) => ( ))} ))} ))} ) }