"use client"; import { useState, useEffect } from 'react'; import { API_URL } from "@/config/constants"; import Link from 'next/link'; export default function GreenfeeWasher() { const [drafts, setDrafts] = useState([]); const [loading, setLoading] = useState(true); const [selectedIds, setSelectedIds] = useState([]); const [saving, setSaving] = useState(false); const fetchDrafts = () => { setLoading(true); fetch(`${API_URL}/admin/greenfee/drafts`) .then(res => res.json()) .then(data => { const editableDrafts = data.map((f: any) => { // JSONB fra Postgres kan noen ganger komme som en streng, // vi må sikre at vi parser det hvis det trengs let parsedDraft = f.greenfee_draft; if (typeof parsedDraft === 'string') { try { parsedDraft = JSON.parse(parsedDraft); } catch (e) { console.error("Kunne ikke parse JSON", e); } } // Hent ut selve listen (fallback til tom liste hvis noe er feil) const greenfeeList = parsedDraft?.foreslatt_greenfee || []; return { ...f, greenfee_draft: parsedDraft, // Lagre den parsede versjonen for visning edit_greenfee: greenfeeList // Dette er arrayet som binder seg til input-feltene }; }); setDrafts(editableDrafts); setLoading(false); }) .catch(() => setLoading(false)); }; useEffect(() => { fetchDrafts(); }, []); const toggleSelectAll = (checked: boolean) => { if (checked) setSelectedIds(drafts.map(d => d.id)); else setSelectedIds([]); }; const toggleOne = (id: number) => { if (selectedIds.includes(id)) setSelectedIds(selectedIds.filter(i => i !== id)); else setSelectedIds([...selectedIds, id]); }; const removeRow = (facilityId: number, rowIndex: number) => { setDrafts(drafts.map(d => { if (d.id === facilityId) { const newRows = [...d.edit_greenfee]; newRows.splice(rowIndex, 1); return { ...d, edit_greenfee: newRows }; } return d; })); }; const updateField = (facilityId: number, rowIndex: number, field: string, value: string | number) => { setDrafts(drafts.map(d => { if (d.id === facilityId) { const newRows = [...d.edit_greenfee]; newRows[rowIndex] = { ...newRows[rowIndex], [field]: value }; return { ...d, edit_greenfee: newRows }; } return d; })); }; const handleApprove = async () => { const toApprove = drafts.filter(d => selectedIds.includes(d.id)).map(d => ({ facility_id: d.id, greenfee: d.edit_greenfee.map((row: any) => ({ banenavn: row.banenavn || "", priskategori: row.priskategori || "", pris_voksne: Number(row.pris_voksne) || null, pris_junior: Number(row.pris_junior) || null })) })); if (toApprove.length === 0) return alert("Velg minst ett anlegg å godkjenne."); setSaving(true); try { const res = await fetch(`${API_URL}/admin/greenfee/approve-bulk`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ approvals: toApprove }) }); if (res.ok) { alert(`${toApprove.length} anlegg oppdatert!`); setSelectedIds([]); fetchDrafts(); } else { alert("Noe gikk galt under lagring."); } } catch (e) { alert("Nettverksfeil"); } setSaving(false); }; if (loading) return
Laster utkast...
; return (
← Tilbake til oversikten

Greenfee-Vaskeriet

Sjekk at prisene gir mening før publisering.

{drafts.length === 0 ? (
🧹

Alt er rent og pent!

) : (
0} onChange={(e) => toggleSelectAll(e.target.checked)} /> Velg Alle
{drafts.map(draft => (
toggleOne(draft.id)} />

{draft.name} ID: {draft.id}

Sjekk Nettside ↗
{draft.greenfee_draft?.ai_begrunnelse && (
🤖 AI Begrunnelse: {draft.greenfee_draft.ai_begrunnelse}
)} {draft.greenfee_draft?.foreslatt_avtaleklubber?.length > 0 && (
🤝 AI fant disse avtaleklubbene i teksten: {draft.greenfee_draft.foreslatt_avtaleklubber.join(', ')}
)}

Slik ser det ut i databasen nå:

{draft.greenfee && draft.greenfee.length > 0 ? draft.greenfee.map((g: any, i: number) => (
{g.banenavn} - {g.priskategori} V: {g.pris_voksne || '-'} | J: {g.pris_junior || '-'}
)) : "Ingen priser registrert."}

Nytt forslag å godkjenne:

{draft.edit_greenfee && draft.edit_greenfee.map((row: any, idx: number) => (
updateField(draft.id, idx, 'banenavn', e.target.value)} placeholder="Bane" /> updateField(draft.id, idx, 'priskategori', e.target.value)} placeholder="Kategori" /> updateField(draft.id, idx, 'pris_voksne', e.target.value)} placeholder="Voksen" /> updateField(draft.id, idx, 'pris_junior', e.target.value)} placeholder="Junior" />
))}
))}
)}
); }