mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 17:00:15 +01:00
79 lines
2 KiB
TypeScript
79 lines
2 KiB
TypeScript
|
|
import React from 'react';
|
||
|
|
import type { TPreset } from 'librechat-data-provider';
|
||
|
|
import type { IconMapProps } from '~/common';
|
||
|
|
import { icons } from '~/components/Chat/Menus/Endpoints/Icons';
|
||
|
|
|
||
|
|
interface ConvoIconURLProps {
|
||
|
|
preset: TPreset | null;
|
||
|
|
endpointIconURL?: string;
|
||
|
|
assistantName?: string;
|
||
|
|
context?: 'landing' | 'menu-item' | 'nav' | 'message';
|
||
|
|
assistantAvatar?: 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> = ({
|
||
|
|
preset,
|
||
|
|
endpointIconURL,
|
||
|
|
assistantAvatar,
|
||
|
|
assistantName,
|
||
|
|
context,
|
||
|
|
}) => {
|
||
|
|
const { iconURL = '' } = preset ?? {};
|
||
|
|
let Icon: (
|
||
|
|
props: IconMapProps & {
|
||
|
|
context?: string;
|
||
|
|
iconURL?: string;
|
||
|
|
},
|
||
|
|
) => React.JSX.Element;
|
||
|
|
|
||
|
|
if (!iconURL?.includes('http')) {
|
||
|
|
Icon = icons[iconURL] ?? icons.unknown;
|
||
|
|
} else {
|
||
|
|
Icon = () => (
|
||
|
|
<div
|
||
|
|
className={classMap[context ?? 'default'] ?? classMap.default}
|
||
|
|
style={styleMap[context ?? 'default'] ?? styleMap.default}
|
||
|
|
>
|
||
|
|
<img
|
||
|
|
src={iconURL}
|
||
|
|
alt={preset?.chatGptLabel ?? preset?.modelLabel ?? ''}
|
||
|
|
style={styleImageMap[context ?? 'default'] ?? styleImageMap.default}
|
||
|
|
className="object-cover"
|
||
|
|
/>
|
||
|
|
</div>
|
||
|
|
);
|
||
|
|
|
||
|
|
return <Icon />;
|
||
|
|
}
|
||
|
|
|
||
|
|
return (
|
||
|
|
<div className="shadow-stroke relative flex h-full items-center justify-center rounded-full bg-white text-black">
|
||
|
|
<Icon
|
||
|
|
size={41}
|
||
|
|
context={context}
|
||
|
|
className="h-2/3 w-2/3"
|
||
|
|
iconURL={endpointIconURL}
|
||
|
|
assistantName={assistantName}
|
||
|
|
avatar={assistantAvatar}
|
||
|
|
/>
|
||
|
|
</div>
|
||
|
|
);
|
||
|
|
};
|
||
|
|
|
||
|
|
export default ConvoIconURL;
|