Files
Reactive-Resume/apps/web/src/routes/dashboard/route.tsx
T

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>
);
}