2024-06-25 03:02:38 -04:00
|
|
|
import { useMemo } from 'react';
|
2024-02-23 09:23:29 -05:00
|
|
|
import { createAvatar } from '@dicebear/core';
|
|
|
|
|
import { initials } from '@dicebear/collection';
|
|
|
|
|
import type { TUser } from 'librechat-data-provider';
|
|
|
|
|
|
2024-06-25 03:02:38 -04:00
|
|
|
const avatarCache: Record<string, string> = {};
|
2024-02-23 09:23:29 -05:00
|
|
|
|
2024-06-25 03:02:38 -04:00
|
|
|
const useAvatar = (user: TUser | undefined) => {
|
|
|
|
|
return useMemo(() => {
|
2024-02-23 09:23:29 -05:00
|
|
|
if (!user?.username) {
|
2024-06-25 03:02:38 -04:00
|
|
|
return '';
|
2024-02-23 09:23:29 -05:00
|
|
|
}
|
|
|
|
|
|
2024-06-25 03:02:38 -04:00
|
|
|
if (user.avatar) {
|
|
|
|
|
return user.avatar;
|
|
|
|
|
}
|
2024-02-23 09:23:29 -05:00
|
|
|
|
2024-06-25 03:02:38 -04:00
|
|
|
const { username } = user;
|
2024-02-23 09:23:29 -05:00
|
|
|
|
2024-06-25 03:02:38 -04:00
|
|
|
if (avatarCache[username]) {
|
|
|
|
|
return avatarCache[username];
|
|
|
|
|
}
|
2024-02-23 09:23:29 -05:00
|
|
|
|
2024-06-25 03:02:38 -04:00
|
|
|
const avatar = createAvatar(initials, {
|
|
|
|
|
seed: username,
|
|
|
|
|
fontFamily: ['Verdana'],
|
|
|
|
|
fontSize: 36,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
let avatarDataUri = '';
|
|
|
|
|
avatar
|
|
|
|
|
.toDataUri()
|
|
|
|
|
.then((dataUri) => {
|
|
|
|
|
avatarDataUri = dataUri;
|
|
|
|
|
avatarCache[username] = dataUri; // Store in cache
|
|
|
|
|
})
|
|
|
|
|
.catch((error) => {
|
2024-02-23 09:23:29 -05:00
|
|
|
console.error('Failed to generate avatar:', error);
|
2024-06-25 03:02:38 -04:00
|
|
|
});
|
2024-02-23 09:23:29 -05:00
|
|
|
|
2024-06-25 03:02:38 -04:00
|
|
|
return avatarDataUri;
|
|
|
|
|
}, [user]);
|
2024-02-23 09:23:29 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default useAvatar;
|