maplestory/frontend/src/features/admin/pc/AdminFeaturePage.jsx
caadiq 444cf8cf85 구조 개편 3단계: features/admin/pc/ + pages/pc/Home.jsx
- features/admin/* → features/admin/pc/* (AdminLayout, AdminHome,
  AdminImages, AdminMenuForm, AdminBoss, AdminFeaturePage, components/)
- pages/Home.jsx → pages/pc/Home.jsx
- App.jsx import path 업데이트

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 11:26:52 +09:00

63 lines
2.2 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Suspense } from 'react'
import { useParams, Link } from 'react-router-dom'
import { useQuery } from '@tanstack/react-query'
import { getAdminComponent } from '../../registry'
import { api } from '../../../api/client'
export default function AdminFeaturePage() {
const { slug } = useParams()
const Component = getAdminComponent(slug)
// 메뉴 정보 조회 (없는 기능 안내용)
const { data: menus = [] } = useQuery({
queryKey: ['admin', 'menus'],
queryFn: () => api('/api/admin/menus').catch(() => []),
})
const menu = menus.find((m) => (m.url || '').replace(/^\/+/, '').split('/')[0] === slug)
if (!Component) {
return (
<div className="space-y-4 max-w-5xl mx-auto pt-6">
{menu && (
<div>
<h2 className="text-lg font-medium">{menu.title}</h2>
<p className="text-sm mt-0.5" style={{ color: 'var(--text-dim)' }}>{menu.description}</p>
</div>
)}
<div
className="rounded-2xl border border-dashed p-12 text-center"
style={{
borderColor: 'var(--dashed-border)',
background: 'var(--skeleton-bg)',
}}
>
<div className="text-4xl mb-3 opacity-30">🛠</div>
<p style={{ color: 'var(--text-muted)' }}> 기능에는 관리 페이지가 없습니다</p>
<p className="text-xs mt-2 font-mono" style={{ color: 'var(--text-dim)' }}>
features/{slug}/{slug.split('-').map((s) => s[0].toUpperCase() + s.slice(1)).join('')}Admin.jsx
</p>
<Link
to={`/admin/menus/${menu?.id || ''}`}
className="inline-block mt-4 text-xs hover:text-[var(--accent-hover-text)]"
style={{ color: 'var(--accent)' }}
>
메뉴 정보 편집
</Link>
</div>
</div>
)
}
return (
<Suspense fallback={
<div className="flex items-center justify-center pt-20">
<div
className="w-6 h-6 border-2 border-t-transparent rounded-full animate-spin"
style={{ borderColor: 'var(--accent)', borderTopColor: 'transparent' }}
/>
</div>
}>
<Component />
</Suspense>
)
}