template-monorepo/frontend/src/layouts/AdminLayout.tsx

42 lines
1.1 KiB
TypeScript

import { Link, Outlet, useNavigate } from 'react-router-dom';
import * as authApi from '../api/auth';
import { useAuth } from '../context/AuthContext';
export function AdminLayout() {
const { signOut } = useAuth();
const navigate = useNavigate();
const handleLogout = async () => {
try {
await authApi.logout();
} catch {
/* ignore */
}
signOut();
navigate('/login');
};
return (
<div className="shell admin-shell">
<aside className="admin-sidebar">
<div className="brand"></div>
<nav className="admin-nav">
<Link to="/admin"></Link>
<Link to="/admin/roles"></Link>
<Link to="/admin/role-permissions"></Link>
<Link to="/admin/users">使</Link>
</nav>
<Link to="/app" className="back-link">
使
</Link>
<button type="button" className="btn-ghost" onClick={handleLogout}>
</button>
</aside>
<main className="page admin-page">
<Outlet />
</main>
</div>
);
}