mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-08-23 14:52:18 +10:00
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { Trans } from "@lingui/react/macro";
|
|
import { createFileRoute, Outlet, redirect, useRouter } from "@tanstack/react-router";
|
|
import { SidebarProvider } from "@reactive-resume/ui/components/sidebar";
|
|
import { createNoindexFollowMeta } from "@/libs/seo";
|
|
import { getDashboardSidebarState, setDashboardSidebarState } from "./-components/functions";
|
|
import { DashboardSidebar } from "./-components/sidebar";
|
|
|
|
export const Route = createFileRoute("/dashboard")({
|
|
component: RouteComponent,
|
|
beforeLoad: ({ context }) => {
|
|
if (!context.session) throw redirect({ to: "/auth/login", replace: true });
|
|
return { session: context.session };
|
|
},
|
|
loader: () => {
|
|
const sidebarState = getDashboardSidebarState();
|
|
return { sidebarState };
|
|
},
|
|
head: () => ({
|
|
meta: [createNoindexFollowMeta()],
|
|
}),
|
|
});
|
|
|
|
function RouteComponent() {
|
|
const router = useRouter();
|
|
const { sidebarState } = Route.useLoaderData();
|
|
|
|
const handleSidebarOpenChange = (open: boolean) => {
|
|
setDashboardSidebarState(open);
|
|
void router.invalidate();
|
|
};
|
|
|
|
return (
|
|
<SidebarProvider open={sidebarState} onOpenChange={handleSidebarOpenChange}>
|
|
<a
|
|
href="#main-content"
|
|
className="sr-only rounded-md bg-popover px-4 py-2 text-sm ring-2 ring-ring focus:not-sr-only focus:absolute focus:inset-s-2 focus:top-2 focus:z-[100]"
|
|
>
|
|
<Trans>Skip to main content</Trans>
|
|
</a>
|
|
|
|
<DashboardSidebar />
|
|
|
|
<main id="main-content" className="@container flex-1 p-4 md:ps-2">
|
|
<Outlet />
|
|
</main>
|
|
</SidebarProvider>
|
|
);
|
|
}
|