feat: add logout dropdown to user menu in TopBar
All checks were successful
Build & Publish / publish (push) Successful in 47s

Click user name/avatar to open dropdown with Logout option.
TopBar accepts optional onLogout callback prop.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-03-19 18:14:40 +01:00
parent ff9f1aa519
commit b959edd6c7
2 changed files with 15 additions and 4 deletions

View File

@@ -121,6 +121,7 @@
gap: 8px;
font-size: 12px;
color: var(--text-secondary);
cursor: pointer;
}
.userName {

View File

@@ -1,5 +1,6 @@
import styles from './TopBar.module.css'
import { Breadcrumb } from '../../composites/Breadcrumb/Breadcrumb'
import { Dropdown } from '../../composites/Dropdown/Dropdown'
import { Avatar } from '../../primitives/Avatar/Avatar'
import { ButtonGroup } from '../../primitives/ButtonGroup/ButtonGroup'
import type { ButtonGroupItem } from '../../primitives/ButtonGroup/ButtonGroup'
@@ -17,6 +18,7 @@ interface TopBarProps {
breadcrumb: BreadcrumbItem[]
environment?: string
user?: { name: string }
onLogout?: () => void
className?: string
}
@@ -31,6 +33,7 @@ export function TopBar({
breadcrumb,
environment,
user,
onLogout,
className,
}: TopBarProps) {
const globalFilters = useGlobalFilters()
@@ -96,10 +99,17 @@ export function TopBar({
<span className={styles.env}>{environment}</span>
)}
{user && (
<div className={styles.user}>
<span className={styles.userName}>{user.name}</span>
<Avatar name={user.name} size="md" />
</div>
<Dropdown
trigger={
<div className={styles.user}>
<span className={styles.userName}>{user.name}</span>
<Avatar name={user.name} size="md" />
</div>
}
items={[
{ label: 'Logout', icon: '\u23FB', onClick: onLogout },
]}
/>
)}
</div>
</header>