import { useAppTranslation } from '@features/localization/renderer'; import { cn } from '@renderer/lib/utils'; import type { FileEditTimeline as FileEditTimelineType } from '@shared/types/review'; interface FileEditTimelineProps { timeline: FileEditTimelineType; onEventClick?: (snippetIndex: number) => void; activeSnippetIndex?: number; } export const FileEditTimeline = ({ timeline, onEventClick, activeSnippetIndex, }: FileEditTimelineProps) => { const { t } = useAppTranslation('team'); if (timeline.events.length === 0) { return
{t('review.timeline.empty')}
; } return (
{timeline.events.map((event, idx) => { const isActive = activeSnippetIndex === event.snippetIndex; const isLast = idx === timeline.events.length - 1; const time = formatTime(event.timestamp); return (
{/* Timeline line + dot */}
{!isLast &&
}
{/* Content */}
); })}
); }; function formatTime(timestamp: string): string { try { const date = new Date(timestamp); if (isNaN(date.getTime())) return '??:??'; return date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false, }); } catch { return '??:??'; } }