@@ -124,11 +124,11 @@ export function TimeTracker({ userId }: { userId: number }) {
124124 useEffect ( ( ) => {
125125 const now = new Date ( )
126126 if ( status === "working" && startTime ) {
127- const totalElapsed = Math . floor ( ( now . getTime ( ) - startTime . getTime ( ) ) / 1000 ) * 1000
127+ const totalElapsed = Math . max ( 0 , Math . floor ( ( now . getTime ( ) - startTime . getTime ( ) ) / 1000 ) * 1000 )
128128 setElapsedTime ( totalElapsed )
129129 } else if ( status === "break" && breakStartTime ) {
130- const elapsedBreak = Math . floor ( ( now . getTime ( ) - breakStartTime . getTime ( ) ) / 1000 ) * 1000
131- const elapsedTotal = Math . floor ( ( now . getTime ( ) - startTime ! . getTime ( ) ) / 1000 ) * 1000
130+ const elapsedBreak = Math . max ( 0 , Math . floor ( ( now . getTime ( ) - breakStartTime . getTime ( ) ) / 1000 ) * 1000 )
131+ const elapsedTotal = Math . max ( 0 , Math . floor ( ( now . getTime ( ) - startTime ! . getTime ( ) ) / 1000 ) * 1000 )
132132 setElapsedTime ( elapsedTotal )
133133 setBreakTime ( elapsedBreak )
134134 }
@@ -369,7 +369,8 @@ export function TimeTracker({ userId }: { userId: number }) {
369369 } ;
370370
371371 const formatDurationForPanel = ( ) => {
372- const dur = formatDuration ( elapsedTime - totalBreakTime - ( status === "break" ? breakTime : 0 ) ) ;
372+ const durationMs = Math . max ( 0 , elapsedTime - totalBreakTime - ( status === "break" ? breakTime : 0 ) ) ;
373+ const dur = formatDuration ( durationMs ) ;
373374 let part1 = dur . split ( ' ' ) [ 0 ] . replace ( 'h' , ':' )
374375 let part2 = dur . split ( ' ' ) [ 1 ] . replace ( 'm' , '' )
375376 return part1 + part2
@@ -484,18 +485,32 @@ export function TimeTracker({ userId }: { userId: number }) {
484485 </ div >
485486
486487 { status !== "idle" && (
487- < div className = "rounded-lg bg-muted/50 p-3 text-center text-xs text-muted-foreground" >
488- Started working at{ " " }
489- < span className = "font-medium text-foreground" >
490- { startTime ?. toLocaleTimeString ( [ ] , {
491- hour : "2-digit" ,
492- minute : "2-digit" ,
493- } ) }
494- </ span >
488+ < div className = "rounded-lg bg-muted/50 px-3 py-1.5 flex flex-wrap items-center justify-between gap-x-2 text-xs text-muted-foreground min-h-10" >
489+ < div className = "flex flex-wrap items-center" >
490+ < span > Started working at </ span >
491+ < span className = "font-medium text-foreground ml-1" >
492+ { startTime ?. toLocaleTimeString ( [ ] , {
493+ hour : "2-digit" ,
494+ minute : "2-digit" ,
495+ } ) }
496+ </ span >
497+ { status === "break" && (
498+ < span className = "flex items-center" >
499+ < span className = "mx-1 opacity-50" > •</ span >
500+ < span > Break started at </ span >
501+ < span className = "font-medium text-foreground ml-1" >
502+ { breakStartTime ?. toLocaleTimeString ( [ ] , {
503+ hour : "2-digit" ,
504+ minute : "2-digit" ,
505+ } ) }
506+ </ span >
507+ </ span >
508+ ) }
509+ </ div >
495510 < Button
496511 variant = "ghost"
497512 size = "sm"
498- className = "ml-2 h-7 px-2 text-[10px] text-blue-600 hover:text-blue-700 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-900/20"
513+ className = "h-7 px-2 text-[10px] text-blue-600 hover:text-blue-700 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-900/20"
499514 onClick = { ( ) => {
500515 if ( startTime ) {
501516 setAdjustedStartTime ( formatTimeForInput ( startTime ) ) ;
@@ -506,18 +521,6 @@ export function TimeTracker({ userId }: { userId: number }) {
506521 < Clock className = "mr-1 h-3 w-3" />
507522 Delayed entry?
508523 </ Button >
509- { status === "break" && (
510- < span >
511- { " " }
512- • Break started at{ " " }
513- < span className = "font-medium text-foreground" >
514- { breakStartTime ?. toLocaleTimeString ( [ ] , {
515- hour : "2-digit" ,
516- minute : "2-digit" ,
517- } ) }
518- </ span >
519- </ span >
520- ) }
521524 </ div >
522525 ) }
523526
0 commit comments