feat: add logout dropdown to user menu in TopBar
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:
@@ -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 {
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user