import Image from "next/image"; import { logout } from "./login/actions"; import { getApps } from "./apps/actions"; import { getAppStatus } from "./asc/actions"; import { LayoutDashboard, Smartphone, Settings, Bell, CloudUpload, Plus, ExternalLink, Search, CheckCircle2, Clock, XCircle, RefreshCw, LogOut, SlidersHorizontal } from "lucide-react"; import Link from "next/link"; const statusMap: Record = { READY_FOR_SALE: { label: "Yayında", color: "text-emerald-700 dark:text-emerald-400", bg: "bg-emerald-100 dark:bg-emerald-900/30" }, PREPARE_FOR_SUBMISSION: { label: "Hazırlanıyor", color: "text-blue-700 dark:text-blue-400", bg: "bg-blue-100 dark:bg-blue-900/30" }, WAITING_FOR_REVIEW: { label: "İnceleme Bekliyor", color: "text-amber-700 dark:text-amber-400", bg: "bg-amber-100 dark:bg-amber-900/30" }, IN_REVIEW: { label: "İncelemede", color: "text-purple-700 dark:text-purple-400", bg: "bg-purple-100 dark:bg-purple-900/30" }, REJECTED: { label: "Reddedildi", color: "text-red-700 dark:text-red-400", bg: "bg-red-100 dark:bg-red-900/30" }, METADATA_REJECTED: { label: "Metadata Reddi", color: "text-red-700 dark:text-red-400", bg: "bg-red-100 dark:bg-red-900/30" }, PENDING_DEVELOPER_RELEASE: { label: "Onay Bekliyor", color: "text-cyan-700 dark:text-cyan-400", bg: "bg-cyan-100 dark:bg-cyan-900/30" }, PROCESSING_FOR_APP_STORE: { label: "İşleniyor", color: "text-zinc-600 dark:text-zinc-400", bg: "bg-zinc-100 dark:bg-zinc-800" }, }; export default async function Home() { const allApps = await getApps(); const appsWithStatus = await Promise.all(allApps.map(async (app) => { if (app.platform === 'ios' && app.appleId) { try { const { data } = await getAppStatus(app.appleId); const latestVersion = data?.data?.[0]; const state = latestVersion?.attributes?.appStoreState; const versionNumber = latestVersion?.attributes?.versionString; return { ...app, apiStatus: state, version: versionNumber }; } catch (err) { return { ...app, apiStatus: 'ERROR' }; } } return { ...app, apiStatus: 'UNKNOWN' }; })); const inReviewCount = appsWithStatus.filter(a => a.apiStatus === 'IN_REVIEW' || a.apiStatus === 'WAITING_FOR_REVIEW').length; const liveCount = appsWithStatus.filter(a => a.apiStatus === 'READY_FOR_SALE').length; const rejectedCount = appsWithStatus.filter(a => a.apiStatus === 'REJECTED' || a.apiStatus === 'METADATA_REJECTED').length; return (
{/* Sidebar */} {/* Main Content */}

Genel Bakış

Live
} color="bg-blue-600" /> } color="bg-amber-500" /> } color="bg-red-500" /> } color="bg-emerald-500" />

Uygulamalar

Yeni Ekle
{appsWithStatus.map((app) => { const statusInfo = statusMap[app.apiStatus || ''] || { label: "Bilinmiyor", color: "text-slate-500 dark:text-zinc-400", bg: "bg-slate-100 dark:bg-zinc-900" }; return (
{app.platform === 'ios' ? iOS : }
{statusInfo.label}

{app.name}

{(app as any).version && v{(app as any).version}}

{app.bundleId}

{/* Remote Config Butonu (Yeni) */} Config {/* Edit Butonu */} Edit
); })}

Sistem Durumu

Apple Connect API
Bağlı
PostgreSQL DB
Aktif

Hızlı İşlemler

} /> } />
); } function StatCard({ title, value, icon, color }: { title: string, value: string, icon: any, color: string }) { return (
{title}
{icon}
{value}
) } function QuickActionButton({ label, icon }: { label: string, icon: any }) { return ( ) }