Something went wrong. Try again.
source dump of claude code forked from oppi.li/claude-code
Something went wrong. Try again.
1.2 kB · 37 lines
TypeScript
at main
1234567891011121314151617181920212223242526272829303132333435363738import { useCallback, useSyncExternalStore } from 'react'import { formatDuration } from '../utils/format.js'
/** * Hook that returns formatted elapsed time since startTime. * Uses useSyncExternalStore with interval-based updates for efficiency. * * @param startTime - Unix timestamp in ms * @param isRunning - Whether to actively update the timer * @param ms - How often should we trigger updates? * @param pausedMs - Total paused duration to subtract * @param endTime - If set, freezes the duration at this timestamp (for * terminal tasks). Without this, viewing a 2-min task 30 min after * completion would show "32m". * @returns Formatted duration string (e.g., "1m 23s") */export function useElapsedTime( startTime: number, isRunning: boolean, ms: number = 1000, pausedMs: number = 0, endTime?: number,): string { const get = () => formatDuration(Math.max(0, (endTime ?? Date.now()) - startTime - pausedMs))
const subscribe = useCallback( (notify: () => void) => { if (!isRunning) return () => {} const interval = setInterval(notify, ms) return () => clearInterval(interval) }, [isRunning, ms], )
return useSyncExternalStore(subscribe, get, get)}