import { useState, useEffect } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; import { FiPlus, FiTerminal } 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 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'; function DeveloperPage() { const location = useLocation(); const navigate = useNavigate(); // 使用 usePageState 管理页面状态 const { currentPage, setCurrentPage } = usePageState({ storageKey: DEVELOPER_KEYS.CURRENT_PAGE, defaultPage: 'mySkills', 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('mySkills'); 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 handleBack = () => { setCurrentPage('mySkills'); setCurrentSkillId(null); }; const handleNewVersionBack = () => { setCurrentPage('skillEditor'); setNewVersionSkillName(''); }; const renderPage = () => { switch (currentPage) { case 'mySkills': return ; case 'uploadSkill': return ; case 'devDocs': return ; case 'devAccount': return ; case 'skillEditor': return ; case 'newVersion': 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}
{skill.status === 'published' ? '已发布' : '草稿'}
))}
} label="我的技能" active={currentPage === 'mySkills'} onClick={() => switchPage('mySkills')} /> } label="开发文档" active={currentPage === 'devDocs'} onClick={() => switchPage('devDocs')} />
switchPage('devAccount')} /> ); return ( {renderPage()} ); } export default DeveloperPage;