From 44e5e2d373f967d76d3f73242ab3d7fcc956f8a6 Mon Sep 17 00:00:00 2001 From: Josh Wright Date: Tue, 31 Mar 2026 11:56:53 -0400 Subject: [PATCH] Redesign ticket sidebar: modal pickers for status/severity, CTI as clickable unit - Rename 'Details' card to 'Ticket Summary' - Replace status/severity dropdowns with badge displays that open small modal pickers on click - Show Category, Type, Issue as separate labeled rows that together act as one clickable unit opening the routing modal - Reorganize into sections: status/severity, CTI routing, dates (created/modified/resolved), people (assignee + requester) - Add Requester field showing the ticket creator with avatar Co-Authored-By: Claude Sonnet 4.6 --- client/src/pages/TicketDetail.tsx | 175 +++++++++++++++++++----------- 1 file changed, 112 insertions(+), 63 deletions(-) diff --git a/client/src/pages/TicketDetail.tsx b/client/src/pages/TicketDetail.tsx index 5eeb6f9..8a05e6a 100644 --- a/client/src/pages/TicketDetail.tsx +++ b/client/src/pages/TicketDetail.tsx @@ -85,6 +85,8 @@ export default function TicketDetail() { const [editForm, setEditForm] = useState({ title: '', overview: '' }) const [pendingCTI, setPendingCTI] = useState({ categoryId: '', typeId: '', itemId: '' }) + const [editingStatus, setEditingStatus] = useState(false) + const [editingSeverity, setEditingSeverity] = useState(false) const isAdmin = authUser?.role === 'ADMIN' @@ -484,40 +486,72 @@ export default function TicketDetail() { {/* ── Sidebar ── */}
- {/* Details */} + {/* Ticket Summary */}
-

Details

+

Ticket Summary

+ {/* Status + Severity */}
- - {!isAdmin && ticket.status !== 'CLOSED' && ( -

Closing requires admin

- )} + + +
- + + + +
+ {/* CTI — one clickable unit */} + + + {/* Dates */} +
+ +

{format(new Date(ticket.createdAt), 'MMM d, yyyy HH:mm')}

+
+ +

{formatDistanceToNow(new Date(ticket.updatedAt), { addSuffix: true })}

+
+ {ticket.resolvedAt && ( + +

{format(new Date(ticket.resolvedAt), 'MMM d, yyyy HH:mm')}

+
+ )} +
+ + {/* People */} +