import { Check, Clock, Lock, X } from "lucide-react"; import type { StatusData } from "~/types/constants/status-data"; type StatusType = "SUCCESS" | "FAILED" | "CURRENT" | "UPCOMING" | "PENDING"; export default function SecondSection({ data, handleClick, }: { data: StatusData[]; handleClick: () => void }) { const steps = [ "Proposal Project Terkirim", "Peninjauan Proposal", "Proses Approval dari Komitee Koperasi", "Kontrak Perjanjian", "Proses Penggalangan Penyertaan Modal", ]; const getLatestStatusForStep = (step: string) => { const matchingStatuses = data.filter((status) => status.history === step); return matchingStatuses.sort( (a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime(), )[0]; }; const getStepStatus = (index: number): StatusType => { const step = steps[index]; const latestStatus = getLatestStatusForStep(step); if (latestStatus) return latestStatus.status as unknown as StatusType; const lastCompletedIndex = steps.findIndex((step) => !getLatestStatusForStep(step)); if (index === lastCompletedIndex) return "CURRENT"; return "UPCOMING"; }; const getStatusColor = (status: StatusType) => { switch (status) { case "SUCCESS": return "bg-green-500 text-green-500"; case "FAILED": return "bg-red-500 text-red-500"; case "CURRENT": return "bg-blue-500 text-blue-500"; case "PENDING": return "bg-yellow-400 text-yellow-500"; default: return "bg-gray-300 text-gray-500"; } }; return (

Progres Status Pengajuan Project

{steps.map((step, index) => { const status = getStepStatus(index); const stepData = getLatestStatusForStep(step); const statusColor = getStatusColor(status); return (
statusColor.split(" ")[0] }`} > {status === "SUCCESS" && } {status === "FAILED" && } {status === "CURRENT" && ( {index + 1} )} {status === "PENDING" && } {status === "UPCOMING" && }

statusColor.split(" ")[1] }`} > {step}

{stepData && ( <>

{new Date(stepData.created_at).toLocaleString()}

dangerouslySetInnerHTML={{ __html: stepData.keterangan }} /> )} {status === "CURRENT" && ( )}
{index < steps.length - 1 && (
)}
); })}
); }