Make changes to GUI to better support intervals

Change distance, timer and calories tile to change behaviour when
current workout is an interval session (i.e. not JustRow).
Expose data necessary for this in RowingStatistics. Remove miles option
from formatter.
This commit is contained in:
Abász 2023-04-18 23:19:53 +02:00
parent b494be4b9d
commit dfc2881f36
3 changed files with 26 additions and 13 deletions

View File

@ -42,16 +42,11 @@ export function secondsToPace (seconds) {
* Pipe for formatting distance in meters with units
*
* @param {number} value The distance in meters.
* @param {boolean} showInMiles Boolean whether to use imperial metric (default: false).
*/
export function formatDistance (value, showInMiles = false) {
if (showInMiles === false) {
return value >= 10000
? { distance: formatNumber((value / 1000), 2), unit: 'km' }
: { distance: formatNumber(value), unit: 'm' }
}
return { distance: formatNumber((value / 1609.344), 2), unit: 'mi' }
export function formatDistance (value) {
return value >= 10000
? { distance: formatNumber((value / 1000), 2), unit: 'km' }
: { distance: formatNumber(value), unit: 'm' }
}
/**

View File

@ -10,7 +10,8 @@ export const DASHBOARD_METRICS = {
displayName: 'Distance',
size: 1,
template: (metrics, config) => {
const linearDistance = formatDistance(metrics?.totalLinearDistance)
const distance = metrics?.sessiontype === 'Distance' ? Math.max(metrics?.intervalTargetDistance - metrics?.intervalLinearDistance, 0) : metrics?.totalLinearDistance
const linearDistance = formatDistance(distance ?? 0)
return simpleMetricFactory(linearDistance.distance, linearDistance.unit, config.guiConfigs.showIcons ? icon_route : '')
}
@ -33,9 +34,25 @@ export const DASHBOARD_METRICS = {
totalStk: { displayName: 'Total strokes', size: 1, template: (metrics, config) => simpleMetricFactory(metrics?.totalNumberOfStrokes, 'stk', config.guiConfigs.showIcons ? icon_paddle : '') },
calories: { displayName: 'Calories', size: 1, template: (metrics, config) => simpleMetricFactory(formatNumber(metrics?.totalCalories), 'kcal', config.guiConfigs.showIcons ? icon_fire : '') },
calories: {
displayName: 'Calories',
size: 1,
template: (metrics, config) => {
const calories = metrics?.sessiontype === 'Calories' ? Math.max(metrics?.intervalTargetCalories - metrics?.intervalLinearCalories, 0) : metrics?.totalCalories
timer: { displayName: 'Timer', size: 1, template: (metrics, config) => simpleMetricFactory(secondsToPace(metrics?.totalMovingTime), '', config.guiConfigs.showIcons ? icon_clock : '') },
return simpleMetricFactory(formatNumber(calories ?? 0), 'kcal', config.guiConfigs.showIcons ? icon_fire : '')
}
},
timer: {
displayName: 'Timer',
size: 1,
template: (metrics, config) => {
const time = metrics?.sessiontype === 'Time' ? Math.max(metrics?.intervalTargetTime - metrics?.intervalMovingTime, 0) : metrics?.totalMovingTime
return simpleMetricFactory(secondsToPace(time ?? 0), '', config.guiConfigs.showIcons ? icon_clock : '')
}
},
distancePerStk: { displayName: 'Dist per Stroke', size: 1, template: (metrics, config) => simpleMetricFactory(formatNumber(metrics?.cycleDistance, 1), 'm', config.guiConfigs.showIcons ? rower_icon : '') },

View File

@ -380,8 +380,9 @@ function createRowingStatistics (config) {
totalLinearDistance: totalLinearDistance > 0 ? totalLinearDistance : 0, // meters
intervalNumber: Math.max(currentIntervalNumber + 1, 0), // Interval number
intervalMovingTime: totalMovingTime - intervalPrevAccumulatedTime,
intervalRemainingTime: intervalTargetTime - totalMovingTime,
intervalTargetTime: intervalTargetTime > intervalPrevAccumulatedTime ? intervalTargetTime - intervalPrevAccumulatedTime : 0,
intervalLinearDistance: totalLinearDistance - intervalPrevAccumulatedDistance,
intervalTargetDistance: intervalTargetDistance > intervalPrevAccumulatedDistance ? intervalTargetDistance - intervalPrevAccumulatedDistance : 0,
strokeCalories: strokeCalories > 0 ? strokeCalories : 0, // kCal
strokeWork: strokeWork > 0 ? strokeWork : 0, // Joules
totalCalories: calories.yAtSeriesEnd() > 0 ? calories.yAtSeriesEnd() : 0, // kcal