diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index cca1fa1cc..c99e29b65 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -14,13 +14,8 @@ import StyleSheetManager from './context/StyleSheetManager' import { ThemeProvider } from './context/ThemeProvider' import NavigationHandler from './handler/NavigationHandler' import DiscoverPage from './pages/discover' -import FilesPage from './pages/files/FilesPage' import HomePage from './pages/home/HomePage' -import KnowledgePage from './pages/knowledge/KnowledgePage' -import McpServersPage from './pages/mcp-servers' -import PaintingsRoutePage from './pages/paintings/PaintingsRoutePage' import SettingsPage from './pages/settings/SettingsPage' -import TranslatePage from './pages/translate/TranslatePage' function App(): React.ReactElement { return ( @@ -38,12 +33,12 @@ function App(): React.ReactElement { } /> {/* } /> */} - } /> - } /> - } /> - } /> + {/* } /> */} + {/* } /> */} + {/* } /> */} + {/* } /> */} {/* } /> */} - } /> + {/* } /> */} } /> } /> diff --git a/src/renderer/src/entryPoint.tsx b/src/renderer/src/entryPoint.tsx index fc5769da9..ad7b21377 100644 --- a/src/renderer/src/entryPoint.tsx +++ b/src/renderer/src/entryPoint.tsx @@ -1,6 +1,6 @@ +import './assets/styles/tailwind.css' import './assets/styles/index.scss' import '@ant-design/v5-patch-for-react-19' -import './assets/styles/tailwind.css' import { createRoot } from 'react-dom/client' diff --git a/src/renderer/src/pages/discover/components/DiscoverContent.tsx b/src/renderer/src/pages/discover/components/DiscoverContent.tsx index b905e1bc5..91e9d324f 100644 --- a/src/renderer/src/pages/discover/components/DiscoverContent.tsx +++ b/src/renderer/src/pages/discover/components/DiscoverContent.tsx @@ -1,10 +1,9 @@ import { Category } from '@renderer/types/cherryStore' -import React from 'react' +import React, { Suspense } from 'react' import { Navigate, Route, Routes, useLocation } from 'react-router-dom' // 实际的 AgentsPage 组件 - 请确保路径正确 -import AgentsPage from '../../agents/AgentsPage' -import AppsPage from '../../apps/AppsPage' +import { discoverRouters } from '../routers' // import AssistantDetailsPage from '../../agents/AssistantDetailsPage'; // 示例详情页 // 其他分类的页面组件 (如果需要) @@ -32,14 +31,16 @@ const DiscoverContent: React.FC = ({ activeTabId, currentC } return ( - - {/* Path for Assistant category */} - } /> - {/* Path for Mini-App category */} - } /> + Loading...}> + + {discoverRouters.map((_Route) => { + if (!_Route.component) return null + return } /> + })} - Discover Feature Not Found at {location.pathname}} /> - + Discover Feature Not Found at {location.pathname}} /> + + ) } diff --git a/src/renderer/src/pages/discover/hooks/useDiscoverCategories.ts b/src/renderer/src/pages/discover/hooks/useDiscoverCategories.ts index 6dcc7b4ee..d3a55eeb9 100644 --- a/src/renderer/src/pages/discover/hooks/useDiscoverCategories.ts +++ b/src/renderer/src/pages/discover/hooks/useDiscoverCategories.ts @@ -1,7 +1,9 @@ -import { Category, CherryStoreType } from '@renderer/types/cherryStore' +import { Category } from '@renderer/types/cherryStore' import { useEffect, useMemo, useState } from 'react' import { useLocation, useNavigate } from 'react-router-dom' +import { discoverRouters } from '../routers' + // Extended Category type for internal use in hook, including path and sidebar flag // Export this interface so other files can import it export interface InternalCategory extends Category { @@ -10,23 +12,14 @@ export interface InternalCategory extends Category { } // Initial category data with path and hasSidebar -const initialCategories: InternalCategory[] = [ - { - id: CherryStoreType.ASSISTANT, - title: 'Assistants', - path: 'assistant', - hasSidebar: false, - items: [] - }, - { - id: CherryStoreType.MINI_APP, - title: 'Mini Apps', - path: 'mini-app', - hasSidebar: false, - items: [] - } - // Add more categories as needed -] +const initialCategories: InternalCategory[] = discoverRouters.map((router) => ({ + id: router.id, + title: router.title, + path: router.path, + hasSidebar: !router.component, + // 目前没有需要二级分类的分类 + items: [] +})) // Helper to find category by path const findCategoryByPath = (path: string | undefined): InternalCategory | undefined => diff --git a/src/renderer/src/pages/discover/routers.ts b/src/renderer/src/pages/discover/routers.ts new file mode 100644 index 000000000..ec09ea3cc --- /dev/null +++ b/src/renderer/src/pages/discover/routers.ts @@ -0,0 +1,44 @@ +import i18n from '@renderer/i18n' +import { CherryStoreType } from '@renderer/types/cherryStore' +import { lazy } from 'react' + +export const discoverRouters = [ + { + id: CherryStoreType.ASSISTANT, + title: i18n.t('assistants.title'), + path: 'assistant', + component: lazy(() => import('../agents/AgentsPage')) + }, + { + id: CherryStoreType.MINI_APP, + title: i18n.t('minapp.title'), + path: 'mini-app', + component: lazy(() => import('../apps/AppsPage')) + }, + { + id: CherryStoreType.TRANSLATE, + title: i18n.t('translate.title'), + path: 'translate', + component: lazy(() => import('../translate/TranslatePage')) + }, + { + id: CherryStoreType.FILES, + title: i18n.t('files.title'), + path: 'files', + component: lazy(() => import('../files/FilesPage')) + }, + { + id: CherryStoreType.PAINTINGS, + title: i18n.t('paintings.title'), + path: 'paintings/*', + isPrefix: true, + component: lazy(() => import('../paintings/PaintingsRoutePage')) + }, + { + id: CherryStoreType.MCP_SERVER, + title: i18n.t('common.mcp'), + path: 'mcp-servers/*', + isPrefix: true, + component: lazy(() => import('../mcp-servers')) + } +] diff --git a/src/renderer/src/pages/files/FilesPage.tsx b/src/renderer/src/pages/files/FilesPage.tsx index fa4b220e4..d615acb1c 100644 --- a/src/renderer/src/pages/files/FilesPage.tsx +++ b/src/renderer/src/pages/files/FilesPage.tsx @@ -5,7 +5,6 @@ import { SortAscendingOutlined, SortDescendingOutlined } from '@ant-design/icons' -import { NavbarCenter, NavbarMain } from '@renderer/components/app/Navbar' import ListItem from '@renderer/components/ListItem' import TextEditPopup from '@renderer/components/Popups/TextEditPopup' import Logger from '@renderer/config/logger' @@ -207,9 +206,9 @@ const FilesPage: FC = () => { return ( - + {/* {t('files.title')} - + */} {menuItems.map((item) => ( diff --git a/src/renderer/src/pages/mcp-servers/InstallNpxUv.tsx b/src/renderer/src/pages/mcp-servers/InstallNpxUv.tsx index e0d56e910..169835785 100644 --- a/src/renderer/src/pages/mcp-servers/InstallNpxUv.tsx +++ b/src/renderer/src/pages/mcp-servers/InstallNpxUv.tsx @@ -81,7 +81,7 @@ const InstallNpxUv: FC = ({ mini = false }) => { icon={installed ? : } className="nodrag" color={installed ? 'green' : 'danger'} - onClick={() => navigate('/mcp-servers/mcp-install')} + onClick={() => navigate('mcp-install')} /> ) } diff --git a/src/renderer/src/pages/mcp-servers/McpServersList.tsx b/src/renderer/src/pages/mcp-servers/McpServersList.tsx index ea73868dc..588dcc4e8 100644 --- a/src/renderer/src/pages/mcp-servers/McpServersList.tsx +++ b/src/renderer/src/pages/mcp-servers/McpServersList.tsx @@ -36,7 +36,7 @@ const McpServersList: FC = () => { isActive: false } addMCPServer(newServer) - navigate(`/mcp-servers/settings`, { state: { server: newServer } }) + navigate(`settings`, { state: { server: newServer } }) window.message.success({ content: t('settings.mcp.addSuccess'), key: 'mcp-list' }) }, [addMCPServer, navigate, t]) @@ -119,7 +119,7 @@ const McpServersList: FC = () => { {(server: MCPServer) => ( - navigate(`/mcp-servers/settings`, { state: { server } })}> + navigate(`settings`, { state: { server } })}> {server.logoUrl && } @@ -148,7 +148,7 @@ const McpServersList: FC = () => { )} - + */} diff --git a/src/renderer/src/pages/translate/TranslatePage.tsx b/src/renderer/src/pages/translate/TranslatePage.tsx index dbce87148..ac9ddf1fe 100644 --- a/src/renderer/src/pages/translate/TranslatePage.tsx +++ b/src/renderer/src/pages/translate/TranslatePage.tsx @@ -1,5 +1,4 @@ import { CheckOutlined, DeleteOutlined, HistoryOutlined, SendOutlined } from '@ant-design/icons' -import { NavbarCenter, NavbarMain } from '@renderer/components/app/Navbar' import CopyIcon from '@renderer/components/Icons/CopyIcon' import { HStack } from '@renderer/components/Layout' import { isEmbeddingModel } from '@renderer/config/models' @@ -431,19 +430,19 @@ const TranslatePage: FC = () => { return ( - - - {t('translate.title')} -