import { ExternalIcon } from '../../icons'; import { parseDate, timeAgo, initials } from '../../../utils/format.utils'; import type { Ticket } from '../../../types/ticket.types'; import styles from './BoardCard.module.scss'; function daysSince(v: string | null): number | null { const d = parseDate(v); if (!d) return null; return Math.floor((Date.now() - d.getTime()) / 86_400_000); } interface BoardCardProps { ticket: Ticket; color: string; brandColor?: string; onSelect: (t: Ticket) => void; } export default function BoardCard({ ticket, color, brandColor, onSelect }: BoardCardProps) { const lifetime = daysSince(ticket.openedAt); const inState = daysSince(ticket.stateChangedAt); const bm = [ticket.brand, ticket.market].filter(Boolean).join(' · '); return (
onSelect(ticket)}>
{ticket.link ? ( e.stopPropagation()} title="Open in ServiceNow"> {ticket.number} ) : ( {ticket.number} )} {ticket.jira?.status && {ticket.jira.status}}
{ticket.shortDesc || '—'}
{bm && {bm}}
{initials(ticket.assignedTo)} {ticket.assignedTo ?? 'Unassigned'} {inState != null && {inState}d}
{lifetime != null && ⏱ {lifetime}d} ✎ {timeAgo(ticket.lastActivityAt)}
); }