From 7e95d5fbb4ef38284e51331e6be9dd9affd530f6 Mon Sep 17 00:00:00 2001 From: nico Date: Tue, 8 Jul 2025 00:30:55 +0800 Subject: [PATCH] Add Fitur Search Di setiap menu --- src/app/admin/(dashboard)/_com/header.tsx | 23 ++++- .../admin/(dashboard)/desa/berita/page.tsx | 48 ++++----- .../(dashboard)/desa/gallery/foto/page.tsx | 28 +++++- .../(dashboard)/desa/gallery/video/page.tsx | 28 +++++- .../pelayanan_surat_keterangan/page.tsx | 28 +++++- .../pelayanan_telunjuk_sakti_desa/page.tsx | 28 +++++- .../(dashboard)/desa/penghargaan/page.tsx | 28 +++++- .../(dashboard)/desa/pengumuman/page.tsx | 25 +++-- .../admin/(dashboard)/desa/potensi/page.tsx | 23 +++-- .../ekonomi/lowongan-kerja-lokal/page.tsx | 19 +++- .../pasar-desa/kategori-produk/page.tsx | 19 +++- .../pasar-desa/produk-pasar-desa/page.tsx | 20 +++- .../ekonomi/program-kemiskinan/page.tsx | 18 +++- .../hubungan-organisasi/page.tsx | 97 +++++++++++-------- .../pegawai/page.tsx | 21 +++- .../posisi-organisasi/page.tsx | 20 +++- .../page.tsx | 18 +++- .../keamanan/kontak-darurat/page.tsx | 19 +++- .../keamanan/laporan-publik/page.tsx | 19 +++- .../keamanan/pencegahan-kriminalitas/page.tsx | 19 +++- .../keamanan/polsek-terdekat/page.tsx | 19 +++- .../keamanan/tips-keamanan/page.tsx | 18 +++- .../artikel_kesehatan/page.tsx | 18 +++- .../fasilitas_kesehatan/page.tsx | 19 +++- .../grafik_hasil_kepuasan/page.tsx | 26 ++++- .../jadwal_kegiatan/page.tsx | 20 +++- .../page.tsx | 28 +++++- .../kesehatan/info-wabah-penyakit/page.tsx | 18 +++- .../kesehatan/kontak-darurat/page.tsx | 18 +++- .../kesehatan/penanganan-darurat/page.tsx | 19 +++- .../(dashboard)/kesehatan/posyandu/page.tsx | 18 +++- .../kesehatan/program-kesehatan/page.tsx | 22 ++++- .../(dashboard)/kesehatan/puskesmas/page.tsx | 18 +++- .../page.tsx | 46 +++++---- .../page.tsx | 29 +++++- .../grafik_berdasarkan_responden/page.tsx | 30 +++++- .../grafik_berdasarkan_umur/page.tsx | 33 ++++++- .../grafik_hasil_kepuasan_masyarakat/page.tsx | 27 +++++- 38 files changed, 792 insertions(+), 182 deletions(-) diff --git a/src/app/admin/(dashboard)/_com/header.tsx b/src/app/admin/(dashboard)/_com/header.tsx index 1a867c81..6aadc3ea 100644 --- a/src/app/admin/(dashboard)/_com/header.tsx +++ b/src/app/admin/(dashboard)/_com/header.tsx @@ -1,22 +1,37 @@ import React from 'react'; import { Grid, GridCol, Paper, TextInput, Title } from '@mantine/core'; -import { IconSearch } from '@tabler/icons-react'; // Sesuaikan jika kamu pakai icon lain +import { IconSearch } from '@tabler/icons-react'; import colors from '@/con/colors'; +type HeaderSearchProps = { + title: string; + placeholder?: string; + searchIcon?: React.ReactNode; + value?: string; + onChange?: (event: React.ChangeEvent) => void; +}; -const HeaderSearch = ({ title = "", placeholder = "pencarian", searchIcon = }: { title: string, placeholder?: string, searchIcon?: React.ReactNode }) => { +const HeaderSearch = ({ + title = "", + placeholder = "pencarian", + searchIcon = , + value, + onChange, +}: HeaderSearchProps) => { return ( {title} - + @@ -24,4 +39,4 @@ const HeaderSearch = ({ title = "", placeholder = "pencarian", searchIcon = - - - Berita - - - - } - /> - - - - + } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} + /> + ); } -function BeritaList() { +function ListBerita({ search }: { search: string }) { const beritaState = useProxy(stateDashboardBerita) + const router = useRouter() useShallowEffect(() => { beritaState.berita.findMany.load() }, []) - const router = useRouter() + const filteredData = (beritaState.berita.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.judul.toLowerCase().includes(keyword) || + item.kategoriBerita?.name.toLowerCase().includes(keyword) + ); + }); + if (!beritaState.berita.findMany.data) { return ( @@ -62,7 +66,7 @@ function BeritaList() { - +
Judul @@ -73,7 +77,7 @@ function BeritaList() { - {beritaState.berita.findMany.data?.map((item) => ( + {filteredData.map((item) => ( @@ -101,4 +105,4 @@ function BeritaList() { ) } -export default Page; +export default Berita; diff --git a/src/app/admin/(dashboard)/desa/gallery/foto/page.tsx b/src/app/admin/(dashboard)/desa/gallery/foto/page.tsx index 08035001..bbb60f0b 100644 --- a/src/app/admin/(dashboard)/desa/gallery/foto/page.tsx +++ b/src/app/admin/(dashboard)/desa/gallery/foto/page.tsx @@ -7,8 +7,26 @@ import JudulListTab from '../../../_com/jusulListTab'; import { useProxy } from 'valtio/utils'; import stateGallery from '../../../_state/desa/gallery'; import { useShallowEffect } from '@mantine/hooks'; +import HeaderSearch from '../../../_com/header'; +import { useState } from 'react'; function Foto() { + const [search, setSearch] = useState(""); + return ( + + } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} + /> + + + ); +} + +function ListFoto({ search }: { search: string }) { const fotoState = useProxy(stateGallery.foto) const router = useRouter(); @@ -16,6 +34,14 @@ function Foto() { fotoState.findMany.load() }, []) + const filteredData = (fotoState.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.name.toLowerCase().includes(keyword) || + item.deskripsi.toLowerCase().includes(keyword) + ); + }); + if (!fotoState.findMany.data) { return ( @@ -43,7 +69,7 @@ function Foto() { - {fotoState.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.name} {new Date(item.createdAt).toDateString()} diff --git a/src/app/admin/(dashboard)/desa/gallery/video/page.tsx b/src/app/admin/(dashboard)/desa/gallery/video/page.tsx index f0cea1d9..b941699d 100644 --- a/src/app/admin/(dashboard)/desa/gallery/video/page.tsx +++ b/src/app/admin/(dashboard)/desa/gallery/video/page.tsx @@ -7,8 +7,26 @@ import JudulListTab from '../../../_com/jusulListTab'; import { useProxy } from 'valtio/utils'; import stateGallery from '../../../_state/desa/gallery'; import { useShallowEffect } from '@mantine/hooks'; +import HeaderSearch from '../../../_com/header'; +import { useState } from 'react'; function Video() { + const [search, setSearch] = useState(""); + return ( + + } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} + /> + + + ); +} + +function ListVideo({ search }: { search: string }) { const videoState = useProxy(stateGallery.video) const router = useRouter(); @@ -16,6 +34,14 @@ function Video() { videoState.findMany.load() }, []) + const filteredData = (videoState.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.name.toLowerCase().includes(keyword) || + item.deskripsi.toLowerCase().includes(keyword) + ); + }); + if (!videoState.findMany.data) { return ( @@ -43,7 +69,7 @@ function Video() { - {videoState.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.name} {new Date(item.createdAt).toDateString()} diff --git a/src/app/admin/(dashboard)/desa/layanan/pelayanan_surat_keterangan/page.tsx b/src/app/admin/(dashboard)/desa/layanan/pelayanan_surat_keterangan/page.tsx index 9257c5d1..6b066706 100644 --- a/src/app/admin/(dashboard)/desa/layanan/pelayanan_surat_keterangan/page.tsx +++ b/src/app/admin/(dashboard)/desa/layanan/pelayanan_surat_keterangan/page.tsx @@ -7,8 +7,26 @@ import { useProxy } from 'valtio/utils'; import stateLayananDesa from '../../../_state/desa/layananDesa'; import { useShallowEffect } from '@mantine/hooks'; import { useRouter } from 'next/navigation'; +import { useState } from 'react'; +import HeaderSearch from '../../../_com/header'; function SuratKeterangan() { + const [search, setSearch] = useState(""); + return ( + + } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} + /> + + + ); +} + +function ListSuratKeterangan({ search }: { search: string }) { const suratKeteranganState = useProxy(stateLayananDesa.suratKeterangan) const router = useRouter() @@ -16,6 +34,14 @@ function SuratKeterangan() { suratKeteranganState.findMany.load() }, []) + const filteredData = (suratKeteranganState.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.name.toLowerCase().includes(keyword) || + item.deskripsi.toLowerCase().includes(keyword) + ); + }); + if (!suratKeteranganState.findMany.data) { return ( @@ -43,7 +69,7 @@ function SuratKeterangan() { - {suratKeteranganState.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.name} diff --git a/src/app/admin/(dashboard)/desa/layanan/pelayanan_telunjuk_sakti_desa/page.tsx b/src/app/admin/(dashboard)/desa/layanan/pelayanan_telunjuk_sakti_desa/page.tsx index 40e7e102..acbdba14 100644 --- a/src/app/admin/(dashboard)/desa/layanan/pelayanan_telunjuk_sakti_desa/page.tsx +++ b/src/app/admin/(dashboard)/desa/layanan/pelayanan_telunjuk_sakti_desa/page.tsx @@ -7,8 +7,26 @@ import { useProxy } from 'valtio/utils'; import stateLayananDesa from '../../../_state/desa/layananDesa'; import { useShallowEffect } from '@mantine/hooks'; import { useRouter } from 'next/navigation'; +import { useState } from 'react'; +import HeaderSearch from '../../../_com/header'; function PelayananTelunjukSakti() { + const [search, setSearch] = useState(""); + return ( + + } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} + /> + + + ); +} + +function ListPelayananTelunjukSakti({ search }: { search: string }) { const telunjukSaktiState = useProxy(stateLayananDesa.pelayananTelunjukSaktiDesa) const router = useRouter() @@ -16,6 +34,14 @@ function PelayananTelunjukSakti() { telunjukSaktiState.findMany.load() }, []) + const filteredData = (telunjukSaktiState.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.name.toLowerCase().includes(keyword) || + item.deskripsi.toLowerCase().includes(keyword) + ); + }); + if (!telunjukSaktiState.findMany.data) { return ( @@ -42,7 +68,7 @@ function PelayananTelunjukSakti() { - {telunjukSaktiState.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.name} diff --git a/src/app/admin/(dashboard)/desa/penghargaan/page.tsx b/src/app/admin/(dashboard)/desa/penghargaan/page.tsx index 6d839be6..bb4295ca 100644 --- a/src/app/admin/(dashboard)/desa/penghargaan/page.tsx +++ b/src/app/admin/(dashboard)/desa/penghargaan/page.tsx @@ -7,14 +7,40 @@ import { IconDeviceImac, IconSearch } from '@tabler/icons-react'; import { useRouter } from 'next/navigation'; import { useProxy } from 'valtio/utils'; import JudulListTab from '../../_com/jusulListTab'; +import { useState } from 'react'; +import HeaderSearch from '../../_com/header'; function Penghargaan() { + const [search, setSearch] = useState(""); + return ( + + } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} + /> + + + ); +} + +function ListPenghargaan({ search }: { search: string }) { const state = useProxy(penghargaanState) const router = useRouter() useShallowEffect(() => { state.findMany.load() }, []) + const filteredData = (state.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.name.toLowerCase().includes(keyword) || + item.deskripsi.toLowerCase().includes(keyword) + ); + }); + if (!state.findMany.data) { return( @@ -41,7 +67,7 @@ function Penghargaan() { - {state.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.name} diff --git a/src/app/admin/(dashboard)/desa/pengumuman/page.tsx b/src/app/admin/(dashboard)/desa/pengumuman/page.tsx index ad3df221..dd2dde97 100644 --- a/src/app/admin/(dashboard)/desa/pengumuman/page.tsx +++ b/src/app/admin/(dashboard)/desa/pengumuman/page.tsx @@ -11,21 +11,25 @@ import { ModalKonfirmasiHapus } from '../../_com/modalKonfirmasiHapus'; import { useState } from 'react'; -function Page() { +function Pengumuman() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function PengumumanList() { +function ListPengumuman({ search }: { search: string }) { const pengumumanState = useProxy(stateDesaPengumuman) + const router = useRouter() const [modalHapus, setModalHapus] = useState(false) const [selectedId, setSelectedId] = useState(null) @@ -33,7 +37,6 @@ function PengumumanList() { pengumumanState.pengumuman.findMany.load() }, []) - const router = useRouter() const handleHapus = () => { if (selectedId) { @@ -43,6 +46,14 @@ function PengumumanList() { } } + const filteredData = (pengumumanState.pengumuman.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.judul.toLowerCase().includes(keyword) || + item.CategoryPengumuman?.name.toLowerCase().includes(keyword) + ); + }); + if (!pengumumanState.pengumuman.findMany.data) { return ( @@ -76,7 +87,7 @@ function PengumumanList() { - {pengumumanState.pengumuman.findMany.data?.map((item) => ( + {filteredData.map((item) => ( @@ -108,4 +119,4 @@ function PengumumanList() { ) } -export default Page; +export default Pengumuman; diff --git a/src/app/admin/(dashboard)/desa/potensi/page.tsx b/src/app/admin/(dashboard)/desa/potensi/page.tsx index d9be0fac..8c74ce53 100644 --- a/src/app/admin/(dashboard)/desa/potensi/page.tsx +++ b/src/app/admin/(dashboard)/desa/potensi/page.tsx @@ -9,29 +9,40 @@ import { useProxy } from 'valtio/utils'; import HeaderSearch from '../../_com/header'; import JudulList from '../../_com/judulList'; import potensiDesaState from '../../_state/desa/potensi'; +import { useState } from 'react'; function Potensi() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListPotensi() { +function ListPotensi({ search }: { search: string }) { const potensiState = useProxy(potensiDesaState) + const router = useRouter() + useShallowEffect(() => { potensiState.findMany.load() }, []) - const router = useRouter() - +const filteredData = (potensiState.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.name.toLowerCase().includes(keyword) || + item.kategori.toLowerCase().includes(keyword) + ); +}); if (!potensiState.findMany.data) { return ( @@ -60,7 +71,7 @@ function ListPotensi() { - {potensiState.findMany.data?.map((item) => ( + {filteredData.map((item) => ( diff --git a/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/page.tsx b/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/page.tsx index f9f92468..f134486b 100644 --- a/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/lowongan-kerja-lokal/page.tsx @@ -8,21 +8,25 @@ import { useRouter } from 'next/navigation'; import lowonganKerjaState from '../../_state/ekonomi/lowongan-kerja'; import { useProxy } from 'valtio/utils'; import { useShallowEffect } from '@mantine/hooks'; +import { useState } from 'react'; function LowonganKerjaLokal() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListLowonganKerjaLokal() { +function ListLowonganKerjaLokal({ search }: { search: string }) { const lowonganState = useProxy(lowonganKerjaState) const router = useRouter(); @@ -30,6 +34,15 @@ function ListLowonganKerjaLokal() { lowonganState.findMany.load(); }, []) + const filteredData = (lowonganState.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.posisi.toLowerCase().includes(keyword) || + item.namaPerusahaan.toLowerCase().includes(keyword) || + item.lokasi.toLowerCase().includes(keyword) + ); + }); + if (!lowonganState.findMany.data) { return ( @@ -54,7 +67,7 @@ function ListLowonganKerjaLokal() { - {lowonganState.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.posisi} {item.namaPerusahaan} diff --git a/src/app/admin/(dashboard)/ekonomi/pasar-desa/kategori-produk/page.tsx b/src/app/admin/(dashboard)/ekonomi/pasar-desa/kategori-produk/page.tsx index bdca90f8..0e85744d 100644 --- a/src/app/admin/(dashboard)/ekonomi/pasar-desa/kategori-produk/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/pasar-desa/kategori-produk/page.tsx @@ -11,20 +11,24 @@ import JudulList from '../../../_com/judulList'; import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; import pasarDesaState from '../../../_state/ekonomi/pasar-desa/pasar-desa'; + function PasarDesa() { + const [search, setSearch] = useState("") return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListPasarDesa() { +function ListPasarDesa({ search }: { search: string }) { const statePasar = useProxy(pasarDesaState.kategoriProduk) const [modalHapus, setModalHapus] = useState(false) const [selectedId, setSelectedId] = useState(null) @@ -43,6 +47,13 @@ function ListPasarDesa() { } } + const filteredData = (statePasar.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.nama.toLowerCase().includes(keyword) + ); + }); + if (!statePasar.findMany.data) { return ( @@ -67,11 +78,11 @@ function ListPasarDesa() { - {statePasar.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.nama} - diff --git a/src/app/admin/(dashboard)/ekonomi/pasar-desa/produk-pasar-desa/page.tsx b/src/app/admin/(dashboard)/ekonomi/pasar-desa/produk-pasar-desa/page.tsx index a2c4f509..fa058222 100644 --- a/src/app/admin/(dashboard)/ekonomi/pasar-desa/produk-pasar-desa/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/pasar-desa/produk-pasar-desa/page.tsx @@ -8,21 +8,25 @@ import { useProxy } from 'valtio/utils'; import HeaderSearch from '../../../_com/header'; import JudulList from '../../../_com/judulList'; import pasarDesaState from '../../../_state/ekonomi/pasar-desa/pasar-desa'; +import { useState } from 'react'; function PasarDesa() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListPasarDesa() { +function ListPasarDesa({ search }: { search: string }) { const statePasar = useProxy(pasarDesaState.pasarDesa) const router = useRouter(); @@ -30,6 +34,16 @@ function ListPasarDesa() { statePasar.findMany.load() }, []) + const filteredData = (statePasar.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.nama.toLowerCase().includes(keyword) || + item.harga.toString().toLowerCase().includes(keyword) || + item.rating.toString().toLowerCase().includes(keyword) || + item.alamatUsaha.toLowerCase().includes(keyword) + ); + }); + if (!statePasar.findMany.data) { return ( @@ -56,7 +70,7 @@ function ListPasarDesa() { - {statePasar.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.nama} Rp.{item.harga} diff --git a/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/page.tsx b/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/page.tsx index a24a37ec..951f3254 100644 --- a/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/page.tsx @@ -13,19 +13,22 @@ import { useEffect, useState } from 'react'; import { CartesianGrid, Legend, Line, LineChart, Tooltip, XAxis, YAxis } from 'recharts'; function ProgramKemiskinan() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListProgramKemiskinan() { +function ListProgramKemiskinan({ search }: { search: string }) { const programState = useProxy(programKemiskinanState) const router = useRouter(); const [lineChart, setLineChart] = useState([]); @@ -51,6 +54,15 @@ function ListProgramKemiskinan() { } }, [programState.findMany.data]) + const filteredData = (programState.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.nama.toLowerCase().includes(keyword) || + item.deskripsi.toLowerCase().includes(keyword) || + item.statistik?.tahun.toString().includes(keyword) + ); + }); + if (!programState.findMany.data) { return ( @@ -75,7 +87,7 @@ function ListProgramKemiskinan() { - {programState.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.nama} diff --git a/src/app/admin/(dashboard)/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/hubungan-organisasi/page.tsx b/src/app/admin/(dashboard)/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/hubungan-organisasi/page.tsx index 6d312304..a4018cba 100644 --- a/src/app/admin/(dashboard)/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/hubungan-organisasi/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/hubungan-organisasi/page.tsx @@ -12,44 +12,58 @@ import { useState } from 'react'; import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; function HubunganOrganisasi() { + const [search, setSearch] = useState(""); + return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListHubunganOrganisasi() { + +function ListHubunganOrganisasi({ search }: { search: string }) { const stateOrganisasi = useProxy(strukturorganisasiState.hubunganOrganisasi); - const [modalHapus, setModalHapus] = useState(false) - const [selectedId, setSelectedId] = useState(null) - // const params = useParams() - const router = useRouter() + const [modalHapus, setModalHapus] = useState(false); + const [selectedId, setSelectedId] = useState(null); + const router = useRouter(); useShallowEffect(() => { - stateOrganisasi.findMany.load() - }, []) + stateOrganisasi.findMany.load(); + }, []); const handleHapus = () => { if (selectedId) { - stateOrganisasi.delete.byId(selectedId) - setModalHapus(false) - setSelectedId(null) + stateOrganisasi.delete.byId(selectedId); + setModalHapus(false); + setSelectedId(null); } - } + }; + + const filteredData = (stateOrganisasi.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.atasan?.namaLengkap?.toLowerCase().includes(keyword) || + item.bawahan?.namaLengkap?.toLowerCase().includes(keyword) || + item.tipe?.toLowerCase().includes(keyword) + ); + }); if (!stateOrganisasi.findMany.data) { return ( - ) + ); } + return ( @@ -68,34 +82,40 @@ function ListHubunganOrganisasi() { - {([...stateOrganisasi.findMany.data || []] - .sort((a, b) => { - return a.atasan?.namaLengkap.localeCompare(b.atasan?.namaLengkap); // kalau status sama, urut nama - }) // Aktif di atas - ).map((item) => ( - - {item.atasan?.namaLengkap} - {item.bawahan?.namaLengkap} - {item.tipe} - - - - - - - - ))} + {filteredData + .sort((a, b) => + a.atasan?.namaLengkap.localeCompare(b.atasan?.namaLengkap) + ) + .map((item) => ( + + {item.atasan?.namaLengkap} + {item.bawahan?.namaLengkap} + {item.tipe} + + + + + + + + ))}
- {/* Modal Konfirmasi Hapus */} + setModalHapus(false)} @@ -106,4 +126,5 @@ function ListHubunganOrganisasi() { ); } + export default HubunganOrganisasi; diff --git a/src/app/admin/(dashboard)/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/pegawai/page.tsx b/src/app/admin/(dashboard)/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/pegawai/page.tsx index af61fc73..b639f18e 100644 --- a/src/app/admin/(dashboard)/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/pegawai/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/pegawai/page.tsx @@ -8,21 +8,25 @@ import { useProxy } from 'valtio/utils'; import HeaderSearch from '../../../_com/header'; import JudulList from '../../../_com/judulList'; import strukturorganisasiState from '../../../_state/ekonomi/struktur-organisasi/struktur-organisasi'; +import { useState } from 'react'; function Pegawai() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListPegawai() { +function ListPegawai({ search }: { search: string }) { const stateOrganisasi = useProxy(strukturorganisasiState.pegawai); const router = useRouter(); @@ -59,8 +63,15 @@ function ListPegawai() { }; }, []); - // Log render cycle - console.log('Rendering with data:', stateOrganisasi.findMany.data); + const filteredData = (stateOrganisasi.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.namaLengkap?.toLowerCase().includes(keyword) || + item.gelarAkademik?.toLowerCase().includes(keyword) || + item.telepon?.toLowerCase().includes(keyword) || + item.posisi?.nama?.toLowerCase().includes(keyword) + ); + }); // Handle loading state if (stateOrganisasi.findMany.data === null) { @@ -107,7 +118,7 @@ function ListPegawai() { console.log('Rendering table with items:', stateOrganisasi.findMany.data); return null; })()} - {([...stateOrganisasi.findMany.data || []] + {([...filteredData] .sort((a, b) => { if (a.isActive === b.isActive) { return a.namaLengkap.localeCompare(b.namaLengkap); // kalau status sama, urut nama diff --git a/src/app/admin/(dashboard)/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/posisi-organisasi/page.tsx b/src/app/admin/(dashboard)/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/posisi-organisasi/page.tsx index 75ea5462..29e5561a 100644 --- a/src/app/admin/(dashboard)/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/posisi-organisasi/page.tsx +++ b/src/app/admin/(dashboard)/ekonomi/struktur-organisasi-dan-sk-pengurus-bumdesa/posisi-organisasi/page.tsx @@ -6,25 +6,28 @@ import { useRouter } from 'next/navigation'; import HeaderSearch from '../../../_com/header'; import JudulList from '../../../_com/judulList'; import { useProxy } from 'valtio/utils'; -import { useState } from 'react'; import { useShallowEffect } from '@mantine/hooks'; import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; import strukturorganisasiState from '../../../_state/ekonomi/struktur-organisasi/struktur-organisasi'; +import { useState } from 'react'; function PosisiOrganisasi() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListPosisiOrganisasi() { +function ListPosisiOrganisasi({ search }: { search: string }) { const stateOrganisasi = useProxy(strukturorganisasiState.posisiOrganisasi) const router = useRouter(); const [modalHapus, setModalHapus] = useState(false) @@ -42,6 +45,15 @@ function ListPosisiOrganisasi() { } } + const filteredData = (stateOrganisasi.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.nama?.toLowerCase().includes(keyword) || + item.deskripsi?.toLowerCase().includes(keyword) || + item.hierarki?.toString().toLowerCase().includes(keyword) + ); + }); + if (!stateOrganisasi.findMany.data) { return ( @@ -68,7 +80,7 @@ function ListPosisiOrganisasi() { - {stateOrganisasi.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.nama} diff --git a/src/app/admin/(dashboard)/keamanan/keamanan-lingkungan-pecalang-patwal/page.tsx b/src/app/admin/(dashboard)/keamanan/keamanan-lingkungan-pecalang-patwal/page.tsx index 34a39351..1c3f5d8e 100644 --- a/src/app/admin/(dashboard)/keamanan/keamanan-lingkungan-pecalang-patwal/page.tsx +++ b/src/app/admin/(dashboard)/keamanan/keamanan-lingkungan-pecalang-patwal/page.tsx @@ -8,21 +8,25 @@ import { useRouter } from 'next/navigation'; import { useProxy } from 'valtio/utils'; import keamananLingkunganState from '../../_state/keamanan/keamanan-lingkungan'; import { useShallowEffect } from '@mantine/hooks'; +import { useState } from 'react'; function KeamananLingkungan() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListKeamananLingkungan() { +function ListKeamananLingkungan({ search }: { search: string }) { const keamananState = useProxy(keamananLingkunganState) const router = useRouter(); @@ -30,6 +34,14 @@ function ListKeamananLingkungan() { keamananState.findMany.load() }, []) + const filteredData = (keamananState.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.name.toLowerCase().includes(keyword) || + item.deskripsi.toLowerCase().includes(keyword) + ); + }); + if (!keamananState.findMany.data) { return ( @@ -53,7 +65,7 @@ function ListKeamananLingkungan() { - {keamananState.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.name} diff --git a/src/app/admin/(dashboard)/keamanan/kontak-darurat/page.tsx b/src/app/admin/(dashboard)/keamanan/kontak-darurat/page.tsx index 391c388d..9349f4ae 100644 --- a/src/app/admin/(dashboard)/keamanan/kontak-darurat/page.tsx +++ b/src/app/admin/(dashboard)/keamanan/kontak-darurat/page.tsx @@ -8,21 +8,25 @@ import { useRouter } from 'next/navigation'; import { useProxy } from 'valtio/utils'; import kontakDaruratKeamananState from '../../_state/keamanan/kontak-darurat-keamanan'; import { useShallowEffect } from '@mantine/hooks'; +import { useState } from 'react'; function KontakDaurat() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListKontakDaurat() { +function ListKontakDaurat({ search }: { search: string }) { const kontakState = useProxy(kontakDaruratKeamananState) const router = useRouter(); @@ -30,6 +34,15 @@ function ListKontakDaurat() { kontakState.findMany.load() }, []) + const filteredData = (kontakState.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.nama.toLowerCase().includes(keyword) || + item.kontakItems[0].nama.toLowerCase().includes(keyword) || + item.kontakItems[0].nomorTelepon.toLowerCase().includes(keyword) + ); + }); + if (!kontakState.findMany.data) { return ( @@ -54,7 +67,7 @@ function ListKontakDaurat() { - {kontakState.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.nama} {item.kontakItems[0].nama} diff --git a/src/app/admin/(dashboard)/keamanan/laporan-publik/page.tsx b/src/app/admin/(dashboard)/keamanan/laporan-publik/page.tsx index 18042823..5119b202 100644 --- a/src/app/admin/(dashboard)/keamanan/laporan-publik/page.tsx +++ b/src/app/admin/(dashboard)/keamanan/laporan-publik/page.tsx @@ -8,21 +8,25 @@ import { useRouter } from 'next/navigation'; import { useProxy } from 'valtio/utils'; import laporanPublikState from '../../_state/keamanan/laporan-publik'; import { useShallowEffect } from '@mantine/hooks'; +import { useState } from 'react'; function LaporanPublik() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListLaporanPublik() { +function ListLaporanPublik({ search }: { search: string }) { const stateLaporan = useProxy(laporanPublikState) const router = useRouter(); @@ -30,6 +34,15 @@ function ListLaporanPublik() { stateLaporan.findMany.load() }, []) + const filteredData = (stateLaporan.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.judul.toLowerCase().includes(keyword) || + item.status.toLowerCase().includes(keyword) || + item.kronologi?.toLowerCase().includes(keyword) + ); + }); + if (!stateLaporan.findMany.data) { return ( @@ -55,7 +68,7 @@ function ListLaporanPublik() { - {stateLaporan.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.judul} {new Date(item.tanggalWaktu).toLocaleDateString('id-ID')} diff --git a/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/page.tsx b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/page.tsx index 1b901345..bbbd76ab 100644 --- a/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/page.tsx +++ b/src/app/admin/(dashboard)/keamanan/pencegahan-kriminalitas/page.tsx @@ -8,21 +8,25 @@ import { useRouter } from 'next/navigation'; import { useProxy } from 'valtio/utils'; import pencegahanKriminalitasState from '../../_state/keamanan/pencegahan-kriminalitas'; import { useShallowEffect } from '@mantine/hooks'; +import { useState } from 'react'; function PencegahanKriminalitas() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListPencegahanKriminalitas() { +function ListPencegahanKriminalitas({ search }: { search: string }) { const kriminalitasState = useProxy(pencegahanKriminalitasState) const router = useRouter(); @@ -30,6 +34,15 @@ function ListPencegahanKriminalitas() { kriminalitasState.findMany.load() }, []) + const filteredData = (kriminalitasState.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.programKeamanan.nama.toLowerCase().includes(keyword) || + item.programKeamanan.slug.toLowerCase().includes(keyword) || + item.programKeamanan.deskripsi?.toLowerCase().includes(keyword) + ); + }); + if (!kriminalitasState.findMany.data) { return ( @@ -55,7 +68,7 @@ function ListPencegahanKriminalitas() { - {kriminalitasState.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.programKeamanan.nama} {item.programKeamanan.slug} diff --git a/src/app/admin/(dashboard)/keamanan/polsek-terdekat/page.tsx b/src/app/admin/(dashboard)/keamanan/polsek-terdekat/page.tsx index 043e74ef..d0fd7bdd 100644 --- a/src/app/admin/(dashboard)/keamanan/polsek-terdekat/page.tsx +++ b/src/app/admin/(dashboard)/keamanan/polsek-terdekat/page.tsx @@ -8,21 +8,25 @@ import { useProxy } from 'valtio/utils'; import HeaderSearch from '../../_com/header'; import JudulList from '../../_com/judulList'; import polsekTerdekat from '../../_state/keamanan/polsek-terdekat'; +import { useState } from 'react'; function PolsekTerdekat() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListPolsekTerdekat() { +function ListPolsekTerdekat({ search }: { search: string }) { const polsekState = useProxy(polsekTerdekat) const router = useRouter(); @@ -30,6 +34,15 @@ function ListPolsekTerdekat() { polsekState.findMany.load() }, []) + const filteredData = (polsekState.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.nama.toLowerCase().includes(keyword) || + item.jarakKeDesa.toLowerCase().includes(keyword) || + item.alamat.toLowerCase().includes(keyword) + ); + }); + if (!polsekState.findMany.data) { return ( @@ -54,7 +67,7 @@ function ListPolsekTerdekat() { - {polsekState.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.nama} {item.jarakKeDesa} diff --git a/src/app/admin/(dashboard)/keamanan/tips-keamanan/page.tsx b/src/app/admin/(dashboard)/keamanan/tips-keamanan/page.tsx index 7169aafe..94b9bd76 100644 --- a/src/app/admin/(dashboard)/keamanan/tips-keamanan/page.tsx +++ b/src/app/admin/(dashboard)/keamanan/tips-keamanan/page.tsx @@ -8,21 +8,25 @@ import { useRouter } from 'next/navigation'; import tipsKeamananState from '../../_state/keamanan/tips-keamanan'; import { useProxy } from 'valtio/utils'; import { useShallowEffect } from '@mantine/hooks'; +import { useState } from 'react'; function TipsKeamanan() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListTipsKeamanan() { +function ListTipsKeamanan({ search }: { search: string }) { const stateKeamanan = useProxy(tipsKeamananState) const router = useRouter(); @@ -30,6 +34,14 @@ function ListTipsKeamanan() { stateKeamanan.findMany.load() }, []) + const filteredData = (stateKeamanan.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.judul.toLowerCase().includes(keyword) || + item.deskripsi.toLowerCase().includes(keyword) + ); + }); + if (!stateKeamanan.findMany.data) { return ( @@ -53,7 +65,7 @@ function ListTipsKeamanan() { - {stateKeamanan.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.judul} diff --git a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/artikel_kesehatan/page.tsx b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/artikel_kesehatan/page.tsx index 5946a042..f01a17f1 100644 --- a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/artikel_kesehatan/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/artikel_kesehatan/page.tsx @@ -8,22 +8,26 @@ import { useProxy } from 'valtio/utils'; import HeaderSearch from '../../../_com/header'; import JudulList from '../../../_com/judulList'; import artikelKesehatanState from '../../../_state/kesehatan/data_kesehatan_warga/artikelKesehatan'; +import { useState } from 'react'; function ArtikelKesehatan() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListArtikelKesehatan() { +function ListArtikelKesehatan({ search }: { search: string }) { const stateArtikelKesehatan = useProxy(artikelKesehatanState) const router = useRouter(); @@ -31,6 +35,14 @@ function ListArtikelKesehatan() { stateArtikelKesehatan.findMany.load() }, []) + const filteredData = (stateArtikelKesehatan.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.title.toLowerCase().includes(keyword) || + item.content.toLowerCase().includes(keyword) + ); + }); + if (!stateArtikelKesehatan.findMany.data) { return ( @@ -56,7 +68,7 @@ function ListArtikelKesehatan() { - {stateArtikelKesehatan.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.title} {item.content} diff --git a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/fasilitas_kesehatan/page.tsx b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/fasilitas_kesehatan/page.tsx index fecd5925..45042834 100644 --- a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/fasilitas_kesehatan/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/fasilitas_kesehatan/page.tsx @@ -8,22 +8,26 @@ import { useProxy } from 'valtio/utils'; import fasilitasKesehatanState from '../../../_state/kesehatan/data_kesehatan_warga/fasilitasKesehatan'; import HeaderSearch from '../../../_com/header'; import JudulList from '../../../_com/judulList'; +import { useState } from 'react'; function FasilitasKesehatan() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListFasilitasKesehatan() { +function ListFasilitasKesehatan({ search }: { search: string }) { const stateFasilitasKesehatan = useProxy(fasilitasKesehatanState) const router = useRouter(); @@ -31,6 +35,15 @@ function ListFasilitasKesehatan() { stateFasilitasKesehatan.findMany.load() }, []) + const filteredData = (stateFasilitasKesehatan.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.name.toLowerCase().includes(keyword) || + item.informasiumum.alamat.toLowerCase().includes(keyword) || + item.informasiumum.jamOperasional.toLowerCase().includes(keyword) + ); + }); + if (!stateFasilitasKesehatan.findMany.data) { return ( @@ -57,7 +70,7 @@ function ListFasilitasKesehatan() { - {stateFasilitasKesehatan.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.name} {item.informasiumum.alamat} diff --git a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/grafik_hasil_kepuasan/page.tsx b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/grafik_hasil_kepuasan/page.tsx index 935f1d32..a83c52fb 100644 --- a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/grafik_hasil_kepuasan/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/grafik_hasil_kepuasan/page.tsx @@ -10,8 +10,24 @@ import { useProxy } from 'valtio/utils'; import JudulListTab from '../../../_com/jusulListTab'; import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; import grafikkepuasan from '../../../_state/kesehatan/data_kesehatan_warga/grafikKepuasan'; +import HeaderSearch from '../../../_com/header'; function GrafikHasilKepuasanMasyarakat() { + const [search, setSearch] = useState(""); + return ( + + } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} + /> + + + ); +} +function ListGrafikHasilKepuasanMasyarakat({ search }: { search: string }) { type PDKMGrafik = { id: string; label: string; @@ -52,6 +68,14 @@ function GrafikHasilKepuasanMasyarakat() { } }, [stateGrafikKepuasan.findMany.data]); + const filteredData = (stateGrafikKepuasan.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.label.toLowerCase().includes(keyword) || + item.jumlah.toString().toLowerCase().includes(keyword) + ); + }); + if (!stateGrafikKepuasan.findMany.data) { return ( @@ -81,7 +105,7 @@ function GrafikHasilKepuasanMasyarakat() { - {stateGrafikKepuasan.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.label} {item.jumlah} diff --git a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/jadwal_kegiatan/page.tsx b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/jadwal_kegiatan/page.tsx index 99b9734e..3cee8a7a 100644 --- a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/jadwal_kegiatan/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/jadwal_kegiatan/page.tsx @@ -8,21 +8,25 @@ import { useProxy } from 'valtio/utils'; import HeaderSearch from '../../../_com/header'; import JudulList from '../../../_com/judulList'; import jadwalKegiatanState from '../../../_state/kesehatan/data_kesehatan_warga/jadwalKegiatan'; +import { useState } from 'react'; function JadwalKegiatan() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListJadwalKegiatan() { +function ListJadwalKegiatan({ search }: { search: string }) { const stateJadwalKegiatan = useProxy(jadwalKegiatanState) const router = useRouter(); @@ -30,6 +34,16 @@ function ListJadwalKegiatan() { stateJadwalKegiatan.findMany.load() }, []) + const filteredData = (stateJadwalKegiatan.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.informasijadwalkegiatan.name.toLowerCase().includes(keyword) || + item.informasijadwalkegiatan.tanggal.toLowerCase().includes(keyword) || + item.informasijadwalkegiatan.waktu.toLowerCase().includes(keyword) || + item.informasijadwalkegiatan.lokasi.toLowerCase().includes(keyword) + ); + }); + if (!stateJadwalKegiatan.findMany.data) { return ( @@ -57,7 +71,7 @@ function ListJadwalKegiatan() { - {stateJadwalKegiatan.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.informasijadwalkegiatan.name} {item.informasijadwalkegiatan.tanggal} diff --git a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/page.tsx b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/page.tsx index 6898299e..8b8f8c5a 100644 --- a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/persentase_data_kelahiran_kematian/page.tsx @@ -10,8 +10,24 @@ import { Bar, BarChart, Legend, Tooltip, XAxis, YAxis } from 'recharts'; import { useProxy } from 'valtio/utils'; import JudulListTab from '../../../_com/jusulListTab'; import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; +import HeaderSearch from '../../../_com/header'; function PersentaseDataKelahiranKematian() { + const [search, setSearch] = useState(""); + return ( + + } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} + /> + + + ); +} +function ListPersentaseDataKelahiranKematian({ search }: { search: string }) { type PDKMGrafik = { id: string; tahun: string; @@ -56,6 +72,16 @@ function PersentaseDataKelahiranKematian() { } }, [statePersentase.findMany.data]); + const filteredData = (statePersentase.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.tahun.toLowerCase().includes(keyword) || + item.kematianKasar.toString().toLowerCase().includes(keyword) || + item.kematianBayi.toString().toLowerCase().includes(keyword) || + item.kelahiranKasar.toString().toLowerCase().includes(keyword) + ); + }); + if (!statePersentase.findMany.data) { return ( @@ -87,7 +113,7 @@ function PersentaseDataKelahiranKematian() { - {statePersentase.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.tahun} {item.kematianKasar} diff --git a/src/app/admin/(dashboard)/kesehatan/info-wabah-penyakit/page.tsx b/src/app/admin/(dashboard)/kesehatan/info-wabah-penyakit/page.tsx index 92bc2ac6..f6989169 100644 --- a/src/app/admin/(dashboard)/kesehatan/info-wabah-penyakit/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/info-wabah-penyakit/page.tsx @@ -8,21 +8,25 @@ import { useRouter } from 'next/navigation'; import { useProxy } from 'valtio/utils'; import infoWabahPenyakit from '../../_state/kesehatan/info-wabah-penyakit/infoWabahPenyakit'; import { useShallowEffect } from '@mantine/hooks'; +import { useState } from 'react'; function InfoWabahPenyakit() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListInfoWabahPenyakit() { +function ListInfoWabahPenyakit({ search }: { search: string }) { const infoWabahPenyakitState = useProxy(infoWabahPenyakit) const router = useRouter() @@ -30,6 +34,14 @@ function ListInfoWabahPenyakit() { infoWabahPenyakitState.findMany.load() }, []) + const filteredData = (infoWabahPenyakitState.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.name.toLowerCase().includes(keyword) || + item.deskripsiSingkat.toLowerCase().includes(keyword) + ); + }); + if (!infoWabahPenyakitState.findMany.data) { return ( @@ -56,7 +68,7 @@ function ListInfoWabahPenyakit() { - {infoWabahPenyakitState.findMany.data?.map((item) => ( + {filteredData.map((item) => ( diff --git a/src/app/admin/(dashboard)/kesehatan/kontak-darurat/page.tsx b/src/app/admin/(dashboard)/kesehatan/kontak-darurat/page.tsx index dae268f9..17460068 100644 --- a/src/app/admin/(dashboard)/kesehatan/kontak-darurat/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/kontak-darurat/page.tsx @@ -8,21 +8,25 @@ import { useRouter } from 'next/navigation'; import { useProxy } from 'valtio/utils'; import kontakDarurat from '../../_state/kesehatan/kontak-darurat/kontakDarurat'; import { useShallowEffect } from '@mantine/hooks'; +import { useState } from 'react'; function KontakDarurat() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListKontakDarurat() { +function ListKontakDarurat({ search }: { search: string }) { const kontakDaruratState = useProxy(kontakDarurat) const router = useRouter(); @@ -30,6 +34,14 @@ function ListKontakDarurat() { kontakDaruratState.findMany.load() }, []) + const filteredData = (kontakDaruratState.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.name.toLowerCase().includes(keyword) || + item.deskripsi.toLowerCase().includes(keyword) + ); + }); + if (!kontakDaruratState.findMany.data) { return ( @@ -57,7 +69,7 @@ function ListKontakDarurat() { - {kontakDaruratState.findMany.data?.map((item) => ( + {filteredData.map((item) => ( diff --git a/src/app/admin/(dashboard)/kesehatan/penanganan-darurat/page.tsx b/src/app/admin/(dashboard)/kesehatan/penanganan-darurat/page.tsx index 4468840c..b0c72127 100644 --- a/src/app/admin/(dashboard)/kesehatan/penanganan-darurat/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/penanganan-darurat/page.tsx @@ -8,22 +8,25 @@ import { useRouter } from 'next/navigation'; import { useProxy } from 'valtio/utils'; import { useShallowEffect } from '@mantine/hooks'; import penangananDarurat from '../../_state/kesehatan/penanganan-darurat/penangananDarurat'; - +import { useState } from 'react'; function PenangananDarurat() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListPenangananDarurat() { +function ListPenangananDarurat({ search }: { search: string }) { const penangananDaruratState = useProxy(penangananDarurat) const router = useRouter(); @@ -31,6 +34,14 @@ function ListPenangananDarurat() { penangananDaruratState.findMany.load() }, []) + const filteredData = (penangananDaruratState.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.name.toLowerCase().includes(keyword) || + item.deskripsi.toLowerCase().includes(keyword) + ); + }); + if (!penangananDaruratState.findMany.data) { return ( @@ -58,7 +69,7 @@ function ListPenangananDarurat() { - {penangananDaruratState.findMany.data?.map((item) => ( + {filteredData.map((item) => ( diff --git a/src/app/admin/(dashboard)/kesehatan/posyandu/page.tsx b/src/app/admin/(dashboard)/kesehatan/posyandu/page.tsx index f25f694f..03e2e6be 100644 --- a/src/app/admin/(dashboard)/kesehatan/posyandu/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/posyandu/page.tsx @@ -8,21 +8,25 @@ import { useRouter } from 'next/navigation'; import { useProxy } from 'valtio/utils'; import posyandustate from '../../_state/kesehatan/posyandu/posyandu'; import { useShallowEffect } from '@mantine/hooks'; +import { useState } from 'react'; function Posyandu() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListPosyandu() { +function ListPosyandu({ search }: { search: string }) { const statePosyandu = useProxy(posyandustate) const router = useRouter(); @@ -30,6 +34,14 @@ function ListPosyandu() { statePosyandu.findMany.load() }, []) + const filteredData = (statePosyandu.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.name.toLowerCase().includes(keyword) || + item.nomor.toString().toLowerCase().includes(keyword) + ); + }); + if (!statePosyandu.findMany.data) { return ( @@ -56,7 +68,7 @@ function ListPosyandu() { - {statePosyandu.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.name} {item.nomor} diff --git a/src/app/admin/(dashboard)/kesehatan/program-kesehatan/page.tsx b/src/app/admin/(dashboard)/kesehatan/program-kesehatan/page.tsx index c7c6206e..d742ebd4 100644 --- a/src/app/admin/(dashboard)/kesehatan/program-kesehatan/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/program-kesehatan/page.tsx @@ -8,21 +8,25 @@ import { useRouter } from 'next/navigation'; import programKesehatan from '../../_state/kesehatan/program-kesehatan/programKesehatan'; import { useProxy } from 'valtio/utils'; import { useShallowEffect } from '@mantine/hooks'; +import { useState } from 'react'; function ProgramKesehatan() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListProgramKesehatan() { +function ListProgramKesehatan({ search }: { search: string }) { const programKesehatanState = useProxy(programKesehatan) const router = useRouter() @@ -30,6 +34,14 @@ function ListProgramKesehatan() { programKesehatanState.findMany.load() }, []) + const filteredData = (programKesehatanState.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.name.toLowerCase().includes(keyword) || + item.deskripsiSingkat.toLowerCase().includes(keyword) + ); + }); + if (!programKesehatanState.findMany.data) { return ( @@ -57,14 +69,16 @@ function ListProgramKesehatan() { - {programKesehatanState.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.name} - {item.deskripsiSingkat} + + + image diff --git a/src/app/admin/(dashboard)/kesehatan/puskesmas/page.tsx b/src/app/admin/(dashboard)/kesehatan/puskesmas/page.tsx index 403e4d8b..34aba732 100644 --- a/src/app/admin/(dashboard)/kesehatan/puskesmas/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/puskesmas/page.tsx @@ -8,21 +8,25 @@ import { useProxy } from 'valtio/utils'; import HeaderSearch from '../../_com/header'; import JudulList from '../../_com/judulList'; import puskesmasState from '../../_state/kesehatan/puskesmas/puskesmas'; +import { useState } from 'react'; function Puskesmas() { + const [search, setSearch] = useState(""); return ( } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} /> - + ); } -function ListPuskesmas() { +function ListPuskesmas({ search }: { search: string }) { const statePuskesmas = useProxy(puskesmasState) const router = useRouter(); @@ -30,6 +34,14 @@ function ListPuskesmas() { statePuskesmas.findMany.load() }, []) + const filteredData = (statePuskesmas.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.name.toLowerCase().includes(keyword) || + item.alamat.toLowerCase().includes(keyword) + ); + }); + if (!statePuskesmas.findMany.data) { return ( @@ -56,7 +68,7 @@ function ListPuskesmas() { - {statePuskesmas.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.name} {item.alamat} diff --git a/src/app/admin/(dashboard)/ppid/daftar-informasi-publik-desa-darmasaba/page.tsx b/src/app/admin/(dashboard)/ppid/daftar-informasi-publik-desa-darmasaba/page.tsx index 05862507..95248ade 100644 --- a/src/app/admin/(dashboard)/ppid/daftar-informasi-publik-desa-darmasaba/page.tsx +++ b/src/app/admin/(dashboard)/ppid/daftar-informasi-publik-desa-darmasaba/page.tsx @@ -1,42 +1,46 @@ 'use client' import colors from '@/con/colors'; -import { Box, Button, Grid, GridCol, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, TextInput, Title } from '@mantine/core'; +import { Box, Button, Grid, GridCol, Paper, Skeleton, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; import { IconCircleDashedPlus, IconDeviceImacCog, IconSearch } from '@tabler/icons-react'; import { useRouter } from 'next/navigation'; +import { useState } from 'react'; import { useProxy } from 'valtio/utils'; +import HeaderSearch from '../../_com/header'; import daftarInformasiPublik from '../../_state/ppid/daftar_informasi_publik/daftarInformasiPublik'; -function Page() { +function DaftarInformasiPublik() { + const [search, setSearch] = useState(""); return ( - - - Daftar Informasi Publik Desa Darmasaba - - - - } - /> - - - - + } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} + /> + ); } -function ListDaftarInformasi() { +function ListDaftarInformasi({ search }: { search: string }) { const listData = useProxy(daftarInformasiPublik) + const router = useRouter() useShallowEffect(() => { listData.findMany.load() }, []) - const router = useRouter() + + const filteredData = (listData.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.jenisInformasi.toLowerCase().includes(keyword) || + item.deskripsi.toLowerCase().includes(keyword) + ); + }); if (!listData.findMany.data) { return ( @@ -77,7 +81,7 @@ function ListDaftarInformasi() { - {listData.findMany.data?.map((item, index) => ( + {filteredData.map((item, index) => ( {index + 1} {item.jenisInformasi} @@ -98,4 +102,4 @@ function ListDaftarInformasi() { ) } -export default Page; +export default DaftarInformasiPublik; diff --git a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/grafik_berdasarkan_jenis_kelamin_responden/page.tsx b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/grafik_berdasarkan_jenis_kelamin_responden/page.tsx index 3544a288..f474f7d1 100644 --- a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/grafik_berdasarkan_jenis_kelamin_responden/page.tsx +++ b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/grafik_berdasarkan_jenis_kelamin_responden/page.tsx @@ -11,8 +11,25 @@ import { Cell, Pie, PieChart } from 'recharts'; import { useProxy } from 'valtio/utils'; import JudulListTab from '../../../_com/jusulListTab'; import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; +import HeaderSearch from '../../../_com/header'; function GrafikBerdasarkanJenisKelamin() { + const [search, setSearch] = useState(""); + return ( + + } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} + /> + + + ); +} + +function ListGrafikBerdasarkanJenisKelamin({ search }: { search: string }) { const stategrafikBerdasarkanJenisKelamin = useProxy(grafikBerdasarkanJenisKelamin) const [donutData, setDonutData] = useState([]); const [mounted, setMounted] = useState(false); @@ -46,6 +63,14 @@ function GrafikBerdasarkanJenisKelamin() { } }, [stategrafikBerdasarkanJenisKelamin.findMany.data]) + const filteredData = (stategrafikBerdasarkanJenisKelamin.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.laki.toString().toLowerCase().includes(keyword) || + item.perempuan.toString().toLowerCase().includes(keyword) + ); + }); + if (!stategrafikBerdasarkanJenisKelamin.findMany.data) { return ( @@ -74,14 +99,14 @@ function GrafikBerdasarkanJenisKelamin() { - {stategrafikBerdasarkanJenisKelamin.findMany.data.length === 0 ? ( + {filteredData.length === 0 ? ( Belum ada data grafik responden ) : ( - stategrafikBerdasarkanJenisKelamin.findMany.data.map((item) => ( + filteredData.map((item) => ( {item.laki} {item.perempuan} diff --git a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/grafik_berdasarkan_responden/page.tsx b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/grafik_berdasarkan_responden/page.tsx index 73161b0b..414de2c8 100644 --- a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/grafik_berdasarkan_responden/page.tsx +++ b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/grafik_berdasarkan_responden/page.tsx @@ -11,9 +11,25 @@ import { useSnapshot } from 'valtio'; import JudulListTab from '../../../_com/jusulListTab'; import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; import grafikBerdasarkanResponden from '../../../_state/ppid/indeks_kepuasan_masyarakat/grafikBerdasarkanResponden'; +import HeaderSearch from '../../../_com/header'; function GrafikBerdasarkanResponden() { + const [search, setSearch] = useState(""); + return ( + + } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} + /> + + + ); +} +function ListGrafikBerdasarkanResponden({ search }: { search: string }) { const stategrafikBerdasarkanResponden = useSnapshot(grafikBerdasarkanResponden) const [donutData, setDonutData] = useState([]); const [mounted, setMounted] = useState(false); @@ -38,6 +54,16 @@ function GrafikBerdasarkanResponden() { stategrafikBerdasarkanResponden.findMany.load() }, []) + const filteredData = (stategrafikBerdasarkanResponden.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.sangatbaik.toString().toLowerCase().includes(keyword) || + item.baik.toString().toLowerCase().includes(keyword) || + item.kurangbaik.toString().toLowerCase().includes(keyword) || + item.tidakbaik.toString().toLowerCase().includes(keyword) + ); + }); + useEffect(() => { if (stategrafikBerdasarkanResponden.findMany.data) { const totalSangatBaik = stategrafikBerdasarkanResponden.findMany.data.reduce((acc: number, cur: any) => acc + Number(cur.sangatbaik || 0), 0); @@ -83,14 +109,14 @@ function GrafikBerdasarkanResponden() { - {stategrafikBerdasarkanResponden.findMany.data.length === 0 ? ( + {filteredData.length === 0 ? ( Belum ada data grafik responden ) : ( - stategrafikBerdasarkanResponden.findMany.data.map((item) => ( + filteredData.map((item) => ( {item.sangatbaik} {item.baik} diff --git a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/grafik_berdasarkan_umur/page.tsx b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/grafik_berdasarkan_umur/page.tsx index 6cfaae71..0301bccb 100644 --- a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/grafik_berdasarkan_umur/page.tsx +++ b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/grafik_berdasarkan_umur/page.tsx @@ -11,8 +11,25 @@ import { Cell, Pie, PieChart } from 'recharts'; import { useProxy } from 'valtio/utils'; import JudulListTab from '../../../_com/jusulListTab'; import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; +import HeaderSearch from '../../../_com/header'; function GrafikBerdasarakanUmur() { + const [search, setSearch] = useState(""); + return ( + + } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} + /> + + + ); +} + +function ListGrafikBerdasarakanUmur({ search }: { search: string }) { const stategrafikBerdasarkanUmur = useProxy(grafikBerdasarkanUmur) const [donutData, setDonutData] = useState([]); const [mounted, setMounted] = useState(false); @@ -50,6 +67,16 @@ function GrafikBerdasarakanUmur() { } }, [stategrafikBerdasarkanUmur.findMany.data]) + const filteredData = (stategrafikBerdasarkanUmur.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.remaja.toString().toLowerCase().includes(keyword) || + item.dewasa.toString().toLowerCase().includes(keyword) || + item.orangtua.toString().toLowerCase().includes(keyword) || + item.lansia.toString().toLowerCase().includes(keyword) + ); + }); + if (!stategrafikBerdasarkanUmur.findMany.data) { return ( @@ -57,7 +84,7 @@ function GrafikBerdasarakanUmur() { ) } - + return ( @@ -80,14 +107,14 @@ function GrafikBerdasarakanUmur() { - {stategrafikBerdasarkanUmur.findMany.data.length === 0 ? ( + {filteredData.length === 0 ? ( Belum ada data grafik responden ) : ( - stategrafikBerdasarkanUmur.findMany.data.map((item) => ( + filteredData.map((item) => ( {item.remaja} {item.dewasa} diff --git a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/grafik_hasil_kepuasan_masyarakat/page.tsx b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/grafik_hasil_kepuasan_masyarakat/page.tsx index 532ff1c6..954ef3f2 100644 --- a/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/grafik_hasil_kepuasan_masyarakat/page.tsx +++ b/src/app/admin/(dashboard)/ppid/ikm-desa-darmasaba/grafik_hasil_kepuasan_masyarakat/page.tsx @@ -10,9 +10,26 @@ import { Bar, BarChart, Legend, Tooltip, XAxis, YAxis } from 'recharts'; import { useSnapshot } from 'valtio'; import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus'; import grafikHasilKepuasanMasyarakat from '../../../_state/ppid/indeks_kepuasan_masyarakat/grafikHasilKepuasan'; +import HeaderSearch from '../../../_com/header'; function GrafikHasilKepuasanMasyarakat() { + const [search, setSearch] = useState(""); + return ( + + } + value={search} + onChange={(e) => setSearch(e.currentTarget.value)} + /> + + + ); +} + +function ListGrafikHasilKepuasanMasyarakat({ search }: { search: string }) { type IKMGrafik = { id: string; label: string; @@ -58,6 +75,14 @@ function GrafikHasilKepuasanMasyarakat() { } }, [stateGrafikHasilKepuasan.findMany.data]); + const filteredData = (stateGrafikHasilKepuasan.findMany.data || []).filter(item => { + const keyword = search.toLowerCase(); + return ( + item.label.toLowerCase().includes(keyword) || + item.kepuasan.toString().toLowerCase().includes(keyword) + ); + }); + if (!stateGrafikHasilKepuasan.findMany.data) { @@ -87,7 +112,7 @@ function GrafikHasilKepuasanMasyarakat() { - {stateGrafikHasilKepuasan.findMany.data?.map((item) => ( + {filteredData.map((item) => ( {item.label} {item.kepuasan}