import { useState, useEffect } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; import { FiPlus, FiTerminal, FiHome } from 'react-icons/fi'; import { FaPuzzlePiece } from 'react-icons/fa'; import Layout from '../components/Layout.jsx'; import SidebarBrand from '../components/layout/SidebarBrand.jsx'; import SidebarUser from '../components/layout/SidebarUser.jsx'; import SidebarNavItem from '../components/layout/SidebarNavItem.jsx'; import usePageState from '../hooks/usePageState.js'; import { DEVELOPER_PAGES } from '../constants/pages.js'; import { DEVELOPER_KEYS } from '../constants/storageKeys.js'; import api from '../services/api.js'; import DevOverviewPage from './developer/DevOverviewPage.jsx'; import MySkillsPage from './developer/MySkillsPage.jsx'; import UploadSkillPage from './developer/UploadSkillPage.jsx'; import NewVersionPage from './developer/NewVersionPage.jsx'; import DevDocsPage from './developer/DevDocsPage.jsx'; import DevAccountPage from './developer/DevAccountPage.jsx'; import SkillEditorPage from './developer/SkillEditorPage.jsx'; import UpdateSkillInfoPage from './developer/UpdateSkillInfoPage.jsx'; import UploadVersionPage from './developer/UploadVersionPage.jsx'; const skillStatusMap = { dev: { text: '开发中', className: 'status-stopped' }, published: { text: '已上架', className: 'status-running' }, unlisting: { text: '下架审核中', className: 'status-warning' }, unlisted: { text: '已下架', className: 'status-stopped' } }; function DeveloperPage() { const location = useLocation(); const navigate = useNavigate(); // 使用 usePageState 管理页面状态 const { currentPage, setCurrentPage } = usePageState({ storageKey: DEVELOPER_KEYS.CURRENT_PAGE, defaultPage: 'overview', pageTitles: DEVELOPER_PAGES, }); // 保留额外的状态(currentSkillId 需要持久化到 localStorage) const [currentSkillId, setCurrentSkillId] = useState(() => { const saved = localStorage.getItem(DEVELOPER_KEYS.CURRENT_SKILL_ID); return saved ? JSON.parse(saved) : null; }); const [newVersionSkillName, setNewVersionSkillName] = useState(''); useEffect(() => { if (location.state?.fromHome) { setCurrentPage('overview'); setCurrentSkillId(null); navigate('.', { replace: true, state: {} }); } }, [location.state, navigate, setCurrentPage, setCurrentSkillId]); useEffect(() => { localStorage.setItem(DEVELOPER_KEYS.CURRENT_SKILL_ID, JSON.stringify(currentSkillId)); }, [DEVELOPER_KEYS.CURRENT_SKILL_ID, currentSkillId]); const switchPage = (pageId, data = {}) => { setCurrentPage(pageId); if (data.skillId !== undefined) { setCurrentSkillId(data.skillId); } }; const openSkillEditor = (skillId) => { setCurrentSkillId(skillId); setCurrentPage('skillEditor'); }; const createNewProject = () => { setCurrentPage('uploadSkill'); }; const openNewVersionPage = (skillName) => { setNewVersionSkillName(skillName); setCurrentPage('newVersion'); }; const openUpdateInfoPage = (skillId) => { setCurrentSkillId(skillId); setCurrentPage('updateInfo'); }; const handleBack = () => { setCurrentPage('mySkills'); setCurrentSkillId(null); }; const handleEditorBack = () => { setCurrentPage('skillEditor'); setNewVersionSkillName(''); }; const renderPage = () => { switch (currentPage) { case 'overview': return ; case 'mySkills': return ; case 'uploadSkill': return switchPage('mySkills')} />; case 'devDocs': return ; case 'devAccount': return ; case 'skillEditor': return ; case 'newVersion': return ; case 'updateInfo': return ; default: return
Page not found
; } }; const getPageTitle = () => { return DEVELOPER_PAGES[currentPage]?.title || ''; }; const sidebar = ( <>
{api.developer.getMySkills().map(skill => (
openSkillEditor(skill.id)} >
{skill.name}
{skillStatusMap[skill.status]?.text || skill.status}
))}
} label="总览" active={currentPage === 'overview'} onClick={() => switchPage('overview')} /> } label="我的技能" active={currentPage === 'mySkills'} onClick={() => switchPage('mySkills')} /> } label="开发文档" active={currentPage === 'devDocs'} onClick={() => switchPage('devDocs')} />
switchPage('devAccount')} /> ); return ( {renderPage()} ); } export default DeveloperPage;