import '@_css/home-page-v2.css'; import React, {useEffect, useState} from 'react'; import {useNavigate} from 'react-router-dom'; import {fetchMostReservedThemes} from '@_api/theme/themeAPI'; import {DifficultyKoreanMap, mapThemeResponse, type ThemeInfoResponse} from '@_api/theme/themeTypes'; const HomePage: React.FC = () => { const [ranking, setRanking] = useState([]); const [selectedTheme, setSelectedTheme] = useState(null); const navigate = useNavigate(); useEffect(() => { const fetchData = async () => { try { const themeFetchCount = 10; const response = await fetchMostReservedThemes(themeFetchCount); setRanking(response.themes.map(mapThemeResponse)); } catch (err) { console.error('Error fetching ranking:', err); } }; fetchData(); }, []); const handleThemeClick = (theme: ThemeInfoResponse) => { setSelectedTheme(theme); }; const handleCloseModal = () => { setSelectedTheme(null); }; const handleReservationClick = (e: React.MouseEvent) => { e.stopPropagation(); if (selectedTheme) { navigate('/reservation', { state: { themeId: selectedTheme.id } }); } }; return (

인기 테마

{ranking.map(theme => (
handleThemeClick(theme)}> {theme.name}
{theme.name}
))}
{selectedTheme && (
e.stopPropagation()}> {selectedTheme.name}

{selectedTheme.name}

{selectedTheme.description}

난이도:{DifficultyKoreanMap[selectedTheme.difficulty]}

이용 가능 인원:{selectedTheme.minParticipants} ~ {selectedTheme.maxParticipants}명

1인당 요금:{selectedTheme.price.toLocaleString()}원

예상 시간:{selectedTheme.expectedMinutesFrom} ~ {selectedTheme.expectedMinutesTo}분

이용 가능 시간:{selectedTheme.availableMinutes}분

)}
); }; export default HomePage;