From fc187d6998e818580aca23d7496dd457eb268a15 Mon Sep 17 00:00:00 2001 From: zxhlyh Date: Tue, 17 Jun 2025 17:37:06 +0800 Subject: [PATCH] chore: responsive header (#21115) --- .../workplace-selector/index.tsx | 19 +- web/app/components/header/app-nav/index.tsx | 4 +- .../components/header/dataset-nav/index.tsx | 3 +- web/app/components/header/env-nav/index.tsx | 10 +- .../components/header/explore-nav/index.tsx | 8 +- web/app/components/header/index.tsx | 124 ++++----- web/app/components/header/nav/index.tsx | 8 +- .../header/nav/nav-selector/index.tsx | 246 +++++++++--------- web/app/components/header/tools-nav/index.tsx | 8 +- 9 files changed, 211 insertions(+), 219 deletions(-) diff --git a/web/app/components/header/account-dropdown/workplace-selector/index.tsx b/web/app/components/header/account-dropdown/workplace-selector/index.tsx index 98668c61d2..f384cbc0bc 100644 --- a/web/app/components/header/account-dropdown/workplace-selector/index.tsx +++ b/web/app/components/header/account-dropdown/workplace-selector/index.tsx @@ -31,22 +31,22 @@ const WorkplaceSelector = () => { } return ( - + { ({ open }) => ( <> -
+
{currentWorkspace?.name[0]?.toLocaleUpperCase()}
-
-
{currentWorkspace?.name}
- +
+
{currentWorkspace?.name}
+
{ leaveTo="transform opacity-0 scale-95" > @@ -73,7 +74,7 @@ const WorkplaceSelector = () => { { workspaces.map(workspace => (
handleSwitchWorkspace(workspace.id)}> -
+
{workspace?.name[0]?.toLocaleUpperCase()}
{workspace.name}
diff --git a/web/app/components/header/app-nav/index.tsx b/web/app/components/header/app-nav/index.tsx index 3b902811fc..4934ed3105 100644 --- a/web/app/components/header/app-nav/index.tsx +++ b/web/app/components/header/app-nav/index.tsx @@ -96,7 +96,7 @@ const AppNav = () => { link, } }) - setNavItems(navItems) + setNavItems(navItems as any) } }, [appsData, isCurrentWorkspaceEditor, setNavItems]) @@ -122,7 +122,7 @@ const AppNav = () => { text={t('common.menus.apps')} activeSegment={['apps', 'app']} link='/apps' - curNav={appDetail} + curNav={appDetail as any} navs={navItems} createText={t('common.menus.newApp')} onCreate={openModal} diff --git a/web/app/components/header/dataset-nav/index.tsx b/web/app/components/header/dataset-nav/index.tsx index 4894a62484..85223f9f37 100644 --- a/web/app/components/header/dataset-nav/index.tsx +++ b/web/app/components/header/dataset-nav/index.tsx @@ -48,7 +48,7 @@ const DatasetNav = () => { text={t('common.menus.datasets')} activeSegment='datasets' link='/datasets' - curNav={currentDataset as Omit} + curNav={currentDataset as any} navs={datasetItems.map(dataset => ({ id: dataset.id, name: dataset.name, @@ -59,6 +59,7 @@ const DatasetNav = () => { createText={t('common.menus.newDataset')} onCreate={() => router.push(`${basePath}/datasets/create`)} onLoadmore={handleLoadmore} + isApp={false} /> ) } diff --git a/web/app/components/header/env-nav/index.tsx b/web/app/components/header/env-nav/index.tsx index cec933a4c5..3f0b0f01dd 100644 --- a/web/app/components/header/env-nav/index.tsx +++ b/web/app/components/header/env-nav/index.tsx @@ -20,22 +20,22 @@ const EnvNav = () => { return (
{ langeniusVersionInfo.current_env === 'TESTING' && ( <> - - {t('common.environment.testing')} + +
{t('common.environment.testing')}
) } { langeniusVersionInfo.current_env === 'DEVELOPMENT' && ( <> - - {t('common.environment.development')} + +
{t('common.environment.development')}
) } diff --git a/web/app/components/header/explore-nav/index.tsx b/web/app/components/header/explore-nav/index.tsx index b6ebf5d1a9..6896722a84 100644 --- a/web/app/components/header/explore-nav/index.tsx +++ b/web/app/components/header/explore-nav/index.tsx @@ -27,10 +27,12 @@ const ExploreNav = ({ )}> { activated - ? - : + ? + : } - {t('common.menus.explore')} +
+ {t('common.menus.explore')} +
) } diff --git a/web/app/components/header/index.tsx b/web/app/components/header/index.tsx index a9c26e0070..48973e50a8 100644 --- a/web/app/components/header/index.tsx +++ b/web/app/components/header/index.tsx @@ -1,9 +1,6 @@ 'use client' -import { useCallback, useEffect } from 'react' +import { useCallback } from 'react' import Link from 'next/link' -import { useBoolean } from 'ahooks' -import { useSelectedLayoutSegment } from 'next/navigation' -import { Bars3Icon } from '@heroicons/react/20/solid' import AccountDropdown from './account-dropdown' import AppNav from './app-nav' import DatasetNav from './dataset-nav' @@ -24,17 +21,15 @@ import { Plan } from '../billing/type' import { useGlobalPublicStore } from '@/context/global-public-context' const navClassName = ` - flex items-center relative mr-0 sm:mr-3 px-3 h-8 rounded-xl + flex items-center relative px-3 h-8 rounded-xl font-medium text-sm cursor-pointer ` const Header = () => { const { isCurrentWorkspaceEditor, isCurrentWorkspaceDatasetOperator } = useAppContext() - const selectedSegment = useSelectedLayoutSegment() const media = useBreakpoints() const isMobile = media === MediaType.mobile - const [isShowNavMenu, { toggle, setFalse: hideNavMenu }] = useBoolean(false) const { enableBilling, plan } = useProviderContext() const { setShowPricingModal, setShowAccountSettingModal } = useModalContext() const systemFeatures = useGlobalPublicStore(s => s.systemFeatures) @@ -46,23 +41,12 @@ const Header = () => { setShowAccountSettingModal({ payload: 'billing' }) }, [isFreePlan, setShowAccountSettingModal, setShowPricingModal]) - useEffect(() => { - hideNavMenu() - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [selectedSegment]) - return ( -
-
- {isMobile &&
- -
} - { - !isMobile - &&
- + if (isMobile) { + return ( +
+
+
+ {systemFeatures.branding.enabled && systemFeatures.branding.workspace_logo ? { /> : } -
/
-
- - - - {enableBilling ? : } +
/
+ + + + {enableBilling ? : } +
+
+
+
+
- } -
- {isMobile && ( -
- - {systemFeatures.branding.enabled && systemFeatures.branding.workspace_logo - ? logo - : } - -
/
- {enableBilling ? : } -
- )} - { - !isMobile && ( -
- {!isCurrentWorkspaceDatasetOperator && } - {!isCurrentWorkspaceDatasetOperator && } - {(isCurrentWorkspaceEditor || isCurrentWorkspaceDatasetOperator) && } - {!isCurrentWorkspaceDatasetOperator && } -
- ) - } -
+
+
+ {!isCurrentWorkspaceDatasetOperator && } + {!isCurrentWorkspaceDatasetOperator && } + {(isCurrentWorkspaceEditor || isCurrentWorkspaceDatasetOperator) && } + {!isCurrentWorkspaceDatasetOperator && } +
+
+ ) + } + + return ( +
+
+ + {systemFeatures.branding.enabled && systemFeatures.branding.workspace_logo + ? logo + : } + +
/
+ + + + {enableBilling ? : } +
+
+ {!isCurrentWorkspaceDatasetOperator && } + {!isCurrentWorkspaceDatasetOperator && } + {(isCurrentWorkspaceEditor || isCurrentWorkspaceDatasetOperator) && } + {!isCurrentWorkspaceDatasetOperator && } +
+
- { - (isMobile && isShowNavMenu) && ( -
- {!isCurrentWorkspaceDatasetOperator && } - {!isCurrentWorkspaceDatasetOperator && } - {(isCurrentWorkspaceEditor || isCurrentWorkspaceDatasetOperator) && } - {!isCurrentWorkspaceDatasetOperator && } -
- ) - } -
+
) } export default Header diff --git a/web/app/components/header/nav/index.tsx b/web/app/components/header/nav/index.tsx index 293c66a7b0..dc68b712cb 100644 --- a/web/app/components/header/nav/index.tsx +++ b/web/app/components/header/nav/index.tsx @@ -46,7 +46,7 @@ const Nav = ({ return (
@@ -61,7 +61,7 @@ const Nav = ({ onMouseEnter={() => setHovered(true)} onMouseLeave={() => setHovered(false)} > -
+
{ (hovered && curNav) ? @@ -70,7 +70,9 @@ const Nav = ({ : icon }
- {text} +
+ {text} +
{ diff --git a/web/app/components/header/nav/nav-selector/index.tsx b/web/app/components/header/nav/nav-selector/index.tsx index 473abf03c1..77cf348da2 100644 --- a/web/app/components/header/nav/nav-selector/index.tsx +++ b/web/app/components/header/nav/nav-selector/index.tsx @@ -53,136 +53,134 @@ const NavSelector = ({ curNav, navs, createText, isApp, onCreate, onLoadmore }: }, 50), []) return ( -
- - {({ open }) => ( - <> - -
{curNav?.name}
-
- -
- { - navs.map(nav => ( - -
{ - if (curNav?.id === nav.id) - return - setAppDetail() - router.push(nav.link) - }} title={nav.name}> -
- - {!!nav.mode && ( - - {nav.mode === 'advanced-chat' && ( - - )} - {nav.mode === 'agent-chat' && ( - - )} - {nav.mode === 'chat' && ( - - )} - {nav.mode === 'completion' && ( - - )} - {nav.mode === 'workflow' && ( - - )} - - )} -
-
- {nav.name} -
+ + {({ open }) => ( + <> + +
{curNav?.name}
+
+ +
+ { + navs.map(nav => ( + +
{ + if (curNav?.id === nav.id) + return + setAppDetail() + router.push(nav.link) + }} title={nav.name}> +
+ + {!!nav.mode && ( + + {nav.mode === 'advanced-chat' && ( + + )} + {nav.mode === 'agent-chat' && ( + + )} + {nav.mode === 'chat' && ( + + )} + {nav.mode === 'completion' && ( + + )} + {nav.mode === 'workflow' && ( + + )} + + )} +
+
+ {nav.name}
- - )) - } -
- {!isApp && isCurrentWorkspaceEditor && ( - -
onCreate('')} className={cn( - 'flex cursor-pointer items-center gap-2 rounded-lg px-3 py-[6px] hover:bg-state-base-hover ', - )}> -
-
-
{createText}
+ + )) + } +
+ {!isApp && isCurrentWorkspaceEditor && ( + +
onCreate('')} className={cn( + 'flex cursor-pointer items-center gap-2 rounded-lg px-3 py-[6px] hover:bg-state-base-hover ', + )}> +
+
- - )} - {isApp && isCurrentWorkspaceEditor && ( - - {({ open }) => ( - <> - -
-
- -
-
{createText}
- +
{createText}
+
+ + )} + {isApp && isCurrentWorkspaceEditor && ( + + {({ open }) => ( + <> + +
+
+
- - - -
-
onCreate('blank')}> - - {t('app.newApp.startFromBlank')} -
-
onCreate('template')}> - - {t('app.newApp.startFromTemplate')} -
+
{createText}
+ +
+ + + +
+
onCreate('blank')}> + + {t('app.newApp.startFromBlank')}
-
-
onCreate('dsl')}> - - {t('app.importDSL')} -
+
onCreate('template')}> + + {t('app.newApp.startFromTemplate')}
- - - - )} -
- )} - - - )} -
-
+
+
+
onCreate('dsl')}> + + {t('app.importDSL')} +
+
+
+ + + )} +
+ )} + + + )} +
) } diff --git a/web/app/components/header/tools-nav/index.tsx b/web/app/components/header/tools-nav/index.tsx index b87398708c..bc9351cf70 100644 --- a/web/app/components/header/tools-nav/index.tsx +++ b/web/app/components/header/tools-nav/index.tsx @@ -28,10 +28,12 @@ const ToolsNav = ({ )}> { activated - ? - : + ? + : } - {t('common.menus.tools')} +
+ {t('common.menus.tools')} +
) }