"use client"; import { useEffect, useState } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { CheckCircle2, FileText } from "lucide-react"; import { getPromotionById } from "@/service/promotion"; type PromoDetailDialogProps = { promoId: number | null; open: boolean; onOpenChange: (open: boolean) => void; }; export default function PromoDetailDialog({ promoId, open, onOpenChange, }: PromoDetailDialogProps) { const [loading, setLoading] = useState(false); const [promo, setPromo] = useState(null); const [openApproverHistory, setOpenApproverHistory] = useState(false); // FORMAT TANGGAL → DD-MM-YYYY const formatDate = (dateStr: string) => { const d = new Date(dateStr); const day = String(d.getDate()).padStart(2, "0"); const month = String(d.getMonth() + 1).padStart(2, "0"); const year = d.getFullYear(); return `${day}-${month}-${year}`; }; const handleOpenApproverHistory = () => { setOpenApproverHistory(true); }; useEffect(() => { if (!promoId || !open) return; async function fetchData() { try { setLoading(true); const res = await getPromotionById(promoId); // Mapping ke format dialog const mapped = { title: res?.data?.data?.title, fileSize: "Tidak diketahui", uploadDate: formatDate(res?.data?.data?.created_at), status: res?.data?.data?.is_active ? "Aktif" : "Nonaktif", timeline: [ { label: "Dibuat", date: formatDate(res?.data?.data?.created_at), time: new Date(res?.data?.data?.created_at).toLocaleTimeString( "id-ID", { hour: "2-digit", minute: "2-digit" }, ), }, { label: "Diupdate", date: formatDate(res?.data?.data?.updated_at), time: new Date(res?.data?.data?.updated_at).toLocaleTimeString( "id-ID", { hour: "2-digit", minute: "2-digit" }, ), }, ], }; setPromo(mapped); } catch (err) { console.error("ERROR FETCH PROMO:", err); } finally { setLoading(false); } } fetchData(); }, [promoId, open]); if (!open) return null; return ( <> {/* HEADER */}
Detail Promo {/* STATUS BADGE */} {promo && (
{promo.status}
)}
{/* BODY */}
{loading ? (

Memuat data...

) : promo ? ( <> {/*
*/}

{promo.title}

Ukuran File

{promo.fileSize}

Tanggal Upload

{promo.uploadDate}

{/* TIMELINE */}

Status Timeline

{promo.timeline.map((item: any, idx: number) => (

{item.label}

{item.date} • {item.time} WIB

))}

Comment :

Jaecoo - Approver | 10/11/2026

) : (

Data tidak ditemukan

)}
{openApproverHistory && (
setOpenApproverHistory(false)} >
e.stopPropagation()} > {/* HEADER */}

Approver History

Menunggu Banner 1
{/* BODY */}
{/* LEFT TIMELINE */}
{/* Upload */}
Upload
{/* Diterima */}

Diterima

Direview oleh: approver-jaecoo1
{/* Pending */}

Pending

Direview oleh: approver-jaecoo1
{/* ARROW */}
> >
{/* RIGHT NOTES */}
Catatan:
Catatan:
{/* FOOTER */}
)} {/* FOOTER */}
{openApproverHistory && (
setOpenApproverHistory(false)} >
e.stopPropagation()} > {/* HEADER */}

Approver History

Menunggu Banner 1
{/* BODY */}
{/* LEFT TIMELINE */}
{/* Upload */}
Upload
{/* Diterima */}

Diterima

Direview oleh: approver-jaecoo1
{/* Pending */}

Pending

Direview oleh: approver-jaecoo1
{/* ARROW */}
> >
{/* RIGHT NOTES */}
Catatan:
Catatan:
{/* FOOTER */}
)} ); }