Compare commits

...

1 Commits

Author SHA1 Message Date
hsiegeln
b959edd6c7 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>
2026-03-19 18:14:40 +01:00
2 changed files with 15 additions and 4 deletions

View File

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

View File

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