mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 02:42:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import type { FC } from 'react'
 | |
| import React from 'react'
 | |
| import {
 | |
|   Bars3Icon,
 | |
|   PencilSquareIcon,
 | |
| } from '@heroicons/react/24/solid'
 | |
| import { useTranslation } from 'react-i18next'
 | |
| import AppIcon from '@/app/components/base/app-icon'
 | |
| import { ReplayIcon } from '@/app/components/app/chat/icon-component'
 | |
| import Tooltip from '@/app/components/base/tooltip'
 | |
| 
 | |
| export type IHeaderProps = {
 | |
|   title: string
 | |
|   customerIcon?: React.ReactNode
 | |
|   icon: string
 | |
|   icon_background: string
 | |
|   isMobile?: boolean
 | |
|   isEmbedScene?: boolean
 | |
|   onShowSideBar?: () => void
 | |
|   onCreateNewChat?: () => void
 | |
| }
 | |
| const Header: FC<IHeaderProps> = ({
 | |
|   title,
 | |
|   isMobile,
 | |
|   customerIcon,
 | |
|   icon,
 | |
|   icon_background,
 | |
|   isEmbedScene = false,
 | |
|   onShowSideBar,
 | |
|   onCreateNewChat,
 | |
| }) => {
 | |
|   const { t } = useTranslation()
 | |
|   if (!isMobile)
 | |
|     return null
 | |
| 
 | |
|   if (isEmbedScene) {
 | |
|     return (
 | |
|       <div
 | |
|         className={`
 | |
|           shrink-0 flex items-center justify-between h-14 px-4 bg-gray-100 
 | |
|           bg-gradient-to-r from-blue-600 to-sky-500
 | |
|         `}
 | |
|       >
 | |
|         <div className="flex items-center space-x-2">
 | |
|           {customerIcon || <AppIcon size="small" icon={icon} background={icon_background} />}
 | |
|           <div
 | |
|             className={'text-sm font-bold text-white'}
 | |
|           >
 | |
|             {title}
 | |
|           </div>
 | |
|         </div>
 | |
|         <Tooltip
 | |
|           selector={'embed-scene-restart-button'}
 | |
|           htmlContent={t('share.chat.resetChat')}
 | |
|           position='top'
 | |
|         >
 | |
|           <div className='flex cursor-pointer hover:rounded-lg hover:bg-black/5 w-8 h-8 items-center justify-center' onClick={() => {
 | |
|             onCreateNewChat?.()
 | |
|           }}>
 | |
|             <ReplayIcon className="h-4 w-4 text-sm font-bold text-white" />
 | |
|           </div>
 | |
|         </Tooltip>
 | |
|       </div>
 | |
|     )
 | |
|   }
 | |
| 
 | |
|   return (
 | |
|     <div className="shrink-0 flex items-center justify-between h-14 px-4 bg-gray-100">
 | |
|       <div
 | |
|         className='flex items-center justify-center h-8 w-8 cursor-pointer'
 | |
|         onClick={() => onShowSideBar?.()}
 | |
|       >
 | |
|         <Bars3Icon className="h-4 w-4 text-gray-500" />
 | |
|       </div>
 | |
|       <div className='flex items-center space-x-2'>
 | |
|         <AppIcon size="small" icon={icon} background={icon_background} />
 | |
|         <div className=" text-sm text-gray-800 font-bold">{title}</div>
 | |
|       </div>
 | |
|       <div className='flex items-center justify-center h-8 w-8 cursor-pointer'
 | |
|         onClick={() => onCreateNewChat?.()}
 | |
|       >
 | |
|         <PencilSquareIcon className="h-4 w-4 text-gray-500" />
 | |
|       </div>
 | |
|     </div>
 | |
|   )
 | |
| }
 | |
| 
 | |
| export default React.memo(Header)
 | 
