+
+
+
+
+ );
+}
+
+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 (
-
+
@@ -78,7 +78,7 @@ function Page() {
Pencegahan Kriminalitas
-
+
Keamanan Komunitas & Pencegahan Kriminal
@@ -92,31 +92,63 @@ function Page() {
Program Keamanan Berjalan
- {data.length > 0 ? (
- data.map((item) => (
-
-
-
+
+ {data.length > 0 ? (
+ data.map((item) => (
+
+ router.push(`/darmasaba/keamanan/pencegahan-kriminalitas/${item.id}`)
+ }
+ onMouseEnter={(e) =>
+ (e.currentTarget.style.backgroundColor = '#1a3e7a')
+ }
+ onMouseLeave={(e) =>
+ (e.currentTarget.style.backgroundColor = colors['blue-button'])
+ }
+ >
+
{item.judul}
-
- ))
- ) : (
-
- Tidak ada data pencegahan kriminalitas yang cocok
-
- )}
+ ))
+ ) : (
+ Tidak ada data pencegahan kriminalitas yang cocok
+ )}
+
}
- onClick={() => router.push(`/darmasaba/keamanan/pencegahan-kriminalitas/program-lainnya`)}
+ variant="outline"
+ color="blue"
+ rightSection={}
+ styles={{
+ root: {
+ fontWeight: 600,
+ borderWidth: 2,
+ },
+ }}
+ onClick={() =>
+ router.push(
+ `/darmasaba/keamanan/pencegahan-kriminalitas/program-lainnya`
+ )
+ }
>
Jelajahi Program Lainnya
@@ -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() {
-
+
Artikel Kesehatan
-
+
{state.findMany.data.length === 0 ? (
@@ -51,7 +51,7 @@ function ArtikelKesehatanPage() {
onMouseLeave={(e) => (e.currentTarget.style.transform = 'translateY(0)')}
>
-
+ {item.title}
@@ -64,18 +64,17 @@ function ArtikelKesehatanPage() {
{item.content}
-
-
+ }
onClick={() => router.push(`/darmasaba/kesehatan/data-kesehatan-warga/artikel-kesehatan-page/${item.id}`)}
- variant="light"
- c={colors['blue-button']}
>
-
- Baca Selengkapnya
-
-
-
-
+ Baca Selengkapnya
+
+
))
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}
+
+
+
+ }
+ onClick={() =>
+ router.push(
+ `/darmasaba/kesehatan/data-kesehatan-warga/fasilitas-kesehatan-page/${item.id}`
+ )
+ }
+ >
+ Lihat Detail
+
+
+
+
+ ))
+ )}
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() {
-
+
}
@@ -84,14 +84,6 @@ function JadwalKegiatanPage() {
`/darmasaba/kesehatan/data-kesehatan-warga/jadwal-kegiatan-page/${item.id}`
)
}
- styles={{
- root: {
- background: colors['blue-button'],
- color: 'white',
- boxShadow: '0 0 12px rgba(0, 123, 255, 0.4)',
- transition: 'all 0.2s ease',
- },
- }}
>
Lihat Detail & Daftar
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',
+ }}
+ >
+
+
+
+ {/* 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 && (
+
+ )}
+
+
+
+
+
+
+
+ );
+}
+
+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!
- 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!