running-tools

A collection of tools for runners and their coaches
git clone https://git.ashermorgan.net/running-tools/
Log | Files | Refs | README

commit 3c076bf99f924796a82d729bafa3f3ec9db3e928
parent 82bace6521ac3be92388029f534b73434b185d90
Author: Asher Morgan <59518073+ashermorgan@users.noreply.github.com>
Date:   Sat, 12 Jul 2025 12:28:13 -0700

Extract default calculator state

Default input and options defined in calculator utils, default target
sets defined in target utils.

Diffstat:
Msrc/components/AdvancedOptionsInput.vue | 4+++-
Msrc/utils/calculators.ts | 36+++++++++++++++++++++++++++++++++++-
Msrc/utils/targets.ts | 211++++++++++++++++++++++++++++++++++++++-----------------------------------------
Msrc/views/BatchCalculator.vue | 61++++++++++++++++---------------------------------------------
Msrc/views/PaceCalculator.vue | 22++++++++--------------
Msrc/views/RaceCalculator.vue | 25++++++++-----------------
Msrc/views/SplitCalculator.vue | 15++++++---------
Msrc/views/WorkoutCalculator.vue | 28+++++++++-------------------
8 files changed, 186 insertions(+), 216 deletions(-)

diff --git a/src/components/AdvancedOptionsInput.vue b/src/components/AdvancedOptionsInput.vue @@ -45,7 +45,7 @@ <script setup lang="ts"> import { Calculators } from '@/utils/calculators'; -import type { CalculatorOptions, RaceOptions, WorkoutOptions } from '@/utils/calculators'; +import type { StandardOptions, RaceOptions, WorkoutOptions } from '@/utils/calculators'; import type { TargetSets } from '@/utils/targets'; import { UnitSystems } from '@/utils/units'; @@ -54,6 +54,8 @@ import TargetSetSelector from '@/components/TargetSetSelector.vue'; import useObjectModel from '@/composables/useObjectModel'; +type CalculatorOptions = StandardOptions | RaceOptions | WorkoutOptions; + /* * The default unit system */ diff --git a/src/utils/calculators.ts b/src/utils/calculators.ts @@ -40,7 +40,11 @@ export interface RaceOptions extends StandardOptions { export interface WorkoutOptions extends RaceOptions { customTargetNames: boolean, }; -export type CalculatorOptions = StandardOptions | RaceOptions | WorkoutOptions; +export interface BatchOptions { + calculator: Calculators.Pace | Calculators.Race | Calculators.Workout, + increment: number, + rows: number, +}; /* * The two possible result fields of a target result: "key" and "value" @@ -61,6 +65,36 @@ export interface TargetResult { sort: number, }; +/* + * The default input and options for each calculator + */ +export const defaultInput: DistanceTime = { + distanceValue: 5, + distanceUnit: DistanceUnits.Kilometers, + time: 1200, +}; +export const defaultBatchOptions: BatchOptions = { + calculator: Calculators.Workout, + increment: 15, + rows: 20, +}; +export const defaultPaceOptions: StandardOptions = { + selectedTargetSet: '_pace_targets', +}; +export const defaultRaceOptions: RaceOptions = { + model: raceUtils.RacePredictionModel.AverageModel, + riegelExponent: 1.06, + selectedTargetSet: '_race_targets', +}; +export const defaultSplitOptions: StandardOptions = { + selectedTargetSet: '_split_targets', +}; +export const defaultWorkoutOptions: WorkoutOptions = { + customTargetNames: false, + ...defaultRaceOptions, + selectedTargetSet: '_workout_targets', +}; + /** * Calculate results for a standard target * @param {DistanceTime} input The input pace diff --git a/src/utils/targets.ts b/src/utils/targets.ts @@ -101,116 +101,107 @@ export function workoutTargetToString(target: WorkoutTarget): string { } /* - * A set of common pace calculator targets + * The default target sets for each calculator */ -const common_pace_targets: StandardTargetSet = { - name: 'Common Pace Targets', - targets: sort([ - { type: TargetTypes.Distance, distanceValue: 100, distanceUnit: DistanceUnits.Meters }, - { type: TargetTypes.Distance, distanceValue: 200, distanceUnit: DistanceUnits.Meters }, - { type: TargetTypes.Distance, distanceValue: 300, distanceUnit: DistanceUnits.Meters }, - { type: TargetTypes.Distance, distanceValue: 400, distanceUnit: DistanceUnits.Meters }, - { type: TargetTypes.Distance, distanceValue: 600, distanceUnit: DistanceUnits.Meters }, - { type: TargetTypes.Distance, distanceValue: 800, distanceUnit: DistanceUnits.Meters }, - { type: TargetTypes.Distance, distanceValue: 1000, distanceUnit: DistanceUnits.Meters }, - { type: TargetTypes.Distance, distanceValue: 1200, distanceUnit: DistanceUnits.Meters }, - { type: TargetTypes.Distance, distanceValue: 1500, distanceUnit: DistanceUnits.Meters }, - { type: TargetTypes.Distance, distanceValue: 1600, distanceUnit: DistanceUnits.Meters }, - { type: TargetTypes.Distance, distanceValue: 3200, distanceUnit: DistanceUnits.Meters }, - - { type: TargetTypes.Distance, distanceValue: 2, distanceUnit: DistanceUnits.Kilometers }, - { type: TargetTypes.Distance, distanceValue: 3, distanceUnit: DistanceUnits.Kilometers }, - { type: TargetTypes.Distance, distanceValue: 4, distanceUnit: DistanceUnits.Kilometers }, - { type: TargetTypes.Distance, distanceValue: 5, distanceUnit: DistanceUnits.Kilometers }, - { type: TargetTypes.Distance, distanceValue: 6, distanceUnit: DistanceUnits.Kilometers }, - { type: TargetTypes.Distance, distanceValue: 8, distanceUnit: DistanceUnits.Kilometers }, - { type: TargetTypes.Distance, distanceValue: 10, distanceUnit: DistanceUnits.Kilometers }, - - { type: TargetTypes.Distance, distanceValue: 1, distanceUnit: DistanceUnits.Miles }, - { type: TargetTypes.Distance, distanceValue: 2, distanceUnit: DistanceUnits.Miles }, - { type: TargetTypes.Distance, distanceValue: 3, distanceUnit: DistanceUnits.Miles }, - { type: TargetTypes.Distance, distanceValue: 5, distanceUnit: DistanceUnits.Miles }, - { type: TargetTypes.Distance, distanceValue: 6, distanceUnit: DistanceUnits.Miles }, - { type: TargetTypes.Distance, distanceValue: 8, distanceUnit: DistanceUnits.Miles }, - { type: TargetTypes.Distance, distanceValue: 10, distanceUnit: DistanceUnits.Miles }, - - { type: TargetTypes.Distance, distanceValue: 0.5, distanceUnit: DistanceUnits.Marathons }, - { type: TargetTypes.Distance, distanceValue: 1, distanceUnit: DistanceUnits.Marathons }, - - { type: TargetTypes.Time, time: 600 }, - { type: TargetTypes.Time, time: 1800 }, - { type: TargetTypes.Time, time: 3600 }, - ]), -}; - -/* - * A set of common race calculator targets - */ -const common_race_targets: StandardTargetSet = { - name: 'Common Race Targets', - targets: sort([ - { type: TargetTypes.Distance, distanceValue: 400, distanceUnit: DistanceUnits.Meters }, - { type: TargetTypes.Distance, distanceValue: 800, distanceUnit: DistanceUnits.Meters }, - { type: TargetTypes.Distance, distanceValue: 1500, distanceUnit: DistanceUnits.Meters }, - { type: TargetTypes.Distance, distanceValue: 1600, distanceUnit: DistanceUnits.Meters }, - { type: TargetTypes.Distance, distanceValue: 1, distanceUnit: DistanceUnits.Miles }, - { type: TargetTypes.Distance, distanceValue: 3000, distanceUnit: DistanceUnits.Meters }, - { type: TargetTypes.Distance, distanceValue: 3200, distanceUnit: DistanceUnits.Meters }, - { type: TargetTypes.Distance, distanceValue: 2, distanceUnit: DistanceUnits.Miles }, - - { type: TargetTypes.Distance, distanceValue: 3, distanceUnit: DistanceUnits.Miles }, - { type: TargetTypes.Distance, distanceValue: 5, distanceUnit: DistanceUnits.Kilometers }, - { type: TargetTypes.Distance, distanceValue: 6, distanceUnit: DistanceUnits.Kilometers }, - { type: TargetTypes.Distance, distanceValue: 8, distanceUnit: DistanceUnits.Kilometers }, - { type: TargetTypes.Distance, distanceValue: 10, distanceUnit: DistanceUnits.Kilometers }, - { type: TargetTypes.Distance, distanceValue: 15, distanceUnit: DistanceUnits.Kilometers }, - - { type: TargetTypes.Distance, distanceValue: 0.5, distanceUnit: DistanceUnits.Marathons }, - { type: TargetTypes.Distance, distanceValue: 1, distanceUnit: DistanceUnits.Marathons }, - ]), -}; - - -/* - * A set of targets for 5K mile splits - */ -const five_k_mile_splits: SplitTargetSet = { - name: '5K Mile Splits', - targets: [ - { type: TargetTypes.Distance, distanceValue: 1, distanceUnit: DistanceUnits.Miles }, - { type: TargetTypes.Distance, distanceValue: 2, distanceUnit: DistanceUnits.Miles }, - { type: TargetTypes.Distance, distanceValue: 5, distanceUnit: DistanceUnits.Kilometers }, - ], -}; - -/* - * A set of common workout calculator targets - */ -const common_workout_targets: WorkoutTargetSet = { - name: 'Common Workout Targets', - targets: [ - { - splitValue: 400, splitUnit: DistanceUnits.Meters, - type: TargetTypes.Distance, distanceValue: 1, distanceUnit: DistanceUnits.Miles, - }, - { - splitValue: 800, splitUnit: DistanceUnits.Meters, - type: TargetTypes.Distance, distanceValue: 5, distanceUnit: DistanceUnits.Kilometers, - }, - { - splitValue: 1600, splitUnit: DistanceUnits.Meters, - type: TargetTypes.Time, time: 3600, - }, - { - splitValue: 1, splitUnit: DistanceUnits.Miles, - type: TargetTypes.Distance, distanceValue: 1, distanceUnit: DistanceUnits.Marathons, - }, - ], -}; - export const defaultTargetSets: { [key: string]: TargetSet } = { - '_pace_targets': common_pace_targets, - '_race_targets': common_race_targets, - '_split_targets': five_k_mile_splits, - '_workout_targets': common_workout_targets, + '_pace_targets': { + name: 'Common Pace Targets', + targets: sort([ + { type: TargetTypes.Distance, distanceValue: 100, distanceUnit: DistanceUnits.Meters }, + { type: TargetTypes.Distance, distanceValue: 200, distanceUnit: DistanceUnits.Meters }, + { type: TargetTypes.Distance, distanceValue: 300, distanceUnit: DistanceUnits.Meters }, + { type: TargetTypes.Distance, distanceValue: 400, distanceUnit: DistanceUnits.Meters }, + { type: TargetTypes.Distance, distanceValue: 600, distanceUnit: DistanceUnits.Meters }, + { type: TargetTypes.Distance, distanceValue: 800, distanceUnit: DistanceUnits.Meters }, + { type: TargetTypes.Distance, distanceValue: 1000, distanceUnit: DistanceUnits.Meters }, + { type: TargetTypes.Distance, distanceValue: 1200, distanceUnit: DistanceUnits.Meters }, + { type: TargetTypes.Distance, distanceValue: 1500, distanceUnit: DistanceUnits.Meters }, + { type: TargetTypes.Distance, distanceValue: 1600, distanceUnit: DistanceUnits.Meters }, + { type: TargetTypes.Distance, distanceValue: 3200, distanceUnit: DistanceUnits.Meters }, + + { type: TargetTypes.Distance, distanceValue: 2, distanceUnit: DistanceUnits.Kilometers }, + { type: TargetTypes.Distance, distanceValue: 3, distanceUnit: DistanceUnits.Kilometers }, + { type: TargetTypes.Distance, distanceValue: 4, distanceUnit: DistanceUnits.Kilometers }, + { type: TargetTypes.Distance, distanceValue: 5, distanceUnit: DistanceUnits.Kilometers }, + { type: TargetTypes.Distance, distanceValue: 6, distanceUnit: DistanceUnits.Kilometers }, + { type: TargetTypes.Distance, distanceValue: 8, distanceUnit: DistanceUnits.Kilometers }, + { type: TargetTypes.Distance, distanceValue: 10, distanceUnit: DistanceUnits.Kilometers }, + + { type: TargetTypes.Distance, distanceValue: 1, distanceUnit: DistanceUnits.Miles }, + { type: TargetTypes.Distance, distanceValue: 2, distanceUnit: DistanceUnits.Miles }, + { type: TargetTypes.Distance, distanceValue: 3, distanceUnit: DistanceUnits.Miles }, + { type: TargetTypes.Distance, distanceValue: 5, distanceUnit: DistanceUnits.Miles }, + { type: TargetTypes.Distance, distanceValue: 6, distanceUnit: DistanceUnits.Miles }, + { type: TargetTypes.Distance, distanceValue: 8, distanceUnit: DistanceUnits.Miles }, + { type: TargetTypes.Distance, distanceValue: 10, distanceUnit: DistanceUnits.Miles }, + + { type: TargetTypes.Distance, distanceValue: 0.5, distanceUnit: DistanceUnits.Marathons }, + { type: TargetTypes.Distance, distanceValue: 1, distanceUnit: DistanceUnits.Marathons }, + + { type: TargetTypes.Time, time: 600 }, + { type: TargetTypes.Time, time: 1800 }, + { type: TargetTypes.Time, time: 3600 }, + ]), + }, '_race_targets': { + name: 'Common Race Targets', + targets: sort([ + { type: TargetTypes.Distance, distanceValue: 400, distanceUnit: DistanceUnits.Meters }, + { type: TargetTypes.Distance, distanceValue: 800, distanceUnit: DistanceUnits.Meters }, + { type: TargetTypes.Distance, distanceValue: 1500, distanceUnit: DistanceUnits.Meters }, + { type: TargetTypes.Distance, distanceValue: 1600, distanceUnit: DistanceUnits.Meters }, + { type: TargetTypes.Distance, distanceValue: 1, distanceUnit: DistanceUnits.Miles }, + { type: TargetTypes.Distance, distanceValue: 3000, distanceUnit: DistanceUnits.Meters }, + { type: TargetTypes.Distance, distanceValue: 3200, distanceUnit: DistanceUnits.Meters }, + { type: TargetTypes.Distance, distanceValue: 2, distanceUnit: DistanceUnits.Miles }, + + { type: TargetTypes.Distance, distanceValue: 3, distanceUnit: DistanceUnits.Miles }, + { type: TargetTypes.Distance, distanceValue: 5, distanceUnit: DistanceUnits.Kilometers }, + { type: TargetTypes.Distance, distanceValue: 6, distanceUnit: DistanceUnits.Kilometers }, + { type: TargetTypes.Distance, distanceValue: 8, distanceUnit: DistanceUnits.Kilometers }, + { type: TargetTypes.Distance, distanceValue: 10, distanceUnit: DistanceUnits.Kilometers }, + { type: TargetTypes.Distance, distanceValue: 15, distanceUnit: DistanceUnits.Kilometers }, + + { type: TargetTypes.Distance, distanceValue: 0.5, distanceUnit: DistanceUnits.Marathons }, + { type: TargetTypes.Distance, distanceValue: 1, distanceUnit: DistanceUnits.Marathons }, + ]), + }, '_split_targets': { + name: '5K Mile Splits', + targets: [ + { type: TargetTypes.Distance, distanceValue: 1, distanceUnit: DistanceUnits.Miles }, + { type: TargetTypes.Distance, distanceValue: 2, distanceUnit: DistanceUnits.Miles }, + { type: TargetTypes.Distance, distanceValue: 5, distanceUnit: DistanceUnits.Kilometers }, + ], + }, '_workout_targets': { + name: 'Common Workout Targets', + targets: [ + { + splitValue: 400, splitUnit: DistanceUnits.Meters, + type: TargetTypes.Distance, distanceValue: 1, distanceUnit: DistanceUnits.Miles, + }, + { + splitValue: 800, splitUnit: DistanceUnits.Meters, + type: TargetTypes.Distance, distanceValue: 5, distanceUnit: DistanceUnits.Kilometers, + }, + { + splitValue: 1600, splitUnit: DistanceUnits.Meters, + type: TargetTypes.Time, time: 3600, + }, + { + splitValue: 1, splitUnit: DistanceUnits.Miles, + type: TargetTypes.Distance, distanceValue: 1, distanceUnit: DistanceUnits.Marathons, + }, + ], + }, +}; +export const defaultPaceTargetSets: StandardTargetSets = { + '_pace_targets': defaultTargetSets._pace_targets, +}; +export const defaultRaceTargetSets: StandardTargetSets = { + '_race_targets': defaultTargetSets._race_targets, +}; +export const defaultSplitTargetSets: SplitTargetSets = { + '_split_targets': defaultTargetSets._split_targets as SplitTargetSet, +}; +export const defaultWorkoutTargetSets: WorkoutTargetSets = { + '_workout_targets': defaultTargetSets._workout_targets as WorkoutTargetSet, }; diff --git a/src/views/BatchCalculator.vue b/src/views/BatchCalculator.vue @@ -43,11 +43,10 @@ import { computed } from 'vue'; import * as calcUtils from '@/utils/calculators'; -import type { RaceOptions, StandardOptions, TargetResult, +import type { BatchOptions, RaceOptions, StandardOptions, TargetResult, WorkoutOptions } from '@/utils/calculators'; -import { RacePredictionModel } from '@/utils/races'; import * as targetUtils from '@/utils/targets'; -import { DistanceUnits, UnitSystems, detectDefaultUnitSystem } from '@/utils/units'; +import { UnitSystems, detectDefaultUnitSystem } from '@/utils/units'; import type { Distance, DistanceTime } from '@/utils/units'; import AdvancedOptionsInput from '@/components/AdvancedOptionsInput.vue'; @@ -59,31 +58,14 @@ import TimeInput from '@/components/TimeInput.vue'; import useStorage from '@/composables/useStorage'; /* - * The type for options specific to the batch calculator - */ -interface BatchCalculatorOptions { - calculator: calcUtils.Calculators, - increment: number, - rows: number, -}; - -/* * The input pace */ -const input = useStorage<DistanceTime>('batch-calculator-input', { - distanceValue: 5, - distanceUnit: DistanceUnits.Kilometers, - time: 1200, -}); +const input = useStorage<DistanceTime>('batch-calculator-input', calcUtils.defaultInput); /* * The batch input options */ -const options = useStorage<BatchCalculatorOptions>('batch-calculator-options', { - calculator: calcUtils.Calculators.Workout, - increment: 15, - rows: 20, -}); +const options = useStorage<BatchOptions>('batch-calculator-options', calcUtils.defaultBatchOptions); /* * The default unit system @@ -93,33 +75,22 @@ const defaultUnitSystem = useStorage<UnitSystems>('default-unit-system', detectD /* * The target sets for each calculator */ -const paceTargetSets = useStorage<targetUtils.StandardTargetSets>('pace-calculator-target-sets', { - _pace_targets: targetUtils.defaultTargetSets._pace_targets as targetUtils.StandardTargetSet -}); -const raceTargetSets = useStorage<targetUtils.StandardTargetSets>('race-calculator-target-sets', { - _race_targets: targetUtils.defaultTargetSets._race_targets as targetUtils.StandardTargetSet -}); -const workoutTargetSets = useStorage<targetUtils.WorkoutTargetSets>('workout-calculator-target-sets', { - _workout_targets: targetUtils.defaultTargetSets._workout_targets as targetUtils.WorkoutTargetSet -}); +const paceTargetSets = useStorage<targetUtils.StandardTargetSets>('pace-calculator-target-sets', + targetUtils.defaultPaceTargetSets); +const raceTargetSets = useStorage<targetUtils.StandardTargetSets>('race-calculator-target-sets', + targetUtils.defaultRaceTargetSets); +const workoutTargetSets = useStorage<targetUtils.WorkoutTargetSets>('workout-calculator-target-sets', + targetUtils.defaultWorkoutTargetSets); /* * The options for each calculator */ -const paceOptions = useStorage<StandardOptions>('pace-calculator-options', { - selectedTargetSet: '_pace_targets', -}); -const raceOptions = useStorage<RaceOptions>('race-calculator-options', { - model: RacePredictionModel.AverageModel, - riegelExponent: 1.06, - selectedTargetSet: '_race_targets', -}); -const workoutOptions = useStorage<WorkoutOptions>('workout-calculator-options', { - customTargetNames: false, - model: RacePredictionModel.AverageModel, - riegelExponent: 1.06, - selectedTargetSet: '_workout_targets', -}); +const paceOptions = useStorage<StandardOptions>('pace-calculator-options', + calcUtils.defaultPaceOptions); +const raceOptions = useStorage<RaceOptions>('race-calculator-options', + calcUtils.defaultRaceOptions); +const workoutOptions = useStorage<WorkoutOptions>('workout-calculator-options', + calcUtils.defaultWorkoutOptions); /* * The input distance diff --git a/src/views/PaceCalculator.vue b/src/views/PaceCalculator.vue @@ -22,11 +22,12 @@ </template> <script setup lang="ts"> -import { Calculators, calculatePaceResults } from '@/utils/calculators'; +import { Calculators, calculatePaceResults, defaultInput, + defaultPaceOptions } from '@/utils/calculators'; import type { StandardOptions } from '@/utils/calculators'; -import { defaultTargetSets } from '@/utils/targets'; +import { defaultPaceTargetSets } from '@/utils/targets'; import type { StandardTargetSets } from '@/utils/targets'; -import { DistanceUnits, UnitSystems, detectDefaultUnitSystem } from '@/utils/units'; +import { UnitSystems, detectDefaultUnitSystem } from '@/utils/units'; import type { DistanceTime } from '@/utils/units'; import AdvancedOptionsInput from '@/components/AdvancedOptionsInput.vue'; @@ -38,11 +39,7 @@ import useStorage from '@/composables/useStorage'; /* * The input pace */ -const input = useStorage<DistanceTime>('pace-calculator-input', { - distanceValue: 5, - distanceUnit: DistanceUnits.Kilometers, - time: 1200, -}); +const input = useStorage<DistanceTime>('pace-calculator-input', defaultInput); /* * The default unit system @@ -52,16 +49,13 @@ const defaultUnitSystem = useStorage<UnitSystems>('default-unit-system', detectD /* * The current selected target set */ -const options = useStorage<StandardOptions>('pace-calculator-options', { - selectedTargetSet: '_pace_targets', -}); +const options = useStorage<StandardOptions>('pace-calculator-options', defaultPaceOptions); /* * The target sets */ -const targetSets = useStorage<StandardTargetSets>('pace-calculator-target-sets', { - _pace_targets: defaultTargetSets._pace_targets -}); +const targetSets = useStorage<StandardTargetSets>('pace-calculator-target-sets', + defaultPaceTargetSets); </script> <style scoped> diff --git a/src/views/RaceCalculator.vue b/src/views/RaceCalculator.vue @@ -41,12 +41,12 @@ <script setup lang="ts"> import { computed } from 'vue'; -import { Calculators, calculateRaceResults, calculateRaceStats } from '@/utils/calculators'; +import { Calculators, calculateRaceResults, calculateRaceStats, defaultInput, + defaultRaceOptions } from '@/utils/calculators'; import type { RaceOptions, RaceStats } from '@/utils/calculators'; -import { RacePredictionModel } from '@/utils/races'; -import { defaultTargetSets } from '@/utils/targets'; +import { defaultRaceTargetSets } from '@/utils/targets'; import type { StandardTargetSets } from '@/utils/targets'; -import { DistanceUnits, UnitSystems, detectDefaultUnitSystem, formatNumber } from '@/utils/units'; +import { UnitSystems, detectDefaultUnitSystem, formatNumber } from '@/utils/units'; import type { DistanceTime } from '@/utils/units'; import AdvancedOptionsInput from '@/components/AdvancedOptionsInput.vue'; @@ -58,11 +58,7 @@ import useStorage from '@/composables/useStorage'; /* * The input race */ -const input = useStorage<DistanceTime>('race-calculator-input', { - distanceValue: 5, - distanceUnit: DistanceUnits.Kilometers, - time: 1200, -}); +const input = useStorage<DistanceTime>('race-calculator-input', defaultInput); /* * The default unit system @@ -72,18 +68,13 @@ const defaultUnitSystem = useStorage<UnitSystems>('default-unit-system', detectD /* * The race calculator options */ -const options = useStorage<RaceOptions>('race-calculator-options', { - model: RacePredictionModel.AverageModel, - riegelExponent: 1.06, - selectedTargetSet: '_race_targets', -}); +const options = useStorage<RaceOptions>('race-calculator-options', defaultRaceOptions); /* * The target sets */ -const targetSets = useStorage<StandardTargetSets>('race-calculator-target-sets', { - _race_targets: defaultTargetSets._race_targets -}); +const targetSets = useStorage<StandardTargetSets>('race-calculator-target-sets', + defaultRaceTargetSets); /* * The statistics for the current input race diff --git a/src/views/SplitCalculator.vue b/src/views/SplitCalculator.vue @@ -14,10 +14,10 @@ <script setup lang="ts"> import { computed } from 'vue'; -import { Calculators } from '@/utils/calculators'; +import { Calculators, defaultSplitOptions } from '@/utils/calculators'; import type { StandardOptions } from '@/utils/calculators'; -import { defaultTargetSets } from '@/utils/targets'; -import type { SplitTargetSet, SplitTargetSets } from '@/utils/targets'; +import { defaultSplitTargetSets } from '@/utils/targets'; +import type { SplitTargetSets } from '@/utils/targets'; import { UnitSystems, detectDefaultUnitSystem } from '@/utils/units'; import AdvancedOptionsInput from '@/components/AdvancedOptionsInput.vue'; @@ -33,16 +33,13 @@ const defaultUnitSystem = useStorage<UnitSystems>('default-unit-system', detectD /* * The split calculator options */ -const options = useStorage<StandardOptions>('split-calculator-options', { - selectedTargetSet: '_split_targets' -}); +const options = useStorage<StandardOptions>('split-calculator-options', defaultSplitOptions); /* * The default output targets */ -const targetSets = useStorage<SplitTargetSets>('split-calculator-target-sets', { - _split_targets: defaultTargetSets._split_targets as SplitTargetSet -}); +const targetSets = useStorage<SplitTargetSets>('split-calculator-target-sets', + defaultSplitTargetSets); /* * The active target set diff --git a/src/views/WorkoutCalculator.vue b/src/views/WorkoutCalculator.vue @@ -22,12 +22,12 @@ </template> <script setup lang="ts"> -import { Calculators, calculateWorkoutResults } from '@/utils/calculators'; +import { Calculators, calculateWorkoutResults, defaultInput, + defaultWorkoutOptions } from '@/utils/calculators'; import type { WorkoutOptions } from '@/utils/calculators'; -import { RacePredictionModel } from '@/utils/races'; -import { defaultTargetSets } from '@/utils/targets'; -import type { WorkoutTarget, WorkoutTargetSet, WorkoutTargetSets } from '@/utils/targets'; -import { DistanceUnits, UnitSystems, detectDefaultUnitSystem } from '@/utils/units'; +import { defaultWorkoutTargetSets } from '@/utils/targets'; +import type { WorkoutTarget, WorkoutTargetSets } from '@/utils/targets'; +import { UnitSystems, detectDefaultUnitSystem } from '@/utils/units'; import type { DistanceTime } from '@/utils/units'; import AdvancedOptionsInput from '@/components/AdvancedOptionsInput.vue'; @@ -39,11 +39,7 @@ import useStorage from '@/composables/useStorage'; /* * The input race */ -const input = useStorage<DistanceTime>('workout-calculator-input', { - distanceValue: 5, - distanceUnit: DistanceUnits.Kilometers, - time: 1200, -}); +const input = useStorage<DistanceTime>('workout-calculator-input', defaultInput); /* * The default unit system @@ -53,19 +49,13 @@ const defaultUnitSystem = useStorage<UnitSystems>('default-unit-system', detectD /* * The race prediction options */ -const options = useStorage<WorkoutOptions>('workout-calculator-options', { - customTargetNames: false, - model: RacePredictionModel.AverageModel, - riegelExponent: 1.06, - selectedTargetSet: '_workout_targets', -}); +const options = useStorage<WorkoutOptions>('workout-calculator-options', defaultWorkoutOptions); /* * The target sets */ -const targetSets = useStorage<WorkoutTargetSets>('workout-calculator-target-sets', { - _workout_targets: defaultTargetSets._workout_targets as WorkoutTargetSet -}); +const targetSets = useStorage<WorkoutTargetSets>('workout-calculator-target-sets', + defaultWorkoutTargetSets); </script> <style scoped>