| /* | |
| Copyright (C) 2025 QuantumNous | |
| This program is free software: you can redistribute it and/or modify | |
| it under the terms of the GNU Affero General Public License as | |
| published by the Free Software Foundation, either version 3 of the | |
| License, or (at your option) any later version. | |
| This program is distributed in the hope that it will be useful, | |
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| GNU Affero General Public License for more details. | |
| You should have received a copy of the GNU Affero General Public License | |
| along with this program. If not, see <https://www.gnu.org/licenses/>. | |
| For commercial licensing, please contact support@quantumnous.com | |
| */ | |
| import { useMemo } from 'react'; | |
| export const useNavigation = (t, docsLink, headerNavModules) => { | |
| const mainNavLinks = useMemo(() => { | |
| // 默认配置,如果没有传入配置则显示所有模块 | |
| const defaultModules = { | |
| home: true, | |
| console: true, | |
| pricing: true, | |
| docs: true, | |
| about: true, | |
| }; | |
| // 使用传入的配置或默认配置 | |
| const modules = headerNavModules || defaultModules; | |
| const allLinks = [ | |
| { | |
| text: t('首页'), | |
| itemKey: 'home', | |
| to: '/', | |
| }, | |
| { | |
| text: t('控制台'), | |
| itemKey: 'console', | |
| to: '/console', | |
| }, | |
| { | |
| text: t('模型广场'), | |
| itemKey: 'pricing', | |
| to: '/pricing', | |
| }, | |
| ...(docsLink | |
| ? [ | |
| { | |
| text: t('文档'), | |
| itemKey: 'docs', | |
| isExternal: true, | |
| externalLink: docsLink, | |
| }, | |
| ] | |
| : []), | |
| { | |
| text: t('关于'), | |
| itemKey: 'about', | |
| to: '/about', | |
| }, | |
| ]; | |
| // 根据配置过滤导航链接 | |
| return allLinks.filter((link) => { | |
| if (link.itemKey === 'docs') { | |
| return docsLink && modules.docs; | |
| } | |
| if (link.itemKey === 'pricing') { | |
| // 支持新的pricing配置格式 | |
| return typeof modules.pricing === 'object' | |
| ? modules.pricing.enabled | |
| : modules.pricing; | |
| } | |
| return modules[link.itemKey] === true; | |
| }); | |
| }, [t, docsLink, headerNavModules]); | |
| return { | |
| mainNavLinks, | |
| }; | |
| }; | |