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.
55 lines
1.3 KiB
55 lines
1.3 KiB
import {Values} from "./Shared";
|
|
|
|
export interface Program {
|
|
id: string
|
|
name: string
|
|
steps: ProgramStep[]
|
|
}
|
|
|
|
export interface ProgramStep {
|
|
index?: number
|
|
values: Values,
|
|
duration?: Values,
|
|
}
|
|
|
|
export function weighting(step: ProgramStep) {
|
|
if (step.duration) {
|
|
if (step.duration.time) {
|
|
return 8 * step.duration.time;
|
|
} else if (step.duration.calories) {
|
|
return 4 * step.duration.calories;
|
|
} else if (step.duration.distance) {
|
|
return step.duration.distance;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
export function subTitleOfProgram(program: Program): string {
|
|
let minSum = 0;
|
|
let secSum = 0;
|
|
let kcalSum = 0;
|
|
let mSum = 0;
|
|
let hasCustom = false;
|
|
|
|
for (const step of program.steps) {
|
|
if (step.duration?.time) secSum += step.duration.time;
|
|
if (step.duration?.calories) kcalSum += step.duration.calories;
|
|
if (step.duration?.distance) mSum += step.duration.distance;
|
|
|
|
hasCustom = hasCustom || (!(step.duration?.time) && !(step.duration?.calories) && !(step.duration?.distance));
|
|
}
|
|
|
|
minSum = Math.floor(secSum / 60);
|
|
secSum = secSum % 60;
|
|
|
|
const parts = [];
|
|
if (minSum > 0) parts.push(`${minSum} min`);
|
|
if (secSum > 0) parts.push(`${secSum} sek`);
|
|
if (kcalSum > 0) parts.push(`${kcalSum} kcal`);
|
|
if (mSum > 0) parts.push(`${mSum / 1000} km`);
|
|
if (hasCustom) parts.push("Custom");
|
|
|
|
return parts.join(" + ");
|
|
}
|