@@ -33,13 +33,13 @@ function SingleTimer({ timer }: ISingleTimerProps) {
3333
3434 const now = Date . now ( )
3535
36- const isRunning = timer . mode ! . type === 'countdown' && timer . mode ! . pauseTime === null
36+ const isRunning = timer . state !== null && ! timer . state . paused
3737
38- const { diff, isNegative , isFreeRun } = calculateDiff ( timer , now )
38+ const diff = calculateDiff ( timer , now )
3939 const timeStr = RundownUtils . formatDiffToTimecode ( Math . abs ( diff ) , false , true , true , false , true )
4040 const parts = timeStr . split ( ':' )
4141
42- const timerSign = isFreeRun ? '+' : isNegative ? '- ' : '+ '
42+ const timerSign = diff >= 0 ? '+ ' : '- '
4343
4444 return (
4545 < div
@@ -51,7 +51,7 @@ function SingleTimer({ timer }: ISingleTimerProps) {
5151 'timing__header_t-timers__timer__isCountingDown' : timer . mode ! . type === 'countdown' ,
5252 'timing__header_t-timers__timer__isCountingUp' : timer . mode ! . type === 'countdown' ,
5353 'timing__header_t-timers__timer__isComplete' :
54- timer . mode ! . type === 'countdown' && timer . mode ! . pauseTime !== null ,
54+ timer . mode ! . type === 'countdown' && timer . state !== null && timer . state . paused ,
5555 } ) }
5656 >
5757 < span className = "timing__header_t-timers__timer__label" > { timer . label } </ span >
@@ -74,27 +74,23 @@ function SingleTimer({ timer }: ISingleTimerProps) {
7474 )
7575}
7676
77- function calculateDiff (
78- timer : RundownTTimer ,
79- now : number
80- ) : {
81- diff : number
82- isNegative : boolean
83- isFreeRun : boolean
84- } {
85- if ( timer . mode ! . type === 'freeRun' ) {
86- const startTime = timer . mode ! . startTime
87- const diff = now - startTime
88- return { diff, isNegative : false , isFreeRun : true }
89- } else if ( timer . mode ! . type === 'countdown' ) {
90- const endTime = timer . mode ! . startTime + timer . mode ! . duration
91- let diff = endTime - now
92-
93- if ( timer . mode ! . stopAtZero && diff < 0 ) {
94- diff = 0
95- }
96-
97- return { diff, isNegative : diff >= 0 , isFreeRun : false }
77+ function calculateDiff ( timer : RundownTTimer , now : number ) : number {
78+ if ( ! timer . state ) {
79+ return 0
9880 }
99- return { diff : 0 , isNegative : false , isFreeRun : false }
81+
82+ // Get current time: either frozen duration or calculated from zeroTime
83+ const currentTime = timer . state . paused ? timer . state . duration : timer . state . zeroTime - now
84+
85+ // Free run counts up, so negate to get positive elapsed time
86+ if ( timer . mode ?. type === 'freeRun' ) {
87+ return - currentTime
88+ }
89+
90+ // Apply stopAtZero if configured
91+ if ( timer . mode ?. stopAtZero && currentTime < 0 ) {
92+ return 0
93+ }
94+
95+ return currentTime
10096}
0 commit comments