import React, {useEffect, useState} from 'react'; import {useLocation, useNavigate} from 'react-router-dom'; import {fetchAdminThemes} from '@_api/theme/themeAPI'; import type {AdminThemeSummaryRetrieveResponse} from '@_api/theme/themeTypes'; import {isLoginRequiredError} from '@_api/apiClient'; import '@_css/admin-theme-page.css'; const AdminThemePage: React.FC = () => { const [themes, setThemes] = useState([]); const navigate = useNavigate(); const location = useLocation(); const handleError = (err: any) => { if (isLoginRequiredError(err)) { alert('로그인이 필요해요.'); navigate('/admin/login', { state: { from: location } }); } else { const message = err.response?.data?.message || '알 수 없는 오류가 발생했습니다.'; alert(message); console.error(err); } }; useEffect(() => { const fetchData = async () => { try { const response = await fetchAdminThemes(); setThemes(response.themes); } catch (error) { handleError(error); } }; fetchData(); }, []); const handleAddClick = () => { navigate('/admin/theme/edit/new'); }; const handleManageClick = (themeId: string) => { navigate(`/admin/theme/edit/${themeId}`); }; return (

테마 관리

{themes.map(theme => ( ))}
이름 난이도 1인당 요금 공개여부
{theme.name} {theme.difficulty} {theme.price.toLocaleString()}원 {theme.isActive ? '공개' : '비공개'}
); }; export default AdminThemePage;