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 = () => { } type="text" - onClick={() => navigate(`/mcp-servers/settings`, { state: { server } })} + onClick={() => navigate(`settings`, { state: { server } })} /> diff --git a/src/renderer/src/pages/mcp-servers/McpSettingsNavbar.tsx b/src/renderer/src/pages/mcp-servers/McpSettingsNavbar.tsx index 363a4baea..dff0a6f38 100644 --- a/src/renderer/src/pages/mcp-servers/McpSettingsNavbar.tsx +++ b/src/renderer/src/pages/mcp-servers/McpSettingsNavbar.tsx @@ -75,7 +75,7 @@ export const McpSettingsNavbar = () => { navigate('/mcp-servers/npx-search')} + onClick={() => navigate('npx-search')} icon={} className="nodrag" style={{ fontSize: 13, height: 28, borderRadius: 20 }}> diff --git a/src/renderer/src/pages/mcp-servers/index.tsx b/src/renderer/src/pages/mcp-servers/index.tsx index 8c53a5acd..252e24096 100644 --- a/src/renderer/src/pages/mcp-servers/index.tsx +++ b/src/renderer/src/pages/mcp-servers/index.tsx @@ -1,11 +1,10 @@ import { ArrowLeftOutlined } from '@ant-design/icons' -import { NavbarCenter, NavbarMain } from '@renderer/components/app/Navbar' import { HStack } from '@renderer/components/Layout' import { useTheme } from '@renderer/context/ThemeProvider' import { SettingContainer } from '@renderer/pages/settings' import { Button } from 'antd' import { FC } from 'react' -import { useTranslation } from 'react-i18next' +// import { useTranslation } from 'react-i18next' import { Route, Routes, useLocation } from 'react-router' import { Link } from 'react-router-dom' import styled from 'styled-components' @@ -18,31 +17,32 @@ import NpxSearch from './NpxSearch' const McpServersPage: FC = () => { const { theme } = useTheme() - const { t } = useTranslation() + // const { t } = useTranslation() const location = useLocation() const pathname = location.pathname - - const isHome = pathname === '/mcp-servers' + const isHome = pathname.includes('*') return ( - - - - {t('common.mcp')} - {!isHome && ( - - } shape="circle" size="small" className="nodrag" /> - - )} - - - {pathname.includes('/mcp-servers') && } - + {/* */} + {/* */} + + + {/* {t('common.mcp')} */} + {!isHome && ( + + } shape="circle" size="small" className="nodrag" /> + + )} + + {/* */} + + + {/* */} - } /> + } /> } /> = ({ Options }) => { return ( - + {/* {t('paintings.title')} {isMac && ( @@ -794,7 +792,7 @@ const AihubmixPage: FC<{ Options: string[] }> = ({ Options }) => { )} - + */} 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')} - } - onClick={() => setHistoryDrawerVisible(!historyDrawerVisible)} - /> - - + {/* */} + {/* */} + {/* {t('translate.title')} */} + } + onClick={() => setHistoryDrawerVisible(!historyDrawerVisible)} + /> + {/* */} + {/* */} diff --git a/src/renderer/src/types/cherryStore.ts b/src/renderer/src/types/cherryStore.ts index b3965526a..f8b9aa4db 100644 --- a/src/renderer/src/types/cherryStore.ts +++ b/src/renderer/src/types/cherryStore.ts @@ -4,7 +4,10 @@ export enum CherryStoreType { KNOWLEDGE = 'Knowledge', MCP_SERVER = 'MCP-Server', MODEL_PROVIDER = 'Model-Provider', - AGENT = 'Agent' + AGENT = 'Agent', + TRANSLATE = 'Translate', + PAINTINGS = 'Paintings', + FILES = 'Files' } export interface CherryStoreBaseItem { id: string