From 448cabcb31a2fd4d06b0233e2dde15194934173c Mon Sep 17 00:00:00 2001 From: Dominic Ferrando Date: Sat, 4 Jul 2026 02:47:21 -0400 Subject: [PATCH] Calculator UI simplification --- apps/api/src/services/calculator.ts | 12 +-- .../src/routes/(app)/calculator/+page.svelte | 79 ++----------------- 2 files changed, 13 insertions(+), 78 deletions(-) diff --git a/apps/api/src/services/calculator.ts b/apps/api/src/services/calculator.ts index b34ea4a..33ca0d9 100644 --- a/apps/api/src/services/calculator.ts +++ b/apps/api/src/services/calculator.ts @@ -10,22 +10,22 @@ export class CalculatorService { private cachedStandardsConfigData: string | null = null; private lastRefreshedAt = 0; - private levelCalculator: LevelCalculator; + private calculator: LevelCalculator; constructor() { - this.levelCalculator = new LevelCalculator(new Standards(DEFAULT_STANDARDS_DATA)); + this.calculator = new LevelCalculator(new Standards(DEFAULT_STANDARDS_DATA)); } calculate(player: Player, activityPerformances: ActivityPerformance[]) { this.refreshConfig({ onlyIfStale: true }).catch((err) => log.error({ err }, "failed to refresh calculator config")); - return this.levelCalculator.calculate(player, activityPerformances); + return this.calculator.calculate(player, activityPerformances); } async getSelectedConfig(opt: { skipCache?: boolean } = {}): Promise { - if (!opt.skipCache) return this.levelCalculator.standards.cfg; + if (!opt.skipCache) return this.calculator.standards.cfg; await this.refreshConfig(); - return this.levelCalculator.standards.cfg; + return this.calculator.standards.cfg; } async selectConfig(id: string) { @@ -72,7 +72,7 @@ export class CalculatorService { const standardsConfigData = JSON.stringify(result.standards_config); if (standardsConfigData === this.cachedStandardsConfigData) return; - this.levelCalculator = new LevelCalculator(new Standards(DEFAULT_STANDARDS_DATA, result.standards_config)); + this.calculator = new LevelCalculator(new Standards(DEFAULT_STANDARDS_DATA, result.standards_config)); this.cachedStandardsConfigData = standardsConfigData; } } diff --git a/apps/portal/src/routes/(app)/calculator/+page.svelte b/apps/portal/src/routes/(app)/calculator/+page.svelte index b9d089c..be65c69 100644 --- a/apps/portal/src/routes/(app)/calculator/+page.svelte +++ b/apps/portal/src/routes/(app)/calculator/+page.svelte @@ -17,89 +17,24 @@ const defaultStandards = new Standards(DEFAULT_STANDARDS_DATA); - // TODO: try to clean this up let input = $state({ activity: Activity.BenchPress, metrics: { gender: Gender.Male, - age: "", - weight: "", - }, - cfg: { - global: { - maxLevel: String(defaultStandards.cfg.global.maxLevel), - }, - activity: Object.fromEntries( - Object.values(Activity).map((activity) => { - return [ - activity, - { - enableGeneration: - defaultStandards.cfg.activity[activity] - .enableGeneration, - weightAdvantage: String( - defaultStandards.cfg.activity[activity] - .weightModifier, - ), - ageModifier: String( - defaultStandards.cfg.activity[activity] - .ageModifier, - ), - difficultyModifier: String( - defaultStandards.cfg.activity[activity] - .difficultyModifier, - ), - peakAge: String( - defaultStandards.cfg.activity[activity].peakAge, - ), - stretch: { - upper: String( - defaultStandards.cfg.activity[activity] - .stretch.upper, - ), - lower: String( - defaultStandards.cfg.activity[activity] - .stretch.lower, - ), - }, - }, - ]; - }), - ), + age: null as number | null, + weight: null as number | null, // lb }, + cfg: structuredClone(defaultStandards.cfg) as StandardsConfig, }); const selected = $derived({ activity: input.activity, metrics: { gender: input.metrics.gender, - age: +input.metrics.age, - weight: lbToKg(+input.metrics.weight), + age: input.metrics.age ?? 0, + weight: lbToKg(input.metrics.weight ?? 0), } as Metrics, - cfg: { - global: { - maxLevel: +input.cfg.global.maxLevel, - }, - activity: Object.fromEntries( - Object.values(Activity).map((activity) => [ - activity, - { - weightModifier: - +input.cfg.activity[activity].weightAdvantage, - ageModifier: +input.cfg.activity[activity].ageModifier, - enableGeneration: - input.cfg.activity[activity].enableGeneration, - difficultyModifier: - +input.cfg.activity[activity].difficultyModifier, - peakAge: +input.cfg.activity[activity].peakAge, - stretch: { - lower: +input.cfg.activity[activity].stretch.lower, - upper: +input.cfg.activity[activity].stretch.upper, - }, - }, - ]), - ), - } as StandardsConfig, + cfg: input.cfg, }); const allStandards = $derived( @@ -184,7 +119,7 @@ placeholder=".1" bind:value={ input.cfg.activity[selected.activity] - .weightAdvantage + .weightModifier } disabled={!selected.cfg.activity[selected.activity] .enableGeneration}