WorkoutCalculator.vue (1919B)
1 <template> 2 <div class="calculator"> 3 <h2>Input Race Result</h2> 4 <div class="input"> 5 <pace-input v-model="workoutOptions.input" label="Input race"/> 6 </div> 7 8 <details> 9 <summary> 10 <h2>Advanced Options</h2> 11 </summary> 12 <advanced-options-input v-model:globalOptions="globalOptions" 13 v-model:options="workoutOptions" v-model:targetSets="targetSets" :type="Calculators.Workout"/> 14 </details> 15 16 <h2>Workout Splits</h2> 17 <single-output-table class="output" :calculate-result="x => 18 calculateWorkoutResults(workoutOptions.input, x as WorkoutTarget, 19 globalOptions.racePredictionOptions, workoutOptions.customTargetNames, true)" 20 :targets="targetSets[workoutOptions.selectedTargetSet] ? 21 targetSets[workoutOptions.selectedTargetSet].targets : []"/> 22 </div> 23 </template> 24 25 <script setup lang="ts"> 26 import { Calculators, calculateWorkoutResults, defaultGlobalOptions, 27 defaultWorkoutOptions } from '@/core/calculators'; 28 import type { GlobalOptions, WorkoutOptions } from '@/core/calculators'; 29 import { defaultWorkoutTargetSets } from '@/core/targets'; 30 import type { WorkoutTarget, WorkoutTargetSets } from '@/core/targets'; 31 32 import AdvancedOptionsInput from '@/components/AdvancedOptionsInput.vue'; 33 import PaceInput from '@/components/PaceInput.vue'; 34 import SingleOutputTable from '@/components/SingleOutputTable.vue'; 35 36 import useStorage from '@/composables/useStorage'; 37 38 /* 39 * The global options 40 */ 41 const globalOptions = useStorage<GlobalOptions>('global-options', defaultGlobalOptions); 42 43 /* 44 * The race prediction options 45 */ 46 const workoutOptions = useStorage<WorkoutOptions>('workout-calculator-options', defaultWorkoutOptions); 47 48 /* 49 * The target sets 50 */ 51 const targetSets = useStorage<WorkoutTargetSets>('workout-calculator-target-sets', 52 defaultWorkoutTargetSets); 53 </script> 54 55 <style scoped> 56 @import '@/assets/target-calculator.css'; 57 </style>