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