@@ -10,9 +10,8 @@ import {
1010 useActiveWorkout ,
1111} from '../context/ActiveWorkoutContext' ;
1212import { secondsToHoursMinutesAndSecondsString } from '@dundring/utils' ;
13- import { Lap } from '../types' ;
14- import React from 'react' ;
1513import { useReadOnlyOptions } from '../context/OptionsContext' ;
14+ import { useWorkoutState } from '../hooks/useWorkoutState' ;
1615
1716const mainFontSize = [ 'xl' , '3xl' , '7xl' ] ;
1817const unitFontSize = [ 'l' , '2xl' , '4xl' ] ;
@@ -22,17 +21,11 @@ export const TopBar = () => {
2221 const { cadence, currentResistance } = useSmartTrainer ( ) ;
2322 const { heartRate } = useHeartRateMonitor ( ) ;
2423 const { activeWorkout } = useActiveWorkout ( ) ;
25- const {
26- data : laps ,
27- timeElapsed,
28- distance,
29- speed,
30- smoothedPower,
31- maxHeartRate,
32- } = useData ( ) ;
3324
3425 const options = useReadOnlyOptions ( ) ;
3526
27+ const { timeElapsed, distance, speed, smoothedPower, maxHeartRate } =
28+ useData ( ) ;
3629 const remainingTime = getRemainingTime ( activeWorkout ) ;
3730
3831 const secondsElapsed = Math . floor ( timeElapsed / 1000 ) ;
@@ -44,8 +37,6 @@ export const TopBar = () => {
4437
4538 const isFreeMode = ! currentResistance ;
4639
47- const currentLap = laps . at ( - 1 ) || null ;
48-
4940 const hasRemainingTime = remainingTime !== null ;
5041
5142 return (
@@ -110,7 +101,7 @@ export const TopBar = () => {
110101 < Text fontSize = { mainFontSize } > { smoothedPower || '0' } </ Text >
111102 < Text fontSize = { unitFontSize } > w</ Text >
112103 </ Center >
113- { isFreeMode && < AvgWattText currentLap = { currentLap } /> }
104+ { isFreeMode && < AvgWattText /> }
114105
115106 < Text fontSize = { secondaryFontSize } > { cadence || '0' } rpm</ Text >
116107 </ Stack >
@@ -121,15 +112,22 @@ export const TopBar = () => {
121112 ) ;
122113} ;
123114
124- const AvgWattText = ( props : { currentLap : Lap | null } ) => {
125- const { currentLap } = props ;
126- if ( ! currentLap ?. normalizedDuration ) {
127- return null ;
128- }
115+ const AvgWattText = ( ) => {
116+ const { lapData } = useWorkoutState ( ) ;
117+
118+ const nonZeroWattLapDatapoints = lapData . filter (
119+ ( datapoint ) => ! ! datapoint . power
120+ ) ;
121+
122+ const sumWatt = nonZeroWattLapDatapoints . reduce (
123+ ( totalWatt , datapoint ) => totalWatt + ( datapoint . power ?? 0 ) ,
124+ 0
125+ ) ;
126+
129127 return (
130128 < Text fontSize = { secondaryFontSize } >
131129 Lap avg:
132- { ( currentLap . sumWatt / currentLap . normalizedDuration ) . toFixed ( 0 ) } W
130+ { ( sumWatt / Math . max ( nonZeroWattLapDatapoints . length , 1 ) ) . toFixed ( 0 ) } W
133131 </ Text >
134132 ) ;
135133} ;
0 commit comments