diff --git a/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/[id]/edit/page.tsx b/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/[id]/edit/page.tsx
index bda57c97..1d28ba64 100644
--- a/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/[id]/edit/page.tsx
+++ b/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/[id]/edit/page.tsx
@@ -1,45 +1,125 @@
+/* eslint-disable react-hooks/exhaustive-deps */
'use client'
-import colors from '@/con/colors';
-import { Box, Button, Group, Paper, Stack, Text, TextInput, Title } from '@mantine/core';
-import { IconArrowBack } from '@tabler/icons-react';
-import { useRouter } from 'next/navigation';
+import EditEditor from '@/app/admin/(dashboard)/_com/editEditor';
+import programKemiskinanState from '@/app/admin/(dashboard)/_state/ekonomi/program-kemiskinan';
+import colors from '@/con/colors';
+import {
+ Box,
+ Button,
+ Group,
+ Paper,
+ Stack,
+ Text,
+ TextInput,
+ Title,
+} from '@mantine/core';
+import { IconArrowBack } from '@tabler/icons-react';
+import { useRouter, useParams } from 'next/navigation';
+import { useEffect } from 'react';
+import { useProxy } from 'valtio/utils';
function EditProgramKemiskinan() {
const router = useRouter();
+ const params = useParams() as { id: string };
+ const stateProgram = useProxy(programKemiskinanState);
+ const id = params.id;
+
+ useEffect(() => {
+ if (id) {
+ stateProgram.findUnique.load(id).then(() => {
+ const data = stateProgram.findUnique.data;
+ if (data) {
+ stateProgram.update.form = {
+ nama: data.nama || '',
+ deskripsi: data.deskripsi || '',
+ ikonUrl: data.ikonUrl || '',
+ statistik: {
+ tahun: data.statistik?.tahun?.toString() || '',
+ jumlah: data.statistik?.jumlah?.toString() || '',
+ },
+ };
+ }
+ });
+ }
+ }, [id]);
+
+ const handleSubmit = async () => {
+ stateProgram.update.id = id;
+ await stateProgram.update.update();
+ router.push('/admin/ekonomi/program-kemiskinan');
+ };
+
return (
-
-
-
+
+
Edit Program Kemiskinan
+
Judul Program}
- placeholder='Masukkan judul program'
+ value={stateProgram.update.form.nama}
+ onChange={(e) => {
+ stateProgram.update.form.nama = e.target.value;
+ }}
+ label={Judul Program}
+ placeholder="Masukkan judul program"
/>
+
+
+ Deskripsi
+ {
+ stateProgram.update.form.deskripsi = val;
+ }}
+ />
+
+
Deskripsi Singkat}
- placeholder='Masukkan deskripsi'
+ value={stateProgram.update.form.ikonUrl}
+ onChange={(e) => {
+ stateProgram.update.form.ikonUrl = e.target.value;
+ }}
+ label={Ikon URL}
+ placeholder="Masukkan ikon url"
/>
+
+ Statistik Jumlah Masyarakat Miskin
+
Jumlah Masyarakat Miskin}
- placeholder='Masukkan jumlah masyarakat miskin'
+ type="number"
+ value={stateProgram.update.form.statistik.jumlah}
+ onChange={(e) => {
+ stateProgram.update.form.statistik.jumlah = e.target.value;
+ }}
+ label={Jumlah Masyarakat Miskin}
+ placeholder="Masukkan jumlah masyarakat miskin"
/>
+
Deskripsi}
- placeholder='Masukkan deskripsi'
+ type="number"
+ value={stateProgram.update.form.statistik.tahun}
+ onChange={(e) => {
+ stateProgram.update.form.statistik.tahun = e.target.value;
+ }}
+ label={Tahun}
+ placeholder="Masukkan tahun"
/>
+
- Submit
+
+ Submit
+
-
+
-
+
);
}
diff --git a/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/[id]/page.tsx b/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/[id]/page.tsx
index 83563a8f..4ebcd736 100644
--- a/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/[id]/page.tsx
+++ b/src/app/admin/(dashboard)/ekonomi/program-kemiskinan/[id]/page.tsx
@@ -1,12 +1,10 @@
-/* eslint-disable @typescript-eslint/no-unused-vars */
-/* eslint-disable @typescript-eslint/no-explicit-any */
'use client'
import colors from '@/con/colors';
import { Box, Button, Flex, Paper, Skeleton, Stack, Text } from '@mantine/core';
import { useShallowEffect } from '@mantine/hooks';
import { IconArrowBack, IconEdit, IconX } from '@tabler/icons-react';
import { useParams, useRouter } from 'next/navigation';
-import { useEffect, useState } from 'react';
+import { useState } from 'react';
import { useProxy } from 'valtio/utils';
import { ModalKonfirmasiHapus } from '../../../_com/modalKonfirmasiHapus';
import programKemiskinanState from '../../../_state/ekonomi/program-kemiskinan';
@@ -14,15 +12,12 @@ import programKemiskinanState from '../../../_state/ekonomi/program-kemiskinan';
function DetailProgramKemiskinan() {
const programState = useProxy(programKemiskinanState)
- const [lineChart, setLineChart] = useState([]);
- const [mounted, setMounted] = useState(false);
const [modalHapus, setModalHapus] = useState(false)
const [selectedId, setSelectedId] = useState(null)
const router = useRouter();
const params = useParams()
useShallowEffect(() => {
- setMounted(true);
programState.findUnique.load(params?.id as string)
}, [])
@@ -35,12 +30,6 @@ function DetailProgramKemiskinan() {
}
}
- useEffect(() => {
- if (programState.findUnique.data) {
- setLineChart([programState.findUnique.data]);
- }
- }, [programState.findUnique.data])
-
if (!programState.findUnique.data) {
return (
@@ -62,24 +51,24 @@ function DetailProgramKemiskinan() {
Judul Program
- {programState.findUnique.data?.nama}
+ {programState.findUnique.data?.nama}
Deskripsi Singkat
-
+
Ikon URL
- {programState.findUnique.data?.ikonUrl}
+ {programState.findUnique.data?.ikonUrl}
Statistik Jumlah Masyarakat Miskin
Jumlah Masyarakat Miskin
- {programState.findUnique.data?.statistik?.jumlah}
+ {programState.findUnique.data?.statistik?.jumlah}
Tahun
- {programState.findUnique.data?.statistik?.tahun}
+ {programState.findUnique.data?.statistik?.tahun}
([]);
+ const [mounted, setMounted] = useState(false);
useShallowEffect(() => {
+ setMounted(true)
programState.findMany.load()
}, [])
+ useEffect(() => {
+ if (programState.findMany.data) {
+ const chartData = programState.findMany.data
+ .filter(item => item.statistik)
+ .map(item => ({
+ tahun: item.statistik?.tahun,
+ jumlah: Number(item.statistik?.jumlah)
+ }))
+ .sort((a, b) => (a.tahun || 0) - (b.tahun || 0)); // opsional, urutkan tahun
+
+ setLineChart(chartData);
+
+ }
+ }, [programState.findMany.data])
+
if (!programState.findMany.data) {
return (
@@ -71,6 +92,46 @@ function ListProgramKemiskinan() {
+
+ {/* Chart */}
+
+
+
+
+ Grafik Berdasarkan Responden
+ {mounted && lineChart.length > 0 ? (
+
+
+
+
+
+ [`${value} orang`, name]}
+ labelFormatter={(label: any) => `Tahun: ${label}`}
+ />
+
+
+
+
+
+
+
+ ) : (
+ Belum ada data untuk ditampilkan dalam grafik
+ )}
+
+
+
+
);
}
diff --git a/src/app/api/[[...slugs]]/_lib/ekonomi/program-kemiskinan/updt.ts b/src/app/api/[[...slugs]]/_lib/ekonomi/program-kemiskinan/updt.ts
index 515da554..924d1dcc 100644
--- a/src/app/api/[[...slugs]]/_lib/ekonomi/program-kemiskinan/updt.ts
+++ b/src/app/api/[[...slugs]]/_lib/ekonomi/program-kemiskinan/updt.ts
@@ -15,29 +15,57 @@ export default async function programKemiskinanUpdate(context: Context) {
const id = context.params.id as string;
const body = context.body as FormUpdate;
- const program = await prisma.programKemiskinan.update({
- where: { id },
- data: {
- nama: body.nama,
- deskripsi: body.deskripsi,
- ikonUrl: body.ikonUrl,
- statistik: body.statistik
- ? {
- create: {
- tahun: Number(body.statistik.tahun),
- jumlah: Number(body.statistik.jumlah),
- },
- }
- : undefined,
- },
- include: {
- statistik: true,
- },
- });
+ try {
+ // cari ID statistik yang terkait
+ const existing = await prisma.programKemiskinan.findUnique({
+ where: { id },
+ include: { statistik: true },
+ });
- return {
- success: true,
- message: "Success update program kemiskinan",
- data: program,
- };
+ if (!existing) {
+ return new Response(JSON.stringify({ success: false, message: "Program tidak ditemukan" }), { status: 404 });
+ }
+
+ // update statistik (bisa update atau create kalau belum ada)
+ let statistikUpdate;
+
+ if (existing.statistikId) {
+ statistikUpdate = await prisma.statistikKemiskinan.update({
+ where: { id: existing.statistikId },
+ data: {
+ tahun: Number(body.statistik?.tahun),
+ jumlah: Number(body.statistik?.jumlah),
+ },
+ });
+ } else {
+ statistikUpdate = await prisma.statistikKemiskinan.create({
+ data: {
+ tahun: Number(body.statistik?.tahun),
+ jumlah: Number(body.statistik?.jumlah),
+ },
+ });
+ }
+
+ const program = await prisma.programKemiskinan.update({
+ where: { id },
+ data: {
+ nama: body.nama,
+ deskripsi: body.deskripsi,
+ ikonUrl: body.ikonUrl,
+ statistik: {
+ connect: { id: statistikUpdate.id }, // konek ke statistik baru atau yang diperbarui
+ },
+ },
+ include: { statistik: true },
+ });
+
+ return new Response(JSON.stringify({ success: true, data: program }), {
+ status: 200,
+ });
+ } catch (err) {
+ console.error("Gagal update:", err);
+ return new Response(JSON.stringify({ success: false, message: "Gagal update program" }), {
+ status: 500,
+ });
+ }
}