1+ "use client"
2+
3+ import { useEffect , useState } from "react"
4+ import { CheckCircle2 , XCircle , Clock } from "lucide-react"
5+
6+ type Log = {
7+ id : string
8+ event_id : number
9+ status : "success" | "failed"
10+ status_code ?: number
11+ response ?: string
12+ attempt : number
13+ created_at : string
14+ }
15+
16+ export default function TargetLogs ( { targetId } : { targetId : string } ) {
17+ const [ logs , setLogs ] = useState < Log [ ] > ( [ ] )
18+ const [ loading , setLoading ] = useState ( true )
19+
20+ useEffect ( ( ) => {
21+ fetch ( `${ process . env . NEXT_PUBLIC_API_URL } /delivery-targets/${ targetId } /logs` )
22+ . then ( res => res . json ( ) )
23+ . then ( data => setLogs ( data . items || [ ] ) )
24+ . finally ( ( ) => setLoading ( false ) )
25+ } , [ targetId ] )
26+
27+ if ( loading ) {
28+ return (
29+ < div className = "p-6 text-sm text-muted-foreground" >
30+ Loading logs...
31+ </ div >
32+ )
33+ }
34+
35+ return (
36+ < div className = "rounded-xl border bg-card overflow-hidden" >
37+
38+ < div className = "px-4 py-3 border-b text-sm font-medium" >
39+ Delivery Logs
40+ </ div >
41+
42+ < div className = "divide-y" >
43+ { logs . length === 0 && (
44+ < div className = "p-6 text-sm text-muted-foreground" >
45+ No deliveries yet
46+ </ div >
47+ ) }
48+
49+ { logs . map ( log => (
50+ < div
51+ key = { log . id }
52+ className = "flex items-center justify-between p-4 hover:bg-muted/40 transition"
53+ >
54+ { /* LEFT */ }
55+ < div className = "flex items-center gap-3" >
56+
57+ { log . status === "success" && (
58+ < CheckCircle2 className = "w-4 h-4 text-emerald-500" />
59+ ) }
60+
61+ { log . status === "failed" && (
62+ < XCircle className = "w-4 h-4 text-rose-500" />
63+ ) }
64+
65+ < div >
66+ < p className = "text-sm font-medium" >
67+ Event #{ log . event_id }
68+ </ p >
69+
70+ < p className = "text-xs text-muted-foreground" >
71+ Attempt { log . attempt } • { log . status_code || "—" }
72+ </ p >
73+ </ div >
74+ </ div >
75+
76+ { /* RIGHT */ }
77+ < div className = "text-xs text-muted-foreground" >
78+ { new Date ( log . created_at ) . toLocaleTimeString ( ) }
79+ </ div >
80+ </ div >
81+ ) ) }
82+ </ div >
83+ </ div >
84+ )
85+ }
0 commit comments