mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-23 20:00:15 +01:00
🎭 refactor: Avatar Loading UX and Fix Initials Rendering Bugs (#9261)
Co-authored-by: Danny Avila <danny@librechat.ai>
This commit is contained in:
parent
e559f0f4dc
commit
94426a3cae
9 changed files with 562 additions and 31 deletions
|
|
@ -3,6 +3,7 @@
|
|||
export type { TranslationKeys } from './useLocalize';
|
||||
|
||||
export { default as useToast } from './useToast';
|
||||
export { default as useAvatar } from './useAvatar';
|
||||
export { default as useCombobox } from './useCombobox';
|
||||
export { default as useLocalize } from './useLocalize';
|
||||
export { default as useMediaQuery } from './useMediaQuery';
|
||||
|
|
|
|||
44
packages/client/src/hooks/useAvatar.ts
Normal file
44
packages/client/src/hooks/useAvatar.ts
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
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;
|
||||
Loading…
Add table
Add a link
Reference in a new issue