Files
full-stack-fastapi/frontend/src/routes/_layout.tsx
魏风 20355b0804
All checks were successful
Deploy to Production / deploy (push) Successful in 1m54s
feat(frontend): replace dashboard with realtime device map
2026-03-24 00:18:43 +08:00

57 lines
1.5 KiB
TypeScript

import {
createFileRoute,
Outlet,
redirect,
useRouterState,
} from "@tanstack/react-router"
import { Footer } from "@/components/Common/Footer"
import AppSidebar from "@/components/Sidebar/AppSidebar"
import {
SidebarInset,
SidebarProvider,
SidebarTrigger,
} from "@/components/ui/sidebar"
import { isLoggedIn } from "@/hooks/useAuth"
export const Route = createFileRoute("/_layout")({
component: Layout,
beforeLoad: async () => {
if (!isLoggedIn()) {
throw redirect({
to: "/login",
})
}
},
})
function Layout() {
const pathname = useRouterState({
select: (state) => state.location.pathname,
})
const isFullScreenPage = pathname === "/gnss-monitor" || pathname === "/"
return (
<SidebarProvider>
<AppSidebar />
<SidebarInset className="flex flex-col">
<header className="sticky top-0 z-10 flex h-16 shrink-0 items-center gap-2 border-b px-4 bg-background/95 backdrop-blur supports-backdrop-filter:bg-background/60">
<SidebarTrigger className="-ml-1 text-muted-foreground" />
</header>
<main
className={`flex-1 flex flex-col ${isFullScreenPage ? "p-0" : "p-6 md:p-8"}`}
>
<div
className={`flex-1 flex flex-col mx-auto w-full ${isFullScreenPage ? "max-w-none" : "max-w-7xl"}`}
>
<Outlet />
</div>
</main>
{!isFullScreenPage && <Footer />}
</SidebarInset>
</SidebarProvider>
)
}
export default Layout