import { useMutation } from "@tanstack/react-query"; import { LifeBuoy } from "lucide-react"; import { Outlet, redirect, useNavigate } from "react-router"; import { toast } from "sonner"; import { appContext } from "~/context"; import { authMiddleware } from "~/middleware/auth"; import type { Route } from "./+types/layout"; import { AppBreadcrumb } from "./app-breadcrumb"; import { GridBackground } from "./grid-background"; import { Button } from "./ui/button"; import { SidebarProvider, SidebarTrigger } from "./ui/sidebar"; import { AppSidebar } from "./app-sidebar"; import { logoutMutation } from "../api-client/@tanstack/react-query.gen"; export const clientMiddleware = [authMiddleware]; export async function clientLoader({ context }: Route.LoaderArgs) { const ctx = context.get(appContext); if (ctx.user && !ctx.user.hasDownloadedResticPassword) { throw redirect("/download-recovery-key"); } return ctx; } export default function Layout({ loaderData }: Route.ComponentProps) { const navigate = useNavigate(); const logout = useMutation({ ...logoutMutation(), onSuccess: async () => { navigate("/login", { replace: true }); }, onError: (error) => { console.error(error); toast.error("Logout failed", { description: error.message }); }, }); return (
{loaderData.user && (
Welcome,  {loaderData.user?.username}
)}
); }