API Detail Status Donasi

This commit is contained in:
2025-02-25 17:51:46 +08:00
parent b31617db63
commit 95e3e8cbeb
17 changed files with 399 additions and 150 deletions

View File

@@ -0,0 +1,57 @@
import backendLogger from "@/util/backendLogger";
import { NextResponse } from "next/server";
import prisma from "@/lib/prisma";
export async function GET(req: Request, { params }: { params: { id: string } }) {
try {
const { id } = params;
const donasiId = id;
const data = await prisma.donasi.findUnique({
where: {
id: donasiId,
},
select: {
id: true,
title: true,
target: true,
active: true,
createdAt: true,
updatedAt: true,
publishTime: true,
catatan: true,
progres: true,
terkumpul: true,
authorId: true,
namaBank: true,
rekening: true,
totalPencairan: true,
akumulasiPencairan: true,
imagesId: true,
donasiMaster_KategoriId: true,
donasiMaster_DurasiId: true,
donasiMaster_StatusDonasiId: true,
Author: true,
imageDonasi: true,
CeritaDonasi: true,
DonasiMaster_Ketegori: true,
DonasiMaster_Durasi: true,
DonasiMaster_Status: true,
imageId: true,
}
})
return NextResponse.json({
success: true,
message: "Data Donasi Berhasil Diambil",
data: data,
}, { status: 200 });
} catch (error) {
backendLogger.error("Error Get Data Donasi >>", error);
return NextResponse.json({
success: false,
message: "Error get detail Investasi",
reason: (error as Error).message,
}, { status: 500 });
}
}

View File

@@ -7,7 +7,7 @@ import adminDonasi_getMasterStatus from "@/app_modules/admin/donasi/fun/master/g
export default async function Page({ params }: { params: { id: string } }) { export default async function Page({ params }: { params: { id: string } }) {
let donasiId = params.id; let donasiId = params.id;
const dataPublish = await AdminDonasi_getOneById(params.id); // const dataPublish = await AdminDonasi_getOneById(params.id);
const countDonatur = await AdminDonasi_funCountDonatur(params.id); const countDonatur = await AdminDonasi_funCountDonatur(params.id);
const listMasterStatus = await adminDonasi_getMasterStatus(); const listMasterStatus = await adminDonasi_getMasterStatus();
const listDonatur = await adminDonasi_getListDonatur({ const listDonatur = await adminDonasi_getListDonatur({
@@ -19,7 +19,7 @@ export default async function Page({ params }: { params: { id: string } }) {
return ( return (
<> <>
<AdminDonasi_DetailPublish <AdminDonasi_DetailPublish
dataPublish={dataPublish as any} // dataPublish={dataPublish as any}
listDonatur={listDonatur as any} listDonatur={listDonatur as any}
countDonatur={countDonatur} countDonatur={countDonatur}
listPencairan={listPencairan as any} listPencairan={listPencairan as any}

View File

@@ -1,12 +1,12 @@
import { AdminDonasi_DetailReject } from "@/app_modules/admin/donasi"; import { AdminDonasi_DetailReject } from "@/app_modules/admin/donasi";
import { AdminDonasi_getOneById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id"; import { AdminDonasi_getOneById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id";
export default async function Page({ params }: { params: { id: string } }) { export default async function Page() {
const dataReject = await AdminDonasi_getOneById(params.id); // const dataReject = await AdminDonasi_getOneById(params.id);
return ( return (
<> <>
<AdminDonasi_DetailReject dataReject={dataReject as any} /> <AdminDonasi_DetailReject />
</> </>
); );
} }

View File

@@ -1,8 +1,8 @@
import { AdminDonasi_DetailReview } from "@/app_modules/admin/donasi"; import { AdminDonasi_DetailReview } from "@/app_modules/admin/donasi";
import { AdminDonasi_getOneById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id"; import { AdminDonasi_getOneById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id";
export default async function Page({ params }: { params: { id: string } }) { export default async function Page() {
const dataReview = await AdminDonasi_getOneById(params.id);
return <AdminDonasi_DetailReview dataReview={dataReview as any} />; return <AdminDonasi_DetailReview />;
} }

View File

@@ -2,10 +2,7 @@ import { AdminDonasi_Main } from "@/app_modules/admin/donasi";
import AdminDonasi_funCountByStatus from "@/app_modules/admin/donasi/fun/count/fun_count_donasi_by_status"; import AdminDonasi_funCountByStatus from "@/app_modules/admin/donasi/fun/count/fun_count_donasi_by_status";
export default async function Page() { export default async function Page() {
const countPublish = await AdminDonasi_funCountByStatus("1");
const countReview = await AdminDonasi_funCountByStatus("2");
const countDraft = await AdminDonasi_funCountByStatus("3");
const countReject = await AdminDonasi_funCountByStatus("4");
return ( return (
<> <>

View File

@@ -0,0 +1,37 @@
import CustomSkeleton from '@/app_modules/components/CustomSkeleton';
import { Box, SimpleGrid, Stack } from '@mantine/core';
import React from 'react';
function SkeletonAdminDetailDonasiReject() {
return (
<>
<Stack px={"lg"}>
<Box pb={"xl"}>
</Box>
<Box>
<CustomSkeleton width={"100%"} height={"20vh"} />
</Box>
<SimpleGrid
cols={2}
spacing="lg"
breakpoints={[
{ maxWidth: "62rem", cols: 3, spacing: "md" },
{ maxWidth: "48rem", cols: 2, spacing: "sm" },
{ maxWidth: "36rem", cols: 1, spacing: "sm" },
]}
>
<Box>
<CustomSkeleton width={"100%"} height={"40vh"} />
</Box>
<Box>
<CustomSkeleton width={"100%"} height={"40vh"} />
</Box>
</SimpleGrid>
</Stack>
</>
);
}
export default SkeletonAdminDetailDonasiReject;

View File

@@ -0,0 +1,18 @@
import CustomSkeleton from '@/app_modules/components/CustomSkeleton';
import { Box, Stack } from '@mantine/core';
function SkeletonAdminDetailDonasiPublish() {
return (
<>
<Stack px={"lg"}>
<Box pb={"xl"}>
</Box>
<Box>
<CustomSkeleton width={"100%"} height={"40vh"} />
</Box>
</Stack>
</>
);
}
export default SkeletonAdminDetailDonasiPublish;

View File

@@ -0,0 +1,31 @@
import CustomSkeleton from "@/app_modules/components/CustomSkeleton";
import { Stack, Box, SimpleGrid } from "@mantine/core";
function SkeletonAdminDetailDonasiReview() {
return (
<>
<Stack px={"lg"}>
<Box pb={"xl"}>
</Box>
<SimpleGrid
cols={2}
spacing="lg"
breakpoints={[
{ maxWidth: "62rem", cols: 3, spacing: "md" },
{ maxWidth: "48rem", cols: 2, spacing: "sm" },
{ maxWidth: "36rem", cols: 1, spacing: "sm" },
]}
>
<Box>
<CustomSkeleton width={"100%"} height={"40vh"} />
</Box>
<Box>
<CustomSkeleton width={"100%"} height={"40vh"} />
</Box>
</SimpleGrid>
</Stack>
</>
);
}
export default SkeletonAdminDetailDonasiReview;

View File

@@ -17,7 +17,7 @@ import {
Textarea, Textarea,
Title, Title,
} from "@mantine/core"; } from "@mantine/core";
import { useDisclosure } from "@mantine/hooks"; import { useDisclosure, useShallowEffect } from "@mantine/hooks";
import React, { useState } from "react"; import React, { useState } from "react";
import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil"; import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil";
import AdminGlobal_ComponentBackButton from "../../_admin_global/back_button"; import AdminGlobal_ComponentBackButton from "../../_admin_global/back_button";
@@ -27,38 +27,68 @@ import { AdminDonasi_getOneById } from "../fun/get/get_one_by_id";
import { AdminDonasi_funUpdateCatatanReject } from "../fun/update/fun_update_catatan_reject"; import { AdminDonasi_funUpdateCatatanReject } from "../fun/update/fun_update_catatan_reject";
import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal"; import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal";
import { Admin_ComponentModalReport } from "../../_admin_global/_component"; import { Admin_ComponentModalReport } from "../../_admin_global/_component";
import { AdminColor } from "@/app_modules/_global/color/color_pallet";
import { useParams } from "next/navigation";
import { apiGetAdminDonasiById } from "../lib/api_fetch_admin_donasi";
import { clientLogger } from "@/util/clientLogger";
import CustomSkeletonAdmin from "../../_admin_global/_component/skeleton/customSkeletonAdmin";
import SkeletonAdminDetailDonasiReject from "../component/skeleton_detail donasi_reject";
export default function AdminDonasi_DetailReject({ export default function AdminDonasi_DetailReject() {
dataReject, const [data, setData] = useState<MODEL_DONASI | null>(null);
}: { const params = useParams<{ id: string }>();
dataReject: MODEL_DONASI;
}) { useShallowEffect(() => {
const [data, setData] = useState(dataReject); const loadInitialData = async () => {
try {
const response = await apiGetAdminDonasiById({
id: params.id,
})
if (response?.success && response?.data) {
setData(response.data);
} else {
console.error("Invalid data format recieved:", response);
setData(null);
}
} catch (error) {
clientLogger.error("Invalid data format recieved:", error);
setData(null);
}
}
loadInitialData();
})
return ( return (
<> <>
<Stack> <Stack>
<ButtonOnHeader {!data ? (
catatan={data.catatan} <SkeletonAdminDetailDonasiReject/>
donasiId={data.id} ) : (
setDonasi={setData} <>
/> <ButtonOnHeader
<CatatanReject catatan={data.catatan} /> catatan={data.catatan}
<SimpleGrid donasiId={data.id}
cols={2} setDonasi={setData}
spacing="lg" />
breakpoints={[ <CatatanReject catatan={data.catatan} />
{ maxWidth: "md", cols: 2, spacing: "md" }, <SimpleGrid
{ maxWidth: "sm", cols: 1, spacing: "sm" }, cols={2}
{ maxWidth: "xs", cols: 1, spacing: "xs" }, spacing="lg"
]} breakpoints={[
> { maxWidth: "md", cols: 2, spacing: "md" },
<ComponentAdminDonasi_TampilanDetailDonasi donasi={data} /> { maxWidth: "sm", cols: 1, spacing: "sm" },
<ComponentAdminDonasi_CeritaPenggalangDana { maxWidth: "xs", cols: 1, spacing: "xs" },
cerita={data.CeritaDonasi} ]}
/> >
</SimpleGrid> <ComponentAdminDonasi_TampilanDetailDonasi donasi={data} />
</Stack> <ComponentAdminDonasi_CeritaPenggalangDana
cerita={data.CeritaDonasi}
/>
</SimpleGrid>
</>
)}
</Stack >
</> </>
); );
} }
@@ -177,10 +207,10 @@ function ButtonOnHeader({
function CatatanReject({ catatan }: { catatan: string }) { function CatatanReject({ catatan }: { catatan: string }) {
return ( return (
<> <>
<Paper p={"md"} bg={"gray.1"}> <Paper p={"md"} bg={AdminColor.softBlue}>
<Stack> <Stack>
<Title order={5}>Alasan Penolakan :</Title> <Title c={AdminColor.white} order={5}>Alasan Penolakan :</Title>
<Text>{catatan}</Text> <Text c={AdminColor.white}>{catatan}</Text>
</Stack> </Stack>
</Paper> </Paper>
</> </>

View File

@@ -1,58 +1,83 @@
"use client"; "use client";
import { IRealtimeData } from "@/lib/global_state"; import { MainColor } from "@/app_modules/_global/color";
import ComponentGlobal_InputCountDown from "@/app_modules/_global/component/input_countdown"; import ComponentGlobal_InputCountDown from "@/app_modules/_global/component/input_countdown";
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global";
import { donasi_checkStatus } from "@/app_modules/donasi/fun";
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface"; import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
import { IRealtimeData } from "@/lib/global_state";
import { clientLogger } from "@/util/clientLogger";
import { Button, Group, SimpleGrid, Stack } from "@mantine/core"; import { Button, Group, SimpleGrid, Stack } from "@mantine/core";
import { useDisclosure } from "@mantine/hooks"; import { useDisclosure, useShallowEffect } from "@mantine/hooks";
import { useRouter } from "next/navigation"; import { useParams, useRouter } from "next/navigation";
import { useState } from "react"; import { useState } from "react";
import { WibuRealtime } from "wibu-pkg"; import { WibuRealtime } from "wibu-pkg";
import { Admin_ComponentModalReport } from "../../_admin_global/_component"; import { Admin_ComponentModalReport } from "../../_admin_global/_component";
import Admin_ComponentModalPublish from "../../_admin_global/_component/comp_admin_modal_publish";
import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil"; import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil";
import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal"; import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal";
import { ComponentAdminGlobal_NotifikasiPeringatan } from "../../_admin_global/admin_notifikasi/notifikasi_peringatan"; import { ComponentAdminGlobal_NotifikasiPeringatan } from "../../_admin_global/admin_notifikasi/notifikasi_peringatan";
import AdminGlobal_ComponentBackButton from "../../_admin_global/back_button"; import AdminGlobal_ComponentBackButton from "../../_admin_global/back_button";
import adminNotifikasi_funCreateToAllUser from "../../notifikasi/fun/create/fun_create_notif_to_all_user";
import adminNotifikasi_funCreateToUser from "../../notifikasi/fun/create/fun_create_notif_user"; import adminNotifikasi_funCreateToUser from "../../notifikasi/fun/create/fun_create_notif_user";
import ComponentAdminDonasi_CeritaPenggalangDana from "../component/tampilan_detail_cerita"; import ComponentAdminDonasi_CeritaPenggalangDana from "../component/tampilan_detail_cerita";
import ComponentAdminDonasi_TampilanDetailDonasi from "../component/tampilan_detail_donasi"; import ComponentAdminDonasi_TampilanDetailDonasi from "../component/tampilan_detail_donasi";
import { AdminDonasi_getOneById } from "../fun/get/get_one_by_id"; import { AdminDonasi_getOneById } from "../fun/get/get_one_by_id";
import { AdminDonasi_funUpdateStatusPublish } from "../fun/update/fun_status_publish"; import { AdminDonasi_funUpdateStatusPublish } from "../fun/update/fun_status_publish";
import { AdminDonasi_funUpdateStatusReject } from "../fun/update/fun_status_reject"; import { AdminDonasi_funUpdateStatusReject } from "../fun/update/fun_status_reject";
import { donasi_checkStatus } from "@/app_modules/donasi/fun"; import { apiGetAdminDonasiById } from "../lib/api_fetch_admin_donasi";
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global"; import SkeletonAdminDetailDonasiReview from "../component/skeleton_detail_donasi_review";
import adminNotifikasi_funCreateToAllUser from "../../notifikasi/fun/create/fun_create_notif_to_all_user";
import { clientLogger } from "@/util/clientLogger";
import { apiGetAllUserWithExceptId } from "@/app_modules/_global/lib/api_user";
import Admin_ComponentModalPublish from "../../_admin_global/_component/comp_admin_modal_publish";
import { MainColor } from "@/app_modules/_global/color";
export default function AdminDonasi_DetailReview({ export default function AdminDonasi_DetailReview() {
dataReview, const params = useParams<{ id: string }>();
}: { const [data, setData] = useState<MODEL_DONASI | null>(null);
dataReview: MODEL_DONASI;
}) {
const [data, setData] = useState(dataReview);
useShallowEffect(() => {
const loadInitialData = async () => {
try {
const response = await apiGetAdminDonasiById({
id: params.id,
})
if (response?.success && response?.data) {
setData(response.data);
} else {
console.error("Invalid data format recieved:", response);
setData(null);
}
} catch (error) {
clientLogger.error("Invalid data format recieved:", error);
setData(null);
}
}
loadInitialData();
})
return ( return (
<> <>
<Stack> <Stack>
<ButtonOnHeader donasi={data} setData={setData} /> {!data ? (
<SimpleGrid <SkeletonAdminDetailDonasiReview />
cols={2} ) : (
spacing="lg" <>
breakpoints={[ <ButtonOnHeader donasi={data} setData={setData} />
{ maxWidth: "md", cols: 2, spacing: "md" }, <SimpleGrid
{ maxWidth: "sm", cols: 1, spacing: "sm" }, cols={2}
{ maxWidth: "xs", cols: 1, spacing: "xs" }, spacing="lg"
]} breakpoints={[
> { maxWidth: "md", cols: 2, spacing: "md" },
<ComponentAdminDonasi_TampilanDetailDonasi donasi={data} /> { maxWidth: "sm", cols: 1, spacing: "sm" },
<ComponentAdminDonasi_CeritaPenggalangDana { maxWidth: "xs", cols: 1, spacing: "xs" },
cerita={data.CeritaDonasi} ]}
/> >
</SimpleGrid> <ComponentAdminDonasi_TampilanDetailDonasi donasi={data} />
</Stack> <ComponentAdminDonasi_CeritaPenggalangDana
cerita={data.CeritaDonasi}
/>
</SimpleGrid>
</>
)}
</Stack >
</> </>
); );
} }
@@ -138,6 +163,7 @@ function ButtonOnHeader({
const newData = await AdminDonasi_getOneById(donasi?.id); const newData = await AdminDonasi_getOneById(donasi?.id);
setData(newData); setData(newData);
// router.back()
ComponentAdminGlobal_NotifikasiBerhasil( ComponentAdminGlobal_NotifikasiBerhasil(
"Berhasil Mengubah Status Donasi" "Berhasil Mengubah Status Donasi"
); );
@@ -273,36 +299,36 @@ function ButtonOnHeader({
} }
/> />
<Admin_ComponentModalPublish <Admin_ComponentModalPublish
opened={openedPublish} opened={openedPublish}
onClose={closePublish} onClose={closePublish}
title={"Anda yakin ingin publish donasi ini?"} title={"Anda yakin ingin publish donasi ini?"}
buttonKiri={ buttonKiri={
<> <>
<Button <Button
radius={"xl"} radius={"xl"}
onClick={() => { onClick={() => {
closePublish(); closePublish();
}} }}
> >
Batal Batal
</Button> </Button>
</> </>
} }
buttonKanan={ buttonKanan={
<> <>
<Button <Button
bg={MainColor.green} bg={MainColor.green}
loaderPosition="center" loaderPosition="center"
loading={isLoadingPublish ? true : false} loading={isLoadingPublish ? true : false}
radius={"xl"} radius={"xl"}
onClick={() => { onClick={() => {
onPublish(); onPublish();
}} }}
> >
Simpan Simpan
</Button> </Button>
</> </>
} }
/> />

View File

@@ -38,34 +38,40 @@ import {
TextInput, TextInput,
Title, Title,
} from "@mantine/core"; } from "@mantine/core";
import { useDisclosure } from "@mantine/hooks"; import { useDisclosure, useShallowEffect } from "@mantine/hooks";
import { IconReload } from "@tabler/icons-react"; import { IconReload } from "@tabler/icons-react";
import _, { toNumber } from "lodash"; import _, { toNumber } from "lodash";
import moment from "moment"; import moment from "moment";
import { useRouter } from "next/navigation"; import { useParams, useRouter } from "next/navigation";
import { useState } from "react"; import { useState } from "react";
import { adminDonasi_getListDonatur } from "../../fun/get/get_list_donatur_by_id"; import { adminDonasi_getListDonatur } from "../../fun/get/get_list_donatur_by_id";
import { AdminDonasi_getOneById } from "../../fun/get/get_one_by_id"; import { AdminDonasi_getOneById } from "../../fun/get/get_one_by_id";
import adminDonasi_funUpdateStatusDanTotal from "../../fun/update/fun_update_status_dan_total"; import adminDonasi_funUpdateStatusDanTotal from "../../fun/update/fun_update_status_dan_total";
import { ComponentAdminGlobal_TitlePage } from "@/app_modules/admin/_admin_global/_component"; import { ComponentAdminGlobal_TitlePage } from "@/app_modules/admin/_admin_global/_component";
import { AccentColor, AdminColor } from "@/app_modules/_global/color/color_pallet"; import { AccentColor, AdminColor } from "@/app_modules/_global/color/color_pallet";
import CustomSkeletonAdmin from "@/app_modules/admin/_admin_global/_component/skeleton/customSkeletonAdmin";
import { apiGetAdminDonasiById } from "../../lib/api_fetch_admin_donasi";
import { clientLogger } from "@/util/clientLogger";
import SkeletonAdminDetailDonasiReject from "../../component/skeleton_detail donasi_reject";
import SkeletonAdminDetailDonasiPublish from "../../component/skeleton_detail_donasi_publish";
export default function AdminDonasi_DetailPublish({ export default function AdminDonasi_DetailPublish({
dataPublish,
listDonatur, listDonatur,
countDonatur, countDonatur,
listPencairan, listPencairan,
listMasterStatus, listMasterStatus,
}: { }: {
dataPublish: MODEL_DONASI;
listDonatur: any[]; listDonatur: any[];
countDonatur: number; countDonatur: number;
listPencairan: MODEL_DONASI_PENCAIRAN_DANA[]; listPencairan: MODEL_DONASI_PENCAIRAN_DANA[];
listMasterStatus: MODEL_NEW_DEFAULT_MASTER[]; listMasterStatus: MODEL_NEW_DEFAULT_MASTER[];
}) { }) {
const [dataDonasi, setDataDonasi] = useState(dataPublish); const params = useParams<{ id: string }>();
const [data, setData] = useState<MODEL_DONASI | null>(null);
const [pencairan, setPencairan] = useState(listPencairan); const [pencairan, setPencairan] = useState(listPencairan);
const selectedData = _.omit(dataDonasi, [ const selectedData = _.omit(data, [
"Author", "Author",
"imageDonasi", "imageDonasi",
"CeritaDonasi", "CeritaDonasi",
@@ -74,23 +80,50 @@ export default function AdminDonasi_DetailPublish({
"DonasiMaster_Status", "DonasiMaster_Status",
]); ]);
useShallowEffect(() => {
const loadInitialData = async () => {
try {
const response = await apiGetAdminDonasiById({
id: params.id,
})
if (response?.success && response?.data) {
setTimeout(() => {
setData(response.data)
}, 3000);
} else {
console.log("Invalid data format recieved:", response);
setData(null)
}
} catch (error) {
clientLogger.error("Invalid data format recieved:", error);
setData(null);
}
}
loadInitialData();
})
return ( return (
<> <>
{/* <pre>{JSON.stringify(pencairan, null, 2)}</pre> */} {/* <pre>{JSON.stringify(pencairan, null, 2)}</pre> */}
<Stack> <Stack>
<AdminGlobal_ComponentBackButton {!data ?
path={RouterAdminDonasi.table_publish} (<SkeletonAdminDetailDonasiPublish />) : (
/> <>
<TampilanDetailDonasi donasi={dataDonasi} countDonatur={countDonatur} /> <AdminGlobal_ComponentBackButton
<TampilanListDonatur path={RouterAdminDonasi.table_publish}
donatur={listDonatur} />
listMasterStatus={listMasterStatus} <TampilanDetailDonasi donasi={data} countDonatur={countDonatur} />
dataDonasi={selectedData as any} <TampilanListDonatur
onSuccessDonasi={(val) => { donatur={listDonatur}
setDataDonasi(val); listMasterStatus={listMasterStatus}
}} dataDonasi={selectedData as any}
/> onSuccessDonasi={(val) => {
<TampilanListPencairan pencairan={pencairan} /> setData(val);
}}
/>
<TampilanListPencairan pencairan={pencairan} />
</>
)}
</Stack> </Stack>
</> </>
); );
@@ -387,7 +420,7 @@ function TampilanListDonatur({
</td> </td>
<td> <td>
<Center c={AccentColor.white}> <Center c={AccentColor.white}>
<ComponentGlobal_TampilanRupiah nominal={+e?.nominal} /> <ComponentGlobal_TampilanRupiah nominal={+e?.nominal} />
</Center> </Center>
</td> </td>
<td> <td>
@@ -757,17 +790,17 @@ function TampilanListPencairan({
color={AdminColor.softBlue} color={AdminColor.softBlue}
component={ component={
<Group> <Group>
<ActionIcon <ActionIcon
size={"lg"} size={"lg"}
radius={"xl"} radius={"xl"}
variant="light" variant="light"
onClick={() => { onClick={() => {
// onRelaod(); // onRelaod();
}} }}
> >
<IconReload /> <IconReload />
</ActionIcon> </ActionIcon>
{/* <Select {/* <Select
placeholder="Pilih status" placeholder="Pilih status"
value={isSelect} value={isSelect}
data={listMasterStatus.map((e) => ({ data={listMasterStatus.map((e) => ({
@@ -778,10 +811,10 @@ function TampilanListPencairan({
onSelect(val); onSelect(val);
}} }}
/> */} /> */}
</Group> </Group>
} }
/> />
<Paper p={"md"} bg={AdminColor.softBlue} shadow="lg" h={"80vh"}> <Paper p={"md"} bg={AdminColor.softBlue} shadow="lg" h={"80vh"}>
<ScrollArea w={"100%"} h={"90%"}> <ScrollArea w={"100%"} h={"90%"}>
<Table <Table
@@ -789,7 +822,7 @@ function TampilanListPencairan({
horizontalSpacing={"md"} horizontalSpacing={"md"}
p={"md"} p={"md"}
w={1500} w={1500}
> >
<thead> <thead>
<tr> <tr>
@@ -802,7 +835,7 @@ function TampilanListPencairan({
<th> <th>
<Center c={AccentColor.white}>Judul</Center> <Center c={AccentColor.white}>Judul</Center>
</th> </th>
<th style={{ color: AccentColor.white}}>Deskripsi</th> <th style={{ color: AccentColor.white }}>Deskripsi</th>
<th> <th>
<Center c={AccentColor.white}>Bukti Transfer</Center> <Center c={AccentColor.white}>Bukti Transfer</Center>
</th> </th>

View File

@@ -2,7 +2,8 @@ export {
apiGetAdminDonasiStatusCountDashboard, apiGetAdminDonasiStatusCountDashboard,
apiGetAdminDonasiKategoriCountDashboard, apiGetAdminDonasiKategoriCountDashboard,
apiGetAdminDonasiByStatus, apiGetAdminDonasiByStatus,
apiGetAdminDonasiKategori apiGetAdminDonasiKategori,
apiGetAdminDonasiById,
}; };
const apiGetAdminDonasiStatusCountDashboard = async ({ name }: const apiGetAdminDonasiStatusCountDashboard = async ({ name }:
{ name: "Publish" | "Review" | "Reject" }) => { { name: "Publish" | "Review" | "Reject" }) => {
@@ -81,4 +82,19 @@ const apiGetAdminDonasiKategori = async () => {
} }
}) })
return await response.json().catch(() => null); return await response.json().catch(() => null);
}
const apiGetAdminDonasiById = async ({id} : {id: string}) => {
const { token } = await fetch("/api/get-cookie").then((res) => res.json());
if (!token) return await token.json().catch(() => null);
const response = await fetch(`/api/admin/donasi/${id}`, {
method: "GET",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
"Access-Control-Allow-Origin": "*",
Authorization: `Bearer ${token}`
}
})
return await response.json().catch(() => null);
} }

View File

@@ -269,11 +269,11 @@ function TableView() {
<Grid.Col span={4}> <Grid.Col span={4}>
{isCreate ? ( {isCreate ? (
<Paper p={"md"} withBorder> <Paper p={"md"} bg={AdminColor.softBlue}>
<Stack> <Stack>
<TextInput <TextInput
value={create} value={create}
label={<Title order={6}>Tambah Kategori</Title>} label={<Title c={AdminColor.white} order={6}>Tambah Kategori</Title>}
placeholder="Masukan kategori baru" placeholder="Masukan kategori baru"
onChange={(val) => { onChange={(val) => {
setCreate(val.currentTarget.value); setCreate(val.currentTarget.value);
@@ -313,11 +313,11 @@ function TableView() {
)} )}
{isUpdate ? ( {isUpdate ? (
<Paper p={"md"} withBorder style={{ transition: "1s" }}> <Paper p={"md"} bg={AdminColor.softBlue} style={{ transition: "1s" }}>
<Stack> <Stack>
<TextInput <TextInput
value={updateKategori.name} value={updateKategori.name}
label={<Title order={6}>Update Kategori</Title>} label={<Title c={AdminColor.white} order={6}>Update Kategori</Title>}
placeholder="Update kategori" placeholder="Update kategori"
onChange={(val) => { onChange={(val) => {
const data = _.clone(updateKategori); const data = _.clone(updateKategori);

View File

@@ -93,8 +93,6 @@ export default function Admin_Investasi({
name: "Publish", name: "Publish",
}); });
console.log("Response Publish", response);
if (response) { if (response) {
setCountPublish(response.data); setCountPublish(response.data);
} }

View File

@@ -281,6 +281,7 @@ function TableStatus() {
</Stack> </Stack>
<Modal <Modal
styles={{ body: { backgroundColor: AdminColor.softBlue } }}
opened={opened} opened={opened}
onClose={close} onClose={close}
centered centered
@@ -289,6 +290,7 @@ function TableStatus() {
> >
<Stack> <Stack>
<Textarea <Textarea
styles={{ label: { color: AdminColor.white } }}
minRows={2} minRows={2}
maxRows={5} maxRows={5}
maxLength={300} maxLength={300}

View File

@@ -414,14 +414,16 @@ function TableStatus() {
</Stack> </Stack>
<Modal <Modal
styles={{ body: { backgroundColor: AdminColor.softBlue}}}
opened={openedReject} opened={openedReject}
onClose={closeReject} onClose={closeReject}
centered centered
withCloseButton={false} withCloseButton={false}
size={"md"} size={"md"}
> >
<Stack> <Stack >
<Textarea <Textarea
styles={{ label: { color: AdminColor.white } }}
minRows={2} minRows={2}
maxRows={5} maxRows={5}
maxLength={300} maxLength={300}
@@ -453,6 +455,7 @@ function TableStatus() {
</Stack> </Stack>
</Modal> </Modal>
<Modal <Modal
styles={{ body: { backgroundColor: AdminColor.softBlue}}}
opened={openedPublish} opened={openedPublish}
onClose={closePublish} onClose={closePublish}
centered centered
@@ -460,7 +463,7 @@ function TableStatus() {
size={"md"} size={"md"}
> >
<Stack align="center"> <Stack align="center">
<Title order={5}>Apakah anda yakin ingin mempublish vote ini?</Title> <Title c={AdminColor.white} order={5}>Apakah anda yakin ingin mempublish vote ini?</Title>
<Group position="center"> <Group position="center">
<Button radius={"xl"} onClick={() => closePublish()}> <Button radius={"xl"} onClick={() => closePublish()}>
Batal Batal

View File

@@ -33,7 +33,8 @@ const middlewareConfig: MiddlewareConfig = {
// "/api/event/*", // "/api/event/*",
// ADMIN API // ADMIN API
// >> buat dibawah sini << // >> buat dibawah sini <<
"/api/admin/donasi/*",
// Akses awal // Akses awal