import { getAppConfigs, upsertConfig, deleteConfig } from "../../../config/actions"; import { getAppById } from "../../actions"; import { Save, Trash2, Smartphone, Globe, Plus, Code, ArrowLeft } from "lucide-react"; import Link from "next/link"; import { notFound } from "next/navigation"; import { revalidatePath } from "next/cache"; export default async function AppConfigPage({ 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 configToken = process.env.CONFIG_API_TOKEN ?? ""; const jsonUrl = `/api/config/${app.bundleId}?token=${configToken}`; const configs = await getAppConfigs(appId); // --- Server Actions --- async function handleAddConfig(formData: FormData) { "use server"; const key = formData.get("key") as string; const value = formData.get("value") as string; const type = formData.get("type") as string; let parsedValue: any = value; if (type === "boolean") parsedValue = value === "true"; if (type === "number") parsedValue = parseFloat(value); await upsertConfig(appId, key, parsedValue); revalidatePath(`/apps/${appId}/config`); } async function handleUpdateConfig(formData: FormData) { "use server"; const key = formData.get("key") as string; const rawValue = formData.get("value") as string; // Auto-detect type let parsedValue: any = rawValue; if (rawValue === "true") parsedValue = true; else if (rawValue === "false") parsedValue = false; else if (rawValue !== "" && !isNaN(Number(rawValue))) parsedValue = Number(rawValue); await upsertConfig(appId, key, parsedValue); revalidatePath(`/apps/${appId}/config`); } return (
{/* Sidebar */} {/* Main */}
{/* Header */}

{app.name} - Remote Config

{app.bundleId}

JSON Çıktısı
{/* API Erişim Bilgisi */}

Mobil Uygulama Entegrasyonu

URL {`/api/config/${app.bundleId}`}
Token {configToken || "— CONFIG_API_TOKEN tanımlı değil —"}

{`Authorization: Bearer ya da ?token= query parametresi ile erişin.`}

{/* Add New Config Panel */}

Yeni Ayar Ekle

{/* Config Table */}
{configs.map((config) => ( {/* Key — read only */} {/* Value — inline editable */} {/* Delete */} ))} {configs.length === 0 && ( )}
Key Value
{config.configKey}
{ "use server"; await deleteConfig(config.id); revalidatePath(`/apps/${appId}/config`); }} >
Henüz bir ayar eklenmemiş.
); }