| import type { FC } from 'react' | import type { FC } from 'react' | ||||
| import React from 'react' | import React from 'react' | ||||
| import { | |||||
| Bars3Icon, | |||||
| PencilSquareIcon, | |||||
| } from '@heroicons/react/24/solid' | |||||
| import AppIcon from '@/app/components/base/app-icon' | import AppIcon from '@/app/components/base/app-icon' | ||||
| export type IHeaderProps = { | export type IHeaderProps = { | ||||
| title: string | title: string | ||||
| customerIcon?: React.ReactNode | customerIcon?: React.ReactNode | ||||
| icon_background: string | icon_background: string | ||||
| isMobile?: boolean | isMobile?: boolean | ||||
| isEmbedScene?: boolean | isEmbedScene?: boolean | ||||
| onShowSideBar?: () => void | |||||
| onCreateNewChat?: () => void | |||||
| } | } | ||||
| const Header: FC<IHeaderProps> = ({ | const Header: FC<IHeaderProps> = ({ | ||||
| title, | title, | ||||
| icon, | icon, | ||||
| icon_background, | icon_background, | ||||
| isEmbedScene = false, | isEmbedScene = false, | ||||
| onShowSideBar, | |||||
| onCreateNewChat, | |||||
| }) => { | }) => { | ||||
| return !isMobile | |||||
| ? null | |||||
| : ( | |||||
| if (!isMobile) | |||||
| return null | |||||
| if (isEmbedScene) { | |||||
| return ( | |||||
| <div | <div | ||||
| className={`shrink-0 flex items-center justify-between h-12 px-3 bg-gray-100 ${ | |||||
| isEmbedScene ? 'bg-gradient-to-r from-blue-600 to-sky-500' : '' | |||||
| }`} | |||||
| className={` | |||||
| shrink-0 flex items-center justify-between h-12 px-3 bg-gray-100 | |||||
| bg-gradient-to-r from-blue-600 to-sky-500 | |||||
| `} | |||||
| > | > | ||||
| <div></div> | <div></div> | ||||
| <div className="flex items-center space-x-2"> | <div className="flex items-center space-x-2"> | ||||
| {customerIcon || <AppIcon size="small" icon={icon} background={icon_background} />} | {customerIcon || <AppIcon size="small" icon={icon} background={icon_background} />} | ||||
| <div | <div | ||||
| className={`text-sm text-gray-800 font-bold ${ | |||||
| isEmbedScene ? 'text-white' : '' | |||||
| }`} | |||||
| className={'text-sm font-bold text-white'} | |||||
| > | > | ||||
| {title} | {title} | ||||
| </div> | </div> | ||||
| <div></div> | <div></div> | ||||
| </div> | </div> | ||||
| ) | ) | ||||
| } | |||||
| return ( | |||||
| <div className="shrink-0 flex items-center justify-between h-12 px-3 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) | export default React.memo(Header) |