"use client"; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import Link from 'next/link'; // KOMPONENT 1: Viser flate JSON-objekter (som fasiliteter) som rader med Nøkkel og Verdi const KeyValueEditor = ({ label, value, onChange }: { label: string, value: any, onChange: (v: any) => void }) => { const entries = Object.entries(value || {}); const updateKey = (oldKey: string, newKey: string, val: any) => { const newObj: any = {}; for (const [k, v] of entries) { if (k === oldKey) { if (newKey.trim()) newObj[newKey] = val; } else { newObj[k] = v; } } onChange(newObj); }; const updateVal = (key: string, val: string) => { onChange({ ...value, [key]: val }); }; const removeKey = (key: string) => { const newObj = { ...value }; delete newObj[key]; onChange(newObj); }; const addRow = () => { const tempKey = `ny_rad_${Date.now()}`; onChange({ ...value, [tempKey]: "" }); }; return (
{entries.map(([k, v]) => (
updateKey(k, e.target.value, v)} /> updateVal(k, e.target.value)} />
))}
); }; // KOMPONENT 2: Viser Arrays med objekter (som Greenfee-lister) som små pene kort const ListObjectEditor = ({ label, value, templateKeys, onChange }: { label: string, value: any[], templateKeys: string[], onChange: (v: any[]) => void }) => { const items = Array.isArray(value) ? value : []; const updateField = (index: number, key: string, val: string | number) => { const newItems = [...items]; // Prøv å konvertere til tall hvis det gir mening (for priser) const parsedVal = (!isNaN(Number(val)) && val !== "") ? Number(val) : val; newItems[index] = { ...newItems[index], [key]: parsedVal }; onChange(newItems); }; const addRow = () => { const newItem: any = {}; templateKeys.forEach(k => newItem[k] = ""); onChange([...items, newItem]); }; const removeRow = (index: number) => { const newItems = items.filter((_, i) => i !== index); onChange(newItems); }; return (
{items.map((item, idx) => (
{templateKeys.map(key => (
updateField(idx, key, e.target.value)} />
))}
))}
); }; export default function EditFacilityClient({ initialData }: { initialData: any }) { const router = useRouter(); const [formData, setFormData] = useState(initialData); const [activeTab, setActiveTab] = useState('generelt'); const [saving, setSaving] = useState(false); const handleChange = (field: string, value: any) => { setFormData((prev: any) => ({ ...prev, [field]: value })); }; const handleSave = async () => { setSaving(true); try { const res = await fetch(`/api/admin/facilities/${initialData.id}/full`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(formData) }); if (res.ok) { alert("Anlegget ble oppdatert suksessfullt!"); router.refresh(); } else { alert("Noe gikk galt under lagring."); } } catch (e) { alert("Nettverksfeil."); } setSaving(false); }; const tabs = [ { id: 'generelt', label: 'Generelt' }, { id: 'lokasjon', label: 'Lokasjon & Kontakt' }, { id: 'linker', label: 'Lenker & Media' }, { id: 'okonomi', label: 'Økonomi & Medlemskap' }, { id: 'avansert', label: 'Spesial & Strukturer (JSON)' } ]; const Input = ({ field, label, type = "text" }: { field: string, label: string, type?: string }) => (
{type === 'textarea' ? (