🎨 feat: Create Avatars of Initials Locally (#1869)

This commit is contained in:
Danny Avila 2024-02-23 09:23:29 -05:00 committed by GitHub
parent 4012dea4ab
commit 5f6d1f3db0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 477 additions and 32 deletions

View file

@ -1,3 +1,4 @@
export { default as useAvatar } from './useAvatar';
export { default as useProgress } from './useProgress';
export { default as useMessageHelpers } from './useMessageHelpers';
export { default as useMessageScrolling } from './useMessageScrolling';

View file

@ -0,0 +1,50 @@
import { useState, useEffect } from 'react';
import { createAvatar } from '@dicebear/core';
import { initials } from '@dicebear/collection';
import type { TUser } from 'librechat-data-provider';
const useAvatar = (user: TUser | undefined) => {
const [avatarSrc, setAvatarSrc] = useState('');
useEffect(() => {
if (avatarSrc.length) {
return;
}
if (user?.avatar) {
return;
}
if (!user?.username) {
return;
}
const generateAvatar = async () => {
if (!user) {
return;
}
const { username } = user;
const avatar = createAvatar(initials, {
seed: username,
fontFamily: ['Verdana'],
fontSize: 36,
});
try {
const avatarDataUri = await avatar.toDataUri();
setAvatarSrc(avatarDataUri);
} catch (error) {
console.error('Failed to generate avatar:', error);
setAvatarSrc('');
}
};
generateAvatar();
}, [user, avatarSrc.length]);
return avatarSrc;
};
export default useAvatar;