diff --git a/client/src/components/Endpoints/Icon.tsx b/client/src/components/Endpoints/Icon.tsx index 3256145bfb..7b31c09b34 100644 --- a/client/src/components/Endpoints/Icon.tsx +++ b/client/src/components/Endpoints/Icon.tsx @@ -1,4 +1,4 @@ -import React, { memo, useState } from 'react'; +import React, { memo, useState, useMemo } from 'react'; import { UserIcon, useAvatar } from '@librechat/client'; import type { TUser } from 'librechat-data-provider'; import type { IconProps } from '~/common'; @@ -17,9 +17,15 @@ type UserAvatarProps = { const UserAvatar = memo(({ size, user, avatarSrc, username, className }: UserAvatarProps) => { const [imageError, setImageError] = useState(false); + const [imageLoaded, setImageLoaded] = useState(false); const handleImageError = () => { setImageError(true); + setImageLoaded(false); + }; + + const handleImageLoad = () => { + setImageLoaded(true); }; const renderDefaultAvatar = () => ( @@ -36,6 +42,10 @@ const UserAvatar = memo(({ size, user, avatarSrc, username, className }: UserAva ); + const hasAvatar = useMemo(() => (user?.avatar ?? '') || avatarSrc, [user?.avatar, avatarSrc]); + const showImage = useMemo(() => hasAvatar && !imageError, [hasAvatar, imageError]); + const imageSrc = useMemo(() => (user?.avatar ?? '') || avatarSrc, [user?.avatar, avatarSrc]); + return (