mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-19 18:00:15 +01:00
🎨 feat: Create Avatars of Initials Locally (#1869)
This commit is contained in:
parent
4012dea4ab
commit
5f6d1f3db0
6 changed files with 477 additions and 32 deletions
|
|
@ -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';
|
||||
|
|
|
|||
50
client/src/hooks/Messages/useAvatar.ts
Normal file
50
client/src/hooks/Messages/useAvatar.ts
Normal 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;
|
||||
Loading…
Add table
Add a link
Reference in a new issue