diff --git a/src/app/(app)/dashboard/@admin/layout.tsx b/src/app/(app)/dashboard/@admin/layout.tsx new file mode 100644 index 0000000..4ede44d --- /dev/null +++ b/src/app/(app)/dashboard/@admin/layout.tsx @@ -0,0 +1,73 @@ +import { + SidebarInset, + SidebarProvider, + SidebarTrigger, +} from "@/components/ui/sidebar"; +import { auth } from "@/lib/auth"; +import { + Breadcrumb, + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbList, + BreadcrumbPage, + BreadcrumbSeparator, +} from "@/components/ui/breadcrumb"; +import { User } from "@prisma/client"; +import { redirect } from "next/navigation"; +import { AppSidebar } from "@/components/app-sidebar"; +import { Separator } from "@/components/ui/separator"; + +interface AdminDashboardLayoutProps { + children: React.ReactNode; +} + +export default async function AdminDashboardLayout({ + children, +}: AdminDashboardLayoutProps) { + const session = await auth(); + + if (!session?.user) { + redirect("/sign-in"); + } + + const user = (({ name, email, image }) => ({ + name: name ?? "", + email: email ?? "", + avatar: image ?? "", + }))(session.user as User); + + return ( + + + + + + + + + + + + + + Building Your Application + + + + + + + Data Fetching + + + + + + + + {children} + + + + ); +} diff --git a/src/components/app-sidebar.tsx b/src/components/app-sidebar.tsx index 94ad3a0..21527f5 100644 --- a/src/components/app-sidebar.tsx +++ b/src/components/app-sidebar.tsx @@ -1,6 +1,5 @@ -"use client" +"use client"; -import * as React from "react" import { AudioWaveform, BookOpen, @@ -12,27 +11,21 @@ import { PieChart, Settings2, SquareTerminal, -} from "lucide-react" - -import { NavMain } from "@/components/nav-main" -import { NavProjects } from "@/components/nav-projects" -import { NavUser } from "@/components/nav-user" -import { TeamSwitcher } from "@/components/team-switcher" +} from "lucide-react"; +import * as React from "react"; +import { NavMain } from "@/components/nav-main"; +import { NavUser } from "@/components/nav-user"; +import { NavProjects } from "@/components/nav-projects"; +import { TeamSwitcher } from "@/components/team-switcher"; import { Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarRail, -} from "@/components/ui/sidebar" +} from "@/components/ui/sidebar"; -// This is sample data. const data = { - user: { - name: "shadcn", - email: "m@example.com", - avatar: "/avatars/shadcn.jpg", - }, teams: [ { name: "Acme Inc", @@ -154,9 +147,17 @@ const data = { icon: Map, }, ], +}; + +interface AppSidebarProps extends React.ComponentProps { + user: { + name: string; + email: string; + avatar: string; + }; } -export function AppSidebar({ ...props }: React.ComponentProps) { +export function AppSidebar({ user, ...props }: AppSidebarProps) { return ( @@ -167,9 +168,9 @@ export function AppSidebar({ ...props }: React.ComponentProps) { - + - ) + ); }