diff --git a/MIND/SUMMARY/statistik-kesehatan-ringkasan-summary.md b/MIND/SUMMARY/statistik-kesehatan-ringkasan-summary.md index 81e0d964..5b802a87 100644 --- a/MIND/SUMMARY/statistik-kesehatan-ringkasan-summary.md +++ b/MIND/SUMMARY/statistik-kesehatan-ringkasan-summary.md @@ -49,7 +49,9 @@ prisma/migrations/20260504000000_add_statistik_pct_ringkasan_kesehatan/migration src/app/api/[[...slugs]]/_lib/kesehatan/ringkasan-kesehatan/updt.ts src/app/api/[[...slugs]]/_lib/kesehatan/ringkasan-kesehatan/index.ts src/app/admin/(dashboard)/_state/kesehatan/ringkasan-kesehatan/ringkasanKesehatan.ts [NEW] -package.json (0.1.48 → 0.1.50) +src/app/admin/(dashboard)/kesehatan/ringkasan-kesehatan/page.tsx [NEW] +src/app/admin/_com/list_PageAdmin.tsx (3 sidebar instances → tambah Kesehatan_8) +package.json (0.1.48 → 0.1.51) MIND/PLAN/task-statistik-kesehatan-ringkasan.md [NEW] ``` @@ -57,3 +59,4 @@ MIND/PLAN/task-statistik-kesehatan-ringkasan.md [NEW] - `ba2b90be` feat(kesehatan): tambah 4 field statistik pct ke RingkasanKesehatanDesa - bump ke 0.1.49 - `68a2a639` feat(kesehatan): tambah state file ringkasanKesehatan + bump ke 0.1.50 +- (next) feat(kesehatan): admin page ringkasan-kesehatan + sidebar entry - bump ke 0.1.51 diff --git a/package.json b/package.json index ebe050ac..5c656cfd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "desa-darmasaba", - "version": "0.1.50", + "version": "0.1.51", "private": true, "scripts": { "dev": "next dev", diff --git a/src/app/admin/(dashboard)/kesehatan/ringkasan-kesehatan/page.tsx b/src/app/admin/(dashboard)/kesehatan/ringkasan-kesehatan/page.tsx new file mode 100644 index 00000000..1d017c55 --- /dev/null +++ b/src/app/admin/(dashboard)/kesehatan/ringkasan-kesehatan/page.tsx @@ -0,0 +1,194 @@ +'use client'; + +import colors from '@/con/colors'; +import { + Box, + Button, + Divider, + Group, + Loader, + NumberInput, + Paper, + SimpleGrid, + Stack, + Text, + Title, +} from '@mantine/core'; +import { IconArrowBack } from '@tabler/icons-react'; +import { useRouter } from 'next/navigation'; +import { useEffect } from 'react'; +import { toast } from 'react-toastify'; +import { useProxy } from 'valtio/utils'; +import ringkasanKesehatanState from '../../_state/kesehatan/ringkasan-kesehatan/ringkasanKesehatan'; + +export default function RingkasanKesehatanPage() { + const router = useRouter(); + const state = useProxy(ringkasanKesehatanState); + + useEffect(() => { + state.findUnique.load(); + }, []); // eslint-disable-line react-hooks/exhaustive-deps + + const setField = (key: keyof typeof state.update.form, value: number) => { + state.update.form[key] = Number.isFinite(value) ? value : 0; + }; + + const handleSubmit = async () => { + const ok = await state.update.submit(); + if (ok) router.refresh(); + }; + + const handleReset = () => { + state.update.reset(); + if (state.findUnique.data) { + const d = state.findUnique.data; + state.update.form = { + ibuHamilAkh: d.ibuHamilAkh, + balitaTerdaftar: d.balitaTerdaftar, + alertStunting: d.alertStunting, + imunisasiLengkapPct: d.imunisasiLengkapPct, + pemeriksaanRutinPct: d.pemeriksaanRutinPct, + giziBaikPct: d.giziBaikPct, + targetStuntingPct: d.targetStuntingPct, + }; + } + toast.info('Form dikembalikan ke data awal'); + }; + + const isLoading = state.findUnique.loading; + const isSubmitting = state.update.loading; + + return ( + + + + Ringkasan Kesehatan Desa + + + + {isLoading ? ( + + + + ) : ( + + + KPI Utama + + setField('ibuHamilAkh', Number(v))} + radius="md" + /> + setField('balitaTerdaftar', Number(v))} + radius="md" + /> + setField('alertStunting', Number(v))} + radius="md" + /> + + + + + + + Statistik Kesehatan (%) + + setField('imunisasiLengkapPct', Number(v))} + radius="md" + /> + setField('pemeriksaanRutinPct', Number(v))} + radius="md" + /> + setField('giziBaikPct', Number(v))} + radius="md" + /> + setField('targetStuntingPct', Number(v))} + radius="md" + /> + + + + + + + + + )} + + + ); +} diff --git a/src/app/admin/_com/list_PageAdmin.tsx b/src/app/admin/_com/list_PageAdmin.tsx index 07ba3fb7..b4f3ed32 100644 --- a/src/app/admin/_com/list_PageAdmin.tsx +++ b/src/app/admin/_com/list_PageAdmin.tsx @@ -166,6 +166,11 @@ export const devBar = [ id: "Kesehatan_7", name: "Info Wabah/Penyakit", path: "/admin/kesehatan/info-wabah-penyakit" + }, + { + id: "Kesehatan_8", + name: "Ringkasan Kesehatan", + path: "/admin/kesehatan/ringkasan-kesehatan" } ] }, @@ -602,6 +607,11 @@ export const navBar = [ id: "Kesehatan_7", name: "Info Wabah/Penyakit", path: "/admin/kesehatan/info-wabah-penyakit" + }, + { + id: "Kesehatan_8", + name: "Ringkasan Kesehatan", + path: "/admin/kesehatan/ringkasan-kesehatan" } ] }, @@ -1272,6 +1282,11 @@ export const role2 = [ id: "Kesehatan_7", name: "Info Wabah/Penyakit", path: "/admin/kesehatan/info-wabah-penyakit" + }, + { + id: "Kesehatan_8", + name: "Ringkasan Kesehatan", + path: "/admin/kesehatan/ringkasan-kesehatan" } ] },