import { PDFDownloadLink } from "@react-pdf/renderer"; import type { LoaderFunctionArgs } from "@remix-run/node"; import { useLoaderData } from "@remix-run/react"; import { User2 } from "lucide-react"; import { useEffect, useState } from "react"; import { toast } from "sonner"; import BackButton from "~/components/back-button"; import AgreementPDF, { type AgreementProps } from "~/components/document/aggrement-letter.client"; import PageContainer from "~/components/page-container"; import { Badge } from "~/components/ui/badge"; import { Button } from "~/components/ui/button"; import { Separator } from "~/components/ui/separator"; import { httpClient } from "~/lib/http"; import { useGetHistoryProjectByID } from "~/services/history-project/get-by-id"; import { useAcceptProject } from "~/services/projects/accept"; import { useComplateProject } from "~/services/projects/completing"; import { useGetAgreementProject } from "~/services/projects/get-agreement-by-project-id"; import type { Proyek } from "~/types/api/proyek"; import type { BaseResponse } from "~/types/constants/base-response"; import { StatusProject } from "~/types/constants/status-project"; import { formatImagePath } from "~/utils/prefix-file-path"; import toRupiah from "~/utils/to-rupiah"; import FirstSection from "./components/first-section"; import ApproveModal from "./components/modal/approval"; import PublishModal from "./components/modal/publish"; import RevisiModal from "./components/modal/revisi"; import { SelesaiModal } from "./components/modal/selesai"; import { TerimaModal } from "./components/modal/terima"; import TolakModal from "./components/modal/tolak"; import SecondSection from "./components/second-section"; export async function loader({ params }: LoaderFunctionArgs) { const response = await httpClient.get>(`/project/${params.id}`); if (response.data.data === undefined) return {} as Proyek; return response.data.data; } export default function DetailPengajuanProyekPage() { const data = useLoaderData(); const [contract, setContract] = useState(null); const [phase, setPhase] = useState(1); const [isLoading, setIsLoading] = useState(false); const { data: contractData } = useGetAgreementProject(data.id || ""); const { mutateAsync: acceptProject } = useAcceptProject(data.id || ""); const { mutateAsync: complateProject } = useComplateProject(data.id || ""); const { data: statusData } = useGetHistoryProjectByID(data.id || ""); const isRunningCycle = (status: StatusProject | undefined): boolean => { if (!status) return false; return status === StatusProject.BERJALAN || status.toString().startsWith("BERJALAN SIKLUS"); }; useEffect(() => { if (contractData) { setContract({ idProjek: contractData.idProjek, idUser: contractData.idUser, namaProyek: contractData.namaProyek, namaPetugas: contractData.namaPetugas, alamatPetugas: contractData.alamatPetugas, namaPemilikProyek: contractData.namaPemilikProyek, nik: contractData.nik, noHp: contractData.noHp, alamat: contractData.alamat, tandaTangan: formatImagePath(contractData.tandaTangan), signature: formatImagePath(contractData.signature), nominalDisetujui: contractData.nominalDisetujui, tanggal: contractData.createdAt, }); } }, [contractData]); function handleChangePhase() { setPhase((prev) => (prev === 1 ? 2 : 1)); } async function handleAccept() { try { setIsLoading(true); await acceptProject(); toast.success("Proyek berhasil diterima"); } catch (_) { toast.error("Terjadi kesalahan saat menerima proyek"); } setIsLoading(false); } async function handleComplate() { try { setIsLoading(true); await complateProject(); toast.success("Proyek berhasil diselesaikan"); } catch (_) { toast.error("Terjadi kesalahan saat menyelesaikan proyek"); } setIsLoading(false); } return (

Detail Proyek

{phase === 1 ? ( ) : ( )}
{data.status}

{data.judul}

{data.user?.nama}

Target Dana {toRupiah(data.nominal)}
Aset Jaminan {data.asset_jaminan}
Nominal Jaminan {toRupiah(data.nilai_jaminan)}

Model dan Rencana Bisnis

Pendapatan/{data.report_progress} bulan {toRupiah(data.pendapatan_perbulan)}
Pengeluaran/{data.report_progress} bulan {toRupiah(data.pengeluaran_perbulan)}

Kontak Pemilik Proyek

No.Whatsapp {data.user?.no_hp}

Aksi

{data.status === StatusProject.TTD_KONTRAK && contract && ( } fileName="agreement.pdf"> )} {data.status !== StatusProject.PENDANAAN_DIBUKA ? ( ) : ( <> )}
{data.status === StatusProject.APPROVAL && } {data.status === StatusProject.TTD_KONTRAK && ( )} {data.status !== StatusProject.PENDANAAN_DIBUKA && ( <> )} {isRunningCycle(data.status as StatusProject) && ( <> {contract && ( } fileName="agreement.pdf" > )} )}
); }