"use client"; import { useState, useEffect } from 'react'; import { API_URL } from "@/config/constants"; import { adminFetch } from "@/config/adminFetch"; import AdminMobileMenu from "@/components/AdminMobileMenu"; import Link from 'next/link'; export default function VtgWasher() { const [drafts, setDrafts] = useState([]); const [loading, setLoading] = useState(true); const [selectedIds, setSelectedIds] = useState([]); const [saving, setSaving] = useState(false); const fetchDrafts = () => { setLoading(true); adminFetch(`${API_URL}/admin/vtg/drafts`) .then(res => res.json()) .then(data => { const editableDrafts = data.map((f: any) => { let parsedDraft = f.vtg_draft; if (typeof parsedDraft === 'string') { try { parsedDraft = JSON.parse(parsedDraft); } catch (e) { console.error("Kunne ikke parse JSON", e); } } return { ...f, vtg_draft: parsedDraft, edit_pris: parsedDraft?.foreslatt_vtg_pris || f.vtg_pris || '', edit_beskrivelse: parsedDraft?.foreslatt_vtg_beskrivelse || f.vtg_beskrivelse || '', edit_datoer: parsedDraft?.foreslatt_vtg_datoer || [] }; }); 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 updateField = (facilityId: number, field: string, value: any) => { setDrafts(drafts.map(d => d.id === facilityId ? { ...d, [field]: value } : d)); }; const updateDateRow = (facilityId: number, rowIndex: number, field: string, value: string) => { setDrafts(drafts.map(d => { if (d.id === facilityId) { const newDates = [...d.edit_datoer]; newDates[rowIndex] = { ...newDates[rowIndex], [field]: value }; return { ...d, edit_datoer: newDates }; } return d; })); }; const addDateRow = (facilityId: number) => { setDrafts(drafts.map(d => { if (d.id === facilityId) { return { ...d, edit_datoer: [...d.edit_datoer, { dato: '', status: 'Ledig' }] }; } return d; })); }; const removeDateRow = (facilityId: number, rowIndex: number) => { setDrafts(drafts.map(d => { if (d.id === facilityId) { const newDates = [...d.edit_datoer]; newDates.splice(rowIndex, 1); return { ...d, edit_datoer: newDates }; } return d; })); }; const handleApprove = async () => { const toApprove = drafts.filter(d => selectedIds.includes(d.id)).map(d => ({ facility_id: d.id, vtg_pris: Number(d.edit_pris) || null, vtg_beskrivelse: d.edit_beskrivelse, vtg_datoer: d.edit_datoer })); if (toApprove.length === 0) return alert("Velg minst ett anlegg å godkjenne."); setSaving(true); try { const res = await adminFetch(`${API_URL}/admin/vtg/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 VTG-utkast...
; return (
← Tilbake til oversikten

VTG-Vaskeriet

Gå gjennom og godkjenn kursinformasjon for Veien til Golf.

{drafts.length === 0 ? (
🧹

Ingen ventende VTG-utkast!

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

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

Sjekk Nettside ↗
{draft.vtg_draft?.ai_begrunnelse && (
🤖 AI Begrunnelse: {draft.vtg_draft.ai_begrunnelse}
)}
{/* Pris & Beskrivelse */}

Pris & Beskrivelse

updateField(draft.id, 'edit_pris', e.target.value)} placeholder="Eks: 1990" />