LibreChat/packages/client/src/hooks/useAvatar.ts
Marco Beretta 94426a3cae
🎭 refactor: Avatar Loading UX and Fix Initials Rendering Bugs (#9261)
Co-authored-by: Danny Avila <danny@librechat.ai>
2025-08-25 12:06:00 -04:00

44 lines
1,005 B
TypeScript

import { useMemo } from 'react';
import { createAvatar } from '@dicebear/core';
import { initials } from '@dicebear/collection';
import type { TUser } from 'librechat-data-provider';
const avatarCache: Record<string, string> = {};
const useAvatar = (user: TUser | undefined) => {
return useMemo(() => {
const { username, name } = user ?? {};
const seed = name || username;
if (!seed) {
return '';
}
if (user?.avatar && user?.avatar !== '') {
return user.avatar;
}
if (avatarCache[seed]) {
return avatarCache[seed];
}
const avatar = createAvatar(initials, {
seed,
fontFamily: ['Verdana'],
fontSize: 36,
});
let avatarDataUri = '';
try {
avatarDataUri = avatar.toDataUri();
if (avatarDataUri) {
avatarCache[seed] = avatarDataUri;
}
} catch (error) {
console.error('Failed to generate avatar:', error);
}
return avatarDataUri;
}, [user]);
};
export default useAvatar;