diff --git a/src/app/api/new/donasi/[id]/route.ts b/src/app/api/new/donasi/[id]/route.ts
new file mode 100644
index 00000000..64c367c0
--- /dev/null
+++ b/src/app/api/new/donasi/[id]/route.ts
@@ -0,0 +1,34 @@
+import { prisma } from "@/app/lib";
+import { NextResponse } from "next/server";
+export const dynamic = "force-dynamic";
+
+
+// GET ONE DATA DONASI
+export async function GET(request: Request, context: { params: { id: string } }) {
+ try {
+ const { id } = context.params
+ const data = await prisma.donasi.findFirst({
+ where: {
+ id: id
+ },
+ include: {
+ Author: true,
+ imageDonasi: true,
+ CeritaDonasi: true,
+ DonasiMaster_Ketegori: true,
+ DonasiMaster_Durasi: true,
+ DonasiMaster_Status: true,
+ Donasi_Invoice: true,
+ Donasi_Kabar: true,
+ Donasi_PencairanDana: true,
+ },
+ });
+
+ return NextResponse.json({ success: true, message: "Berhasil mendapatkan data", data }, { status: 200 });
+
+ }
+ catch (error) {
+ console.error(error);
+ return NextResponse.json({ success: false, message: "Gagal mendapatkan data, coba lagi nanti ", reason: (error as Error).message, }, { status: 500 });
+ }
+}
\ No newline at end of file
diff --git a/src/app/dev/donasi/edit/edit_donasi/[id]/page.tsx b/src/app/dev/donasi/edit/edit_donasi/[id]/page.tsx
index cb62d88a..923fdcf9 100644
--- a/src/app/dev/donasi/edit/edit_donasi/[id]/page.tsx
+++ b/src/app/dev/donasi/edit/edit_donasi/[id]/page.tsx
@@ -1,15 +1,16 @@
-import { EditDonasi } from "@/app_modules/donasi";
+import { EditDonasi, EditDonasiNew } from "@/app_modules/donasi";
import { Donasi_getMasterDurasi, Donasi_getMasterKategori } from "@/app_modules/donasi/fun";
import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
-export default async function Page({params}: {params: {id: string}}) {
- const dataDonasi = await Donasi_getOneById(params.id)
- const masterKategori = await Donasi_getMasterKategori()
- const masterDurasi = await Donasi_getMasterDurasi()
+export default async function Page({ params }: { params: { id: string } }) {
+ // const dataDonasi = await Donasi_getOneById(params.id)
+ // const masterKategori = await Donasi_getMasterKategori()
+ // const masterDurasi = await Donasi_getMasterDurasi()
return (
<>
-
+ {/* */}
+
>
);
}
diff --git a/src/app_modules/donasi/edit/edit_donasi/edit_donasi_new.tsx b/src/app_modules/donasi/edit/edit_donasi/edit_donasi_new.tsx
new file mode 100644
index 00000000..40d136b4
--- /dev/null
+++ b/src/app_modules/donasi/edit/edit_donasi/edit_donasi_new.tsx
@@ -0,0 +1,336 @@
+"use client";
+import { DIRECTORY_ID } from "@/app/lib";
+import { MainColor } from "@/app_modules/_global/color/color_pallet";
+import { ComponentGlobal_BoxUploadImage, ComponentGlobal_LoadImageCustom, } from "@/app_modules/_global/component";
+import ComponentGlobal_ErrorInput from "@/app_modules/_global/component/error_input";
+import { funGlobal_DeleteFileById, funGlobal_UploadToStorage, } from "@/app_modules/_global/fun";
+import { ComponentGlobal_NotifikasiBerhasil, ComponentGlobal_NotifikasiPeringatan, } from "@/app_modules/_global/notif_global";
+import { AspectRatio, Button, Center, FileButton, Image, Select, Stack, Text, TextInput, } from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import { IconCamera } from "@tabler/icons-react";
+import _ from "lodash";
+import { useParams, useRouter } from "next/navigation";
+import { useState } from "react";
+import { Donasi_funUpdateDonasi } from "../../fun/update/fun_update_donasi";
+import { apiGetMasterDonasi, apiGetOneDonasiById } from "../../lib/api_donasi";
+import { MODEL_DONASI } from "../../model/interface";
+import SkeletonEditDonasi from "./skeleton_edit_donasi";
+
+export default function EditDonasiNew() {
+ const router = useRouter();
+ const [isLoading, setLoading] = useState(false);
+ const [data, setData] = useState();
+ const [kategori, setKategori] = useState([]);
+ const [durasi, setDurasi] = useState([]);
+ const [file, setFile] = useState(null);
+ const [updateImage, setUpdateImage] = useState();
+ const [newTarget, setNewTarget] = useState("");
+ const [loadingMaster, setLoadingMaster] = useState(true)
+ const param = useParams<{ id: string }>();
+ const [loadingData, setLoadingData] = useState(true)
+
+
+ async function onGetMaster() {
+ try {
+ setLoadingMaster(true)
+ const responseKategori = await apiGetMasterDonasi("?cat=kategori")
+ const responseDurasi = await apiGetMasterDonasi("?cat=durasi")
+ if (responseKategori.success) {
+ setKategori(responseKategori.data)
+ }
+ if (responseDurasi.success) {
+ setDurasi(responseDurasi.data)
+ }
+ } catch (error) {
+ console.log(error);
+ } finally {
+ setLoadingMaster(false)
+ }
+ }
+
+ async function onGetData() {
+ try {
+ setLoadingData(true)
+ const response = await apiGetOneDonasiById(param.id)
+ if (response.success) {
+ setData(response.data)
+ }
+
+ } catch (error) {
+ console.error(error);
+ } finally {
+ setLoadingData(false)
+ }
+ }
+
+ useShallowEffect(() => {
+ onGetMaster()
+ onGetData()
+ }, [])
+
+ async function onUpdate() {
+ setLoading(true);
+ const body = {
+ id: data?.id,
+ donasiMaster_KategoriId: data?.DonasiMaster_Ketegori.id,
+ donasiMaster_DurasiId: data?.DonasiMaster_Durasi.id,
+ title: data?.title,
+ target: data?.target,
+ };
+
+ if (_.values(body).includes(""))
+ return ComponentGlobal_NotifikasiPeringatan("Lengkapin Data");
+
+ try {
+ if (file !== null) {
+ const uploadImage = await funGlobal_UploadToStorage({
+ file: file as File,
+ dirId: DIRECTORY_ID.donasi_image,
+ });
+ if (!uploadImage.success) {
+ setLoading(false);
+ ComponentGlobal_NotifikasiPeringatan("Gagal upload file gambar");
+ }
+
+ const deleteImage = await funGlobal_DeleteFileById({
+ fileId: String(data?.imageId),
+ });
+ if (!deleteImage.success) {
+ setLoading(false);
+ ComponentGlobal_NotifikasiPeringatan("Gagal hapus gambar lama");
+ }
+
+ const res = await Donasi_funUpdateDonasi({
+ data: body as any,
+ fileId: uploadImage.data.id,
+ });
+ if (res.status === 200) {
+ ComponentGlobal_NotifikasiBerhasil(res.message);
+ router.back();
+ setLoading(false);
+ } else {
+ ComponentGlobal_NotifikasiPeringatan(res.message);
+ setLoading(false);
+ }
+ } else {
+ const res = await Donasi_funUpdateDonasi({
+ data: body as any,
+ });
+ if (res.status === 200) {
+ ComponentGlobal_NotifikasiBerhasil(res.message);
+ router.back();
+ setLoading(false);
+ } else {
+ ComponentGlobal_NotifikasiPeringatan(res.message);
+ setLoading(false);
+ }
+ }
+ } catch (error) {
+ console.log(error);
+ }
+ }
+
+ return (
+ <>
+ {
+ loadingData ?
+ :
+
+
+
+ }
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/edit/edit_donasi/skeleton_edit_donasi.tsx b/src/app_modules/donasi/edit/edit_donasi/skeleton_edit_donasi.tsx
new file mode 100644
index 00000000..922e275e
--- /dev/null
+++ b/src/app_modules/donasi/edit/edit_donasi/skeleton_edit_donasi.tsx
@@ -0,0 +1,23 @@
+import { Box, Skeleton, Stack } from "@mantine/core";
+
+export default function SkeletonEditDonasi() {
+ return (
+ <>
+
+
+
+
+
+
+
+
+ {[...Array(5)].map((_, index) => (
+
+ ))}
+
+
+
+
+ >
+ );
+}
\ No newline at end of file
diff --git a/src/app_modules/donasi/index.ts b/src/app_modules/donasi/index.ts
index f5d776c2..65fde92b 100644
--- a/src/app_modules/donasi/index.ts
+++ b/src/app_modules/donasi/index.ts
@@ -50,6 +50,7 @@ import Donasi_CreateKabar from "./create/create_kabar";
import LayoutDonasi_CreateKabar from "./create/create_kabar/layout";
import Donasi_EditRekening from "./edit/edit_rekening";
import LayoutDonasi_EditRekening from "./edit/edit_rekening/layout";
+import EditDonasiNew from "./edit/edit_donasi/edit_donasi_new";
export { LayoutDonasi_BuktiTransfer } from "./detail/detail_main/bukti_transfer";
export {
@@ -104,5 +105,6 @@ export {
LayoutDonasi_EditRekening,
MainDonasiNew,
GalangDanaDonasiNew,
- CreateDonasiNew
+ CreateDonasiNew,
+ EditDonasiNew
};
diff --git a/src/app_modules/donasi/lib/api_donasi.ts b/src/app_modules/donasi/lib/api_donasi.ts
index 2f7e719e..b42ce605 100644
--- a/src/app_modules/donasi/lib/api_donasi.ts
+++ b/src/app_modules/donasi/lib/api_donasi.ts
@@ -11,4 +11,9 @@ export const apiGetMasterDonasi = async (path?: string) => {
export const apiGetAllDonasiSaya = async (path?: string) => {
const response = await fetch(`/api/new/donasi/invoice${(path) ? path : ''}`)
return await response.json().catch(() => null)
+}
+
+export const apiGetOneDonasiById = async (path: string) => {
+ const response = await fetch(`/api/new/donasi/${path}`)
+ return await response.json().catch(() => null)
}
\ No newline at end of file