Toggle date fields between relative and absolute on click
Defaults to relative time (e.g. '5 hours ago'); clicking switches to absolute timestamp and back. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -86,6 +86,14 @@ export default function TicketDetail() {
|
|||||||
const [editingStatus, setEditingStatus] = useState(false)
|
const [editingStatus, setEditingStatus] = useState(false)
|
||||||
const [editingSeverity, setEditingSeverity] = useState(false)
|
const [editingSeverity, setEditingSeverity] = useState(false)
|
||||||
const [editingAssignee, setEditingAssignee] = useState(false)
|
const [editingAssignee, setEditingAssignee] = useState(false)
|
||||||
|
const [expandedDates, setExpandedDates] = useState<Set<string>>(new Set())
|
||||||
|
|
||||||
|
const toggleDate = (key: string) =>
|
||||||
|
setExpandedDates((prev) => {
|
||||||
|
const next = new Set(prev)
|
||||||
|
next.has(key) ? next.delete(key) : next.add(key)
|
||||||
|
return next
|
||||||
|
})
|
||||||
|
|
||||||
const isAdmin = authUser?.role === 'ADMIN'
|
const isAdmin = authUser?.role === 'ADMIN'
|
||||||
|
|
||||||
@@ -530,17 +538,23 @@ export default function TicketDetail() {
|
|||||||
|
|
||||||
{/* Dates */}
|
{/* Dates */}
|
||||||
<div className="px-4 py-3 space-y-2.5">
|
<div className="px-4 py-3 space-y-2.5">
|
||||||
<SidebarField label="Created">
|
{[
|
||||||
<p className="text-xs text-gray-300">{format(new Date(ticket.createdAt), 'MMM d, yyyy HH:mm')}</p>
|
{ key: 'created', label: 'Created', date: ticket.createdAt },
|
||||||
</SidebarField>
|
{ key: 'modified', label: 'Modified', date: ticket.updatedAt },
|
||||||
<SidebarField label="Modified">
|
...(ticket.resolvedAt ? [{ key: 'resolved', label: 'Resolved', date: ticket.resolvedAt }] : []),
|
||||||
<p className="text-xs text-gray-300">{formatDistanceToNow(new Date(ticket.updatedAt), { addSuffix: true })}</p>
|
].map(({ key, label, date }) => (
|
||||||
</SidebarField>
|
<div key={key}>
|
||||||
{ticket.resolvedAt && (
|
<p className="text-xs font-medium text-gray-500 mb-1">{label}</p>
|
||||||
<SidebarField label="Resolved">
|
<button
|
||||||
<p className="text-xs text-gray-300">{format(new Date(ticket.resolvedAt), 'MMM d, yyyy HH:mm')}</p>
|
onClick={() => toggleDate(key)}
|
||||||
</SidebarField>
|
className="text-xs text-gray-300 hover:text-gray-100 transition-colors"
|
||||||
)}
|
>
|
||||||
|
{expandedDates.has(key)
|
||||||
|
? format(new Date(date), 'MMM d, yyyy HH:mm')
|
||||||
|
: formatDistanceToNow(new Date(date), { addSuffix: true })}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Assignee */}
|
{/* Assignee */}
|
||||||
|
|||||||
Reference in New Issue
Block a user