| 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; | |