ldc-groupe/resources/ts/back/Layouts/AuthenticatedLayout.tsx

55 lines
1.9 KiB
TypeScript

// * Packages
import { motion } from "motion/react";
import { ReactNode } from "react";
// * Components shadcn
import { SidebarProvider } from "@/components/ui/sidebar";
import { Toaster } from "@/components/ui/toaster";
import { TooltipProvider } from "@/components/ui/tooltip";
// * Other
import AppSidebar from "@/back/Components/Layout/AppSidebar";
import AppHeader from "@/back/Components/Layout/AppHeader";
import AppFooter from "@/back/Components/Layout/AppFooter";
import AppTitle from "@/back/Components/Layout/AppTitle";
import { ThemeProvider } from "@/back/providers/ThemeProvider";
export default function Layout({
title,
linkBefore,
linkAfter,
children,
}: {
title: string;
linkBefore?: string;
linkAfter?: string;
children: ReactNode;
}) {
const isCollapsed = localStorage.getItem("vite-ui-collapsed");
return (
<ThemeProvider>
<SidebarProvider defaultOpen={!isCollapsed}>
<TooltipProvider>
<AppSidebar />
<motion.main
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
transition={{ duration: 0.3 }}
className="relative container flex flex-col justify-between mx-auto px-8 pb-4"
>
<div className="flex flex-col justify-between">
<AppHeader />
<AppTitle
title={title}
linkBefore={linkBefore}
linkAfter={linkAfter}
/>
{children}
</div>
<Toaster />
<AppFooter />
</motion.main>
</TooltipProvider>
</SidebarProvider>
</ThemeProvider>
);
}