@@ -15,6 +15,8 @@ import { Select } from "../../components/ui/select";
1515import TicketChat from "../../components/shared/TicketChat" ;
1616import { formatTicketId } from "../../utils/format" ;
1717import SLABadge from "../components/SLABadge" ;
18+ import { formatFullTimestamp , formatTimelineDate } from "../../utils/dateUtils" ;
19+ import TicketTimeline from "../../user/components/TicketTimeline" ; // Reuse the 6-step timeline
1820
1921const AdminTicketDetail = ( ) => {
2022 const { ticket_id } = useParams ( ) ;
@@ -173,13 +175,10 @@ const AdminTicketDetail = () => {
173175
174176 if ( ! ticket ) return null ;
175177
176- const displayCategory = ticket . category || 'Uncategorized' ;
177- const displayPriority = ticket . priority || 'Medium' ;
178- const displaySubcategory = ticket . subcategory || 'General' ;
179- const displayStatus = ticket . status || 'Open' ;
180- const displaySummary = ticket . subject || 'No Summary' ;
181- const displayText = ticket . description || displaySummary ;
182178 const confidence = ticket . metadata ?. confidence || 0.85 ;
179+ const entities = ticket . metadata ?. entities || ticket . entities || [ ] ;
180+ const displaySummary = ticket . summary || ticket . subject || 'No Summary' ;
181+ const displayText = ticket . description || ticket . text || displaySummary ;
183182
184183 return (
185184 < div className = "space-y-6 relative pb-20 animate-in fade-in duration-700" >
@@ -210,9 +209,9 @@ const AdminTicketDetail = () => {
210209 </ div >
211210
212211 < div className = "flex items-center gap-2 w-full md:w-auto" >
213- { ! displayStatus ?. toLowerCase ( ) ?. includes ( 'resolv' ) ? (
212+ { ! ticket . status ?. toLowerCase ( ) ?. includes ( 'resolv' ) ? (
214213 < >
215- { displayStatus ?. toLowerCase ( ) !== 'in progress' && (
214+ { ticket . status ?. toLowerCase ( ) !== 'in progress' && (
216215 < button
217216 onClick = { handleAccept }
218217 disabled = { ! ! isUpdating }
@@ -265,7 +264,7 @@ const AdminTicketDetail = () => {
265264 < h3 className = "text-sm font-black text-slate-900 uppercase italic tracking-tight flex items-center gap-2" >
266265 < MessageSquare size = { 18 } className = "text-indigo-600" /> User Input Payload
267266 </ h3 >
268- < span className = "text-[10px] font-bold text-slate-400 uppercase tracking-widest" > Captured { new Date ( ticket . created_at ) . toLocaleTimeString ( ) } </ span >
267+ < span className = "text-[10px] font-bold text-slate-400 uppercase tracking-widest italic" > { formatFullTimestamp ( ticket . created_at ) } </ span >
269268 </ div >
270269 < div className = "p-8 space-y-6" >
271270 < div className = "p-8 bg-slate-900 text-white rounded-3xl border-l-[6px] border-indigo-600 shadow-2xl shadow-slate-900/10" >
@@ -301,6 +300,15 @@ const AdminTicketDetail = () => {
301300 currentUserRole = "admin"
302301 />
303302 </ div >
303+
304+ { /* Integrated Journey Timeline */ }
305+ < Card className = "border-none shadow-xl shadow-slate-200/40 rounded-[2rem] overflow-hidden bg-white p-8" >
306+ < div className = "flex items-center gap-3 mb-6" >
307+ < Clock size = { 18 } className = "text-emerald-500" />
308+ < h3 className = "text-sm font-black text-slate-900 uppercase italic tracking-tight" > Full Lifecycle Journey</ h3 >
309+ </ div >
310+ < TicketTimeline ticket = { ticket } />
311+ </ Card >
304312 </ div >
305313
306314 { /* 2. AI Analytics Column (Right - 4 cols) */ }
@@ -328,12 +336,12 @@ const AdminTicketDetail = () => {
328336 < div className = "grid grid-cols-1 gap-3" >
329337 < div className = "flex items-center justify-between p-3 bg-white border border-slate-100 rounded-xl shadow-sm" >
330338 < span className = "text-[10px] font-black text-slate-500 uppercase tracking-widest flex items-center gap-2" > < Briefcase size = { 12 } className = "text-indigo-400" /> Category</ span >
331- < span className = "text-[11px] font-black text-slate-900 uppercase italic" > { displayCategory } </ span >
339+ < span className = "text-[11px] font-black text-slate-900 uppercase italic" > { ticket . category } </ span >
332340 </ div >
333341 < div className = "flex items-center justify-between p-3 bg-white border border-slate-100 rounded-xl shadow-sm" >
334342 < span className = "text-[10px] font-black text-slate-500 uppercase tracking-widest flex items-center gap-2" > < BarChart3 size = { 12 } className = "text-amber-400" /> Priority</ span >
335- < span className = { `text-[11px] font-black uppercase italic ${ displayPriority ?. toLowerCase ( ) === 'high' ? 'text-red-600' : 'text-slate-900' } ` } >
336- { displayPriority }
343+ < span className = { `text-[11px] font-black uppercase italic ${ ticket . priority ?. toLowerCase ( ) === 'high' ? 'text-red-600' : 'text-slate-900' } ` } >
344+ { ticket . priority }
337345 </ span >
338346 </ div >
339347 </ div >
@@ -354,13 +362,13 @@ const AdminTicketDetail = () => {
354362 </ div >
355363
356364 { /* Extracted Artifacts (Entities) */ }
357- { ticket . entities && ticket . entities . length > 0 && (
365+ { entities && entities . length > 0 && (
358366 < div className = "space-y-3" >
359367 < label className = "text-[10px] font-black text-slate-400 uppercase tracking-widest italic" > Identified Entities</ label >
360368 < div className = "flex flex-wrap gap-2" >
361- { ticket . entities . map ( ( e , idx ) => (
369+ { entities . map ( ( e , idx ) => (
362370 < span key = { idx } className = "px-3 py-1 bg-indigo-50 text-indigo-600 text-[9px] font-black uppercase tracking-widest rounded-lg border border-indigo-100" >
363- { String ( e ) }
371+ { typeof e === 'object' ? e . text : String ( e ) }
364372 </ span >
365373 ) ) }
366374 </ div >
0 commit comments