diff --git a/src/client/routes/admin.tsx b/src/client/routes/admin.tsx new file mode 100644 index 0000000..827cfa3 --- /dev/null +++ b/src/client/routes/admin.tsx @@ -0,0 +1,62 @@ +import { createFileRoute, Outlet, useNavigate } from "@tanstack/react-router"; +import { useEffect } from "react"; +import { useAuth } from "../hooks/useAuth"; +import { LucideIcon } from "../lib/iconData"; + +export const Route = createFileRoute("/admin")({ + component: AdminLayout, +}); + +function AdminLayout() { + const navigate = useNavigate(); + const { data: auth, isLoading } = useAuth(); + + useEffect(() => { + if (!isLoading && !auth?.user?.isAdmin) { + navigate({ to: "/" }); + } + }, [auth, isLoading, navigate]); + + // Don't render the shell until auth is confirmed + if (isLoading || !auth?.user?.isAdmin) return null; + + return ( +
+ {/* Sidebar */} + + + {/* Main content */} +
+ +
+
+ ); +} diff --git a/src/client/routes/admin/index.tsx b/src/client/routes/admin/index.tsx new file mode 100644 index 0000000..8c4e94a --- /dev/null +++ b/src/client/routes/admin/index.tsx @@ -0,0 +1,18 @@ +import { createFileRoute } from "@tanstack/react-router"; +import { LucideIcon } from "../../lib/iconData"; + +export const Route = createFileRoute("/admin/")({ + component: AdminIndex, +}); + +function AdminIndex() { + return ( +
+ +

Admin Panel

+

+ Select a section from the sidebar +

+
+ ); +}