refactor(admin): replace inline avatar logic with shared UserAvatar component
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
import { Fragment } from 'react';
|
||||
import { Menu, MenuButton, MenuItem, MenuItems, Transition } from '@headlessui/react';
|
||||
import { ChevronDownIcon, User03Icon } from '@zen/core/shared/icons';
|
||||
import { UserAvatar } from '@zen/core/shared/components';
|
||||
import { useRouter, usePathname } from 'next/navigation';
|
||||
import { useTheme, getThemeIcon } from '@zen/core/themes';
|
||||
|
||||
@@ -10,11 +11,6 @@ const AdminHeader = ({ isMobileMenuOpen, setIsMobileMenuOpen, user, onLogout, ap
|
||||
const router = useRouter();
|
||||
const pathname = usePathname();
|
||||
|
||||
const getImageUrl = (imageKey) => {
|
||||
if (!imageKey) return null;
|
||||
return `/zen/api/storage/${imageKey}`;
|
||||
};
|
||||
|
||||
const handleLogout = async () => {
|
||||
try {
|
||||
if (onLogout) {
|
||||
@@ -34,16 +30,6 @@ const AdminHeader = ({ isMobileMenuOpen, setIsMobileMenuOpen, user, onLogout, ap
|
||||
}
|
||||
};
|
||||
|
||||
const getUserInitials = (name) => {
|
||||
if (!name) return 'U';
|
||||
return name
|
||||
.split(' ')
|
||||
.map(n => n[0])
|
||||
.join('')
|
||||
.toUpperCase()
|
||||
.slice(0, 2);
|
||||
};
|
||||
|
||||
const { theme, toggle, systemIsDark } = useTheme();
|
||||
const ThemeIcon = getThemeIcon(theme, systemIsDark);
|
||||
const themeLabel = theme === 'light' ? 'Mode clair' : theme === 'dark' ? 'Mode sombre' : 'Thème système';
|
||||
@@ -63,8 +49,6 @@ const AdminHeader = ({ isMobileMenuOpen, setIsMobileMenuOpen, user, onLogout, ap
|
||||
})();
|
||||
|
||||
const quickLinks = [];
|
||||
const imageUrl = getImageUrl(user?.image);
|
||||
const userInitials = getUserInitials(user?.name);
|
||||
|
||||
return (
|
||||
<header className="bg-white dark:bg-black border-b border-neutral-200 dark:border-neutral-800/70 sticky top-0 z-30 h-12 flex items-center w-full">
|
||||
@@ -111,18 +95,7 @@ const AdminHeader = ({ isMobileMenuOpen, setIsMobileMenuOpen, user, onLogout, ap
|
||||
{/* User Profile Menu */}
|
||||
<Menu as="div" className="relative">
|
||||
<MenuButton className="cursor-pointer flex items-center gap-2.5 px-2.5 py-1.5 rounded-xl hover:bg-black/5 dark:hover:bg-white/5 transition-colors duration-200 outline-none group">
|
||||
{/* Avatar */}
|
||||
{imageUrl ? (
|
||||
<img
|
||||
src={imageUrl}
|
||||
alt={user?.name || 'User'}
|
||||
className="w-[26px] h-[26px] rounded-full object-cover shrink-0"
|
||||
/>
|
||||
) : (
|
||||
<div className="w-[26px] h-[26px] rounded-full bg-black dark:bg-white flex items-center justify-center shrink-0">
|
||||
<span className="text-[10px] font-medium text-white dark:text-black">{userInitials}</span>
|
||||
</div>
|
||||
)}
|
||||
<UserAvatar user={user} size="sm" />
|
||||
{/* Name — desktop only */}
|
||||
<span className="hidden sm:block text-[13px] leading-none font-medium text-neutral-800 dark:text-white">
|
||||
{user?.name || 'User'}
|
||||
|
||||
Reference in New Issue
Block a user