From ca1e849e8001222d914d2c154714b16ebe71dc92 Mon Sep 17 00:00:00 2001 From: Mustafa Yildiz Date: Sun, 12 Jul 2026 15:10:50 +0300 Subject: [PATCH] feat: modernize admin panel UI and add openinary integration --- app/admin/(dashboard)/categories/page.tsx | 35 +++--- app/admin/(dashboard)/layout.tsx | 66 +++-------- app/admin/(dashboard)/page.tsx | 92 ++++++++++----- app/admin/(dashboard)/products/page.tsx | 64 +++++----- .../(dashboard)/settings/SettingsForm.tsx | 111 +++++++++--------- app/admin/(dashboard)/settings/page.tsx | 15 ++- app/admin/(dashboard)/template.tsx | 5 + .../(dashboard)/users/CreateUserForm.tsx | 39 +++--- app/admin/(dashboard)/users/UserList.tsx | 87 ++++++++------ app/admin/(dashboard)/users/page.tsx | 7 +- app/api/upload/route.ts | 22 ++-- components/admin/Header.tsx | 34 ++++++ components/admin/Sidebar.tsx | 51 ++++++++ components/ui/PageTransition.tsx | 18 +++ lib/openinary-url.ts | 5 + lib/openinary.ts | 19 +++ next.config.ts | 4 + public/dd.jpg | Bin 0 -> 940875 bytes public/header-bg.jpg | Bin 940875 -> 2118957 bytes scripts/migrate-images.ts | 110 +++++++++++++++++ 20 files changed, 536 insertions(+), 248 deletions(-) create mode 100644 app/admin/(dashboard)/template.tsx create mode 100644 components/admin/Header.tsx create mode 100644 components/admin/Sidebar.tsx create mode 100644 components/ui/PageTransition.tsx create mode 100644 lib/openinary-url.ts create mode 100644 lib/openinary.ts create mode 100644 public/dd.jpg create mode 100644 scripts/migrate-images.ts diff --git a/app/admin/(dashboard)/categories/page.tsx b/app/admin/(dashboard)/categories/page.tsx index 859995d..f13f3c3 100644 --- a/app/admin/(dashboard)/categories/page.tsx +++ b/app/admin/(dashboard)/categories/page.tsx @@ -19,18 +19,21 @@ export default async function CategoriesPage() { return (
-
-

Kategoriler

- - Yeni Kategori Ekle +
+
+

Kategoriler

+

Menü kategorilerinizi yönetin ve sıralayın.

+
+ + Yeni Kategori
-
+
- + @@ -38,25 +41,25 @@ export default async function CategoriesPage() { - + {categories.map((category) => ( - - - + + + - )} diff --git a/app/admin/(dashboard)/layout.tsx b/app/admin/(dashboard)/layout.tsx index 0e5ff6c..f07eb49 100644 --- a/app/admin/(dashboard)/layout.tsx +++ b/app/admin/(dashboard)/layout.tsx @@ -1,7 +1,5 @@ -import Link from 'next/link' -import { LayoutDashboard, LogOut, Package, Settings, Tags, Users2 } from 'lucide-react' -import { logout } from '@/lib/auth' -import { redirect } from 'next/navigation' +import { Sidebar } from '@/components/admin/Sidebar' +import { Header } from '@/components/admin/Header' export default function AdminLayout({ children, @@ -9,54 +7,18 @@ export default function AdminLayout({ children: React.ReactNode }) { return ( -
- {/* Sidebar */} - - - {/* Main Content */} -
- {children} -
- - {/* Mobile Bottom Nav (Optional, simpler for now just a top bar) */} +
+ + +
+
+ +
+
+ {children} +
+
+
) } diff --git a/app/admin/(dashboard)/page.tsx b/app/admin/(dashboard)/page.tsx index d7ce2b4..ae1ffe4 100644 --- a/app/admin/(dashboard)/page.tsx +++ b/app/admin/(dashboard)/page.tsx @@ -1,5 +1,5 @@ import prisma from '@/lib/prisma' -import { Package, Tags, Eye, TrendingUp } from 'lucide-react' +import { Package, Tags, Eye, TrendingUp, ChevronRight } from 'lucide-react' import Link from 'next/link' export const metadata = { @@ -14,55 +14,89 @@ export default async function AdminDashboard() { ]) return ( -
-

Dashboard

+
+
+

Dashboard

+

Moy Beach dijital menü yönetim paneline hoş geldiniz.

+
{/* Stats Cards */} -
-
-
- +
+
+
+
-

Kategori Sayısı

-

{totalCategories}

+

Kategori Sayısı

+

{totalCategories}

-
-
- +
+
+
-

Toplam Ürün

-

{totalProducts}

+

Toplam Ürün

+

{totalProducts}

-
-
- +
+
+
-

Aktif Ürünler

-

{activeProducts}

+

Aktif Ürünler

+

{activeProducts}

{/* Quick Actions */} -
-
-

Hızlı Kısayollar

-
- - Ürünleri Yönet +
+
+
+

Hızlı Kısayollar

+
+
+ +
+
+ +
+
+

Ürünleri Yönet

+

Ürün ekle, düzenle veya fiyat güncelle

+
+
+ - - Kategorileri Yönet + + +
+
+ +
+
+

Kategorileri Yönet

+

Menü kategorilerini ve sıralamasını düzenle

+
+
+ - - Canlı Menüyü Görüntüle + + +
+
+ +
+
+

Canlı Menüyü Görüntüle

+

Müşterilerin gördüğü güncel menüyü aç

+
+
+
diff --git a/app/admin/(dashboard)/products/page.tsx b/app/admin/(dashboard)/products/page.tsx index d30979f..1c0b7be 100644 --- a/app/admin/(dashboard)/products/page.tsx +++ b/app/admin/(dashboard)/products/page.tsx @@ -1,5 +1,5 @@ import prisma from '@/lib/prisma' -import { Pencil, Plus, Trash2, Image as ImageIcon } from 'lucide-react' +import { Pencil, Plus, Image as ImageIcon } from 'lucide-react' import Image from 'next/image' import Link from 'next/link' import DeleteButton from './DeleteButton' @@ -19,41 +19,45 @@ export default async function ProductsPage() { }) return ( -
-
-

Ürün Yönetimi

- - - Yeni Ürün Ekle +
+
+
+

Ürün Yönetimi

+

Tüm kategorilerdeki ürünlerinizi görüntüleyin ve düzenleyin.

+
+ + Yeni Ürün Ekle
{categories.map((category) => ( -
-
-

{category.name_tr}

- {category.products.length} ürün +
+
+

{category.name_tr}

+ + {category.products.length} ürün +
{category.products.length > 0 ? (
Kategori Adı Sıra Ürün Sayısıİşlemler
{category.name_tr}{category.order_num}
{category.name_tr}{category.order_num} - + {category._count.products} Ürün - {category.status === 1 ? 'Aktif' : 'Pasif'} -
+
@@ -67,8 +70,8 @@ export default async function CategoriesPage() { ))} {categories.length === 0 && (
- Henüz kategori bulunmuyor. + + Henüz kategori bulunmuyor. Yeni bir kategori ekleyerek başlayın.
- - - - - - + + + + + + - + {category.products.map((product) => ( - - + - - - + + -
ResimİsimFiyatDurumİşlemler
ResimİsimFiyatDurumİşlemler
+
{product.image_url ? ( -
+
{product.name_tr}
) : ( -
+
)}
{product.name_tr}₺{product.price.toString()} - + {product.name_tr}₺{product.price.toString()} + {product.status === 1 ? 'Aktif' : 'Pasif'} -
+
+
@@ -88,8 +92,8 @@ export default async function ProductsPage() {
) : ( -
- Bu kategoride henüz ürün yok. +
+ Bu kategoride henüz ürün bulunmuyor.
)}
diff --git a/app/admin/(dashboard)/settings/SettingsForm.tsx b/app/admin/(dashboard)/settings/SettingsForm.tsx index 7b8b44f..1dc9df9 100644 --- a/app/admin/(dashboard)/settings/SettingsForm.tsx +++ b/app/admin/(dashboard)/settings/SettingsForm.tsx @@ -3,7 +3,7 @@ import { useActionState, useState, useRef } from 'react' import { saveSettings } from './actions' import Image from 'next/image' -import { Upload, X, Loader2 } from 'lucide-react' +import { Upload, X, Loader2, Save } from 'lucide-react' export default function SettingsForm({ defaultRestaurantName, @@ -49,62 +49,62 @@ export default function SettingsForm({ } return ( -
+ {state?.success && ( -
+
{state.message}
)} {state?.error && ( -
+
{state.error}
)} {/* Logo Upload */}
-