| 
									
										
										
										
											2023-08-15 13:35:47 +08:00
										 |  |  | 'use client' | 
					
						
							| 
									
										
										
										
											2024-05-30 16:15:38 +08:00
										 |  |  | import { useCallback, useEffect } from 'react' | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  | import Link from 'next/link' | 
					
						
							| 
									
										
										
										
											2024-05-30 16:15:38 +08:00
										 |  |  | import { useBoolean } from 'ahooks' | 
					
						
							| 
									
										
										
										
											2023-11-27 11:47:48 +08:00
										 |  |  | import { useSelectedLayoutSegment } from 'next/navigation' | 
					
						
							|  |  |  | import { Bars3Icon } from '@heroicons/react/20/solid' | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  | import AccountDropdown from './account-dropdown' | 
					
						
							| 
									
										
										
										
											2023-06-27 18:02:01 +08:00
										 |  |  | import AppNav from './app-nav' | 
					
						
							|  |  |  | import DatasetNav from './dataset-nav' | 
					
						
							| 
									
										
										
										
											2023-07-18 16:57:14 +08:00
										 |  |  | import EnvNav from './env-nav' | 
					
						
							| 
									
										
										
										
											2025-02-17 17:05:13 +08:00
										 |  |  | import PluginsNav from './plugins-nav' | 
					
						
							| 
									
										
										
										
											2023-07-18 16:57:14 +08:00
										 |  |  | import ExploreNav from './explore-nav' | 
					
						
							| 
									
										
										
										
											2024-01-23 19:31:56 +08:00
										 |  |  | import ToolsNav from './tools-nav' | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  | import { WorkspaceProvider } from '@/context/workspace-context' | 
					
						
							| 
									
										
										
										
											2025-02-17 17:05:13 +08:00
										 |  |  | import { useAppContext } from '@/context/app-context' | 
					
						
							| 
									
										
										
										
											2023-10-16 15:26:25 +08:00
										 |  |  | import LogoSite from '@/app/components/base/logo/logo-site' | 
					
						
							| 
									
										
										
										
											2025-02-17 17:05:13 +08:00
										 |  |  | import WorkplaceSelector from '@/app/components/header/account-dropdown/workplace-selector' | 
					
						
							| 
									
										
										
										
											2023-11-27 11:47:48 +08:00
										 |  |  | import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' | 
					
						
							| 
									
										
										
										
											2023-12-03 22:10:16 +08:00
										 |  |  | import { useProviderContext } from '@/context/provider-context' | 
					
						
							| 
									
										
										
										
											2024-05-30 16:15:38 +08:00
										 |  |  | import { useModalContext } from '@/context/modal-context' | 
					
						
							| 
									
										
										
										
											2025-02-20 14:31:56 +08:00
										 |  |  | import PlanBadge from './plan-badge' | 
					
						
							| 
									
										
										
										
											2025-03-06 10:25:18 +08:00
										 |  |  | import LicenseNav from './license-env' | 
					
						
							| 
									
										
										
										
											2025-02-20 14:31:56 +08:00
										 |  |  | import { Plan } from '../billing/type' | 
					
						
							| 
									
										
										
										
											2023-05-25 16:59:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  | const navClassName = `
 | 
					
						
							| 
									
										
										
										
											2024-01-04 14:51:26 +08:00
										 |  |  |   flex items-center relative mr-0 sm:mr-3 px-3 h-8 rounded-xl | 
					
						
							| 
									
										
										
										
											2023-06-27 18:02:01 +08:00
										 |  |  |   font-medium text-sm | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |   cursor-pointer | 
					
						
							|  |  |  | `
 | 
					
						
							| 
									
										
										
										
											2023-06-06 10:42:32 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-18 16:57:14 +08:00
										 |  |  | const Header = () => { | 
					
						
							| 
									
										
										
										
											2024-07-09 17:47:54 +08:00
										 |  |  |   const { isCurrentWorkspaceEditor, isCurrentWorkspaceDatasetOperator } = useAppContext() | 
					
						
							| 
									
										
										
										
											2023-12-03 22:10:16 +08:00
										 |  |  |   const selectedSegment = useSelectedLayoutSegment() | 
					
						
							| 
									
										
										
										
											2023-11-27 11:47:48 +08:00
										 |  |  |   const media = useBreakpoints() | 
					
						
							|  |  |  |   const isMobile = media === MediaType.mobile | 
					
						
							|  |  |  |   const [isShowNavMenu, { toggle, setFalse: hideNavMenu }] = useBoolean(false) | 
					
						
							| 
									
										
										
										
											2024-05-30 16:15:38 +08:00
										 |  |  |   const { enableBilling, plan } = useProviderContext() | 
					
						
							|  |  |  |   const { setShowPricingModal, setShowAccountSettingModal } = useModalContext() | 
					
						
							| 
									
										
										
										
											2025-02-20 14:31:56 +08:00
										 |  |  |   const isFreePlan = plan.type === Plan.sandbox | 
					
						
							| 
									
										
										
										
											2024-05-30 16:15:38 +08:00
										 |  |  |   const handlePlanClick = useCallback(() => { | 
					
						
							|  |  |  |     if (isFreePlan) | 
					
						
							|  |  |  |       setShowPricingModal() | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       setShowAccountSettingModal({ payload: 'billing' }) | 
					
						
							|  |  |  |   }, [isFreePlan, setShowAccountSettingModal, setShowPricingModal]) | 
					
						
							| 
									
										
										
										
											2023-11-27 11:47:48 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   useEffect(() => { | 
					
						
							|  |  |  |     hideNavMenu() | 
					
						
							|  |  |  |     // eslint-disable-next-line react-hooks/exhaustive-deps
 | 
					
						
							|  |  |  |   }, [selectedSegment]) | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |   return ( | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  |     <div className='flex flex-1 items-center justify-between bg-background-body px-4'> | 
					
						
							| 
									
										
										
										
											2023-12-03 22:10:16 +08:00
										 |  |  |       <div className='flex items-center'> | 
					
						
							|  |  |  |         {isMobile && <div | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  |           className='flex h-8 w-8 cursor-pointer items-center justify-center' | 
					
						
							| 
									
										
										
										
											2023-12-03 22:10:16 +08:00
										 |  |  |           onClick={toggle} | 
					
						
							|  |  |  |         > | 
					
						
							|  |  |  |           <Bars3Icon className="h-4 w-4 text-gray-500" /> | 
					
						
							|  |  |  |         </div>} | 
					
						
							| 
									
										
										
										
											2025-02-17 17:05:13 +08:00
										 |  |  |         { | 
					
						
							|  |  |  |           !isMobile | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  |           && <div className='flex w-64 shrink-0 items-center gap-1.5 self-stretch p-2 pl-3'> | 
					
						
							|  |  |  |             <Link href="/apps" className='flex h-8 w-8 shrink-0 items-center justify-center gap-2'> | 
					
						
							| 
									
										
										
										
											2025-02-17 17:05:13 +08:00
										 |  |  |               <LogoSite className='object-contain' /> | 
					
						
							|  |  |  |             </Link> | 
					
						
							|  |  |  |             <div className='font-light text-divider-deep'>/</div> | 
					
						
							|  |  |  |             <div className='flex items-center gap-0.5'> | 
					
						
							|  |  |  |               <WorkspaceProvider> | 
					
						
							|  |  |  |                 <WorkplaceSelector /> | 
					
						
							|  |  |  |               </WorkspaceProvider> | 
					
						
							| 
									
										
										
										
											2025-02-20 14:31:56 +08:00
										 |  |  |               {enableBilling ? <PlanBadge allowHover sandboxAsUpgrade plan={plan.type} onClick={handlePlanClick} /> : <LicenseNav />} | 
					
						
							| 
									
										
										
										
											2025-02-17 17:05:13 +08:00
										 |  |  |             </div> | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       </div > | 
					
						
							| 
									
										
										
										
											2023-12-03 22:10:16 +08:00
										 |  |  |       {isMobile && ( | 
					
						
							|  |  |  |         <div className='flex'> | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  |           <Link href="/apps" className='mr-4 flex items-center'> | 
					
						
							| 
									
										
										
										
											2023-12-03 22:10:16 +08:00
										 |  |  |             <LogoSite /> | 
					
						
							|  |  |  |           </Link> | 
					
						
							| 
									
										
										
										
											2025-02-17 17:05:13 +08:00
										 |  |  |           <div className='font-light text-divider-deep'>/</div> | 
					
						
							| 
									
										
										
										
											2025-02-20 14:31:56 +08:00
										 |  |  |           {enableBilling ? <PlanBadge allowHover sandboxAsUpgrade plan={plan.type} onClick={handlePlanClick} /> : <LicenseNav />} | 
					
						
							| 
									
										
										
										
											2025-02-17 17:05:13 +08:00
										 |  |  |         </div > | 
					
						
							| 
									
										
										
										
											2023-12-03 22:10:16 +08:00
										 |  |  |       )} | 
					
						
							| 
									
										
										
										
											2025-02-17 17:05:13 +08:00
										 |  |  |       { | 
					
						
							|  |  |  |         !isMobile && ( | 
					
						
							|  |  |  |           <div className='flex items-center'> | 
					
						
							|  |  |  |             {!isCurrentWorkspaceDatasetOperator && <ExploreNav className={navClassName} />} | 
					
						
							|  |  |  |             {!isCurrentWorkspaceDatasetOperator && <AppNav />} | 
					
						
							|  |  |  |             {(isCurrentWorkspaceEditor || isCurrentWorkspaceDatasetOperator) && <DatasetNav />} | 
					
						
							|  |  |  |             {!isCurrentWorkspaceDatasetOperator && <ToolsNav className={navClassName} />} | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  |       <div className='flex shrink-0 items-center'> | 
					
						
							| 
									
										
										
										
											2023-12-03 22:10:16 +08:00
										 |  |  |         <EnvNav /> | 
					
						
							| 
									
										
										
										
											2025-04-01 13:58:10 +08:00
										 |  |  |         <div className='mr-2'> | 
					
						
							| 
									
										
										
										
											2025-02-17 17:05:13 +08:00
										 |  |  |           <PluginsNav /> | 
					
						
							| 
									
										
										
										
											2023-11-27 11:47:48 +08:00
										 |  |  |         </div> | 
					
						
							| 
									
										
										
										
											2025-04-01 13:58:10 +08:00
										 |  |  |         <AccountDropdown /> | 
					
						
							| 
									
										
										
										
											2025-02-17 17:05:13 +08:00
										 |  |  |       </div> | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         (isMobile && isShowNavMenu) && ( | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  |           <div className='flex w-full flex-col gap-y-1 p-2'> | 
					
						
							| 
									
										
										
										
											2025-02-17 17:05:13 +08:00
										 |  |  |             {!isCurrentWorkspaceDatasetOperator && <ExploreNav className={navClassName} />} | 
					
						
							|  |  |  |             {!isCurrentWorkspaceDatasetOperator && <AppNav />} | 
					
						
							|  |  |  |             {(isCurrentWorkspaceEditor || isCurrentWorkspaceDatasetOperator) && <DatasetNav />} | 
					
						
							|  |  |  |             {!isCurrentWorkspaceDatasetOperator && <ToolsNav className={navClassName} />} | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     </div > | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |   ) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | export default Header |