From e94090eb30c2f34af08816b3c4ad8ac4cbd360e8 Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Wed, 11 Jun 2025 10:24:57 +0800 Subject: [PATCH] fix: donasi deskripsi: - perbaharuan use server menjadi API src/app/api/investasi/saham/[id]/route.ts src/app/dev/(user)/donasi/detail/kabar/[id]/page.tsx src/app/dev/(user)/donasi/edit/kabar/[id]/page.tsx src/app/dev/(user)/donasi/edit/update_kabar/[id]/layout.tsx src/app/dev/(user)/donasi/edit/update_kabar/[id]/page.tsx src/app/dev/(user)/donasi/kabar/[id]/page.tsx src/app_modules/donasi/_ui/edit/ui_edit_kabar.tsx src/app_modules/donasi/_view/edit/view_edit_kabar.tsx src/app_modules/donasi/detail/detail_kabar/index.tsx src/app_modules/donasi/detail/detail_main/kabar/index.tsx src/app_modules/donasi/edit/update_kabar/index.tsx src/app_modules/donasi/edit/update_kabar/layout.tsx No Issue --- src/app/api/investasi/saham/[id]/route.ts | 7 +- .../(user)/donasi/detail/kabar/[id]/page.tsx | 1 - .../(user)/donasi/edit/kabar/[id]/page.tsx | 9 +-- .../donasi/edit/update_kabar/[id]/layout.tsx | 4 +- .../donasi/edit/update_kabar/[id]/page.tsx | 15 ++-- src/app/dev/(user)/donasi/kabar/[id]/page.tsx | 8 +- .../donasi/_ui/edit/ui_edit_kabar.tsx | 10 +-- .../donasi/_view/edit/view_edit_kabar.tsx | 44 +++++++--- .../donasi/detail/detail_kabar/index.tsx | 8 +- .../donasi/detail/detail_main/kabar/index.tsx | 49 ++++++++---- .../donasi/edit/update_kabar/index.tsx | 47 ++++++++--- .../donasi/edit/update_kabar/layout.tsx | 80 ++++++++++--------- 12 files changed, 164 insertions(+), 118 deletions(-) diff --git a/src/app/api/investasi/saham/[id]/route.ts b/src/app/api/investasi/saham/[id]/route.ts index 7fc89611..d6e150b4 100644 --- a/src/app/api/investasi/saham/[id]/route.ts +++ b/src/app/api/investasi/saham/[id]/route.ts @@ -1,4 +1,5 @@ import { NextResponse } from "next/server"; +import { prisma } from "@/lib"; export { GET }; @@ -12,9 +13,9 @@ async function GET(request: Request, { params }: { params: { id: string } }) { include: { MasterBank: true, StatusInvoice: { - where: { - name: "Berhasil", - } + where: { + name: "Berhasil", + }, }, Investasi: { include: { diff --git a/src/app/dev/(user)/donasi/detail/kabar/[id]/page.tsx b/src/app/dev/(user)/donasi/detail/kabar/[id]/page.tsx index bd94149a..b7b35179 100644 --- a/src/app/dev/(user)/donasi/detail/kabar/[id]/page.tsx +++ b/src/app/dev/(user)/donasi/detail/kabar/[id]/page.tsx @@ -1,5 +1,4 @@ import { DetailKabarDonasi } from "@/app_modules/donasi"; -import { Donasi_getOneKabar } from "@/app_modules/donasi/fun/get/get_one_kabar"; export default async function Page({params}: {params: {id: string}}) { return diff --git a/src/app/dev/(user)/donasi/edit/kabar/[id]/page.tsx b/src/app/dev/(user)/donasi/edit/kabar/[id]/page.tsx index d8990352..5ce340bf 100644 --- a/src/app/dev/(user)/donasi/edit/kabar/[id]/page.tsx +++ b/src/app/dev/(user)/donasi/edit/kabar/[id]/page.tsx @@ -1,14 +1,9 @@ import { Donasi_UiEditKabar } from "@/app_modules/donasi/_ui"; -import { Donasi_getOneKabar } from "@/app_modules/donasi/fun/get/get_one_kabar"; -import React from "react"; - -async function Page({ params }: { params: { id: string } }) { - const kabarId = params.id; - const dataKabar = await Donasi_getOneKabar(kabarId); +async function Page() { return ( <> - + ); } diff --git a/src/app/dev/(user)/donasi/edit/update_kabar/[id]/layout.tsx b/src/app/dev/(user)/donasi/edit/update_kabar/[id]/layout.tsx index 03968363..7d7abf48 100644 --- a/src/app/dev/(user)/donasi/edit/update_kabar/[id]/layout.tsx +++ b/src/app/dev/(user)/donasi/edit/update_kabar/[id]/layout.tsx @@ -3,14 +3,12 @@ import React from "react"; export default async function Layout({ children, - params }: { children: React.ReactNode; - params: {id: string} }) { return ( <> - {children} + {children} ); } diff --git a/src/app/dev/(user)/donasi/edit/update_kabar/[id]/page.tsx b/src/app/dev/(user)/donasi/edit/update_kabar/[id]/page.tsx index d89232dd..93278ec4 100644 --- a/src/app/dev/(user)/donasi/edit/update_kabar/[id]/page.tsx +++ b/src/app/dev/(user)/donasi/edit/update_kabar/[id]/page.tsx @@ -1,11 +1,10 @@ import { UpdateKabarDonasi } from "@/app_modules/donasi"; -import { Donasi_getOneKabar } from "@/app_modules/donasi/fun/get/get_one_kabar"; -export default async function Page({params}: {params: {id: string}}) { - let kabarId = params.id - const dataKabar = await Donasi_getOneKabar(kabarId) - - return<> - +export default async function Page() { + + return ( + <> + -} \ No newline at end of file + ); +} diff --git a/src/app/dev/(user)/donasi/kabar/[id]/page.tsx b/src/app/dev/(user)/donasi/kabar/[id]/page.tsx index 555f77bf..ff47e41e 100644 --- a/src/app/dev/(user)/donasi/kabar/[id]/page.tsx +++ b/src/app/dev/(user)/donasi/kabar/[id]/page.tsx @@ -1,13 +1,9 @@ import { KabarDonasi } from "@/app_modules/donasi"; -import { Donasi_getOneKabar } from "@/app_modules/donasi/fun/get/get_one_kabar"; - -export default async function Page({ params }: { params: { id: string } }) { - let kabarId = params.id; - const dataDonasi = await Donasi_getOneKabar(kabarId); +export default async function Page() { return ( <> - + ); } diff --git a/src/app_modules/donasi/_ui/edit/ui_edit_kabar.tsx b/src/app_modules/donasi/_ui/edit/ui_edit_kabar.tsx index efc00d4b..1f9fed0b 100644 --- a/src/app_modules/donasi/_ui/edit/ui_edit_kabar.tsx +++ b/src/app_modules/donasi/_ui/edit/ui_edit_kabar.tsx @@ -7,21 +7,15 @@ import UI_NewLayoutTamplate, { } from "@/app_modules/_global/ui/V2_layout_tamplate"; import { Donasi_ViewEditKabar } from "../../_view"; -export function Donasi_UiEditKabar({ dataKabar }: { dataKabar: any }) { +export function Donasi_UiEditKabar() { return ( <> - {/* } - > - - */} - - + diff --git a/src/app_modules/donasi/_view/edit/view_edit_kabar.tsx b/src/app_modules/donasi/_view/edit/view_edit_kabar.tsx index a16c9179..d27ada53 100644 --- a/src/app_modules/donasi/_view/edit/view_edit_kabar.tsx +++ b/src/app_modules/donasi/_view/edit/view_edit_kabar.tsx @@ -28,26 +28,42 @@ import { } from "@mantine/core"; import { IconPhoto } from "@tabler/icons-react"; import _ from "lodash"; -import { useRouter } from "next/navigation"; +import { useParams, useRouter } from "next/navigation"; import { useState } from "react"; import { donasi_funUpdateKabar } from "../../fun"; import { MODEL_DONASI_KABAR } from "../../model/interface"; import { clientLogger } from "@/util/clientLogger"; import SkeletonEditDonasi from "../../edit/edit_donasi/skeleton_edit_donasi"; +import { useShallowEffect } from "@mantine/hooks"; +import { apiGetDonasiKabarById } from "../../lib/api_donasi"; +import CustomSkeleton from "@/app_modules/components/CustomSkeleton"; -export function Donasi_ViewEditKabar({ - dataKabar, -}: { - dataKabar: MODEL_DONASI_KABAR; -}) { +export function Donasi_ViewEditKabar() { + const { id } = useParams(); const router = useRouter(); - const [data, setData] = useState(dataKabar); + const [data, setData] = useState(null); const [file, setFile] = useState(null); const [img, setImg] = useState(); const [isLoading, setLoading] = useState(false); + useShallowEffect(() => { + onLoadData(); + }, []); + + async function onLoadData() { + try { + const response = await apiGetDonasiKabarById({ id: id as string }); + // console.log("res >", response) + if (response && response.success) { + setData(response.data); + } + } catch (error) { + clientLogger.error("Error get data kabar", error); + } + } + async function onUpdate() { - if (data.title === "" || data.deskripsi === "") { + if (data?.title === "" || data?.deskripsi === "") { return ComponentGlobal_NotifikasiPeringatan("Lengkapi data"); } @@ -66,16 +82,16 @@ export function Donasi_ViewEditKabar({ } const res = await donasi_funUpdateKabar({ - data: data, + data: data as MODEL_DONASI_KABAR, fileId: uploadImage.data.id, }); if (res.status === 200) { setLoading(false); - if (dataKabar.imageId !== null) { + if (data?.imageId !== null) { const deleteImage = await funGlobal_DeleteFileById({ - fileId: data.imageId, + fileId: data?.imageId as string, }); if (!deleteImage.success) { @@ -92,7 +108,7 @@ export function Donasi_ViewEditKabar({ } } else { const res = await donasi_funUpdateKabar({ - data: data, + data: data as MODEL_DONASI_KABAR, }); if (res.status === 200) { @@ -111,6 +127,8 @@ export function Donasi_ViewEditKabar({ } } + if (!data) return ; + return ( <> @@ -134,7 +152,7 @@ export function Donasi_ViewEditKabar({ onChange={(val) => { setData({ ...data, - title: _.startCase(val.target.value), + title: val.target.value, }); }} /> diff --git a/src/app_modules/donasi/detail/detail_kabar/index.tsx b/src/app_modules/donasi/detail/detail_kabar/index.tsx index a059d227..ac8abf28 100644 --- a/src/app_modules/donasi/detail/detail_kabar/index.tsx +++ b/src/app_modules/donasi/detail/detail_kabar/index.tsx @@ -11,6 +11,8 @@ import { apiGetDonasiKabarById } from "../../lib/api_donasi"; import { useParams } from "next/navigation"; import { useShallowEffect } from "@mantine/hooks"; import CustomSkeleton from "@/app_modules/components/CustomSkeleton"; +import moment from "moment"; +import "moment/locale/id"; export default function DetailKabarDonasi() { const param = useParams<{ id: string }>(); @@ -32,7 +34,7 @@ export default function DetailKabarDonasi() { } if (!kabar) { - return ; + return ; } return ( @@ -41,9 +43,7 @@ export default function DetailKabarDonasi() { - {new Intl.DateTimeFormat("id-ID", { dateStyle: "medium" }).format( - kabar.createdAt - )} + {moment(kabar.createdAt).format("DD MMM YYYY")} diff --git a/src/app_modules/donasi/detail/detail_main/kabar/index.tsx b/src/app_modules/donasi/detail/detail_main/kabar/index.tsx index 4afd302c..0254f1db 100644 --- a/src/app_modules/donasi/detail/detail_main/kabar/index.tsx +++ b/src/app_modules/donasi/detail/detail_main/kabar/index.tsx @@ -4,37 +4,56 @@ import { ComponentGlobal_CardStyles, ComponentGlobal_LoadImageLandscape, } from "@/app_modules/_global/component"; +import CustomSkeleton from "@/app_modules/components/CustomSkeleton"; +import { apiGetDonasiKabarById } from "@/app_modules/donasi/lib/api_donasi"; import { MODEL_DONASI_KABAR } from "@/app_modules/donasi/model/interface"; +import { clientLogger } from "@/util/clientLogger"; import { Group, Stack, Text, Title } from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; +import moment from "moment"; +import "moment/locale/id"; +import { useParams } from "next/navigation"; import { useState } from "react"; -export default function KabarDonasi({ - dataDonasi, -}: { - dataDonasi: MODEL_DONASI_KABAR; -}) { - const [kabar, setKabar] = useState(dataDonasi); +export default function KabarDonasi() { + const { id } = useParams(); + const [data, setData] = useState(null); + + useShallowEffect(() => { + onLoadData(); + }, []); + + async function onLoadData() { + try { + const response = await apiGetDonasiKabarById({ id: id as string }); + console.log("res >", response) + if (response && response.success) { + setData(response.data); + } + } catch (error) { + clientLogger.error("Error get data kabar", error); + } + } + + if (!data) return ; + return ( <> - - {new Intl.DateTimeFormat("id-ID", { dateStyle: "medium" }).format( - kabar.createdAt - )} - + {moment(data.createdAt).format("DD MMM YYYY")} - {kabar.imageId === null ? ( + {data.imageId === null ? ( "" ) : ( - + )} - {kabar.title} + {data.title} - {kabar.deskripsi} + {data.deskripsi} diff --git a/src/app_modules/donasi/edit/update_kabar/index.tsx b/src/app_modules/donasi/edit/update_kabar/index.tsx index 60098371..76c81e7d 100644 --- a/src/app_modules/donasi/edit/update_kabar/index.tsx +++ b/src/app_modules/donasi/edit/update_kabar/index.tsx @@ -4,37 +4,58 @@ import { ComponentGlobal_CardStyles, ComponentGlobal_LoadImageLandscape, } from "@/app_modules/_global/component"; +import CustomSkeleton from "@/app_modules/components/CustomSkeleton"; +import { clientLogger } from "@/util/clientLogger"; import { Group, Stack, Text, Title } from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; +import moment from "moment"; +import "moment/locale/id"; +import { useParams } from "next/navigation"; import { useState } from "react"; +import { apiGetDonasiKabarById } from "../../lib/api_donasi"; import { MODEL_DONASI_KABAR } from "../../model/interface"; -export default function UpdateKabarDonasi({ - dataKabar, -}: { - dataKabar: MODEL_DONASI_KABAR; -}) { - const [kabar, setKabar] = useState(dataKabar); +export default function UpdateKabarDonasi() { + const { id } = useParams(); + const [data, setData] = useState(null); + + useShallowEffect(() => { + onLoadData(); + }, []); + + async function onLoadData() { + try { + const response = await apiGetDonasiKabarById({ id: id as string }); + // console.log("res >", response) + if (response && response.success) { + setData(response.data); + } + } catch (error) { + clientLogger.error("Error get data kabar", error); + } + } + + if (!data) return ; + return ( <> - {new Intl.DateTimeFormat("id-ID", { dateStyle: "medium" }).format( - kabar.createdAt - )} + {moment(data.createdAt).format("DD MMM YYYY")} - {kabar.imageId === null ? ( + {data.imageId === null ? ( "" ) : ( - + )} - {kabar.title} + {data.title} - {kabar.deskripsi} + {data.deskripsi} diff --git a/src/app_modules/donasi/edit/update_kabar/layout.tsx b/src/app_modules/donasi/edit/update_kabar/layout.tsx index 08c68edc..e2c67094 100644 --- a/src/app_modules/donasi/edit/update_kabar/layout.tsx +++ b/src/app_modules/donasi/edit/update_kabar/layout.tsx @@ -9,62 +9,64 @@ import { import { UIGlobal_DrawerCustom } from "@/app_modules/_global/ui"; import UIGlobal_LayoutHeaderTamplate from "@/app_modules/_global/ui/ui_header_tamplate"; import UIGlobal_LayoutTamplate from "@/app_modules/_global/ui/ui_layout_tamplate"; -import { ActionIcon, Center, SimpleGrid, Stack, Text } from "@mantine/core"; +import { + ActionIcon, + Center, + SimpleGrid, + Stack, + Text, + Loader, +} from "@mantine/core"; import { IconDotsVertical, IconEdit, IconTrash } from "@tabler/icons-react"; -import { useRouter } from "next/navigation"; +import { useParams, useRouter } from "next/navigation"; import React from "react"; import { Donasi_funDeleteKabar } from "../../fun/delete/fun_delete.kabar"; import { RouterDonasi } from "@/lib/router_hipmi/router_donasi"; import { Component_Header } from "@/app_modules/_global/component/new/component_header"; -import UI_NewLayoutTamplate, { UI_NewHeader, UI_NewChildren } from "@/app_modules/_global/ui/V2_layout_tamplate"; +import UI_NewLayoutTamplate, { + UI_NewHeader, + UI_NewChildren, +} from "@/app_modules/_global/ui/V2_layout_tamplate"; export default function LayoutUpdateKabarDonasi({ children, - kabarId, }: { children: React.ReactNode; - kabarId: string; }) { + const { id } = useParams<{ id: string }>(); const router = useRouter(); const [openDrawer, setOpenDrawer] = React.useState(false); + const [loadingDelete, setLoadingDelete] = React.useState(false); async function onDelete() { - const res = await Donasi_funDeleteKabar(kabarId); - if (res.status === 200) { - const deleteImage = await funGlobal_DeleteFileById({ - fileId: res.imageId as any, - }); + try { + setLoadingDelete(true); + const res = await Donasi_funDeleteKabar(id); + if (res.status === 200) { + let deleteImage = null; + if (res.imageId) { + const deleteImage = await funGlobal_DeleteFileById({ + fileId: res.imageId as any, + }); - if (!deleteImage.success) { - ComponentGlobal_NotifikasiPeringatan("Gagal hapus gambar "); + if (!deleteImage.success) { + console.log("Gagal hapus gambar "); + } + } + + ComponentGlobal_NotifikasiBerhasil(res.message); + router.back(); + } else { + ComponentGlobal_NotifikasiGagal(res.message); } - - ComponentGlobal_NotifikasiBerhasil(res.message); - router.back(); - } else { - ComponentGlobal_NotifikasiGagal(res.message); + } catch (error) { + console.log("Error delete kabar", error); + } finally { + setLoadingDelete(false); } } return ( <> - {/* setOpenDrawer(true)} - > - - - } - /> - } - > - {children} - */} - { - router.push(RouterDonasi.edit_kabar({ id: kabarId }), { + router.push(RouterDonasi.edit_kabar({ id: id }), { scroll: false, }); }} @@ -106,7 +108,11 @@ export default function LayoutUpdateKabarDonasi({
onDelete()}> - + {loadingDelete ? ( + + ) : ( + + )} Hapus kabar