diff --git a/frontend/src/components/sidebar/SidebarStatsBar.tsx b/frontend/src/components/sidebar/SidebarStatsBar.tsx index 3fd0645b..7c919b1a 100644 --- a/frontend/src/components/sidebar/SidebarStatsBar.tsx +++ b/frontend/src/components/sidebar/SidebarStatsBar.tsx @@ -9,34 +9,37 @@ interface SidebarStatsBarProps { activeSessionStartTimes: string[] } -function formatDuration(minutes: number): string { - if (minutes < 60) return `${minutes}m` - const h = Math.floor(minutes / 60) - const m = minutes % 60 +function formatDuration(totalSeconds: number): string { + if (totalSeconds < 60) return `${totalSeconds}s` + const totalMinutes = Math.floor(totalSeconds / 60) + if (totalMinutes < 60) return `${totalMinutes}m` + const h = Math.floor(totalMinutes / 60) + const m = totalMinutes % 60 return m > 0 ? `${h}h ${m}m` : `${h}h` } -function calcActiveMinutes(startTimes: string[]): number { +function calcActiveSeconds(startTimes: string[]): number { const now = Date.now() return startTimes.reduce((sum, st) => { - const elapsed = Math.floor((now - new Date(st).getTime()) / 60000) + const elapsed = Math.floor((now - new Date(st).getTime()) / 1000) return sum + Math.max(0, elapsed) }, 0) } export function SidebarStatsBar({ resolved, active, completedMinutes, activeSessionStartTimes }: SidebarStatsBarProps) { - const [liveMinutes, setLiveMinutes] = useState(() => calcActiveMinutes(activeSessionStartTimes)) + const [liveSeconds, setLiveSeconds] = useState(() => calcActiveSeconds(activeSessionStartTimes)) - // Tick every 60s to keep the timer live + // Tick every second to keep the timer in sync with the session timer useEffect(() => { - setLiveMinutes(calcActiveMinutes(activeSessionStartTimes)) + setLiveSeconds(calcActiveSeconds(activeSessionStartTimes)) + if (activeSessionStartTimes.length === 0) return const interval = setInterval(() => { - setLiveMinutes(calcActiveMinutes(activeSessionStartTimes)) - }, 60000) + setLiveSeconds(calcActiveSeconds(activeSessionStartTimes)) + }, 1000) return () => clearInterval(interval) }, [activeSessionStartTimes]) - const totalMinutes = completedMinutes + liveMinutes + const totalSeconds = (completedMinutes * 60) + liveSeconds return (