Files
hipmi/src/app_modules/admin/investasi/detail/detail_review.tsx
Bagasbanuna02 f419559379 fix lib
deskripsi:
- pindah lib di dalam app ke src ( lib setara app dan app_modules )
2025-02-12 10:57:10 +08:00

252 lines
8.1 KiB
TypeScript

"use client";
import { IRealtimeData } from "@/lib/global_state";
import { MainColor } from "@/app_modules/_global/color";
import { MODEL_INVESTASI } from "@/app_modules/investasi/_lib/interface";
import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
import { Button, Group, SimpleGrid, Stack } from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks";
import _ from "lodash";
import { 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_funCreateToUser from "../../notifikasi/fun/create/fun_create_notif_user";
import { ComponentAdminInvestasi_DetailDataAuthor } from "../_component/detail_data_author";
import { ComponentAdminInvestasi_DetailData } from "../_component/detail_data_investasi";
import { ComponentAdminInvestasi_DetailGambar } from "../_component/detail_gambar_investasi";
import { ComponentAdminInvestasi_UIDetailFile } from "../_component/ui_detail_file";
import { adminInvestasi_funEditStatusPublishById } from "../fun/edit/fun_status_publish_by_id";
import Admin_funRejectInvestasi from "../fun/fun_reject_investasi";
export default function AdminInvestasi_DetailReview({
dataInvestasi,
}: {
dataInvestasi: MODEL_INVESTASI;
}) {
const router = useRouter();
const [data, setData] = useState(dataInvestasi);
const [publish, setPublish] = useState(true);
const [openModalPublish, setOpenModalPublish] = useState(false);
const [openModalReject, setOpenModalReject] = useState(false);
const [isLoadingPublish, setIsLoadingPublish] = useState(false);
const [isLoadingReject, setIsLoadingReject] = useState(false);
const [report, setReport] = useState("");
useShallowEffect(() => {
cekStatusPublish();
}, []);
async function cekStatusPublish() {
if (data.MasterStatusInvestasi.id === "3") setPublish(false);
}
async function onReject() {
const body = {
id: data.id,
catatan: report,
status: "4",
};
if (_.isEmpty(body.catatan))
return ComponentAdminGlobal_NotifikasiPeringatan("Lengkapi alasan");
const res = await Admin_funRejectInvestasi(body);
if (res.status === 200) {
setIsLoadingReject(true);
const dataNotifikasi: IRealtimeData = {
appId: res.data?.id as string,
userId: res.data?.authorId as string,
pesan: res.data?.title as string,
status: res.data?.MasterStatusInvestasi?.name as any,
kategoriApp: "INVESTASI",
title: "Investasi anda di tolak !",
};
const notif = await adminNotifikasi_funCreateToUser({
data: dataNotifikasi as any,
});
if (notif.status === 201) {
WibuRealtime.setData({
type: "notification",
pushNotificationTo: "USER",
dataMessage: dataNotifikasi,
});
}
const loadData = await getOneInvestasiById(data.id);
setData(loadData as any);
ComponentAdminGlobal_NotifikasiBerhasil(res.message);
router.back();
setOpenModalReject(false);
setIsLoadingReject(false);
} else {
ComponentAdminGlobal_NotifikasiGagal(res.message);
setOpenModalReject(false);
}
}
async function onPublish() {
const res = await adminInvestasi_funEditStatusPublishById({
investasiId: data.id,
statusId: "1",
progesInvestasiId: "1",
});
if (res.status === 200) {
setIsLoadingPublish(true);
const dataNotifikasi: IRealtimeData = {
appId: res.data?.id as string,
userId: res.data?.authorId as any,
pesan: res.data?.title as any,
status: res.data?.MasterStatusInvestasi?.name as any,
kategoriApp: "INVESTASI",
title: "Investasi publish",
};
const notif = await adminNotifikasi_funCreateToUser({
data: dataNotifikasi as any,
});
if (notif.status === 201) {
WibuRealtime.setData({
type: "notification",
pushNotificationTo: "USER",
dataMessage: dataNotifikasi,
});
WibuRealtime.setData({
type: "trigger",
pushNotificationTo: "USER",
dataMessage: dataNotifikasi,
});
const loadData = await getOneInvestasiById(data.id);
setData(loadData as any);
ComponentAdminGlobal_NotifikasiBerhasil("Proyek Investasi Di Publish");
setOpenModalPublish(false);
setIsLoadingPublish(false);
router.back();
// router.push(RouterAdminInvestasi_OLD.table_status_review);
}
} else {
ComponentAdminGlobal_NotifikasiGagal(res.message);
setOpenModalPublish(false);
}
}
return (
<>
<Stack px={"lg"}>
<Group position="apart">
<AdminGlobal_ComponentBackButton />
{data.masterStatusInvestasiId === "2" ? (
<Group>
<Button
loaderPosition="center"
loading={isLoadingPublish}
radius={"xl"}
color="green"
onClick={() => setOpenModalPublish(true)}
>
Publish
</Button>
<Button
radius={"xl"}
color="red"
onClick={() => setOpenModalReject(true)}
>
Reject
</Button>
</Group>
) : (
""
)}
</Group>
<SimpleGrid
cols={3}
spacing="lg"
breakpoints={[
{ maxWidth: "62rem", cols: 3, spacing: "md" },
{ maxWidth: "48rem", cols: 2, spacing: "sm" },
{ maxWidth: "36rem", cols: 1, spacing: "sm" },
]}
>
{/* Data Author */}
<ComponentAdminInvestasi_DetailDataAuthor data={data.author} />
{/* Data Foto */}
<ComponentAdminInvestasi_DetailGambar imagesId={data.imageId} />
{/* Data Detail */}
<ComponentAdminInvestasi_DetailData data={data} />
</SimpleGrid>
<ComponentAdminInvestasi_UIDetailFile
title={data.title}
dataProspektus={data.ProspektusInvestasi}
listDokumen={data.DokumenInvestasi}
prospektusFileId={data.prospektusFileId}
/>
</Stack>
<Admin_ComponentModalReport
opened={openModalReject}
onClose={() => setOpenModalReject(false)}
title="Alasan Penolakan"
onHandlerChange={(val) => setReport(val.target.value)}
buttonKiri={
<Button radius={"xl"} onClick={() => setOpenModalReject(false)}>
Batal
</Button>
}
buttonKanan={
<Button
loaderPosition="center"
style={{ backgroundColor: MainColor.green }}
loading={isLoadingReject}
radius={"xl"}
onClick={() => {
onReject();
}}
>
Simpan
</Button>
}
/>
<Admin_ComponentModalPublish
opened={openModalPublish}
onClose={() => setOpenModalPublish(false)}
title="Anda Yakin Ingin Mempublish Investasi Ini ?"
buttonKiri={
<Button radius={"xl"} onClick={() => setOpenModalPublish(false)}>
Batal
</Button>
}
buttonKanan={
<Button
loaderPosition="center"
style={{ backgroundColor: MainColor.green }}
loading={isLoadingPublish}
radius={"xl"}
onClick={() => {
onPublish();
}}
>
Simpan
</Button>
}
/>
</>
);
}