Update Versi 1.5.27 #32
57
src/app/api/admin/donasi/[id]/route.ts
Normal file
57
src/app/api/admin/donasi/[id]/route.ts
Normal 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 });
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,7 @@ import adminDonasi_getMasterStatus from "@/app_modules/admin/donasi/fun/master/g
|
||||
|
||||
export default async function Page({ params }: { params: { id: string } }) {
|
||||
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 listMasterStatus = await adminDonasi_getMasterStatus();
|
||||
const listDonatur = await adminDonasi_getListDonatur({
|
||||
@@ -19,7 +19,7 @@ export default async function Page({ params }: { params: { id: string } }) {
|
||||
return (
|
||||
<>
|
||||
<AdminDonasi_DetailPublish
|
||||
dataPublish={dataPublish as any}
|
||||
// dataPublish={dataPublish as any}
|
||||
listDonatur={listDonatur as any}
|
||||
countDonatur={countDonatur}
|
||||
listPencairan={listPencairan as any}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import { AdminDonasi_DetailReject } from "@/app_modules/admin/donasi";
|
||||
import { AdminDonasi_getOneById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id";
|
||||
|
||||
export default async function Page({ params }: { params: { id: string } }) {
|
||||
const dataReject = await AdminDonasi_getOneById(params.id);
|
||||
export default async function Page() {
|
||||
// const dataReject = await AdminDonasi_getOneById(params.id);
|
||||
|
||||
return (
|
||||
<>
|
||||
<AdminDonasi_DetailReject dataReject={dataReject as any} />
|
||||
<AdminDonasi_DetailReject />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { AdminDonasi_DetailReview } from "@/app_modules/admin/donasi";
|
||||
import { AdminDonasi_getOneById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id";
|
||||
|
||||
export default async function Page({ params }: { params: { id: string } }) {
|
||||
const dataReview = await AdminDonasi_getOneById(params.id);
|
||||
export default async function Page() {
|
||||
|
||||
|
||||
return <AdminDonasi_DetailReview dataReview={dataReview as any} />;
|
||||
return <AdminDonasi_DetailReview />;
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
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 (
|
||||
<>
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -17,7 +17,7 @@ import {
|
||||
Textarea,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import { useDisclosure } from "@mantine/hooks";
|
||||
import { useDisclosure, useShallowEffect } from "@mantine/hooks";
|
||||
import React, { useState } from "react";
|
||||
import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil";
|
||||
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 { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal";
|
||||
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({
|
||||
dataReject,
|
||||
}: {
|
||||
dataReject: MODEL_DONASI;
|
||||
}) {
|
||||
const [data, setData] = useState(dataReject);
|
||||
export default function AdminDonasi_DetailReject() {
|
||||
const [data, setData] = useState<MODEL_DONASI | null>(null);
|
||||
const params = useParams<{ id: string }>();
|
||||
|
||||
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 (
|
||||
<>
|
||||
<Stack>
|
||||
<ButtonOnHeader
|
||||
catatan={data.catatan}
|
||||
donasiId={data.id}
|
||||
setDonasi={setData}
|
||||
/>
|
||||
<CatatanReject catatan={data.catatan} />
|
||||
<SimpleGrid
|
||||
cols={2}
|
||||
spacing="lg"
|
||||
breakpoints={[
|
||||
{ maxWidth: "md", cols: 2, spacing: "md" },
|
||||
{ maxWidth: "sm", cols: 1, spacing: "sm" },
|
||||
{ maxWidth: "xs", cols: 1, spacing: "xs" },
|
||||
]}
|
||||
>
|
||||
<ComponentAdminDonasi_TampilanDetailDonasi donasi={data} />
|
||||
<ComponentAdminDonasi_CeritaPenggalangDana
|
||||
cerita={data.CeritaDonasi}
|
||||
/>
|
||||
</SimpleGrid>
|
||||
</Stack>
|
||||
{!data ? (
|
||||
<SkeletonAdminDetailDonasiReject/>
|
||||
) : (
|
||||
<>
|
||||
<ButtonOnHeader
|
||||
catatan={data.catatan}
|
||||
donasiId={data.id}
|
||||
setDonasi={setData}
|
||||
/>
|
||||
<CatatanReject catatan={data.catatan} />
|
||||
<SimpleGrid
|
||||
cols={2}
|
||||
spacing="lg"
|
||||
breakpoints={[
|
||||
{ maxWidth: "md", cols: 2, spacing: "md" },
|
||||
{ maxWidth: "sm", cols: 1, spacing: "sm" },
|
||||
{ maxWidth: "xs", cols: 1, spacing: "xs" },
|
||||
]}
|
||||
>
|
||||
<ComponentAdminDonasi_TampilanDetailDonasi donasi={data} />
|
||||
<ComponentAdminDonasi_CeritaPenggalangDana
|
||||
cerita={data.CeritaDonasi}
|
||||
/>
|
||||
</SimpleGrid>
|
||||
</>
|
||||
)}
|
||||
</Stack >
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -177,10 +207,10 @@ function ButtonOnHeader({
|
||||
function CatatanReject({ catatan }: { catatan: string }) {
|
||||
return (
|
||||
<>
|
||||
<Paper p={"md"} bg={"gray.1"}>
|
||||
<Paper p={"md"} bg={AdminColor.softBlue}>
|
||||
<Stack>
|
||||
<Title order={5}>Alasan Penolakan :</Title>
|
||||
<Text>{catatan}</Text>
|
||||
<Title c={AdminColor.white} order={5}>Alasan Penolakan :</Title>
|
||||
<Text c={AdminColor.white}>{catatan}</Text>
|
||||
</Stack>
|
||||
</Paper>
|
||||
</>
|
||||
|
||||
@@ -1,58 +1,83 @@
|
||||
"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_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 { IRealtimeData } from "@/lib/global_state";
|
||||
import { clientLogger } from "@/util/clientLogger";
|
||||
import { Button, Group, SimpleGrid, Stack } from "@mantine/core";
|
||||
import { useDisclosure } from "@mantine/hooks";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useDisclosure, useShallowEffect } from "@mantine/hooks";
|
||||
import { useParams, useRouter } from "next/navigation";
|
||||
import { useState } from "react";
|
||||
import { WibuRealtime } from "wibu-pkg";
|
||||
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_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal";
|
||||
import { ComponentAdminGlobal_NotifikasiPeringatan } from "../../_admin_global/admin_notifikasi/notifikasi_peringatan";
|
||||
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 ComponentAdminDonasi_CeritaPenggalangDana from "../component/tampilan_detail_cerita";
|
||||
import ComponentAdminDonasi_TampilanDetailDonasi from "../component/tampilan_detail_donasi";
|
||||
import { AdminDonasi_getOneById } from "../fun/get/get_one_by_id";
|
||||
import { AdminDonasi_funUpdateStatusPublish } from "../fun/update/fun_status_publish";
|
||||
import { AdminDonasi_funUpdateStatusReject } from "../fun/update/fun_status_reject";
|
||||
import { donasi_checkStatus } from "@/app_modules/donasi/fun";
|
||||
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global";
|
||||
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";
|
||||
import { apiGetAdminDonasiById } from "../lib/api_fetch_admin_donasi";
|
||||
import SkeletonAdminDetailDonasiReview from "../component/skeleton_detail_donasi_review";
|
||||
|
||||
export default function AdminDonasi_DetailReview({
|
||||
dataReview,
|
||||
}: {
|
||||
dataReview: MODEL_DONASI;
|
||||
}) {
|
||||
const [data, setData] = useState(dataReview);
|
||||
export default function AdminDonasi_DetailReview() {
|
||||
const params = useParams<{ id: string }>();
|
||||
const [data, setData] = useState<MODEL_DONASI | null>(null);
|
||||
|
||||
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 (
|
||||
<>
|
||||
<Stack>
|
||||
<ButtonOnHeader donasi={data} setData={setData} />
|
||||
<SimpleGrid
|
||||
cols={2}
|
||||
spacing="lg"
|
||||
breakpoints={[
|
||||
{ maxWidth: "md", cols: 2, spacing: "md" },
|
||||
{ maxWidth: "sm", cols: 1, spacing: "sm" },
|
||||
{ maxWidth: "xs", cols: 1, spacing: "xs" },
|
||||
]}
|
||||
>
|
||||
<ComponentAdminDonasi_TampilanDetailDonasi donasi={data} />
|
||||
<ComponentAdminDonasi_CeritaPenggalangDana
|
||||
cerita={data.CeritaDonasi}
|
||||
/>
|
||||
</SimpleGrid>
|
||||
</Stack>
|
||||
{!data ? (
|
||||
<SkeletonAdminDetailDonasiReview />
|
||||
) : (
|
||||
<>
|
||||
<ButtonOnHeader donasi={data} setData={setData} />
|
||||
<SimpleGrid
|
||||
cols={2}
|
||||
spacing="lg"
|
||||
breakpoints={[
|
||||
{ maxWidth: "md", cols: 2, spacing: "md" },
|
||||
{ maxWidth: "sm", cols: 1, spacing: "sm" },
|
||||
{ maxWidth: "xs", cols: 1, spacing: "xs" },
|
||||
]}
|
||||
>
|
||||
<ComponentAdminDonasi_TampilanDetailDonasi donasi={data} />
|
||||
<ComponentAdminDonasi_CeritaPenggalangDana
|
||||
cerita={data.CeritaDonasi}
|
||||
/>
|
||||
</SimpleGrid>
|
||||
</>
|
||||
)}
|
||||
</Stack >
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -138,6 +163,7 @@ function ButtonOnHeader({
|
||||
|
||||
const newData = await AdminDonasi_getOneById(donasi?.id);
|
||||
setData(newData);
|
||||
// router.back()
|
||||
ComponentAdminGlobal_NotifikasiBerhasil(
|
||||
"Berhasil Mengubah Status Donasi"
|
||||
);
|
||||
@@ -273,36 +299,36 @@ function ButtonOnHeader({
|
||||
}
|
||||
/>
|
||||
<Admin_ComponentModalPublish
|
||||
opened={openedPublish}
|
||||
onClose={closePublish}
|
||||
title={"Anda yakin ingin publish donasi ini?"}
|
||||
buttonKiri={
|
||||
<>
|
||||
<Button
|
||||
radius={"xl"}
|
||||
onClick={() => {
|
||||
closePublish();
|
||||
}}
|
||||
>
|
||||
Batal
|
||||
</Button>
|
||||
</>
|
||||
}
|
||||
buttonKanan={
|
||||
<>
|
||||
<Button
|
||||
bg={MainColor.green}
|
||||
loaderPosition="center"
|
||||
loading={isLoadingPublish ? true : false}
|
||||
radius={"xl"}
|
||||
onClick={() => {
|
||||
onPublish();
|
||||
}}
|
||||
>
|
||||
Simpan
|
||||
</Button>
|
||||
</>
|
||||
}
|
||||
opened={openedPublish}
|
||||
onClose={closePublish}
|
||||
title={"Anda yakin ingin publish donasi ini?"}
|
||||
buttonKiri={
|
||||
<>
|
||||
<Button
|
||||
radius={"xl"}
|
||||
onClick={() => {
|
||||
closePublish();
|
||||
}}
|
||||
>
|
||||
Batal
|
||||
</Button>
|
||||
</>
|
||||
}
|
||||
buttonKanan={
|
||||
<>
|
||||
<Button
|
||||
bg={MainColor.green}
|
||||
loaderPosition="center"
|
||||
loading={isLoadingPublish ? true : false}
|
||||
radius={"xl"}
|
||||
onClick={() => {
|
||||
onPublish();
|
||||
}}
|
||||
>
|
||||
Simpan
|
||||
</Button>
|
||||
</>
|
||||
}
|
||||
/>
|
||||
|
||||
|
||||
|
||||
@@ -38,34 +38,40 @@ import {
|
||||
TextInput,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import { useDisclosure } from "@mantine/hooks";
|
||||
import { useDisclosure, useShallowEffect } from "@mantine/hooks";
|
||||
import { IconReload } from "@tabler/icons-react";
|
||||
import _, { toNumber } from "lodash";
|
||||
import moment from "moment";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useParams, useRouter } from "next/navigation";
|
||||
import { useState } from "react";
|
||||
import { adminDonasi_getListDonatur } from "../../fun/get/get_list_donatur_by_id";
|
||||
import { AdminDonasi_getOneById } from "../../fun/get/get_one_by_id";
|
||||
import adminDonasi_funUpdateStatusDanTotal from "../../fun/update/fun_update_status_dan_total";
|
||||
import { ComponentAdminGlobal_TitlePage } from "@/app_modules/admin/_admin_global/_component";
|
||||
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({
|
||||
dataPublish,
|
||||
|
||||
listDonatur,
|
||||
countDonatur,
|
||||
listPencairan,
|
||||
listMasterStatus,
|
||||
}: {
|
||||
dataPublish: MODEL_DONASI;
|
||||
|
||||
listDonatur: any[];
|
||||
countDonatur: number;
|
||||
listPencairan: MODEL_DONASI_PENCAIRAN_DANA[];
|
||||
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 selectedData = _.omit(dataDonasi, [
|
||||
const selectedData = _.omit(data, [
|
||||
"Author",
|
||||
"imageDonasi",
|
||||
"CeritaDonasi",
|
||||
@@ -74,23 +80,50 @@ export default function AdminDonasi_DetailPublish({
|
||||
"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 (
|
||||
<>
|
||||
{/* <pre>{JSON.stringify(pencairan, null, 2)}</pre> */}
|
||||
<Stack>
|
||||
<AdminGlobal_ComponentBackButton
|
||||
path={RouterAdminDonasi.table_publish}
|
||||
/>
|
||||
<TampilanDetailDonasi donasi={dataDonasi} countDonatur={countDonatur} />
|
||||
<TampilanListDonatur
|
||||
donatur={listDonatur}
|
||||
listMasterStatus={listMasterStatus}
|
||||
dataDonasi={selectedData as any}
|
||||
onSuccessDonasi={(val) => {
|
||||
setDataDonasi(val);
|
||||
}}
|
||||
/>
|
||||
<TampilanListPencairan pencairan={pencairan} />
|
||||
{!data ?
|
||||
(<SkeletonAdminDetailDonasiPublish />) : (
|
||||
<>
|
||||
<AdminGlobal_ComponentBackButton
|
||||
path={RouterAdminDonasi.table_publish}
|
||||
/>
|
||||
<TampilanDetailDonasi donasi={data} countDonatur={countDonatur} />
|
||||
<TampilanListDonatur
|
||||
donatur={listDonatur}
|
||||
listMasterStatus={listMasterStatus}
|
||||
dataDonasi={selectedData as any}
|
||||
onSuccessDonasi={(val) => {
|
||||
setData(val);
|
||||
}}
|
||||
/>
|
||||
<TampilanListPencairan pencairan={pencairan} />
|
||||
</>
|
||||
)}
|
||||
</Stack>
|
||||
</>
|
||||
);
|
||||
@@ -387,7 +420,7 @@ function TampilanListDonatur({
|
||||
</td>
|
||||
<td>
|
||||
<Center c={AccentColor.white}>
|
||||
<ComponentGlobal_TampilanRupiah nominal={+e?.nominal} />
|
||||
<ComponentGlobal_TampilanRupiah nominal={+e?.nominal} />
|
||||
</Center>
|
||||
</td>
|
||||
<td>
|
||||
@@ -757,17 +790,17 @@ function TampilanListPencairan({
|
||||
color={AdminColor.softBlue}
|
||||
component={
|
||||
<Group>
|
||||
<ActionIcon
|
||||
size={"lg"}
|
||||
radius={"xl"}
|
||||
variant="light"
|
||||
onClick={() => {
|
||||
// onRelaod();
|
||||
}}
|
||||
>
|
||||
<IconReload />
|
||||
</ActionIcon>
|
||||
{/* <Select
|
||||
<ActionIcon
|
||||
size={"lg"}
|
||||
radius={"xl"}
|
||||
variant="light"
|
||||
onClick={() => {
|
||||
// onRelaod();
|
||||
}}
|
||||
>
|
||||
<IconReload />
|
||||
</ActionIcon>
|
||||
{/* <Select
|
||||
placeholder="Pilih status"
|
||||
value={isSelect}
|
||||
data={listMasterStatus.map((e) => ({
|
||||
@@ -778,10 +811,10 @@ function TampilanListPencairan({
|
||||
onSelect(val);
|
||||
}}
|
||||
/> */}
|
||||
</Group>
|
||||
</Group>
|
||||
}
|
||||
/>
|
||||
|
||||
|
||||
<Paper p={"md"} bg={AdminColor.softBlue} shadow="lg" h={"80vh"}>
|
||||
<ScrollArea w={"100%"} h={"90%"}>
|
||||
<Table
|
||||
@@ -789,7 +822,7 @@ function TampilanListPencairan({
|
||||
horizontalSpacing={"md"}
|
||||
p={"md"}
|
||||
w={1500}
|
||||
|
||||
|
||||
>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -802,7 +835,7 @@ function TampilanListPencairan({
|
||||
<th>
|
||||
<Center c={AccentColor.white}>Judul</Center>
|
||||
</th>
|
||||
<th style={{ color: AccentColor.white}}>Deskripsi</th>
|
||||
<th style={{ color: AccentColor.white }}>Deskripsi</th>
|
||||
<th>
|
||||
<Center c={AccentColor.white}>Bukti Transfer</Center>
|
||||
</th>
|
||||
|
||||
@@ -2,7 +2,8 @@ export {
|
||||
apiGetAdminDonasiStatusCountDashboard,
|
||||
apiGetAdminDonasiKategoriCountDashboard,
|
||||
apiGetAdminDonasiByStatus,
|
||||
apiGetAdminDonasiKategori
|
||||
apiGetAdminDonasiKategori,
|
||||
apiGetAdminDonasiById,
|
||||
};
|
||||
const apiGetAdminDonasiStatusCountDashboard = async ({ name }:
|
||||
{ name: "Publish" | "Review" | "Reject" }) => {
|
||||
@@ -81,4 +82,19 @@ const apiGetAdminDonasiKategori = async () => {
|
||||
}
|
||||
})
|
||||
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);
|
||||
}
|
||||
@@ -269,11 +269,11 @@ function TableView() {
|
||||
|
||||
<Grid.Col span={4}>
|
||||
{isCreate ? (
|
||||
<Paper p={"md"} withBorder>
|
||||
<Paper p={"md"} bg={AdminColor.softBlue}>
|
||||
<Stack>
|
||||
<TextInput
|
||||
value={create}
|
||||
label={<Title order={6}>Tambah Kategori</Title>}
|
||||
label={<Title c={AdminColor.white} order={6}>Tambah Kategori</Title>}
|
||||
placeholder="Masukan kategori baru"
|
||||
onChange={(val) => {
|
||||
setCreate(val.currentTarget.value);
|
||||
@@ -313,11 +313,11 @@ function TableView() {
|
||||
)}
|
||||
|
||||
{isUpdate ? (
|
||||
<Paper p={"md"} withBorder style={{ transition: "1s" }}>
|
||||
<Paper p={"md"} bg={AdminColor.softBlue} style={{ transition: "1s" }}>
|
||||
<Stack>
|
||||
<TextInput
|
||||
value={updateKategori.name}
|
||||
label={<Title order={6}>Update Kategori</Title>}
|
||||
label={<Title c={AdminColor.white} order={6}>Update Kategori</Title>}
|
||||
placeholder="Update kategori"
|
||||
onChange={(val) => {
|
||||
const data = _.clone(updateKategori);
|
||||
|
||||
@@ -93,8 +93,6 @@ export default function Admin_Investasi({
|
||||
name: "Publish",
|
||||
});
|
||||
|
||||
console.log("Response Publish", response);
|
||||
|
||||
if (response) {
|
||||
setCountPublish(response.data);
|
||||
}
|
||||
|
||||
@@ -281,6 +281,7 @@ function TableStatus() {
|
||||
</Stack>
|
||||
|
||||
<Modal
|
||||
styles={{ body: { backgroundColor: AdminColor.softBlue } }}
|
||||
opened={opened}
|
||||
onClose={close}
|
||||
centered
|
||||
@@ -289,6 +290,7 @@ function TableStatus() {
|
||||
>
|
||||
<Stack>
|
||||
<Textarea
|
||||
styles={{ label: { color: AdminColor.white } }}
|
||||
minRows={2}
|
||||
maxRows={5}
|
||||
maxLength={300}
|
||||
|
||||
@@ -414,14 +414,16 @@ function TableStatus() {
|
||||
</Stack>
|
||||
|
||||
<Modal
|
||||
styles={{ body: { backgroundColor: AdminColor.softBlue}}}
|
||||
opened={openedReject}
|
||||
onClose={closeReject}
|
||||
centered
|
||||
withCloseButton={false}
|
||||
size={"md"}
|
||||
>
|
||||
<Stack>
|
||||
<Stack >
|
||||
<Textarea
|
||||
styles={{ label: { color: AdminColor.white } }}
|
||||
minRows={2}
|
||||
maxRows={5}
|
||||
maxLength={300}
|
||||
@@ -453,6 +455,7 @@ function TableStatus() {
|
||||
</Stack>
|
||||
</Modal>
|
||||
<Modal
|
||||
styles={{ body: { backgroundColor: AdminColor.softBlue}}}
|
||||
opened={openedPublish}
|
||||
onClose={closePublish}
|
||||
centered
|
||||
@@ -460,7 +463,7 @@ function TableStatus() {
|
||||
size={"md"}
|
||||
>
|
||||
<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">
|
||||
<Button radius={"xl"} onClick={() => closePublish()}>
|
||||
Batal
|
||||
|
||||
@@ -33,7 +33,8 @@ const middlewareConfig: MiddlewareConfig = {
|
||||
// "/api/event/*",
|
||||
|
||||
// ADMIN API
|
||||
// >> buat dibawah sini <<
|
||||
// >> buat dibawah sini <<
|
||||
"/api/admin/donasi/*",
|
||||
|
||||
|
||||
// Akses awal
|
||||
|
||||
Reference in New Issue
Block a user