feat: use TopBar onLogout prop, add ToastProvider
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import { Outlet, useNavigate, useLocation } from 'react-router';
|
import { Outlet, useNavigate, useLocation } from 'react-router';
|
||||||
import { AppShell, Sidebar, TopBar, CommandPalette, CommandPaletteProvider, GlobalFilterProvider, useCommandPalette, Dropdown, Avatar } from '@cameleer/design-system';
|
import { AppShell, Sidebar, TopBar, CommandPalette, CommandPaletteProvider, GlobalFilterProvider, ToastProvider, useCommandPalette } from '@cameleer/design-system';
|
||||||
import { useRouteCatalog } from '../api/queries/catalog';
|
import { useRouteCatalog } from '../api/queries/catalog';
|
||||||
import { useAuthStore } from '../auth/auth-store';
|
import { useAuthStore } from '../auth/auth-store';
|
||||||
import { useMemo, useCallback } from 'react';
|
import { useMemo, useCallback } from 'react';
|
||||||
@@ -41,6 +41,11 @@ function LayoutContent() {
|
|||||||
}));
|
}));
|
||||||
}, [location.pathname]);
|
}, [location.pathname]);
|
||||||
|
|
||||||
|
const handleLogout = useCallback(() => {
|
||||||
|
logout();
|
||||||
|
navigate('/login');
|
||||||
|
}, [logout, navigate]);
|
||||||
|
|
||||||
const handlePaletteSelect = useCallback((result: any) => {
|
const handlePaletteSelect = useCallback((result: any) => {
|
||||||
if (result.path) navigate(result.path);
|
if (result.path) navigate(result.path);
|
||||||
setPaletteOpen(false);
|
setPaletteOpen(false);
|
||||||
@@ -56,22 +61,11 @@ function LayoutContent() {
|
|||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<div style={{ display: 'flex', alignItems: 'center' }}>
|
|
||||||
<TopBar
|
<TopBar
|
||||||
breadcrumb={breadcrumb}
|
breadcrumb={breadcrumb}
|
||||||
user={username ? { name: username } : undefined}
|
user={username ? { name: username } : undefined}
|
||||||
|
onLogout={handleLogout}
|
||||||
/>
|
/>
|
||||||
{username && (
|
|
||||||
<Dropdown
|
|
||||||
trigger={<Avatar name={username} size="sm" />}
|
|
||||||
items={[
|
|
||||||
{ label: `Signed in as ${username}`, disabled: true },
|
|
||||||
{ divider: true, label: '' },
|
|
||||||
{ label: 'Logout', onClick: () => { logout(); navigate('/login'); } },
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
<CommandPalette
|
<CommandPalette
|
||||||
open={paletteOpen}
|
open={paletteOpen}
|
||||||
onClose={() => setPaletteOpen(false)}
|
onClose={() => setPaletteOpen(false)}
|
||||||
@@ -87,10 +81,12 @@ function LayoutContent() {
|
|||||||
|
|
||||||
export function LayoutShell() {
|
export function LayoutShell() {
|
||||||
return (
|
return (
|
||||||
|
<ToastProvider>
|
||||||
<CommandPaletteProvider>
|
<CommandPaletteProvider>
|
||||||
<GlobalFilterProvider>
|
<GlobalFilterProvider>
|
||||||
<LayoutContent />
|
<LayoutContent />
|
||||||
</GlobalFilterProvider>
|
</GlobalFilterProvider>
|
||||||
</CommandPaletteProvider>
|
</CommandPaletteProvider>
|
||||||
|
</ToastProvider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user