From 242ea86f777ef78a256f23539f44571f9f579fdc Mon Sep 17 00:00:00 2001 From: nico Date: Wed, 10 Dec 2025 17:44:31 +0800 Subject: [PATCH] Fix konsisten font, menu landing page & PPID --- .../daftar-informasi-publik/[id]/page.tsx | 54 +-- .../ppid/daftar-informasi-publik/page.tsx | 103 ++++-- .../(pages)/ppid/dasar-hukum/page.tsx | 58 ++-- .../ppid/indeks-kepuasan-masyarakat/page.tsx | 258 ++++++++------ .../ppid/permohonan-informasi-publik/page.tsx | 70 ++-- .../page.tsx | 72 ++-- .../(pages)/ppid/profil-ppid/page.tsx | 197 ++++++++--- .../(pages)/ppid/struktur-ppid/[id]/page.tsx | 45 ++- .../(pages)/ppid/struktur-ppid/page.tsx | 65 ++-- .../(pages)/ppid/visi-misi-ppid/page.tsx | 95 ++++-- .../darmasaba/_com/ModernNewsNotification.tsx | 1 + src/app/darmasaba/_com/NewsReaderalanding.tsx | 1 + .../darmasaba/_com/main-page/apbdes/index.tsx | 98 +++--- .../_com/main-page/desaantikorupsi/index.tsx | 92 +++-- .../_com/main-page/kepuasan/index.tsx | 225 ++++++------ .../main-page/landing-page/ModuleView.tsx | 26 +- .../main-page/landing-page/ProfileView.tsx | 59 ++-- .../main-page/landing-page/SosmedView.tsx | 15 +- .../_com/main-page/landing-page/index.tsx | 63 +++- .../_com/main-page/layanan/index.tsx | 85 ++++- .../_com/main-page/penghargaan/index.tsx | 319 ++++++++++++------ .../_com/main-page/potensi/index.tsx | 63 +++- .../_com/main-page/prestasi/index.tsx | 75 ++-- .../darmasaba/_com/main-page/sdgs/index.tsx | 62 ++-- src/app/darmasaba/page.tsx | 4 +- 25 files changed, 1505 insertions(+), 700 deletions(-) diff --git a/src/app/darmasaba/(pages)/ppid/daftar-informasi-publik/[id]/page.tsx b/src/app/darmasaba/(pages)/ppid/daftar-informasi-publik/[id]/page.tsx index 16981c7e..9a53b209 100644 --- a/src/app/darmasaba/(pages)/ppid/daftar-informasi-publik/[id]/page.tsx +++ b/src/app/darmasaba/(pages)/ppid/daftar-informasi-publik/[id]/page.tsx @@ -12,6 +12,7 @@ import { Skeleton, Stack, Text, + Title, } from '@mantine/core'; import { IconArrowBack } from '@tabler/icons-react'; import { useParams, useRouter } from 'next/navigation'; @@ -41,9 +42,9 @@ export default function DetailInformasiPublikUser() { return (
- + Informasi tidak ditemukan - </Text> + @@ -75,53 +76,60 @@ export default function DetailInformasiPublikUser() { shadow="xs" > - Detail Informasi Publik - + + {/* CONTENT */} + {/* Jenis Informasi */} - + Jenis Informasi - </Text> - <Text fz={{ base: 'sm', md: 'md' }} c="dimmed"> + + {data.jenisInformasi || '-'} + {/* Tanggal Publikasi */} - + Tanggal Publikasi - </Text> - <Text fz={{ base: 'sm', md: 'md' }} c="dimmed"> + + {data.tanggal ? new Date(data.tanggal).toLocaleDateString('id-ID', { - day: '2-digit', - month: 'long', - year: 'numeric', - }) + day: '2-digit', + month: 'long', + year: 'numeric', + }) : '-'} + {/* Deskripsi */} - + Deskripsi - </Text> + + @@ -130,4 +138,4 @@ export default function DetailInformasiPublikUser() { ); -} \ No newline at end of file +} diff --git a/src/app/darmasaba/(pages)/ppid/daftar-informasi-publik/page.tsx b/src/app/darmasaba/(pages)/ppid/daftar-informasi-publik/page.tsx index 9b9e12e3..7208dcfa 100644 --- a/src/app/darmasaba/(pages)/ppid/daftar-informasi-publik/page.tsx +++ b/src/app/darmasaba/(pages)/ppid/daftar-informasi-publik/page.tsx @@ -21,7 +21,8 @@ import { TableTr, Text, TextInput, - Tooltip + Tooltip, + Title } from '@mantine/core'; import { useDebouncedValue, useShallowEffect } from '@mantine/hooks'; import { IconBrandWhatsapp, IconDeviceImacCog, IconFileInfo, IconMail, IconSearch } from '@tabler/icons-react'; @@ -33,7 +34,7 @@ import { useTransitionRouter } from 'next-view-transitions'; function Page() { const listData = useProxy(daftarInformasiPublik) const [search, setSearch] = useState('') - const [debouncedSearch] = useDebouncedValue(search, 1000); // 500ms delay + const [debouncedSearch] = useDebouncedValue(search, 1000); // 1000ms delay const router = useTransitionRouter() const { data, @@ -65,20 +66,49 @@ function Page() { +
- Logo Desa Darmasaba + Logo Desa Darmasaba
- + + Daftar Informasi Publik - </Text> - <Box px={{ base: "md", md: 100 }}> + + + - + Tentang Informasi Publik - </Text> - <Text ta={"center"} fz={{ base: 'sm', md: 'md' }} c="dimmed"> + + + Daftar Informasi Publik Desa Darmasaba adalah kumpulan data yang dapat diakses oleh masyarakat sesuai dengan ketentuan peraturan yang berlaku. @@ -97,8 +127,8 @@ function Page() { {data.length === 0 ? (
- - Tidak ada informasi publik yang ditemukan. + + Tidak ada informasi publik yang ditemukan.
) : ( @@ -113,27 +143,42 @@ function Page() { Aksi + {data.map((item, index) => ( - {(page - 1) * 5 + index + 1} + + + {(page - 1) * 5 + index + 1} + + + - + {item.jenisInformasi} + - + + - + {item.tanggal ? new Date(item.tanggal).toLocaleDateString('id-ID', { day: '2-digit', month: 'long', @@ -142,6 +187,7 @@ function Page() { + @@ -152,8 +198,9 @@ function Page() { color="blue" leftSection={} onClick={() => router.push(`/darmasaba/ppid/daftar-informasi-publik/${item.id}`)} + aria-label={`Detail ${item.jenisInformasi}`} > - Detail + Detail @@ -178,17 +225,27 @@ function Page() { - Kontak PPID + + Kontak PPID + + - - - Email: ppid@desadarmasaba.id + + + Email:{' '} + + ppid@desadarmasaba.id + + - - - WhatsApp: 081-xxx-xxx-xxx + + + WhatsApp:{' '} + + 081-xxx-xxx-xxx + diff --git a/src/app/darmasaba/(pages)/ppid/dasar-hukum/page.tsx b/src/app/darmasaba/(pages)/ppid/dasar-hukum/page.tsx index 7b66459c..5e63b18e 100644 --- a/src/app/darmasaba/(pages)/ppid/dasar-hukum/page.tsx +++ b/src/app/darmasaba/(pages)/ppid/dasar-hukum/page.tsx @@ -1,7 +1,7 @@ 'use client' import stateDasarHukum from '@/app/admin/(dashboard)/_state/ppid/dasar_hukum/dasarHukum'; import colors from '@/con/colors'; -import { Box, Paper, Skeleton, Stack, Text, Transition } from '@mantine/core'; +import { Box, Paper, Skeleton, Stack, Text, Transition, Title } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; import { useProxy } from 'valtio/utils'; import { IconBook2 } from '@tabler/icons-react'; @@ -31,31 +31,39 @@ function Page() { - + + {/* HEADER */} + - Dasar Hukum - - + + + Informasi regulasi dan kebijakan resmi yang menjadi dasar hukum + + {/* CONTENT */} {dataArray.map((item, k) => ( - + + {/* CONTENT */} diff --git a/src/app/darmasaba/(pages)/ppid/indeks-kepuasan-masyarakat/page.tsx b/src/app/darmasaba/(pages)/ppid/indeks-kepuasan-masyarakat/page.tsx index 7dadf3d7..ed3f1d36 100644 --- a/src/app/darmasaba/(pages)/ppid/indeks-kepuasan-masyarakat/page.tsx +++ b/src/app/darmasaba/(pages)/ppid/indeks-kepuasan-masyarakat/page.tsx @@ -3,7 +3,22 @@ import indeksKepuasanState from "@/app/admin/(dashboard)/_state/landing-page/indeks-kepuasan"; import colors from "@/con/colors"; import { BarChart, PieChart } from '@mantine/charts'; -import { Box, Button, Center, Container, Flex, Modal, Paper, Select, SimpleGrid, Skeleton, Stack, Text, TextInput, Title } from "@mantine/core"; +import { + Box, + Button, + Center, + Container, + Flex, + Modal, + Paper, + Select, + SimpleGrid, + Skeleton, + Stack, + Text, + TextInput, + Title +} from "@mantine/core"; import { useDisclosure, useShallowEffect } from "@mantine/hooks"; import { useState } from "react"; import { useProxy } from "valtio/utils"; @@ -15,16 +30,14 @@ interface ChartDataItem { label?: string; } - - function Kepuasan() { -const state = useProxy(indeksKepuasanState.responden); + const state = useProxy(indeksKepuasanState.responden); const { data, loading } = state.findMany; const [donutDataJenisKelamin, setDonutDataJenisKelamin] = useState([]); const [donutDataRating, setDonutDataRating] = useState([]); const [donutDataKelompokUmur, setDonutDataKelompokUmur] = useState([]); const [barChartData, setBarChartData] = useState>([]); - const [opened, { open, close }] = useDisclosure(false) + const [opened, { open, close }] = useDisclosure(false); const resetForm = () => { state.create.form = { @@ -34,14 +47,14 @@ const state = useProxy(indeksKepuasanState.responden); jenisKelaminId: "", ratingId: "", kelompokUmurId: "", - } - } + }; + }; useShallowEffect(() => { - indeksKepuasanState.jenisKelaminResponden.findMany.load() - indeksKepuasanState.pilihanRatingResponden.findMany.load() - indeksKepuasanState.kelompokUmurResponden.findMany.load() - },[]) + indeksKepuasanState.jenisKelaminResponden.findMany.load(); + indeksKepuasanState.pilihanRatingResponden.findMany.load(); + indeksKepuasanState.kelompokUmurResponden.findMany.load(); + }, []); const handleSubmit = async () => { try { @@ -51,11 +64,11 @@ const state = useProxy(indeksKepuasanState.responden); await state.findUnique.load(idStr); } resetForm(); - close() + close(); } catch (error) { console.error('Error submitting form:', error); } - } + }; // Load data on component mount useShallowEffect(() => { @@ -154,33 +167,52 @@ const state = useProxy(indeksKepuasanState.responden); if (data.length === 0) { return ( - +
- Indeks Kepuasan Masyarakat + {/* Main page title — converted to Title, use order (don't set fz according to rules) */} + + 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! + + {/* Body lead text — responsive fz & lh */} + + 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! + +
+ > + Ajukan Responden +
- - - - - - Pelayanan Terhadap Publik Desa Darmasaba + + + + + + + {/* Section heading — use Title order for hierarchy */} + + Pelayanan Terhadap Publik Desa Darmasaba + + - Total Responden - - {state.findMany.total.toLocaleString('id-ID')} + + Total Responden + {/* Big number — use Title for emphasis */} + + {state.findMany.total.toLocaleString('id-ID')} + + - - + + + {/* Chart Jenis Kelamin */} - Jenis Kelamin + Jenis Kelamin + {donutDataJenisKelamin.every(item => item.value === 0) ? ( - + Belum ada data untuk ditampilkan dalam grafik ) : ( @@ -218,7 +248,7 @@ const state = useProxy(indeksKepuasanState.responden); withTooltip labelsPosition="inside" labelsType="percent" - size={250} // Fixed size in pixels + size={250} data={donutDataJenisKelamin} />
@@ -227,7 +257,7 @@ const state = useProxy(indeksKepuasanState.responden); {donutDataJenisKelamin.map((entry) => ( - {entry.name}: {entry.value} + {entry.name}: {entry.value} ))} @@ -240,9 +270,10 @@ const state = useProxy(indeksKepuasanState.responden); {/* Chart Rating */} - Ulasan + Ulasan + {donutDataRating.every(item => item.value === 0) ? ( - + Belum ada data untuk ditampilkan dalam grafik ) : ( @@ -267,7 +298,7 @@ const state = useProxy(indeksKepuasanState.responden); {donutDataRating.map((entry) => ( - + {entry.name}: {entry.value} @@ -283,9 +314,10 @@ const state = useProxy(indeksKepuasanState.responden); {/* Chart Kelompok Umur */} - Umur + Umur + {donutDataKelompokUmur.every(item => item.value === 0) ? ( - + Belum ada data untuk ditampilkan dalam grafik ) : ( @@ -310,7 +342,7 @@ const state = useProxy(indeksKepuasanState.responden); {donutDataKelompokUmur.map((entry) => ( - + {entry.name}: {entry.value} @@ -326,18 +358,21 @@ const state = useProxy(indeksKepuasanState.responden); + {/* Modal */} - + { state.create.form.name = val.currentTarget.value; }} + // label typography + labelProps={{ style: { fontSize: '0.95rem', lineHeight: '1.4' } } as any} /> { state.create.form.tanggal = val.currentTarget.value; }} + labelProps={{ style: { fontSize: '0.95rem', lineHeight: '1.4' } } as any} /> { @@ -376,17 +414,18 @@ const state = useProxy(indeksKepuasanState.responden); }} data={ (indeksKepuasanState.pilihanRatingResponden.findMany.data || []) - .filter(Boolean) // Hapus null, undefined, dll + .filter(Boolean) .map((item) => ({ value: item.id, label: item.name || 'Tanpa Nama', })) } disabled={indeksKepuasanState.pilihanRatingResponden.findMany.loading} + labelProps={{ style: { fontSize: '0.95rem', lineHeight: '1.4' } } as any} /> { @@ -625,17 +674,18 @@ const state = useProxy(indeksKepuasanState.responden); }} data={ (indeksKepuasanState.jenisKelaminResponden.findMany.data || []) - .filter(Boolean) // Hapus null, undefined, dll + .filter(Boolean) .map((item) => ({ value: item.id, label: item.name || 'Tanpa Nama', })) } disabled={indeksKepuasanState.jenisKelaminResponden.findMany.loading} + labelProps={{ style: { fontSize: '0.95rem', lineHeight: '1.4' } } as any} /> { @@ -661,19 +712,16 @@ const state = useProxy(indeksKepuasanState.responden); }} data={ (indeksKepuasanState.kelompokUmurResponden.findMany.data || []) - .filter(Boolean) // Hapus null, undefined, dll + .filter(Boolean) .map((item) => ({ value: item.id, label: item.name || 'Tanpa Nama', })) } disabled={indeksKepuasanState.kelompokUmurResponden.findMany.loading} + labelProps={{ style: { fontSize: '0.95rem', lineHeight: '1.4' } } as any} /> - diff --git a/src/app/darmasaba/(pages)/ppid/permohonan-informasi-publik/page.tsx b/src/app/darmasaba/(pages)/ppid/permohonan-informasi-publik/page.tsx index 6bd6ebd1..f5d12f86 100644 --- a/src/app/darmasaba/(pages)/ppid/permohonan-informasi-publik/page.tsx +++ b/src/app/darmasaba/(pages)/ppid/permohonan-informasi-publik/page.tsx @@ -12,7 +12,8 @@ import { SimpleGrid, Stack, Text, - TextInput + TextInput, + Title } from '@mantine/core'; import { IconSend2 } from '@tabler/icons-react'; import { useRouter } from 'next/navigation'; @@ -55,7 +56,7 @@ function Page() { const submitForms = async () => { const { create } = permohonanInformasiPublikState.statepermohonanInformasiPublik; - const hasil = await create.create(); // tunggu hasilnya + const hasil = await create.create(); if (hasil) { router.push('/darmasaba/permohonan/berhasil'); } @@ -67,14 +68,17 @@ function Page() { - Permohonan Informasi Publik - + @@ -85,15 +89,18 @@ function Page() { shadow="sm" bg={colors['white-trans-1']} > - Tata Cara Permohonan - + {steps.map((v) => ( @@ -116,27 +123,38 @@ function Page() { c={colors['blue-button']} ta="center" fw="bold" - fz="h3" + fz="h2" + lh={1} > {v.number} + + + {v.title} + + - {v.title} - - {v.desc} ))} + - Formulir Permohonan Informasi - + + {/* INPUTS */} + + + + + { permohonanInformasiPublikState.statepermohonanInformasiPublik.create.form.caraMemperolehInformasiId = val.id; }} /> + { permohonanInformasiPublikState.statepermohonanInformasiPublik.create.form.caraMemperolehSalinanInformasiId = @@ -241,6 +270,7 @@ function Page() { Kirim Permohonan + diff --git a/src/app/darmasaba/(pages)/ppid/permohonan-keberatan-informasi-publik/page.tsx b/src/app/darmasaba/(pages)/ppid/permohonan-keberatan-informasi-publik/page.tsx index 871fd6f5..80de7c2e 100644 --- a/src/app/darmasaba/(pages)/ppid/permohonan-keberatan-informasi-publik/page.tsx +++ b/src/app/darmasaba/(pages)/ppid/permohonan-keberatan-informasi-publik/page.tsx @@ -12,6 +12,7 @@ import { Stack, Text, TextInput, + Title, Tooltip, } from '@mantine/core'; import { @@ -56,13 +57,8 @@ function Page() { const router = useRouter(); const submit = async () => { - const { create } = stateKeberatan; - - const hasil = await create.create(); // tunggu hasilnya - - if (hasil) { - router.push('/darmasaba/permohonan/berhasil'); - } + const hasil = await stateKeberatan.create.create(); + if (hasil) router.push('/darmasaba/permohonan/berhasil'); }; return ( @@ -72,15 +68,16 @@ function Page() { - Permohonan Keberatan Informasi Publik - + + {/* Tentang */} - + Tentang Permohonan Keberatan - </Text> - <Text ta="justify" fz={{ base: 'sm', md: 'md' }} lh={1.6}> + + + Jika Anda merasa permohonan informasi tidak ditanggapi dengan baik atau ditolak, Anda berhak mengajukan keberatan melalui formulir berikut. + {/* Alur */} - Alur Pengajuan Keberatan - + {data.map((v) => ( @@ -124,15 +131,23 @@ function Page() {
+ {v.title} - + + {v.desc}
@@ -141,6 +156,7 @@ function Page() {
+ {/* Form */} - Formulir Keberatan - + - + Alasan Keberatan + {/* Kontak */} - + Kontak PPID - </Text> - <Text fz="sm" c="dimmed"> + + + Email: desadarmasaba@badungkab.go.id | WhatsApp: 081-xxx-xxx-xxx diff --git a/src/app/darmasaba/(pages)/ppid/profil-ppid/page.tsx b/src/app/darmasaba/(pages)/ppid/profil-ppid/page.tsx index 00a0102e..e3ba98df 100644 --- a/src/app/darmasaba/(pages)/ppid/profil-ppid/page.tsx +++ b/src/app/darmasaba/(pages)/ppid/profil-ppid/page.tsx @@ -1,79 +1,134 @@ 'use client' import stateProfilePPID from '@/app/admin/(dashboard)/_state/ppid/profile_ppid/profile_PPID'; import colors from '@/con/colors'; -import { Box, Center, Divider, Flex, Image, List, Paper, SimpleGrid, Skeleton, Stack, Text } from '@mantine/core'; +import { + Box, + Center, + Divider, + Flex, + Image, + List, + Paper, + SimpleGrid, + Skeleton, + Stack, + Text, + Title, +} from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; -import { IconBuildingCommunity, IconTargetArrow, IconTimeline, IconUser } from '@tabler/icons-react'; +import { + IconBuildingCommunity, + IconTargetArrow, + IconTimeline, + IconUser, +} from '@tabler/icons-react'; import { useProxy } from 'valtio/utils'; import BackButton from '../../desa/layanan/_com/BackButto'; import ScrollToTopButton from '@/app/darmasaba/_com/scrollToTopButton'; function Page() { - const allList = useProxy(stateProfilePPID) - useShallowEffect(() => { - allList.profile.load("edit") - }, []) + const allList = useProxy(stateProfilePPID); - if (!allList.profile.data) return ( - - - - - - - - - - {Array.from({ length: 8 }).map((_, i) => ( - - ))} - - - - ) + useShallowEffect(() => { + allList.profile.load('edit'); + }, []); + + // LOADING SKELETON + if (!allList.profile.data) + return ( + + + + + + + + + + {Array.from({ length: 8 }).map((_, i) => ( + + ))} + + + + ); const dataArray = Array.isArray(allList.profile.data) ? allList.profile.data - : [allList.profile.data] + : [allList.profile.data]; return ( + {/* Back Button */} + + {/* Page Title */} - + Profil PPID Desa Darmasaba - </Text> + + {dataArray.map((item) => ( - + - + {/* LOGO & TITLE */} +
- Logo Desa + Logo Desa
- + + Pejabat Pengelola Informasi dan Dokumentasi - </Text> +
+ + {/* GRID BLOCK */} + {/* FOTO + NAMA */} Foto Pimpinan e.currentTarget.src = "/perbekel.png"} + onError={(e) => (e.currentTarget.src = '/perbekel.png')} loading="lazy" /> + - + {item.name} - </Text> + + {/* BIOGRAFI & RIWAYAT */} + {/* BIO */} - Biografi + + Biografi + + - + + + {/* RIWAYAT */} - Riwayat Karir + + Riwayat Karir + + - + @@ -116,26 +200,46 @@ function Page() { + {/* ORGANISASI */} - Pengalaman Organisasi + + Pengalaman Organisasi + + - + + {/* PROGRAM UNGGULAN */} - Program Unggulan + + Program Unggulan + + - + @@ -143,10 +247,11 @@ function Page() {
))}
- {/* Tombol Scroll ke Atas */} + + {/* tombol scroll */}
- ) + ); } -export default Page +export default Page; diff --git a/src/app/darmasaba/(pages)/ppid/struktur-ppid/[id]/page.tsx b/src/app/darmasaba/(pages)/ppid/struktur-ppid/[id]/page.tsx index 9b0d45cc..3b42bec3 100644 --- a/src/app/darmasaba/(pages)/ppid/struktur-ppid/[id]/page.tsx +++ b/src/app/darmasaba/(pages)/ppid/struktur-ppid/[id]/page.tsx @@ -27,7 +27,6 @@ function DetailPegawaiUser() { statePegawai.findUnique.load(params?.id as string); }, []); - if (!statePegawai.findUnique.data) { return ( @@ -52,7 +51,7 @@ function DetailPegawaiUser() { }} > - + Kembali @@ -65,9 +64,7 @@ function DetailPegawaiUser() { radius="lg" shadow="sm" bg="white" - style={{ - border: '1px solid #eaeaea', - }} + style={{ border: '1px solid #eaeaea' }} > {/* Foto Profil */} @@ -84,10 +81,23 @@ function DetailPegawaiUser() { {/* Nama & Jabatan */} - + <Title + order={2} + c={colors['blue-button']} + fw={700} + fz={{ base: 'xl', md: '28px' }} + lh="1.2" + ta="center" + > {data.namaLengkap || '-'} {data.gelarAkademik || ''} - + + {data.posisi?.nama || 'Posisi tidak tersedia'} @@ -105,10 +115,10 @@ function DetailPegawaiUser() { value={ data.tanggalMasuk ? new Date(data.tanggalMasuk).toLocaleDateString('id-ID', { - day: '2-digit', - month: 'long', - year: 'numeric', - }) + day: '2-digit', + month: 'long', + year: 'numeric', + }) : '-' } /> @@ -123,7 +133,7 @@ function DetailPegawaiUser() { ); } -/* Komponen kecil untuk menampilkan baris informasi */ +/* Komponen Baris Informasi */ function InfoRow({ label, value, @@ -137,11 +147,18 @@ function InfoRow({ }) { return ( - + {label} + Struktur Organisasi PPID - + Gambaran visual peran dan pegawai yang ditugaskan. Arahkan kursor untuk melihat detail atau klik node untuk fokus tampilan. @@ -105,8 +106,8 @@ function StrukturOrganisasiPPID() {
- Memuat struktur organisasi… - + Memuat struktur organisasi… + Mengambil data pegawai dan posisi. Mohon tunggu sebentar. @@ -132,10 +133,10 @@ function StrukturOrganisasiPPID() {
- + <Title order={3} mt="md" fz={{ base: 16, md: 18 }} lh={1.15}> Data pegawai belum tersedia - + Belum ada data pegawai yang tercatat untuk PPID. @@ -232,11 +233,18 @@ function StrukturOrganisasiPPID() { {/* 🔍 Controls */} } - style={{ flexShrink: 0 }} // 👈 pastikan tidak mengecil + style={{ flexShrink: 0 }} > - Zoom Out + Zoom Out - {Math.round(scale * 100)}% + + {Math.round(scale * 100)}% + } style={{ flexShrink: 0 }} > - Zoom In + Zoom In - Reset + Reset - {isFullscreen ? 'Exit' : 'Fullscreen'} + + {isFullscreen ? 'Exit' : 'Fullscreen'} + @@ -451,18 +465,17 @@ function NodeCard({ node, router }: any) { {/* Name */} {name} @@ -470,18 +483,18 @@ function NodeCard({ node, router }: any) { {/* Title/Position */} {title} @@ -504,7 +517,7 @@ function NodeCard({ node, router }: any) { fontWeight: 600, }} > - Lihat Detail + Lihat Detail )} 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 43440556..f3541077 100644 --- a/src/app/darmasaba/(pages)/ppid/visi-misi-ppid/page.tsx +++ b/src/app/darmasaba/(pages)/ppid/visi-misi-ppid/page.tsx @@ -1,7 +1,18 @@ 'use client' import stateVisiMisiPPID from '@/app/admin/(dashboard)/_state/ppid/visi_misi_ppid/visimisiPPID'; import colors from '@/con/colors'; -import { Box, Center, Image, Paper, Skeleton, Stack, Text, Divider, Transition } from '@mantine/core'; +import { + Box, + Center, + Image, + Paper, + Skeleton, + Stack, + Text, + Divider, + Transition, + Title +} from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; import { useProxy } from 'valtio/utils'; import { IconSparkles } from '@tabler/icons-react'; @@ -9,6 +20,7 @@ import BackButton from '../../desa/layanan/_com/BackButto'; function Page() { const allList = useProxy(stateVisiMisiPPID); + useShallowEffect(() => { allList.findById.load("1"); }, []); @@ -35,7 +47,7 @@ function Page() { {dataArray.map((item) => ( - + {(styles) => ( + + {/* ==== MOTTO SECTION ==== */}
- Logo Desa Darmasaba + Logo Desa Darmasaba
- Moto PPID Desa Darmasaba - - + + + Memberikan informasi yang cepat, mudah, tepat, dan transparan
- } /> + } + /> + {/* ==== VISI SECTION ==== */} - - Visi PPID - - + Visi PPID + + + + {/* ==== MISI SECTION ==== */} - + Misi PPID - </Text> + + +
)} diff --git a/src/app/darmasaba/_com/ModernNewsNotification.tsx b/src/app/darmasaba/_com/ModernNewsNotification.tsx index e2663db0..2fa14f1c 100644 --- a/src/app/darmasaba/_com/ModernNewsNotification.tsx +++ b/src/app/darmasaba/_com/ModernNewsNotification.tsx @@ -168,6 +168,7 @@ export default function ModernNewsNotification({ position: "fixed", bottom: "24px", right: "24px", + zIndex: 1 }} > { borderBottomRightRadius: '20px', borderTopRightRadius: '20px', transition: 'all 0.3s ease', + zIndex: 1 }} > {isPointerMode ? : } diff --git a/src/app/darmasaba/_com/main-page/apbdes/index.tsx b/src/app/darmasaba/_com/main-page/apbdes/index.tsx index ad848d55..1e70c8e0 100644 --- a/src/app/darmasaba/_com/main-page/apbdes/index.tsx +++ b/src/app/darmasaba/_com/main-page/apbdes/index.tsx @@ -5,7 +5,20 @@ import apbdes from '@/app/admin/(dashboard)/_state/landing-page/apbdes' import APBDesProgress from '@/app/darmasaba/(tambahan)/apbdes/lib/apbDesaProgress' import { transformAPBDesData } from '@/app/darmasaba/(tambahan)/apbdes/lib/types' import colors from '@/con/colors' -import { ActionIcon, BackgroundImage, Box, Button, Center, Group, Loader, Select, SimpleGrid, Stack, Text } from '@mantine/core' +import { + ActionIcon, + BackgroundImage, + Box, + Button, + Center, + Group, + Loader, + Select, + SimpleGrid, + Stack, + Text, + Title, +} from '@mantine/core' import { IconDownload } from '@tabler/icons-react' import Link from 'next/link' import { useEffect, useState } from 'react' @@ -38,17 +51,15 @@ function Apbdes() { const dataAPBDes = state.findMany.data || [] const years = Array.from(new Set(dataAPBDes.map((item: any) => item.tahun))) - .sort((a, b) => b - a) // urutkan descending + .sort((a, b) => b - a) .map(year => ({ value: year.toString(), label: `Tahun ${year}` })) - // Pilih tahun pertama sebagai default jika belum ada yang dipilih useEffect(() => { if (years.length > 0 && !selectedYear) { setSelectedYear(years[0].value) } }, [years, selectedYear]) - // Transform and filter data based on selected year const currentApbdes = dataAPBDes.length > 0 ? transformAPBDesData(dataAPBDes.find(item => item?.tahun?.toString() === selectedYear) || dataAPBDes[0]) : null @@ -57,17 +68,31 @@ function Apbdes() { return ( - + {/* 📌 HEADING */} + - + {textHeading.title} - </Text> - <Text ta={"center"} fz={{ base: "1rem", md: "1.3rem" }}> + + + {textHeading.des} + {/* Button Lihat Semua */}