'use client'; /** * User menu: avatar + name with optional dropdown (account link, logout). * Can receive user from server (e.g. from getSession()) or use useCurrentUser() on client. * * @param {Object} props * @param {Object} [props.user] - User from server (getSession().user). If not provided, useCurrentUser() is used. * @param {string} [props.accountHref='/dashboard/account'] - Link for "My account" * @param {string} [props.logoutHref='/auth/logout'] - Link for logout * @param {string} [props.className] - Extra classes for the menu wrapper */ import { Fragment } from 'react'; import { Menu, Transition } from '@headlessui/react'; import UserAvatar from './UserAvatar.js'; import { useCurrentUser } from './useCurrentUser.js'; export default function UserMenu({ user: userProp, accountHref = '/dashboard/account', logoutHref = '/auth/logout', className = '', }) { const { user: userFromHook, loading } = useCurrentUser(); const user = userProp ?? userFromHook; if (loading && !userProp) { return (
); } if (!user) { return null; } return ( {user.name || user.email || 'Account'}

{user.name || 'User'}

{user.email}

{({ active }) => ( My account )} {({ active }) => ( Log out )}
); }