Site için geliştirmeler yapıldı.

This commit is contained in:
2026-01-06 23:45:38 +03:00
parent 96f195ffa6
commit 18023550e0
26 changed files with 971 additions and 56 deletions

View File

@@ -0,0 +1,34 @@
"use client"
import { Menu } from "lucide-react"
import { Button } from "@/components/ui/button"
import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet"
import { Sidebar } from "@/components/dashboard/sidebar"
import { UserNav } from "@/components/dashboard/user-nav"
export function DashboardHeader() {
return (
<header className="sticky top-0 z-30 flex h-14 items-center gap-4 border-b bg-background px-4 sm:static sm:h-auto sm:border-0 sm:bg-transparent sm:px-6">
<Sheet>
<SheetTrigger asChild>
<Button size="icon" variant="outline" className="sm:hidden">
<Menu className="h-5 w-5" />
<span className="sr-only">Menüyü </span>
</Button>
</SheetTrigger>
<SheetContent side="left" className="w-[240px] sm:max-w-xs">
<nav className="grid gap-6 text-lg font-medium">
<div className="flex items-center gap-2 text-lg font-semibold md:text-base">
ParaKasa Panel
</div>
<Sidebar />
</nav>
</SheetContent>
</Sheet>
<div className="w-full flex-1">
{/* Breadcrumb or Search could go here */}
</div>
<UserNav />
</header>
)
}

View File

@@ -0,0 +1,67 @@
"use client"
import Link from "next/link"
import { usePathname } from "next/navigation"
import { cn } from "@/lib/utils"
import { LayoutDashboard, Package, ShoppingCart, Users, Settings } from "lucide-react"
const sidebarItems = [
{
title: "Panel",
href: "/dashboard",
icon: LayoutDashboard,
},
{
title: "Ürünler",
href: "/dashboard/products",
icon: Package,
},
{
title: "Siparişler",
href: "/dashboard/orders",
icon: ShoppingCart,
},
{
title: "Kullanıcılar",
href: "/dashboard/users",
icon: Users,
},
{
title: "Ayarlar",
href: "/dashboard/settings",
icon: Settings,
},
]
interface SidebarProps extends React.HTMLAttributes<HTMLDivElement> { }
export function Sidebar({ className }: SidebarProps) {
const pathname = usePathname()
return (
<div className={cn("pb-12", className)}>
<div className="space-y-4 py-4">
<div className="px-3 py-2">
<h2 className="mb-2 px-4 text-lg font-semibold tracking-tight">
Yönetim
</h2>
<div className="space-y-1">
{sidebarItems.map((item) => (
<Link
key={item.href}
href={item.href}
className={cn(
"flex items-center rounded-md px-3 py-2 text-sm font-medium hover:bg-slate-100 dark:hover:bg-slate-800 transition-colors",
pathname === item.href ? "bg-slate-100 dark:bg-slate-800 text-primary" : "text-slate-500 dark:text-slate-400"
)}
>
<item.icon className="mr-2 h-4 w-4" />
{item.title}
</Link>
))}
</div>
</div>
</div>
</div>
)
}

View File

@@ -0,0 +1,66 @@
"use client"
import {
Avatar,
AvatarFallback,
AvatarImage,
} from "@/components/ui/avatar"
import { Button } from "@/components/ui/button"
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu"
import { supabase } from "@/lib/supabase"
import { useRouter } from "next/navigation"
export function UserNav() {
const router = useRouter()
const handleSignOut = async () => {
await supabase.auth.signOut()
router.push("/login")
router.refresh()
}
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="ghost" className="relative h-8 w-8 rounded-full">
<Avatar className="h-8 w-8">
<AvatarImage src="/avatars/01.png" alt="@parakasa" />
<AvatarFallback>PK</AvatarFallback>
</Avatar>
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent className="w-56" align="end" forceMount>
<DropdownMenuLabel className="font-normal">
<div className="flex flex-col space-y-1">
<p className="text-sm font-medium leading-none">Admin</p>
<p className="text-xs leading-none text-muted-foreground">
admin@parakasa.com
</p>
</div>
</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuItem>
Profil
</DropdownMenuItem>
<DropdownMenuItem>
Ayarlar
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuItem onClick={handleSignOut}>
Çıkış Yap
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
)
}