diff --git a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/artikel_kesehatan/[id]/edit/page.tsx b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/artikel_kesehatan/[id]/edit/page.tsx index 8e1c74f7..227c8c1f 100644 --- a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/artikel_kesehatan/[id]/edit/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/artikel_kesehatan/[id]/edit/page.tsx @@ -183,7 +183,7 @@ function EditArtikelKesehatan() { {/* Gambar */} - Gambar Berita + Gambar Artikel Kesehatan {/* Pendahuluan */} - - setFormData((prev) => ({ ...prev, introduction: { content: value } })) - } - placeholder="Masukkan pendahuluan" - /> - + + Pendahuluan + + setFormData((prev) => ({ ...prev, introduction: { ...prev.introduction, content: value } })) + } + /> + {/* Gejala */} Gejala diff --git a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/artikel_kesehatan/create/page.tsx b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/artikel_kesehatan/create/page.tsx index ce925f33..7289cd05 100644 --- a/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/artikel_kesehatan/create/page.tsx +++ b/src/app/admin/(dashboard)/kesehatan/data-kesehatan-warga/artikel_kesehatan/create/page.tsx @@ -115,7 +115,7 @@ function CreateArtikelKesehatan() { - Gambar Berita + Gambar Artikel Kesehatan { @@ -163,7 +163,7 @@ function CreateArtikelKesehatan() { )} - + - { - stateArtikelKesehatan.create.form.introduction.content = e.target.value; - }} - /> - + + Pendahuluan + { + stateArtikelKesehatan.create.form.introduction.content = e; + }} + /> + {/* Gejala */} Gejala diff --git a/src/app/darmasaba/(pages)/desa/layanan/_com/pelayananSuratKeterangan.tsx b/src/app/darmasaba/(pages)/desa/layanan/_com/pelayananSuratKeterangan.tsx index e8c4353a..e079820c 100644 --- a/src/app/darmasaba/(pages)/desa/layanan/_com/pelayananSuratKeterangan.tsx +++ b/src/app/darmasaba/(pages)/desa/layanan/_com/pelayananSuratKeterangan.tsx @@ -47,13 +47,13 @@ function PelayananSuratKeterangan({ search }: { search: string }) { - + Layanan Surat Keterangan - + diff --git a/src/app/darmasaba/(pages)/desa/potensi/page.tsx b/src/app/darmasaba/(pages)/desa/potensi/page.tsx index aa1efa10..5f2e1236 100644 --- a/src/app/darmasaba/(pages)/desa/potensi/page.tsx +++ b/src/app/darmasaba/(pages)/desa/potensi/page.tsx @@ -43,7 +43,7 @@ function Page() { Potensi Desa Darmasaba - + Temukan berbagai potensi unggulan, peluang, dan daya tarik yang menjadikan Desa Darmasaba istimewa. diff --git a/src/app/darmasaba/(pages)/desa/profile/ui/lambangDesa.tsx b/src/app/darmasaba/(pages)/desa/profile/ui/lambangDesa.tsx index 7c0431e7..baefc403 100644 --- a/src/app/darmasaba/(pages)/desa/profile/ui/lambangDesa.tsx +++ b/src/app/darmasaba/(pages)/desa/profile/ui/lambangDesa.tsx @@ -2,7 +2,7 @@ 'use client' import stateProfileDesa from '@/app/admin/(dashboard)/_state/desa/profile' import colors from '@/con/colors' -import { Box, Center, Image, Paper, Skeleton, Stack, Text, Tooltip } from '@mantine/core' +import { Box, Center, Image, Paper, Skeleton, Stack, Text } from '@mantine/core' import { useEffect } from 'react' import { useProxy } from 'valtio/utils' @@ -58,7 +58,6 @@ function LambangDesa() { borderColor: '#e0e9ff', }} > - - diff --git a/src/app/darmasaba/(pages)/desa/profile/ui/maskotDesa.tsx b/src/app/darmasaba/(pages)/desa/profile/ui/maskotDesa.tsx index 3cb9848e..1d58f079 100644 --- a/src/app/darmasaba/(pages)/desa/profile/ui/maskotDesa.tsx +++ b/src/app/darmasaba/(pages)/desa/profile/ui/maskotDesa.tsx @@ -1,11 +1,11 @@ /* eslint-disable react-hooks/exhaustive-deps */ 'use client' import stateProfileDesa from '@/app/admin/(dashboard)/_state/desa/profile'; -import { Box, Card, Center, Group, Image, Loader, Paper, Stack, Text, Tooltip } from '@mantine/core'; +import colors from '@/con/colors'; +import { Box, Card, Center, Group, Image, Loader, Paper, Stack, Text } from '@mantine/core'; +import { IconPhoto } from '@tabler/icons-react'; import { useEffect } from 'react'; import { useProxy } from 'valtio/utils'; -import { IconPhoto } from '@tabler/icons-react'; -import colors from '@/con/colors'; function MaskotDesa() { const state = useProxy(stateProfileDesa.maskotDesa); @@ -54,8 +54,8 @@ function MaskotDesa() { {data.images.length > 0 ? ( data.images.map((img, index) => ( - - )) ) : ( diff --git a/src/app/darmasaba/(pages)/desa/profile/ui/profilPerbekel.tsx b/src/app/darmasaba/(pages)/desa/profile/ui/profilPerbekel.tsx index c4fa3541..887ffdaf 100644 --- a/src/app/darmasaba/(pages)/desa/profile/ui/profilPerbekel.tsx +++ b/src/app/darmasaba/(pages)/desa/profile/ui/profilPerbekel.tsx @@ -2,10 +2,10 @@ 'use client' import stateProfileDesa from '@/app/admin/(dashboard)/_state/desa/profile'; import colors from '@/con/colors'; -import { Box, Image, Paper, SimpleGrid, Skeleton, Stack, Text, Divider, Tooltip } from '@mantine/core'; +import { Box, Divider, Image, Paper, SimpleGrid, Skeleton, Stack, Text } from '@mantine/core'; +import { IconBriefcase, IconTargetArrow, IconUser, IconUsers } from '@tabler/icons-react'; import { useEffect } from 'react'; import { useProxy } from 'valtio/utils'; -import { IconUser, IconBriefcase, IconUsers, IconTargetArrow } from '@tabler/icons-react'; function ProfilPerbekel() { const state = useProxy(stateProfileDesa.profilPerbekel) @@ -27,10 +27,10 @@ function ProfilPerbekel() { return ( - @@ -41,11 +41,11 @@ function ProfilPerbekel() { - @@ -70,9 +70,9 @@ function ProfilPerbekel() { Perbekel Desa Darmasaba - @@ -83,60 +83,56 @@ function ProfilPerbekel() { - - - - - - Biodata - - + + + + Biodata - + + - - - - - Pengalaman - - + + + + Pengalaman - + + - @@ -145,27 +141,27 @@ function ProfilPerbekel() { Pengalaman Organisasi - - + Program Kerja Unggulan - diff --git a/src/app/darmasaba/(pages)/desa/profile/ui/semuaPerbekel.tsx b/src/app/darmasaba/(pages)/desa/profile/ui/semuaPerbekel.tsx index 3ba7b404..46f6594b 100644 --- a/src/app/darmasaba/(pages)/desa/profile/ui/semuaPerbekel.tsx +++ b/src/app/darmasaba/(pages)/desa/profile/ui/semuaPerbekel.tsx @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ 'use client' import stateProfileDesa from '@/app/admin/(dashboard)/_state/desa/profile'; -import { Box, Center, Image, Paper, SimpleGrid, Skeleton, Stack, Text, Title, Tooltip } from '@mantine/core'; +import { Box, Center, Image, Paper, SimpleGrid, Skeleton, Stack, Text, Title } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; import { IconUser } from '@tabler/icons-react'; import { useProxy } from 'valtio/utils'; @@ -77,23 +77,17 @@ function SemuaPerbekel() { - {v.nama} - - - + {v.daerah} - - - + {v.periode} - diff --git a/src/app/darmasaba/(pages)/ekonomi/lowongan-kerja-lokal/[id]/page.tsx b/src/app/darmasaba/(pages)/ekonomi/lowongan-kerja-lokal/[id]/page.tsx new file mode 100644 index 00000000..53d29443 --- /dev/null +++ b/src/app/darmasaba/(pages)/ekonomi/lowongan-kerja-lokal/[id]/page.tsx @@ -0,0 +1,136 @@ +'use client' + +import lowonganKerjaState from '@/app/admin/(dashboard)/_state/ekonomi/lowongan-kerja'; +import colors from '@/con/colors'; +import { Box, Button, Center, Group, Paper, Skeleton, Stack, Text } from '@mantine/core'; +import { useShallowEffect } from '@mantine/hooks'; +import { IconArrowBack, IconBrandWhatsapp, IconBriefcase, IconCurrencyDollar, IconMapPin, IconPhone } from '@tabler/icons-react'; +import { useParams, useRouter } from 'next/navigation'; +import { useState } from 'react'; +import { useProxy } from 'valtio/utils'; + +function DetailLowonganKerjaUser() { + const state = useProxy(lowonganKerjaState); + const router = useRouter(); + const params = useParams(); + const [loading, setLoading] = useState(true); + + useShallowEffect(() => { + const loadData = async () => { + await state.findUnique.load(params?.id as string); + setLoading(false); + }; + loadData(); + }, []); + + const data = state.findUnique.data; + + if (loading || !data) { + return ( +
+ +
+ ); + } + + return ( + + + + + + + {/* Judul */} + + {data.posisi} + + + Diposting: {new Date(data.createdAt).toLocaleDateString('id-ID', { + day: '2-digit', + month: 'long', + year: 'numeric' + })} + + + {/* Info Ringkas */} + + + + {data.namaPerusahaan} + + + + {data.lokasi} + + + + {data.notelp} + + + + {data.gaji || '-'} + + + + {data.tipePekerjaan} + + + + + + Deskripsi Pekerjaan + + + + + + + Kualifikasi + + + + +
+ +
+
+
+
+
+ ); +} + +export default DetailLowonganKerjaUser; diff --git a/src/app/darmasaba/(pages)/ekonomi/lowongan-kerja-lokal/page.tsx b/src/app/darmasaba/(pages)/ekonomi/lowongan-kerja-lokal/page.tsx index ea71b34f..00ee1683 100644 --- a/src/app/darmasaba/(pages)/ekonomi/lowongan-kerja-lokal/page.tsx +++ b/src/app/darmasaba/(pages)/ekonomi/lowongan-kerja-lokal/page.tsx @@ -12,13 +12,13 @@ import BackButton from '../../desa/layanan/_com/BackButto'; const formatCurrency = (value: string | number) => { // Convert to string if it's a number const numStr = typeof value === 'number' ? value.toString() : value; - + // Remove all non-digit characters const digitsOnly = numStr.replace(/\D/g, ''); - + // Format with thousand separators const formatted = digitsOnly.replace(/\B(?=(\d{3})+(?!\d))/g, '.'); - + return `Rp.${formatted}`; }; @@ -103,7 +103,7 @@ function Page() { - + ) diff --git a/src/app/darmasaba/(pages)/ekonomi/pasar-desa/[id]/page.tsx b/src/app/darmasaba/(pages)/ekonomi/pasar-desa/[id]/page.tsx index f46e8ff7..c013d69f 100644 --- a/src/app/darmasaba/(pages)/ekonomi/pasar-desa/[id]/page.tsx +++ b/src/app/darmasaba/(pages)/ekonomi/pasar-desa/[id]/page.tsx @@ -30,6 +30,7 @@ function DetailProdukPasarUser() { return ( {/* Tombol kembali */} + + - - Pasar Desa Online merupakan Media Promosi yang bertujuan untuk membantu warga desa dalam memasarkan dan memperkenalkan produknya kepada masyarakat. + + Pasar Desa Online adalah media promosi untuk membantu warga memasarkan + + + dan memperkenalkan produk mereka. diff --git a/src/app/darmasaba/(pages)/inovasi/desa-digital-smart-village/page.tsx b/src/app/darmasaba/(pages)/inovasi/desa-digital-smart-village/page.tsx index 054b3633..ef1465f7 100644 --- a/src/app/darmasaba/(pages)/inovasi/desa-digital-smart-village/page.tsx +++ b/src/app/darmasaba/(pages)/inovasi/desa-digital-smart-village/page.tsx @@ -56,7 +56,8 @@ function Page() { /> - Mewujudkan Desa Darmasaba sebagai pusat inovasi digital yang memberdayakan masyarakat, meningkatkan kesejahteraan, dan menciptakan peluang ekonomi berbasis teknologi. + Menjadikan Desa Darmasaba pusat inovasi digital untuk pemberdayaan masyarakat + dan peningkatan ekonomi berbasis teknologi. diff --git a/src/app/darmasaba/(pages)/keamanan/keamanan-lingkungan-pecalang-patwal/page.tsx b/src/app/darmasaba/(pages)/keamanan/keamanan-lingkungan-pecalang-patwal/page.tsx index 90081bfa..b4abcb7e 100644 --- a/src/app/darmasaba/(pages)/keamanan/keamanan-lingkungan-pecalang-patwal/page.tsx +++ b/src/app/darmasaba/(pages)/keamanan/keamanan-lingkungan-pecalang-patwal/page.tsx @@ -64,8 +64,8 @@ function Page() { /> - - Keamanan dan ketertiban lingkungan di Desa Darmasaba dijaga melalui peran aktif Pecalang dan Patwal (Patroli Pengawal). Mereka bertugas memastikan desa tetap aman, tertib, dan kondusif bagi seluruh warga. + + Pecalang dan Patwal (Patroli Pengawal) bertugas memastikan desa tetap aman, tertib, dan kondusif bagi seluruh warga. diff --git a/src/app/darmasaba/(pages)/keamanan/pencegahan-kriminalitas/[id]/page.tsx b/src/app/darmasaba/(pages)/keamanan/pencegahan-kriminalitas/[id]/page.tsx index 0ffe5d5b..a88f5bac 100644 --- a/src/app/darmasaba/(pages)/keamanan/pencegahan-kriminalitas/[id]/page.tsx +++ b/src/app/darmasaba/(pages)/keamanan/pencegahan-kriminalitas/[id]/page.tsx @@ -45,7 +45,7 @@ function DetailPencegahanKriminalitas() { const data = kriminalitasState.findUnique.data; return ( - + @@ -142,9 +174,7 @@ function Page() { {findFirst.data?.judul} - - {findFirst.data?.deskripsiSingkat} - + ) : null} diff --git a/src/app/darmasaba/(pages)/keamanan/pencegahan-kriminalitas/program-lainnya/page.tsx b/src/app/darmasaba/(pages)/keamanan/pencegahan-kriminalitas/program-lainnya/page.tsx index bf81ca38..caa91d39 100644 --- a/src/app/darmasaba/(pages)/keamanan/pencegahan-kriminalitas/program-lainnya/page.tsx +++ b/src/app/darmasaba/(pages)/keamanan/pencegahan-kriminalitas/program-lainnya/page.tsx @@ -21,12 +21,23 @@ import pencegahanKriminalitasState from '@/app/admin/(dashboard)/_state/keamanan import { useShallowEffect } from '@mantine/hooks'; import { useState } from 'react'; import HeaderSearch from '@/app/admin/(dashboard)/_com/header'; +import { IconArrowLeft } from '@tabler/icons-react'; function PencegahanKriminalitas() { const [search, setSearch] = useState(""); - + const router = useRouter(); return ( - + + + + diff --git a/src/app/darmasaba/(pages)/keamanan/polsek-terdekat/page.tsx b/src/app/darmasaba/(pages)/keamanan/polsek-terdekat/page.tsx index 39daf22e..3111e04f 100644 --- a/src/app/darmasaba/(pages)/keamanan/polsek-terdekat/page.tsx +++ b/src/app/darmasaba/(pages)/keamanan/polsek-terdekat/page.tsx @@ -43,7 +43,7 @@ function Page() { Kantor Polisi Terdekat - + Desa Darmasaba, Kecamatan Abiansemal, Kabupaten Badung diff --git a/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/artikel-kesehatan-page/[id]/page.tsx b/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/artikel-kesehatan-page/[id]/page.tsx index e2fa96a7..7fe14d54 100644 --- a/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/artikel-kesehatan-page/[id]/page.tsx +++ b/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/artikel-kesehatan-page/[id]/page.tsx @@ -78,9 +78,7 @@ function Page() { Pendahuluan - - {state.findUnique.data.introduction?.content} - + diff --git a/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/artikel-kesehatan-page/page.tsx b/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/artikel-kesehatan-page/page.tsx index abcb1889..defb85c2 100644 --- a/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/artikel-kesehatan-page/page.tsx +++ b/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/artikel-kesehatan-page/page.tsx @@ -1,7 +1,7 @@ 'use client' import artikelKesehatanState from '@/app/admin/(dashboard)/_state/kesehatan/data_kesehatan_warga/artikelKesehatan'; import colors from '@/con/colors'; -import { Anchor, Box, Card, Divider, Group, Image, Loader, Paper, Stack, Text, Title, Tooltip } from '@mantine/core'; +import { Box, Button, Card, Divider, Group, Image, Loader, Paper, Stack, Text } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; import { IconCalendar, IconChevronRight } from '@tabler/icons-react'; import { useRouter } from 'next/navigation'; @@ -28,9 +28,9 @@ function ArtikelKesehatanPage() { - + <Text ta="center" fw={700} fz="32px" c={colors['blue-button']}> Artikel Kesehatan - + {state.findMany.data.length === 0 ? ( @@ -51,7 +51,7 @@ function ArtikelKesehatanPage() { onMouseLeave={(e) => (e.currentTarget.style.transform = 'translateY(0)')} > - {item.title} + {item.title} {item.title} @@ -64,18 +64,17 @@ function ArtikelKesehatanPage() { {item.content} - - + + )) diff --git a/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/fasilitas-kesehatan-page/page.tsx b/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/fasilitas-kesehatan-page/page.tsx index f3043dcc..19cf6095 100644 --- a/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/fasilitas-kesehatan-page/page.tsx +++ b/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/fasilitas-kesehatan-page/page.tsx @@ -1,11 +1,11 @@ 'use client' import fasilitasKesehatanState from '@/app/admin/(dashboard)/_state/kesehatan/data_kesehatan_warga/fasilitasKesehatan'; import colors from '@/con/colors'; -import { Anchor, Badge, Box, Card, Divider, Group, Paper, Skeleton, Stack, Text } from '@mantine/core'; +import { Badge, Box, Button, Card, Divider, Group, Paper, Skeleton, Stack, Text } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; +import { IconChevronRight, IconClock, IconMapPin } from '@tabler/icons-react'; import { useRouter } from 'next/navigation'; import { useProxy } from 'valtio/utils'; -import { IconMapPin, IconClock, IconArrowRight } from '@tabler/icons-react'; function FasilitasKesehatanPage() { const state = useProxy(fasilitasKesehatanState.fasilitasKesehatan); @@ -36,72 +36,73 @@ function FasilitasKesehatanPage() { - {state.findMany.data.length === 0 ? ( - - - Belum ada fasilitas kesehatan yang tersedia - - - ) : ( - state.findMany.data.map((item) => ( - { - (e.currentTarget as HTMLElement).style.transform = 'translateY(-4px)'; - (e.currentTarget as HTMLElement).style.boxShadow = '0 8px 20px rgba(0,0,0,0.08)'; - }} - onMouseLeave={(e) => { - (e.currentTarget as HTMLElement).style.transform = 'translateY(0px)'; - (e.currentTarget as HTMLElement).style.boxShadow = '0 4px 12px rgba(0,0,0,0.05)'; - }} - > - - - - {item.name} - - - Aktif - - - - - - {item.informasiumum.alamat} - - - - - - {item.informasiumum.jamOperasional} - - - - router.push( - `/darmasaba/kesehatan/data-kesehatan-warga/fasilitas-kesehatan-page/${item.id}` - ) - } - c={colors['blue-button']} - fz="sm" - fw={600} - style={{ display: 'inline-flex', alignItems: 'center', gap: '4px' }} - > - Lihat Detail - - - - - )) - )} + {state.findMany.data.length === 0 ? ( + + + Belum ada fasilitas kesehatan yang tersedia + + + ) : ( + state.findMany.data.map((item) => ( + { + (e.currentTarget as HTMLElement).style.transform = 'translateY(-4px)'; + (e.currentTarget as HTMLElement).style.boxShadow = '0 8px 20px rgba(0,0,0,0.08)'; + }} + onMouseLeave={(e) => { + (e.currentTarget as HTMLElement).style.transform = 'translateY(0px)'; + (e.currentTarget as HTMLElement).style.boxShadow = '0 4px 12px rgba(0,0,0,0.05)'; + }} + > + + + + {item.name} + + + Aktif + + + + + + {item.informasiumum.alamat} + + + + + + {item.informasiumum.jamOperasional} + + + + + + + + )) + )} diff --git a/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/jadwal-kegiatan-page/page.tsx b/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/jadwal-kegiatan-page/page.tsx index c50eeed3..c805b546 100644 --- a/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/jadwal-kegiatan-page/page.tsx +++ b/src/app/darmasaba/(pages)/kesehatan/data-kesehatan-warga/jadwal-kegiatan-page/page.tsx @@ -73,9 +73,9 @@ function JadwalKegiatanPage() { - + diff --git a/src/app/darmasaba/(pages)/kesehatan/info-wabah-penyakit/[id]/page.tsx b/src/app/darmasaba/(pages)/kesehatan/info-wabah-penyakit/[id]/page.tsx index 040a3cba..706a8011 100644 --- a/src/app/darmasaba/(pages)/kesehatan/info-wabah-penyakit/[id]/page.tsx +++ b/src/app/darmasaba/(pages)/kesehatan/info-wabah-penyakit/[id]/page.tsx @@ -28,16 +28,18 @@ function DetailInfoWabahPenyakitUser() { const data = state.findUnique.data; return ( - + {/* Tombol Back */} - + + + {/* Wrapper Detail */} Informasi Wabah & Penyakit - + Dapatkan informasi terbaru mengenai wabah dan penyakit yang sedang diawasi. @@ -84,7 +84,7 @@ function Page() {
- + Tidak ada data yang cocok dengan pencarian Anda. @@ -101,17 +101,35 @@ function Page() { bg={colors['white-trans-1']} style={{ transition: 'transform 200ms ease, box-shadow 200ms ease', + display: 'flex', + flexDirection: 'column', }} > - - + {/* Gambar */} + + w="100%" + style={{ + overflow: 'hidden', + borderRadius: '8px', + }} + > + {v.name} + + + {/* Judul dan badge */} {v.name} @@ -120,23 +138,46 @@ function Page() { Wabah + - Diposting: {new Date(v.createdAt).toLocaleDateString('id-ID', { + Diposting:{' '} + {new Date(v.createdAt).toLocaleDateString('id-ID', { day: '2-digit', month: 'long', year: 'numeric', })} - + - - + + {/* Bagian deskripsi dan tombol */} + + + + + + ))} + )} diff --git a/src/app/darmasaba/(pages)/kesehatan/penanganan-darurat/[id]/page.tsx b/src/app/darmasaba/(pages)/kesehatan/penanganan-darurat/[id]/page.tsx new file mode 100644 index 00000000..399d7f4f --- /dev/null +++ b/src/app/darmasaba/(pages)/kesehatan/penanganan-darurat/[id]/page.tsx @@ -0,0 +1,86 @@ +'use client'; +import penangananDarurat from '@/app/admin/(dashboard)/_state/kesehatan/penanganan-darurat/penangananDarurat'; +import colors from '@/con/colors'; +import { Box, Button, Image, Paper, Skeleton, Stack, Text } from '@mantine/core'; +import { useShallowEffect } from '@mantine/hooks'; +import { IconArrowBack } from '@tabler/icons-react'; +import { useParams, useRouter } from 'next/navigation'; +import { useProxy } from 'valtio/utils'; + +function DetailPenangananDaruratUser() { + const state = useProxy(penangananDarurat); + const router = useRouter(); + const params = useParams(); + + useShallowEffect(() => { + state.findUnique.load(params?.id as string); + }, []); + + if (!state.findUnique.data) { + return ( + + + + + + ); + } + + const data = state.findUnique.data; + + return ( + + {/* Tombol Back */} + + + + + {/* Wrapper Detail */} + + + + {data.name || 'Penanganan Darurat'} + + + {data.image?.link && ( + {data.name} + )} + + + + + + + + ); +} + +export default DetailPenangananDaruratUser; diff --git a/src/app/darmasaba/(pages)/kesehatan/penanganan-darurat/page.tsx b/src/app/darmasaba/(pages)/kesehatan/penanganan-darurat/page.tsx index 45834627..303462ae 100644 --- a/src/app/darmasaba/(pages)/kesehatan/penanganan-darurat/page.tsx +++ b/src/app/darmasaba/(pages)/kesehatan/penanganan-darurat/page.tsx @@ -3,6 +3,7 @@ import penangananDarurat from '@/app/admin/(dashboard)/_state/kesehatan/penangan import colors from '@/con/colors' import { Box, + Button, Center, Grid, GridCol, @@ -148,11 +149,19 @@ function Page() { + diff --git a/src/app/darmasaba/(pages)/kesehatan/posyandu/[id]/page.tsx b/src/app/darmasaba/(pages)/kesehatan/posyandu/[id]/page.tsx index 043667fa..1cf5b958 100644 --- a/src/app/darmasaba/(pages)/kesehatan/posyandu/[id]/page.tsx +++ b/src/app/darmasaba/(pages)/kesehatan/posyandu/[id]/page.tsx @@ -42,6 +42,7 @@ export default function DetailPosyanduUser() { + {/* Konten utama */} - - + + {data.nomor || 'Nomor tidak tersedia'} - - + + - - + + Program Kesehatan Desa - + Temukan berbagai program kesehatan untuk mendukung kualitas hidup masyarakat Darmasaba. @@ -168,7 +168,7 @@ export default function Page() { Manfaat Program Kesehatan - + Program kesehatan Desa Darmasaba berperan penting dalam meningkatkan kesejahteraan dan kualitas hidup warganya. @@ -279,7 +279,7 @@ export default function Page() { {v.title} - + {v.desc} diff --git a/src/app/darmasaba/(pages)/kesehatan/puskesmas/page.tsx b/src/app/darmasaba/(pages)/kesehatan/puskesmas/page.tsx index 2e324920..02bf84c7 100644 --- a/src/app/darmasaba/(pages)/kesehatan/puskesmas/page.tsx +++ b/src/app/darmasaba/(pages)/kesehatan/puskesmas/page.tsx @@ -43,7 +43,7 @@ function Page() { Daftar Puskesmas - + Temukan informasi lengkap mengenai layanan, kontak, dan lokasi Puskesmas Darmasaba diff --git a/src/app/darmasaba/(pages)/lingkungan/data-lingkungan-desa/page.tsx b/src/app/darmasaba/(pages)/lingkungan/data-lingkungan-desa/page.tsx index b6cb00ce..595a35a7 100644 --- a/src/app/darmasaba/(pages)/lingkungan/data-lingkungan-desa/page.tsx +++ b/src/app/darmasaba/(pages)/lingkungan/data-lingkungan-desa/page.tsx @@ -71,8 +71,11 @@ function Page() { onChange={(e) => setSearch(e.currentTarget.value)} /> - - Desa Darmasaba menjaga dan mengembangkan lingkungan demi kesejahteraan warganya. Fokus utama meliputi penghijauan, pengelolaan sampah, dan perlindungan kawasan hijau. + + Desa Darmasaba menjaga dan mengembangkan lingkungan demi kesejahteraan warganya. + + + Fokus utama meliputi penghijauan, pengelolaan sampah, dan perlindungan kawasan hijau. diff --git a/src/app/darmasaba/(pages)/lingkungan/edukasi-lingkungan/component/edukasiCard.tsx b/src/app/darmasaba/(pages)/lingkungan/edukasi-lingkungan/component/edukasiCard.tsx new file mode 100644 index 00000000..e3c91c50 --- /dev/null +++ b/src/app/darmasaba/(pages)/lingkungan/edukasi-lingkungan/component/edukasiCard.tsx @@ -0,0 +1,66 @@ +// Create a new component: components/EdukasiCard.tsx +'use client'; + +import { Box, Paper, Stack, Text, Tooltip } from '@mantine/core'; +import { ReactNode } from 'react'; + +interface EdukasiCardProps { + icon: ReactNode; + title: string; + description: string; + color?: string; +} + +export function EdukasiCard({ icon, title, description, color = '#1e88e5' }: EdukasiCardProps) { + return ( + + + + + {icon} + + + {title} + + + + + + + + ); +} \ No newline at end of file diff --git a/src/app/darmasaba/(pages)/lingkungan/edukasi-lingkungan/page.tsx b/src/app/darmasaba/(pages)/lingkungan/edukasi-lingkungan/page.tsx index aecb80d6..99e5c4cf 100644 --- a/src/app/darmasaba/(pages)/lingkungan/edukasi-lingkungan/page.tsx +++ b/src/app/darmasaba/(pages)/lingkungan/edukasi-lingkungan/page.tsx @@ -1,126 +1,104 @@ -'use client' -import stateEdukasiLingkungan from '@/app/admin/(dashboard)/_state/lingkungan/edukasi-lingkungan'; -import colors from '@/con/colors'; -import { Box, Paper, SimpleGrid, Skeleton, Stack, Text, Tooltip } from '@mantine/core'; +'use client'; + +import { Box, Container, SimpleGrid, Skeleton, Stack, Text } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; import { IconLeaf, IconPlant2, IconRecycle } from '@tabler/icons-react'; import { useProxy } from 'valtio/utils'; import BackButton from '../../desa/layanan/_com/BackButto'; -function Page() { - const tujuan = useProxy(stateEdukasiLingkungan.stateTujuanEdukasi.findById) - const materi = useProxy(stateEdukasiLingkungan.stateMateriEdukasiLingkungan.findById) - const contoh = useProxy(stateEdukasiLingkungan.stateContohEdukasiLingkungan.findById) +import stateEdukasiLingkungan from '@/app/admin/(dashboard)/_state/lingkungan/edukasi-lingkungan'; +import colors from '@/con/colors'; +import { EdukasiCard } from './component/edukasiCard'; + +function LoadingSkeleton() { + return ( + + {[1, 2, 3].map((item) => ( + + ))} + + ); +} + +export default function EdukasiLingkunganPage() { + const tujuan = useProxy(stateEdukasiLingkungan.stateTujuanEdukasi.findById); + const materi = useProxy(stateEdukasiLingkungan.stateMateriEdukasiLingkungan.findById); + const contoh = useProxy(stateEdukasiLingkungan.stateContohEdukasiLingkungan.findById); useShallowEffect(() => { - tujuan.load('edit') - materi.load('edit') - contoh.load('edit') - }, []) + tujuan.load('edit'); + materi.load('edit'); + contoh.load('edit'); + }, []); - if (tujuan.loading || !tujuan.data || materi.loading || !materi.data || contoh.loading || !contoh.data) { + const isLoading = tujuan.loading || !tujuan.data || + materi.loading || !materi.data || + contoh.loading || !contoh.data; + + if (isLoading) { return ( - - + + + ); } return ( - + - - + + Edukasi Lingkungan - + Program edukasi ini membimbing masyarakat untuk peduli dan bertanggung jawab terhadap alam, meningkatkan kesehatan, kenyamanan, dan keberlanjutan hidup bersama. - + - - - {/* Tujuan Edukasi Lingkungan */} - - - - - } position="top" withArrow> - - - - - - - - - - - - {/* Materi Edukasi Lingkungan */} - - - - - - - - - - - - - - - - - {/* Contoh Edukasi Lingkungan */} - - - - - - - - - {contoh.data?.judul} - - - - - - - - + + + } + title={tujuan.data?.judul || ''} + description={tujuan.data?.deskripsi || ''} + color={colors['blue-button']} + /> + + } + title={materi.data?.judul || ''} + description={materi.data?.deskripsi || ''} + color={colors['blue-button']} + /> + + } + title={contoh.data?.judul || ''} + description={contoh.data?.deskripsi || ''} + color={colors['blue-button']} + /> - + ); -} - -export default Page; +} \ No newline at end of file diff --git a/src/app/darmasaba/(pages)/lingkungan/gotong-royong/_lib/layoutTabs.tsx b/src/app/darmasaba/(pages)/lingkungan/gotong-royong/_lib/layoutTabs.tsx index d8701e18..1ef77765 100644 --- a/src/app/darmasaba/(pages)/lingkungan/gotong-royong/_lib/layoutTabs.tsx +++ b/src/app/darmasaba/(pages)/lingkungan/gotong-royong/_lib/layoutTabs.tsx @@ -1,323 +1,5 @@ -// 'use client' -// import colors from '@/con/colors'; -// import { Box, Container, Grid, GridCol, Stack, Tabs, TabsList, TabsTab, Text, TextInput } from '@mantine/core'; -// import { IconSearch } from '@tabler/icons-react'; -// import { usePathname, useRouter, useSearchParams } from 'next/navigation'; -// import React, { useEffect, useState } from 'react'; -// import BackButton from '../../../desa/layanan/_com/BackButto'; - - -// type HeaderSearchProps = { -// placeholder?: string; -// searchIcon?: React.ReactNode; -// value?: string; -// onChange?: (event: React.ChangeEvent) => void; -// children?: React.ReactNode; -// }; - -// function LayoutTabsGotongRoyong({ -// children, -// placeholder = "pencarian", -// searchIcon = -// }: HeaderSearchProps) { -// const router = useRouter(); -// const pathname = usePathname(); -// const searchParams = useSearchParams(); - -// // Get active tab from URL path -// const activeTab = pathname.split('/').pop() || 'semua'; - -// // Get initial search value from URL -// const initialSearch = searchParams.get('search') || ''; -// const [searchValue, setSearchValue] = useState(initialSearch); -// const [searchTimeout, setSearchTimeout] = useState(null); - -// // Update active tab state when pathname changes -// const [activeTabState, setActiveTabState] = useState(activeTab); -// useEffect(() => { -// setActiveTabState(activeTab); -// }, [activeTab]); - -// // Clean up timeouts on unmount -// useEffect(() => { -// return () => { -// if (searchTimeout !== null) { -// clearTimeout(searchTimeout); -// } -// }; -// }, [searchTimeout]); - -// // Handle search input change with debounce -// const handleSearchChange = (event: React.ChangeEvent) => { -// const value = event.target.value; -// setSearchValue(value); - -// // Clear previous timeout -// if (searchTimeout !== null) { -// clearTimeout(searchTimeout); -// } - -// // Set new timeout -// const newTimeout = window.setTimeout(() => { -// const params = new URLSearchParams(searchParams.toString()); - -// if (value) { -// params.set('search', value); -// } else { -// params.delete('search'); -// } - -// // Only update URL if the search value has actually changed -// if (params.toString() !== searchParams.toString()) { -// router.push(`/darmasaba/lingkungan/gotong-royong/${activeTab}?${params.toString()}`); -// } -// }, 500); // 500ms debounce delay - -// setSearchTimeout(newTimeout); -// }; -// const tabs = [ -// { -// label: "Semua", -// value: "semua", -// href: "/darmasaba/lingkungan/gotong-royong/semua" -// }, -// { -// label: "Kebersihan", -// value: "kebersihan", -// href: "/darmasaba/lingkungan/gotong-royong/kebersihan" -// }, -// { -// label: "Infrastruktur", -// value: "infrastruktur", -// href: "/darmasaba/lingkungan/gotong-royong/infrastruktur" -// }, -// { -// label: "Sosial", -// value: "sosial", -// href: "/darmasaba/lingkungan/gotong-royong/sosial" -// }, -// { -// label: "Lingkungan", -// value: "lingkungan", -// href: "/darmasaba/lingkungan/gotong-royong/lingkungan" -// } -// ]; -// const handleTabChange = (value: string | null) => { -// if (!value) return; -// const tab = tabs.find(t => t.value === value); -// if (tab) { -// const params = new URLSearchParams(searchParams.toString()); -// router.push(`/darmasaba/lingkungan/gotong-royong/${value}${params.toString() ? `?${params.toString()}` : ''}`); -// } -// }; - -// return ( -// -// {/* Header */} -// -// -// -// -// -// -// Gotong Royong Desa Darmasaba -// -// -// Gotong royong rutin dilakukan oleh warga desa untuk meningkatkan kualitas hidup dan kesejahteraan masyarakat Desa Darmasaba -// -// -// - -// -// -// -// -// -// {tabs.map((tab, index) => ( -// router.push(tab.href)} -// > -// {tab.label} -// -// ))} -// -// -// -// -// -// -// - -// {children} -// -// -// ); -// } - -// export default LayoutTabsGotongRoyong; - /* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable @typescript-eslint/no-explicit-any */ -// 'use client' -// import colors from '@/con/colors'; -// import { Box, Group, Stack, Tabs, TabsList, TabsTab, Text, TextInput } from '@mantine/core'; -// import { IconSearch } from '@tabler/icons-react'; -// import { usePathname, useRouter, useSearchParams } from 'next/navigation'; -// import React, { useEffect, useState } from 'react'; -// import BackButton from '../../layanan/_com/BackButto'; - -// type HeaderSearchProps = { -// placeholder?: string; -// searchIcon?: React.ReactNode; -// value?: string; -// onChange?: (event: React.ChangeEvent) => void; -// children?: React.ReactNode; -// }; - -// function LayoutTabsBerita({ -// children, -// placeholder = "pencarian", -// searchIcon = -// }: HeaderSearchProps) { -// const router = useRouter(); -// const pathname = usePathname(); -// const searchParams = useSearchParams(); - -// const activeTab = pathname.split('/').pop() || 'semua'; -// const initialSearch = searchParams.get('search') || ''; -// const [searchValue, setSearchValue] = useState(initialSearch); -// const [searchTimeout, setSearchTimeout] = useState(null); - -// const [activeTabState, setActiveTabState] = useState(activeTab); -// useEffect(() => { -// setActiveTabState(activeTab); -// }, [activeTab]); - -// useEffect(() => { -// return () => { -// if (searchTimeout !== null) clearTimeout(searchTimeout); -// }; -// }, [searchTimeout]); - -// const handleSearchChange = (event: React.ChangeEvent) => { -// const value = event.target.value; -// setSearchValue(value); - -// if (searchTimeout !== null) clearTimeout(searchTimeout); - -// const newTimeout = window.setTimeout(() => { -// const params = new URLSearchParams(searchParams.toString()); - -// if (value) params.set('search', value); -// else params.delete('search'); - -// if (params.toString() !== searchParams.toString()) { -// router.push(`/darmasaba/desa/berita/${activeTab}?${params.toString()}`); -// } -// }, 500); - -// setSearchTimeout(newTimeout); -// }; - -// const tabs = [ -// { label: "Semua", value: "semua", href: "/darmasaba/desa/berita/semua" }, -// { label: "Budaya", value: "budaya", href: "/darmasaba/desa/berita/budaya" }, -// { label: "Pemerintahan", value: "pemerintahan", href: "/darmasaba/desa/berita/pemerintahan" }, -// { label: "Ekonomi", value: "ekonomi", href: "/darmasaba/desa/berita/ekonomi" }, -// { label: "Pembangunan", value: "pembangunan", href: "/darmasaba/desa/berita/pembangunan" }, -// { label: "Sosial", value: "sosial", href: "/darmasaba/desa/berita/sosial" }, -// { label: "Teknologi", value: "teknologi", href: "/darmasaba/desa/berita/teknologi" }, -// ]; - -// const handleTabChange = (value: string | null) => { -// if (!value) return; -// const tab = tabs.find(t => t.value === value); -// if (tab) { -// const params = new URLSearchParams(searchParams.toString()); -// router.push(`/darmasaba/desa/berita/${value}${params.toString() ? `?${params.toString()}` : ''}`); -// } -// }; - -// return ( -// -// {/* Header */} -// -// -// - -// -// -// -// -// Portal Berita Darmasaba -// -// -// Temukan berbagai potensi dan keunggulan yang dimiliki Desa Darmasaba -// -// -// -// -// -// -// - -// -// -// {/* SCROLLABLE TABS */} -// -// -// {tabs.map((tab, index) => ( -// router.push(tab.href)} -// style={{ -// flex: '0 0 auto', // Prevent shrinking -// minWidth: 100, // optional: makes them touch-friendly -// textAlign: 'center' -// }} -// > -// {tab.label} -// -// ))} -// -// -// - -// {children} -// -// -// ); -// } - -// export default LayoutTabsBerita; - 'use client' import gotongRoyongState from '@/app/admin/(dashboard)/_state/lingkungan/gotong-royong'; @@ -402,7 +84,7 @@ function LayoutTabsGotongRoyong({ children }: { children: React.ReactNode }) { Portal Gotong royong Darmasaba - Temukan berbagai kegiatan lingkungan yang dimiliki Desa Darmasaba + Temukan berbagai kegiatan lingkungan yang dimiliki Desa Darmasaba - - Mari berpartisipasi menanam dan merawat pohon untuk menciptakan lingkungan hijau, sehat, dan seimbang bagi seluruh warga desa. + + Mari berpartisipasi menanam dan merawat pohon untuk menciptakan lingkungan hijau, + + + sehat, dan seimbang bagi seluruh warga desa. diff --git a/src/app/darmasaba/(pages)/ppid/struktur-ppid/page.tsx b/src/app/darmasaba/(pages)/ppid/struktur-ppid/page.tsx index 0de6b6ae..17637cb4 100644 --- a/src/app/darmasaba/(pages)/ppid/struktur-ppid/page.tsx +++ b/src/app/darmasaba/(pages)/ppid/struktur-ppid/page.tsx @@ -3,6 +3,7 @@ 'use client' import stateStrukturPPID from '@/app/admin/(dashboard)/_state/ppid/struktur_ppid/struktur_PPID' +import ScrollToTopButton from '@/app/darmasaba/_com/scrollToTopButton' import colors from '@/con/colors' import { Box, @@ -18,25 +19,23 @@ import { Text, TextInput, Title, - Tooltip, - Transition, + Transition } from '@mantine/core' import { + IconArrowsMaximize, + IconArrowsMinimize, IconRefresh, IconSearch, IconUsers, IconZoomIn, IconZoomOut, - IconArrowsMaximize, - IconArrowsMinimize, } from '@tabler/icons-react' +import { debounce } from 'lodash' +import { useTransitionRouter } from 'next-view-transitions' import { OrganizationChart } from 'primereact/organizationchart' import { useEffect, useRef, useState } from 'react' import { useProxy } from 'valtio/utils' import BackButton from '../../desa/layanan/_com/BackButto' -import { useTransitionRouter } from 'next-view-transitions' -import ScrollToTopButton from '@/app/darmasaba/_com/scrollToTopButton' -import { debounce } from 'lodash' export default function Page() { return ( @@ -346,7 +345,6 @@ function nodeTemplate(node: any, router: ReturnType) {description || 'Belum ada deskripsi.'} - - )} diff --git a/src/app/darmasaba/(pages)/ppid/visi-misi-ppid/page.tsx b/src/app/darmasaba/(pages)/ppid/visi-misi-ppid/page.tsx index f6f8d745..85e50080 100644 --- a/src/app/darmasaba/(pages)/ppid/visi-misi-ppid/page.tsx +++ b/src/app/darmasaba/(pages)/ppid/visi-misi-ppid/page.tsx @@ -66,7 +66,8 @@ function Page() { } /> - + Visi PPID - + Misi PPID
- Indeks Kepuasan Masyarakat + Indeks Kepuasan Masyarakat
Ukur kebahagiaan warga, tingkatkan layanan desa! Dengan partisipasi aktif masyarakat, kami berkomitmen untuk terus memperbaiki layanan agar lebih transparan, efektif, dan sesuai dengan kebutuhan warga. Kepuasan Anda adalah prioritas utama kami dalam membangun desa yang lebih baik!
@@ -416,9 +422,15 @@ function Kepuasan() { } return ( - +
- Indeks Kepuasan Masyarakat + Indeks Kepuasan Masyarakat
Ukur kebahagiaan warga, tingkatkan layanan desa! Dengan partisipasi aktif masyarakat, kami berkomitmen untuk terus memperbaiki layanan agar lebih transparan, efektif, dan sesuai dengan kebutuhan warga. Kepuasan Anda adalah prioritas utama kami dalam membangun desa yang lebih baik!