"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 (
);
};
// 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' ? (
);
return (
← Tilbake til oversikten
Rediger: {initialData.name}
{tabs.map(tab => (
))}
);
}