| import { memo, useMemo } from 'react'; | |
| import type { IconMapProps } from '~/common'; | |
| import { URLIcon } from '~/components/Endpoints/URLIcon'; | |
| import { icons } from '~/hooks/Endpoint/Icons'; | |
| interface ConvoIconURLProps { | |
| iconURL?: string; | |
| modelLabel?: string | null; | |
| endpointIconURL?: string; | |
| assistantName?: string; | |
| agentName?: string; | |
| context?: 'landing' | 'menu-item' | 'nav' | 'message'; | |
| assistantAvatar?: string; | |
| agentAvatar?: string; | |
| } | |
| const classMap = { | |
| 'menu-item': 'relative flex h-full items-center justify-center overflow-hidden rounded-full', | |
| message: 'icon-md', | |
| default: 'icon-xl relative flex h-full overflow-hidden rounded-full', | |
| }; | |
| const styleMap = { | |
| 'menu-item': { width: '20px', height: '20px' }, | |
| default: { width: '100%', height: '100%' }, | |
| }; | |
| const styleImageMap = { | |
| default: { width: '100%', height: '100%' }, | |
| }; | |
| const ConvoIconURL: React.FC<ConvoIconURLProps> = ({ | |
| iconURL = '', | |
| modelLabel = '', | |
| endpointIconURL, | |
| assistantAvatar, | |
| assistantName, | |
| agentAvatar, | |
| agentName, | |
| context, | |
| }) => { | |
| const Icon = useMemo(() => icons[iconURL] ?? icons.unknown, [iconURL]); | |
| const isURL = useMemo( | |
| () => !!(iconURL && (iconURL.includes('http') || iconURL.startsWith('/images/'))), | |
| [iconURL], | |
| ); | |
| if (isURL) { | |
| return ( | |
| <URLIcon | |
| iconURL={iconURL} | |
| altName={modelLabel} | |
| className={classMap[context ?? 'default'] ?? classMap.default} | |
| containerStyle={styleMap[context ?? 'default'] ?? styleMap.default} | |
| imageStyle={styleImageMap[context ?? 'default'] ?? styleImageMap.default} | |
| /> | |
| ); | |
| } | |
| return ( | |
| <div className="shadow-stroke relative flex h-full items-center justify-center rounded-full bg-white text-black"> | |
| {Icon && ( | |
| <Icon | |
| size={41} | |
| context={context} | |
| className="h-2/3 w-2/3" | |
| agentName={agentName} | |
| iconURL={endpointIconURL} | |
| assistantName={assistantName} | |
| avatar={assistantAvatar || agentAvatar} | |
| /> | |
| )} | |
| </div> | |
| ); | |
| }; | |
| export default memo(ConvoIconURL); | |