Files
app-admin/app/apps/[id]/edit/page.tsx
2026-03-24 15:46:27 +03:00

101 lines
5.9 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { getAppById, updateApp } from "../../actions";
import { ArrowLeft, Save, Smartphone, Globe } from "lucide-react";
import Link from "next/link";
import { notFound } from "next/navigation";
export default async function EditAppPage({ params }: { params: Promise<{ id: string }> }) {
const { id } = await params;
const appId = parseInt(id);
if (isNaN(appId)) {
notFound();
}
const app = await getAppById(appId);
if (!app) {
notFound();
}
const updateAppWithId = updateApp.bind(null, app.id);
return (
<div className="flex h-screen bg-slate-50 dark:bg-black font-sans text-slate-900 dark:text-slate-100">
<aside className="w-64 bg-white dark:bg-zinc-950 border-r border-slate-200 dark:border-zinc-900 flex flex-col shrink-0 shadow-sm">
<div className="p-6 border-b border-slate-100 dark:border-zinc-900 flex items-center gap-3">
<Link href="/" className="w-7 h-7 bg-slate-900 dark:bg-white rounded-md flex items-center justify-center">
<span className="text-white dark:text-black font-bold text-sm">A</span>
</Link>
<span className="font-bold text-lg tracking-tight uppercase tracking-wider text-slate-900 dark:text-white">AppAdmin</span>
</div>
<nav className="flex-1 p-4 space-y-1">
<Link href="/" className="flex items-center gap-2.5 px-3 py-2 text-slate-600 dark:text-zinc-400 hover:bg-slate-50 dark:hover:bg-zinc-900 rounded-lg text-sm font-medium">
<Globe size={18} /> Dashboard
</Link>
<Link href="/apps" className="flex items-center gap-2.5 px-3 py-2 bg-slate-900 dark:bg-white text-white dark:text-black rounded-lg text-sm font-semibold">
<Smartphone size={18} /> Uygulamalar
</Link>
</nav>
</aside>
<main className="flex-1 overflow-y-auto p-8">
<div className="max-w-2xl mx-auto space-y-8">
<div className="flex items-center justify-between">
<div className="flex items-center gap-4">
<Link href="/apps" className="p-2 bg-white dark:bg-zinc-950 border border-slate-200 dark:border-zinc-800 rounded-lg text-slate-500 hover:text-slate-900 transition-colors">
<ArrowLeft size={20} />
</Link>
<div>
<h1 className="text-2xl font-bold text-slate-900 dark:text-white">Uygulamayı Düzenle</h1>
<p className="text-sm text-slate-500 font-mono opacity-70">{app.name} / {app.bundleId}</p>
</div>
</div>
</div>
<div className="bg-white dark:bg-zinc-950 p-8 rounded-xl border border-slate-200 dark:border-zinc-900 shadow-sm">
<form action={updateAppWithId} className="space-y-6">
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
<div className="space-y-1.5">
<label className="text-xs font-bold uppercase text-slate-400 tracking-wider">Uygulama Adı</label>
<input name="name" defaultValue={app.name} required className="w-full px-4 py-2 bg-slate-50 dark:bg-zinc-900 border border-slate-200 dark:border-zinc-800 rounded-lg text-sm outline-none focus:ring-1 focus:ring-slate-900 text-slate-900 dark:text-white" />
</div>
<div className="space-y-1.5">
<label className="text-xs font-bold uppercase text-slate-400 tracking-wider">Bundle ID</label>
<input name="bundleId" defaultValue={app.bundleId} required className="w-full px-4 py-2 bg-slate-50 dark:bg-zinc-900 border border-slate-200 dark:border-zinc-800 rounded-lg text-sm font-mono outline-none focus:ring-1 focus:ring-slate-900 text-slate-900 dark:text-white" />
</div>
<div className="space-y-1.5">
<label className="text-xs font-bold uppercase text-slate-400 tracking-wider">Platform</label>
<select name="platform" defaultValue={app.platform} className="w-full px-4 py-2 bg-slate-50 dark:bg-zinc-900 border border-slate-200 dark:border-zinc-800 rounded-lg text-sm outline-none focus:ring-1 focus:ring-slate-900 text-slate-900 dark:text-white">
<option value="ios">iOS</option>
<option value="android">Android</option>
<option value="dual">Dual</option>
</select>
</div>
<div className="space-y-1.5">
<label className="text-xs font-bold uppercase text-slate-400 tracking-wider">Durum</label>
<select name="status" defaultValue={app.status} className="w-full px-4 py-2 bg-slate-50 dark:bg-zinc-900 border border-slate-200 dark:border-zinc-800 rounded-lg text-sm outline-none focus:ring-1 focus:ring-slate-900 text-slate-900 dark:text-white">
<option value="active">Aktif</option>
<option value="inactive">Pasif</option>
<option value="archived">Arşivlendi</option>
</select>
</div>
</div>
<div className="space-y-1.5">
<label className="text-xs font-bold uppercase text-slate-400 tracking-wider">Apple App ID (Opsiyonel)</label>
<input name="appleId" defaultValue={app.appleId || ''} className="w-full px-4 py-2 bg-slate-50 dark:bg-zinc-900 border border-slate-200 dark:border-zinc-800 rounded-lg text-sm outline-none focus:ring-1 focus:ring-slate-900 text-slate-900 dark:text-white" placeholder="Örn: 123456789" />
</div>
<div className="pt-4 flex items-center gap-4">
<button type="submit" className="flex-1 flex items-center justify-center gap-2 bg-slate-900 dark:bg-white text-white dark:text-black py-2.5 rounded-lg text-sm font-bold hover:opacity-90 transition-all shadow-md">
<Save size={18} /> Güncellemeleri Kaydet
</button>
</div>
</form>
</div>
</div>
</main>
</div>
);
}