'use client' import { useState, useEffect } from 'react' import { X, Save, Building2, MapPin, Phone, User, Map as MapIcon, Loader2, Info } from 'lucide-react' import { supabase } from '@/lib/supabase' import { useRouter } from 'next/navigation' interface PosyanduFormModalProps { isOpen: boolean onClose: () => void selectedData?: any | null } export function PosyanduFormModal({ isOpen, onClose, selectedData }: PosyanduFormModalProps) { const router = useRouter() const [loading, setLoading] = useState(false) const [formData, setFormData] = useState({ nama_posyandu: '', alamat: '', kontak: '', nama_petugas: '', // From petugas_posyandu_lokal link_google_maps: '', latitude: '', longitude: '' }) useEffect(() => { if (selectedData) { setFormData({ nama_posyandu: selectedData.nama_posyandu || '', alamat: selectedData.alamat || '', kontak: selectedData.kontak || '', nama_petugas: selectedData.petugas?.[0]?.nama_petugas || '', link_google_maps: selectedData.link_google_maps || '', latitude: selectedData.latitude?.toString() || '', longitude: selectedData.longitude?.toString() || '' }) } else { setFormData({ nama_posyandu: '', alamat: '', kontak: '', nama_petugas: '', link_google_maps: '', latitude: '', longitude: '' }) } }, [selectedData]) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setLoading(true) try { const payload = { nama_posyandu: formData.nama_posyandu, alamat: formData.alamat, kontak: formData.kontak, link_google_maps: formData.link_google_maps, latitude: formData.latitude ? parseFloat(formData.latitude) : null, longitude: formData.longitude ? parseFloat(formData.longitude) : null, } let posyanduId = selectedData?.id if (selectedData) { // Update const { error } = await supabase.from('detail_posyandu').update(payload).eq('id', selectedData.id) if (error) throw error } else { // Insert const { data, error } = await supabase.from('detail_posyandu').insert(payload).select().single() if (error) throw error posyanduId = data.id } // Sync Petugas (Simple logic: one main officer for this Posyandu) if (formData.nama_petugas) { const petugasPayload = { posyandu_id: posyanduId, nama_petugas: formData.nama_petugas, jabatan: 'Koordinator' } if (selectedData?.petugas?.[0]?.id) { await supabase.from('petugas_posyandu_lokal') .update(petugasPayload) .eq('id', selectedData.petugas[0].id) } else { await supabase.from('petugas_posyandu_lokal') .insert(petugasPayload) } } router.refresh() onClose() } catch (err: any) { alert('Gagal menyimpan data: ' + err.message) } finally { setLoading(false) } } if (!isOpen) return null return (
{/* Header */}

{selectedData ? 'Edit Data Posyandu' : 'Tambah Posyandu Baru'}

OPERASIONAL POSYANDU

{/* Form Body */}
{/* Nama Posyandu */}
setFormData({ ...formData, nama_posyandu: e.target.value })} className="w-full px-4 py-3 bg-gray-50 border-2 border-gray-100 focus:border-black rounded-xl text-sm font-bold outline-none transition-all" />
{/* Petugas & Kontak Section */}
setFormData({ ...formData, nama_petugas: e.target.value })} className="w-full px-4 py-3 bg-gray-50 border-2 border-gray-100 focus:border-black rounded-xl text-sm font-bold outline-none transition-all" />
setFormData({ ...formData, kontak: e.target.value })} className="w-full px-4 py-3 bg-gray-50 border-2 border-gray-100 focus:border-black rounded-xl text-sm font-bold outline-none transition-all" />
{/* Alamat */}