feat: sidebar redesign — activity feed, grouped nav, AI split #107
@@ -18,19 +18,21 @@ function formatDuration(totalSeconds: number): string {
|
|||||||
return m > 0 ? `${h}h ${m}m` : `${h}h`
|
return m > 0 ? `${h}h ${m}m` : `${h}h`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function parseUTCTimestamp(st: string): number {
|
||||||
|
// Backend returns naive UTC timestamps without 'Z' suffix.
|
||||||
|
// JS Date() treats bare strings as local time, so append Z to force UTC.
|
||||||
|
return new Date(st.endsWith('Z') ? st : st + 'Z').getTime()
|
||||||
|
}
|
||||||
|
|
||||||
function calcActiveSeconds(startTimes: string[]): number {
|
function calcActiveSeconds(startTimes: string[]): number {
|
||||||
const now = Date.now()
|
const now = Date.now()
|
||||||
return startTimes.reduce((sum, st) => {
|
return startTimes.reduce((sum, st) => {
|
||||||
const elapsed = Math.floor((now - new Date(st).getTime()) / 1000)
|
const elapsed = Math.floor((now - parseUTCTimestamp(st)) / 1000)
|
||||||
return sum + Math.max(0, elapsed)
|
return sum + Math.max(0, elapsed)
|
||||||
}, 0)
|
}, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function SidebarStatsBar({ resolved, active, completedMinutes, activeSessionStartTimes }: SidebarStatsBarProps) {
|
export function SidebarStatsBar({ resolved, active, completedMinutes, activeSessionStartTimes }: SidebarStatsBarProps) {
|
||||||
// Debug: remove after fixing
|
|
||||||
if (activeSessionStartTimes.length > 0) {
|
|
||||||
console.log('[SidebarStats] startTimes:', activeSessionStartTimes, 'calcSeconds:', calcActiveSeconds(activeSessionStartTimes), 'now:', Date.now(), 'parsed:', activeSessionStartTimes.map(st => new Date(st).getTime()))
|
|
||||||
}
|
|
||||||
const [liveSeconds, setLiveSeconds] = useState(() => calcActiveSeconds(activeSessionStartTimes))
|
const [liveSeconds, setLiveSeconds] = useState(() => calcActiveSeconds(activeSessionStartTimes))
|
||||||
|
|
||||||
// Tick every second to keep the timer in sync with the session timer
|
// Tick every second to keep the timer in sync with the session timer
|
||||||
|
|||||||
Reference in New Issue
Block a user