'use client' import pengelolaanSampahState from '@/app/admin/(dashboard)/_state/lingkungan/pengelolaan-sampah'; import colors from '@/con/colors'; import { Box, Center, Flex, Group, Pagination, Paper, SimpleGrid, Skeleton, Stack, Text, TextInput } from '@mantine/core'; import { useDebouncedValue, useShallowEffect } from '@mantine/hooks'; import { Icon, IconAlertTriangle, IconAmbulance, IconBook, IconBuilding, IconBuildingCommunity, IconCash, IconChartLine, IconChristmasTreeFilled, IconClipboard, IconDroplet, IconFileText, IconFiretruck, IconFirstAidKit, IconHome, IconHomeEco, IconHospital, IconInfoCircle, IconLeaf, IconLifebuoy, IconMessageReport, IconPhoneCall, IconRecycle, IconRoute, IconRun, IconScale, IconSchool, IconSearch, IconShield, IconShieldFilled, IconShoppingCart, IconStethoscope, IconTent, IconTrash, IconTree, IconTrendingUp, IconTrophy, IconTruck, IconUsers } from '@tabler/icons-react'; import dynamic from 'next/dynamic'; import React, { useState } from 'react'; import { useProxy } from 'valtio/utils'; import BackButton from '../../desa/layanan/_com/BackButto'; // Dynamically import the map component to avoid SSR issues with Leaflet const LeafletMultiMarkerMap = dynamic( () => import('@/app/admin/(dashboard)/_com/LeafletMultiMarkerMap'), { ssr: false } ); function Page() { const state = useProxy(pengelolaanSampahState.pengelolaanSampah) const state2 = useProxy(pengelolaanSampahState.keteranganSampah) const [search, setSearch] = useState('') const [debouncedSearch] = useDebouncedValue(search, 1000); const { data, load, } = state.findMany const { data: data2, load: load2, page, totalPages, } = state2.findMany useShallowEffect(() => { load() load2(page, 3, debouncedSearch) }, [page, debouncedSearch]) const iconMap: Record = { ekowisata: IconLeaf, kompetisi: IconTrophy, wisata: IconTent, ekonomi: IconChartLine, sampah: IconRecycle, truck: IconTruck, scale: IconScale, clipboard: IconClipboard, trash: IconTrash, lingkunganSehat: IconHomeEco, sumberOksigen: IconChristmasTreeFilled, ekonomiBerkelanjutan: IconTrendingUp, mencegahBencana: IconShieldFilled, rumah: IconHome, pohon: IconTree, air: IconDroplet, bantuan: IconCash, pelatihan: IconSchool, subsidi: IconShoppingCart, layananKesehatan: IconHospital, // ===== Keamanan & Darurat ===== polisi: IconShieldFilled, ambulans: IconAmbulance, pemadam: IconFiretruck, darurat: IconAlertTriangle, sar: IconLifebuoy, evakuasi: IconRun, keamanan: IconShield, teleponDarurat: IconPhoneCall, // ===== Kesehatan ===== rumahSakit: IconHospital, puskesmas: IconFirstAidKit, klinik: IconStethoscope, // ===== Pemerintahan ===== bangunan: IconBuilding, kantorDesa: IconBuildingCommunity, administrasi: IconFileText, informasi: IconInfoCircle, pengaduan: IconMessageReport, layananPublik: IconUsers, book: IconBook }; if (state.findMany.loading || !data) { return ( ) } return ( Pengelolaan Sampah (Bank Sampah) Bank Sampah di Desa Darmasaba berfungsi sebagai tempat pengelolaan sampah yang bertujuan untuk mengurangi limbah dan memberikan manfaat ekonomi bagi masyarakat. Mekanisme Bank Sampah di Desa Darmasaba: {data.map((v, k) => { return ( {k + 1} {iconMap[v.icon] ? React.createElement(iconMap[v.icon]) : null} {v.name} ) })} Keterangan Bank Sampah Terdekat } placeholder='Cari Bank Sampah Terdekat' value={search} onChange={(e) => setSearch(e.target.value)} /> {/* Left side - List of bank locations */} Daftar Bank Sampah {data2?.map((v, k) => ( {v.namaTempatMaps} {v.alamat} Rute {v.lat && v.lng ? ( 📌 Lihat Peta Lebih Besar ) : ( Koordinat belum tersedia )} ))}
load(newPage)} // ini penting! total={totalPages} my="md" />
{/* Right side - Single map showing all locations */} Peta Lokasi {data2?.some(v => v.lat && v.lng) ? ( v.lat && v.lng) .map(v => ({ position: [v.lat, v.lng], popup: v.namaTempatMaps }))} /> ) : ( Tidak ada koordinat yang tersedia )}
); } export default Page;