diff --git a/src/app/api/new/donasi/invoice/route.ts b/src/app/api/new/donasi/invoice/route.ts
new file mode 100644
index 00000000..4585a9b9
--- /dev/null
+++ b/src/app/api/new/donasi/invoice/route.ts
@@ -0,0 +1,77 @@
+import { prisma } from "@/app/lib";
+import { funGetUserIdByToken } from "@/app_modules/_global/fun/get";
+import _ from "lodash";
+import { NextResponse } from "next/server";
+export const dynamic = "force-dynamic";
+
+
+
+
+// GET ALL DATA DONASI SAYA (INVOICE)
+export async function GET(request: Request) {
+ try {
+ const { searchParams } = new URL(request.url)
+ const page = searchParams.get("page")
+ const dataSkip = Number(page) * 5 - 5;
+
+
+ const userLoginId = await funGetUserIdByToken()
+ if (userLoginId == null) {
+ return NextResponse.json({ success: false, message: "Gagal mendapatkan data, user id tidak ada" }, { status: 500 });
+ }
+
+ const data = await prisma.donasi_Invoice.findMany({
+ take: 5,
+ skip: dataSkip,
+ orderBy: {
+ createdAt: "desc",
+ },
+ where: {
+ authorId: userLoginId,
+ },
+ select: {
+ id: true,
+ nominal: true,
+ donasiMaster_StatusInvoiceId: true,
+ DonasiMaster_StatusInvoice: {
+ select: {
+ name: true
+ }
+ },
+ Donasi: {
+ select: {
+ id: true,
+ title: true,
+ publishTime: true,
+ progres: true,
+ imageId: true,
+ DonasiMaster_Durasi: {
+ select: {
+ name: true
+ }
+ },
+ },
+ },
+ },
+ });
+
+ const dataFix = data.map((v: any) => ({
+ ..._.omit(v, ["DonasiMaster_StatusInvoice", "Donasi"]),
+ nameStatusInvoice: v.DonasiMaster_StatusInvoice.name,
+ donasiId: v.Donasi.id,
+ title: v.Donasi.title,
+ publishTime: v.Donasi.publishTime,
+ progres: v.Donasi.progres,
+ imageId: v.Donasi.imageId,
+ durasiDonasi: v.Donasi.DonasiMaster_Durasi.name
+ }))
+
+
+ return NextResponse.json({ success: true, message: "Berhasil mendapatkan data", data: dataFix }, { 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/main/donasi_saya/page.tsx b/src/app/dev/donasi/main/donasi_saya/page.tsx
index bbb25e4a..a04c7954 100644
--- a/src/app/dev/donasi/main/donasi_saya/page.tsx
+++ b/src/app/dev/donasi/main/donasi_saya/page.tsx
@@ -1,8 +1,12 @@
-import { DonasiSayaDonasi } from "@/app_modules/donasi";
-import { donasi_funGetAllInvoiceByAuthorId } from "@/app_modules/donasi/fun/get/get_all_invoice_by_author_id";
+import DonasiSayaNew from "@/app_modules/donasi/main/donasi_saya_new";
export default async function Page() {
- const listInvoice = await donasi_funGetAllInvoiceByAuthorId({ page: 1 });
+ // const listInvoice = await donasi_funGetAllInvoiceByAuthorId({ page: 1 });
- return ;
+ return (
+ <>
+ {/* ; */}
+
+ >
+ )
}
diff --git a/src/app_modules/donasi/component/card_view/card_invoice_new.tsx b/src/app_modules/donasi/component/card_view/card_invoice_new.tsx
new file mode 100644
index 00000000..c5712648
--- /dev/null
+++ b/src/app_modules/donasi/component/card_view/card_invoice_new.tsx
@@ -0,0 +1,83 @@
+import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
+import { AccentColor } from "@/app_modules/_global/color/color_pallet";
+import { ComponentGlobal_LoadImageCustom } from "@/app_modules/_global/component";
+import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_global/notifikasi_gagal";
+import { Badge, Card, Grid, Group, Progress, Stack, Text } from "@mantine/core";
+import { useRouter } from "next/navigation";
+import { IDataAllDonasiSaya } from "../../lib/type_donasi";
+import ComponentDonasi_TampilanHitungMundur from "../tampilan_hitung_mundur";
+import TampilanRupiahDonasi from "../tampilan_rupiah";
+
+export function ComponentDonasi_CardInvoiceNew({ data, }: { data: IDataAllDonasiSaya; }) {
+ const router = useRouter();
+
+ async function onCekInvoice() {
+ if (data.donasiMaster_StatusInvoiceId === "1") {
+ return router.push(RouterDonasi.detail_donasi_saya + `${data?.id}`);
+ } else {
+ if (data.donasiMaster_StatusInvoiceId === "2") {
+ return router.push(RouterDonasi.proses_transaksi + `${data?.id}`);
+ } else {
+ if (data.donasiMaster_StatusInvoiceId === "3") {
+ return router.push(RouterDonasi.invoice + `${data?.id}`);
+ } else {
+ ComponentGlobal_NotifikasiGagal("Gagal Melihat Invoice");
+ }
+ }
+ }
+ }
+
+ return (
+ <>
+ onCekInvoice()}
+ >
+
+
+
+
+
+
+ {data.title}
+
+
+
+
+
+
+ Donasi Saya
+
+
+
+
+
+
+ {data.nameStatusInvoice}
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/app_modules/donasi/component/skeleton_donasi.tsx b/src/app_modules/donasi/component/skeleton_donasi.tsx
index 7c27f924..7f461e64 100644
--- a/src/app_modules/donasi/component/skeleton_donasi.tsx
+++ b/src/app_modules/donasi/component/skeleton_donasi.tsx
@@ -1,5 +1,5 @@
import { ComponentGlobal_CardStyles } from "@/app_modules/_global/component";
-import { Box, Grid, Group, Skeleton, Stack } from "@mantine/core";
+import { Box, Grid, Skeleton } from "@mantine/core";
export default function SkeletonDonasi() {
return <>
diff --git a/src/app_modules/donasi/component/skeleton_donasi_saya.tsx b/src/app_modules/donasi/component/skeleton_donasi_saya.tsx
new file mode 100644
index 00000000..1b3b3a2b
--- /dev/null
+++ b/src/app_modules/donasi/component/skeleton_donasi_saya.tsx
@@ -0,0 +1,32 @@
+import { ComponentGlobal_CardStyles } from "@/app_modules/_global/component";
+import { Box, Grid, Skeleton } from "@mantine/core";
+
+export default function SkeletonDonasiSaya() {
+ return <>
+
+ {[...Array(3)].map((_, index) => (
+
+
+
+
+ {[...Array(4)].map((_, index) => (
+
+
+
+
+
+
+
+ ))}
+
+
+
+
+
+
+
+
+ ))}
+
+ >;
+}
\ No newline at end of file
diff --git a/src/app_modules/donasi/lib/api_donasi.ts b/src/app_modules/donasi/lib/api_donasi.ts
index 04f661f3..2f7e719e 100644
--- a/src/app_modules/donasi/lib/api_donasi.ts
+++ b/src/app_modules/donasi/lib/api_donasi.ts
@@ -6,4 +6,9 @@ export const apiGetAllDonasi = async (path?: string) => {
export const apiGetMasterDonasi = async (path?: string) => {
const response = await fetch(`/api/new/donasi/master${(path) ? path : ''}`)
return await response.json().catch(() => null)
+}
+
+export const apiGetAllDonasiSaya = async (path?: string) => {
+ const response = await fetch(`/api/new/donasi/invoice${(path) ? path : ''}`)
+ return await response.json().catch(() => null)
}
\ No newline at end of file
diff --git a/src/app_modules/donasi/lib/type_donasi.ts b/src/app_modules/donasi/lib/type_donasi.ts
index 2931b59f..912d067f 100644
--- a/src/app_modules/donasi/lib/type_donasi.ts
+++ b/src/app_modules/donasi/lib/type_donasi.ts
@@ -7,4 +7,17 @@ export interface IDataAllDonasi {
terkumpul: string
target: string
nameDonasiDurasi: string
+}
+
+export interface IDataAllDonasiSaya {
+ id: string
+ nominal: string
+ donasiMaster_StatusInvoiceId: string
+ nameStatusInvoice: string
+ donasiId: string
+ title: string
+ publishTime: Date
+ progres: string
+ imageId: string
+ durasiDonasi: string
}
\ No newline at end of file
diff --git a/src/app_modules/donasi/main/donasi_saya_new.tsx b/src/app_modules/donasi/main/donasi_saya_new.tsx
new file mode 100644
index 00000000..0ecf12b1
--- /dev/null
+++ b/src/app_modules/donasi/main/donasi_saya_new.tsx
@@ -0,0 +1,72 @@
+"use client";
+import ComponentGlobal_IsEmptyData from "@/app_modules/_global/component/is_empty_data";
+import ComponentGlobal_Loader from "@/app_modules/_global/component/loader";
+import { Box, Center } from "@mantine/core";
+import { useShallowEffect } from "@mantine/hooks";
+import _ from "lodash";
+import { ScrollOnly } from "next-scroll-loader";
+import { useState } from "react";
+import { ComponentDonasi_CardInvoiceNew } from "../component/card_view/card_invoice_new";
+import SkeletonDonasiSaya from "../component/skeleton_donasi_saya";
+import { apiGetAllDonasiSaya } from "../lib/api_donasi";
+import { IDataAllDonasiSaya } from "../lib/type_donasi";
+
+export default function DonasiSayaNew() {
+ const [data, setData] = useState([]);
+ const [activePage, setActivePage] = useState(1);
+ const [loading, setLoading] = useState(true)
+
+ async function getDataDonasiSaya() {
+ try {
+ setLoading(true)
+ const response = await apiGetAllDonasiSaya(`?page=1`)
+ if (response.success) {
+ setData(response.data);
+ }
+ } catch (error) {
+ console.error(error);
+ } finally {
+ setLoading(false)
+ }
+ }
+
+
+ useShallowEffect(() => {
+ getDataDonasiSaya()
+ }, []);
+
+ return (
+ <>
+
+ {
+ loading ?
+
+ :
+ _.isEmpty(data) ? (
+
+ ) : (
+ (
+
+
+
+ )}
+ data={data}
+ setData={setData}
+ moreData={async () => {
+ const pageNew = activePage + 1
+ const loadData = await apiGetAllDonasiSaya(`?page=${pageNew}`)
+ setActivePage((val) => val + 1);
+
+ return loadData.data;
+ }}
+ >
+ {(item) => }
+
+ )
+ }
+
+ >
+ );
+}
\ No newline at end of file