From 04b5d265072b393c3dc6f715b970cc8a35071da7 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Mon, 17 Nov 2025 13:41:34 +0800 Subject: [PATCH] upd : dahboard admin Deskripsi: - detail pengaduan No Issues --- .../scr/dashboard/pengaduan/detail_page.tsx | 163 +++++++++--------- .../scr/dashboard/pengaduan/list_page.tsx | 20 ++- src/server/routes/pengaduan_route.ts | 37 +++- 3 files changed, 122 insertions(+), 98 deletions(-) diff --git a/src/pages/scr/dashboard/pengaduan/detail_page.tsx b/src/pages/scr/dashboard/pengaduan/detail_page.tsx index 863293c..0be588d 100644 --- a/src/pages/scr/dashboard/pengaduan/detail_page.tsx +++ b/src/pages/scr/dashboard/pengaduan/detail_page.tsx @@ -17,7 +17,7 @@ import { Textarea, Title, } from "@mantine/core"; -import { useDisclosure, useShallowEffect } from "@mantine/hooks"; +import { useDisclosure } from "@mantine/hooks"; import { IconAlignJustified, IconCategory, @@ -28,53 +28,68 @@ import { IconPhotoScan, IconUser, } from "@tabler/icons-react"; +import _ from "lodash"; import { useState } from "react"; import { useLocation } from "react-router-dom"; import useSwr from "swr"; +import { useShallowEffect } from "@mantine/hooks"; export default function DetailPengaduanPage() { const { search } = useLocation(); const query = new URLSearchParams(search); const id = query.get("id"); + const { data, mutate, isLoading } = useSwr("/", () => + apiFetch.api.pengaduan.detail.get({ + query: { + id: id!, + }, + }), + ); + + useShallowEffect(() => { + mutate(); + }, []); return ( - - + + - + ); } -function DetailDataPengaduan() { +function DetailDataPengaduan({ data }: { data: any }) { const [opened, { open, close }] = useDisclosure(false); const [catModal, setCatModal] = useState<"tolak" | "terima">("tolak"); const [imageSrc, setImageSrc] = useState(null); const [openedModalImage, { open: openModalImage, close: closeModalImage }] = useDisclosure(false); - async function handleLihatGambar() { - const res = await apiFetch.api.pengaduan.image.get({ - query: { - fileName: "57d5ce89-7d18-4244-9f4c-ca21b70adb7e", - }, - }); - console.error("client", res); - // const blob = await res.data?.blob(); - // setImageSrc(URL.createObjectURL(blob!)); - // openModalImage(); - } + // async function handleLihatGambar() { + // const res = await apiFetch.api.pengaduan.image.get({ + // query: { + // fileName: "57d5ce89-7d18-4244-9f4c-ca21b70adb7e", + // }, + // }); + // console.error("client", res); + // // const blob = await res.data?.blob(); + // // setImageSrc(URL.createObjectURL(blob!)); + // // openModalImage(); + // } return ( <> + + {/* MODAL KONFIRMASI */} + + {/* MODAL GAMBAR */} - #PGf-2345-33 + #{data?.noPengaduan} - antrian + {data?.status} @@ -166,7 +193,7 @@ function DetailDataPengaduan() { Judul - Judul Pengaduan + {_.upperFirst(data?.title)} @@ -175,7 +202,7 @@ function DetailDataPengaduan() { Lokasi - fwef + {_.upperFirst(data?.location)} @@ -188,7 +215,7 @@ function DetailDataPengaduan() { Kategori - fwef + {_.upperFirst(data?.category)} @@ -196,7 +223,7 @@ function DetailDataPengaduan() { Gambar - + { }}> Lihat Gambar @@ -210,24 +237,22 @@ function DetailDataPengaduan() { Detail - Lorem ipsum dolor sit, amet consectetur adipisicing elit. - Illum, corporis iusto. Suscipit veritatis quas, non nobis - fuga, laudantium accusantium tempora sint aliquid architecto - totam esse eum excepturi nostrum fugiat ut. - - - - - - Keterangan - - - Lorem ipsum dolor, sit amet consectetur adipisicing elit. At - fugiat eligendi nesciunt dolore? Maiores a cumque vitae - suscipit incidunt quos beatae modi, vel, id ullam quae - voluptas, deserunt quas placeat. + {_.upperFirst(data?.detail)} + { + data?.keterangan && ( + + + + Keterangan + + + {_.upperFirst(data?.keterangan)} + + + ) + } @@ -259,23 +284,7 @@ function DetailDataPengaduan() { ); } -function DetailDataHistori() { - const elements = [ - { position: 6, mass: 12.011, symbol: "C", name: "Carbon" }, - { position: 7, mass: 14.007, symbol: "N", name: "Nitrogen" }, - { position: 39, mass: 88.906, symbol: "Y", name: "Yttrium" }, - { position: 56, mass: 137.33, symbol: "Ba", name: "Barium" }, - { position: 58, mass: 140.12, symbol: "Ce", name: "Cerium" }, - ]; - - const rows = elements.map((element) => ( - - {element.position} - {element.name} - {element.symbol} - {element.mass} - - )); +function DetailDataHistori({ data }: { data: any }) { return ( User - {rows} + + { + data?.map((item: any) => ( + + {item.createdAt} + {item.deskripsi} + {item.status} + {item.user} + + )) + } + ); } -function DetailUserPengaduan() { - const [page, setPage] = useState(1); - const [value, setValue] = useState(""); - const { data, mutate, isLoading } = useSwr("/", () => - apiFetch.api.pengaduan.list.get({ - query: { - status, - search: value, - take: "", - page: "", - }, - }), - ); - - useShallowEffect(() => { - mutate(); - }, [status, value]); - - const list = data?.data || []; - +function DetailUserPengaduan({ data }: { data: any }) { return ( Nama - Amalia Dwi Yustiani + {data?.name} @@ -368,7 +369,7 @@ function DetailUserPengaduan() { Telepon - 08123456789 + {data?.phone} @@ -377,7 +378,7 @@ function DetailUserPengaduan() { Jumlah Pengaduan - 10 + {data?.pengaduan} @@ -386,7 +387,7 @@ function DetailUserPengaduan() { Jumlah Pelayanan Surat - 10 + {data?.pelayanan} diff --git a/src/pages/scr/dashboard/pengaduan/list_page.tsx b/src/pages/scr/dashboard/pengaduan/list_page.tsx index 606e68b..4f86a46 100644 --- a/src/pages/scr/dashboard/pengaduan/list_page.tsx +++ b/src/pages/scr/dashboard/pengaduan/list_page.tsx @@ -48,20 +48,24 @@ export default function PengaduanListPage() { function TabListPengaduan({ status }: { status: string }) { const navigate = useNavigate(); - const dataCount = useSwr("/pengaduan/count", () => + const { data, mutate, isLoading } = useSwr("/pengaduan/count", () => apiFetch.api.pengaduan.count.get().then((res) => res.data), ); + useShallowEffect(() => { + mutate(); + }, []); + return ( { navigate("?status=semua"); }} > - Semua ({dataCount?.data?.semua || 0}) + Semua ({data?.semua || 0}) - Antrian ({dataCount?.data?.antrian || 0}) + Antrian ({data?.antrian || 0}) - Diterima ({dataCount?.data?.diterima || 0}) + Diterima ({data?.diterima || 0}) - Dikerjakan ({dataCount?.data?.dikerjakan || 0}) + Dikerjakan ({data?.dikerjakan || 0}) - Selesai ({dataCount?.data?.selesai || 0}) + Selesai ({data?.selesai || 0}) - Ditolak ({dataCount?.data?.ditolak || 0}) + Ditolak ({data?.ditolak || 0}) diff --git a/src/server/routes/pengaduan_route.ts b/src/server/routes/pengaduan_route.ts index 107f44b..292179d 100644 --- a/src/server/routes/pengaduan_route.ts +++ b/src/server/routes/pengaduan_route.ts @@ -28,8 +28,8 @@ const PengaduanRoute = new Elysia({ } }) - - return {data} + + return { data } }, { detail: { summary: "List Kategori Pengaduan", @@ -316,12 +316,14 @@ Respon: }) .get("/detail", async ({ query }) => { const { id } = query - const data = await prisma.pengaduan.findUnique({ + + const data = await prisma.pengaduan.findFirst({ where: { - id, OR: [ { noPengaduan: id + }, { + id: id } ] }, @@ -346,6 +348,13 @@ Respon: Warga: { select: { name: true, + phone: true, + _count: { + select: { + Pengaduan: true, + PelayananAjuan: true, + } + } } } } @@ -374,27 +383,37 @@ Respon: id: item.id, deskripsi: item.deskripsi, status: item.status, - createdAt: item.createdAt, + createdAt: item.createdAt.toLocaleDateString("id-ID", { day: "numeric", month: "long", year: "numeric" }), idUser: item.idUser, nameUser: item.User?.name, } }) - const datafix = { + const warga = { + name: data?.Warga?.name, + phone: data?.Warga?.phone, + pengaduan: data?.Warga?._count.Pengaduan, + pelayanan: data?.Warga?._count.PelayananAjuan, + } + + const dataPengaduan = { id: data?.id, noPengaduan: data?.noPengaduan, title: data?.title, detail: data?.detail, location: data?.location, image: data?.image, - CategoryPengaduan: data?.CategoryPengaduan.name, - idWarga: data?.idWarga, - nameWarga: data?.Warga?.name, + category: data?.CategoryPengaduan.name, status: data?.status, keterangan: data?.keterangan, createdAt: data?.createdAt, updatedAt: data?.updatedAt, + } + + const datafix = { + pengaduan: dataPengaduan, history: dataHistoryFix, + warga: warga, } return datafix