You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.2 KiB
40 lines
1.2 KiB
export function diffString(diff) {
|
|
return diff < 0 ? `${diff}` : `+${diff}`
|
|
}
|
|
|
|
export default function calculateDiff({program, cooldownMin = null, minutes, seconds, calories}) {
|
|
const {warmupMin, warmupCpm, cpm, cooldownCpm} = program;
|
|
const actualWarmup = cooldownMin !== null && cooldownMin > 0
|
|
? Math.min(warmupMin, cooldownMin)
|
|
: warmupMin;
|
|
|
|
// Minutes in each section
|
|
const minWarmup = calculateMins(0, actualWarmup, minutes, seconds);
|
|
const minMain = calculateMins(actualWarmup, cooldownMin, minutes, seconds);
|
|
const minCooldown = calculateMins(cooldownMin, null, minutes, seconds);
|
|
|
|
// Expected calories in each section
|
|
const calWarmup = minWarmup * warmupCpm;
|
|
const calMain = minMain * cpm;
|
|
const calCooldown = minCooldown * cooldownCpm;
|
|
|
|
return Math.round(calories - (calWarmup + calMain + calCooldown));
|
|
}
|
|
|
|
function calculateMins(minMinutes, maxMinutes, minutes, seconds) {
|
|
const fraction = seconds / 60;
|
|
|
|
if (minMinutes === null || minMinutes < 0) {
|
|
return 0.0;
|
|
}
|
|
|
|
if (minutes >= minMinutes) {
|
|
if (maxMinutes !== null && minutes >= maxMinutes) {
|
|
return maxMinutes - minMinutes;
|
|
}
|
|
|
|
return (minutes - minMinutes) + fraction;
|
|
} else {
|
|
return 0.0;
|
|
}
|
|
}
|