'use client' import { useState, useEffect } from 'react' import { MapPin, Phone, User, ExternalLink, Map as MapIcon, Star, Send, Loader2, Building2 } from 'lucide-react' import { supabase } from '@/lib/supabase' import { submitReview } from '../action-review' import { showSwal } from '@/lib/swal' interface Posyandu { id: string nama_posyandu: string alamat: string kontak: string | null latitude: number | null longitude: number | null link_google_maps: string | null petugas?: { nama_petugas: string nomor_hp: string | null jabatan: string | null }[] } interface Review { id: string rating: number ulasan: string nama_pengulas: string created_at: string } interface Props { data: Posyandu userId: string } export default function PosyanduDetailClient({ data, userId }: Props) { const [reviews, setReviews] = useState([]) const [isLoadingReviews, setIsLoadingReviews] = useState(true) const [rating, setRating] = useState(5) const [comment, setComment] = useState('') const [isSubmitting, setIsSubmitting] = useState(false) useEffect(() => { fetchReviews() }, [data.id]) async function fetchReviews() { setIsLoadingReviews(true) const { data: reviewData, error } = await supabase .from('ulasan_posyandu') .select('*') .eq('posyandu_id', data.id) .order('created_at', { ascending: false }) if (!error && reviewData) { setReviews(reviewData as any) } setIsLoadingReviews(false) } async function handleSubmit(e: React.FormEvent) { e.preventDefault() if (!comment.trim()) { showSwal.error('Ops!', 'Komentar tidak boleh kosong.') return } setIsSubmitting(true) const result = await submitReview({ posyandu_id: data.id, nama_pengulas: 'Orang Tua', // Or fetch the actual name if available in session rating, comment: comment }) if (result.success) { showSwal.success('Berhasil!', 'Review Anda telah terkirim.') setComment('') setRating(5) fetchReviews() } else { showSwal.error('Gagal!', result.error || 'Terjadi kesalahan saat mengirim ulasan.') } setIsSubmitting(false) } const mapSrc = `https://maps.google.com/maps?q=${encodeURIComponent(data.alamat)}&z=15&output=embed` return (
{/* Left Column - Information */}
{/* Basic Info Card */}

Informasi Utama

Alamat Posyandu

{data.alamat}

{data.kontak && (
Kontak Layanan

{data.kontak}

)}
{/* Petugas Card */}

Petugas Bertugas

{data.petugas?.length || 0} Orang
{data.petugas && data.petugas.length > 0 ? ( data.petugas.map((pt: any, i) => (
{pt.nama_petugas?.[0]}

{pt.nama_petugas}

{pt.jabatan || 'Anggota'}

{pt.nomor_hp && (
{pt.nomor_hp}
)}
)) ) : (
Belum ada data petugas terdaftar di posyandu ini.
)}
{/* Reviews List */}

Ulasan Pengguna {reviews.length} REVIEW

{isLoadingReviews ? (

Memuat ulasan masyarakat...

) : reviews.length > 0 ? ( reviews.map((rev) => (
{rev.nama_pengulas?.[0] || 'A'}

{rev.nama_pengulas || 'Orang Tua'}

{[...Array(5)].map((_, i) => ( ))}

"{rev.ulasan}"

{new Date(rev.created_at).toLocaleDateString('id-ID', { day: 'numeric', month: 'long', year: 'numeric' })}

)) ) : (

Belum ada ulasan untuk lokasi ini.

)}
{/* Right Column - Map & Review Form */}
{/* Map Card */}

Lokasi Maps

{data.link_google_maps && ( )}
{/* Review Form Card */}

Berikan Ulasan

Ceritakan pengalaman Bapak/Ibu mengenai pelayanan di posyandu ini.

{[1, 2, 3, 4, 5].map((star) => ( ))}
{/* Background decoration */}
) }