import type { LoaderFunctionArgs } from "@remix-run/node"; import { useLoaderData } from "@remix-run/react"; import { User2 } from "lucide-react"; import { useState } from "react"; import BackButton from "~/components/back-button"; import PageContainer from "~/components/page-container"; import { Badge } from "~/components/ui/badge"; import { Button } from "~/components/ui/button"; import { Progress } from "~/components/ui/progress"; import { Separator } from "~/components/ui/separator"; import { httpClient } from "~/lib/http"; import type { Proyek, TokenResponse } 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 BeliModal from "./components/modal/beli"; import SecondSection from "./components/second-section"; type LoaderData = { data: Proyek; investors: TokenResponse[]; }; export async function loader({ params }: LoaderFunctionArgs) { if (!params.id) { throw new Error("Project ID is required"); } try { const projectResponse = await httpClient.get>(`/project/${params.id}`); let investors: TokenResponse[] = []; try { const investorsResponse = await httpClient.get>( `/project/${params.id}/user`, ); investors = investorsResponse.data.data || []; // biome-ignore lint/suspicious/noExplicitAny: } catch (error: any) { if (error.response?.status === 404) { investors = []; } else { throw error; } } if (!projectResponse.data?.data) { throw new Error("Project data not found"); } return { data: projectResponse.data.data, investors: investors, } as LoaderData; } catch (error) { console.error("Error fetching data:", error); throw error; } } const getTotalTokens = (investors: TokenResponse[]) => { return investors.reduce((total, investor) => total + Number(investor.jumlah_token), 0); }; export default function DetailPengajuanProyekPage() { const { data, investors } = useLoaderData(); const [phase, setPhase] = useState(1); function handleChangePhase() { setPhase((prev) => (prev === 1 ? 2 : 1)); } return (

Detail Proyek

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

{data.judul}

{data.user?.nama}

Terkumpul

{getTotalTokens(investors)}

Sisa Hari

10

Modal Kerja {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}
); }