Make panel reactive to unit changes even after pushing down conversions into utility functions.

This commit is contained in:
bdbkun 2024-08-19 23:20:37 +00:00
parent f39ae57b09
commit 990a473dff
2 changed files with 31 additions and 41 deletions

View file

@ -2,9 +2,12 @@
import { settings } from '$lib/db'; import { settings } from '$lib/db';
import { import {
celsiusToFahrenheit, celsiusToFahrenheit,
distancePerHourToSecondsPerDistance, getConvertedDistance,
kilometersToMiles, getConvertedElevation,
metersToFeet, getConvertedVelocity,
getDistanceUnits,
getElevationUnits,
getVelocityUnits,
secondsToHHMMSS secondsToHHMMSS
} from '$lib/units'; } from '$lib/units';
@ -20,31 +23,18 @@
<span class={$$props.class}> <span class={$$props.class}>
{#if type === 'distance'} {#if type === 'distance'}
{#if $distanceUnits === 'metric'} { getConvertedDistance(value, $distanceUnits).toFixed(decimals ?? 2) }
{value.toFixed(decimals ?? 2)} {showUnits ? $_('units.kilometers') : ''} { showUnits ? getDistanceUnits($distanceUnits) : '' }
{:else}
{kilometersToMiles(value).toFixed(decimals ?? 2)} {showUnits ? $_('units.miles') : ''}
{/if}
{:else if type === 'elevation'} {:else if type === 'elevation'}
{#if $distanceUnits === 'metric'} { getConvertedElevation(value, $distanceUnits).toFixed(decimals ?? 2) }
{value.toFixed(decimals ?? 0)} {showUnits ? $_('units.meters') : ''} { showUnits ? getElevationUnits($distanceUnits) : '' }
{:else}
{metersToFeet(value).toFixed(decimals ?? 0)} {showUnits ? $_('units.feet') : ''}
{/if}
{:else if type === 'speed'} {:else if type === 'speed'}
{#if $distanceUnits === 'metric'}
{#if $velocityUnits === 'speed'} {#if $velocityUnits === 'speed'}
{value.toFixed(decimals ?? 2)} {showUnits ? $_('units.kilometers_per_hour') : ''} { getConvertedVelocity(value, $velocityUnits, $distanceUnits).toFixed(decimals ?? 2) }
{ showUnits ? getVelocityUnits($velocityUnits, $distanceUnits) : '' }
{:else} {:else}
{secondsToHHMMSS(distancePerHourToSecondsPerDistance(value))} { secondsToHHMMSS(getConvertedVelocity(value, $velocityUnits, $distanceUnits)) }
{showUnits ? $_('units.minutes_per_kilometer') : ''} { showUnits ? getVelocityUnits($velocityUnits, $distanceUnits) : '' }
{/if}
{:else if $velocityUnits === 'speed'}
{kilometersToMiles(value).toFixed(decimals ?? 2)}
{showUnits ? $_('units.miles_per_hour') : ''}
{:else}
{secondsToHHMMSS(distancePerHourToSecondsPerDistance(kilometersToMiles(value)))}
{showUnits ? $_('units.minutes_per_mile') : ''}
{/if} {/if}
{:else if type === 'temperature'} {:else if type === 'temperature'}
{#if $temperatureUnits === 'celsius'} {#if $temperatureUnits === 'celsius'}
@ -53,6 +43,6 @@
{celsiusToFahrenheit(value)} {showUnits ? $_('units.fahrenheit') : ''} {celsiusToFahrenheit(value)} {showUnits ? $_('units.fahrenheit') : ''}
{/if} {/if}
{:else if type === 'time'} {:else if type === 'time'}
{secondsToHHMMSS(value)} { secondsToHHMMSS(value) }
{/if} {/if}
</span> </span>

View file

@ -96,8 +96,8 @@ export function getTemperatureWithUnits(value: number, convert: boolean = true)
} }
// Get the units // Get the units
export function getDistanceUnits() { export function getDistanceUnits(currentDistanceUnits = get(distanceUnits)) {
switch (get(distanceUnits)) { switch (currentDistanceUnits) {
case 'metric': case 'metric':
return get(_)('units.kilometers'); return get(_)('units.kilometers');
case 'imperial': case 'imperial':
@ -107,9 +107,9 @@ export function getDistanceUnits() {
} }
} }
export function getVelocityUnits() { export function getVelocityUnits(currentVelocityUnits = get(velocityUnits), currentDistanceUnits = get(distanceUnits)) {
if (get(velocityUnits) === 'speed') { if (currentVelocityUnits === 'speed') {
switch (get(distanceUnits)) { switch (currentDistanceUnits) {
case 'metric': case 'metric':
return get(_)('units.kilometers_per_hour'); return get(_)('units.kilometers_per_hour');
case 'imperial': case 'imperial':
@ -118,7 +118,7 @@ export function getVelocityUnits() {
return get(_)('units.knots'); return get(_)('units.knots');
} }
} else { } else {
switch (get(distanceUnits)) { switch (currentDistanceUnits) {
case 'metric': case 'metric':
return get(_)('units.minutes_per_kilometer'); return get(_)('units.minutes_per_kilometer');
case 'imperial': case 'imperial':
@ -129,8 +129,8 @@ export function getVelocityUnits() {
} }
} }
export function getElevationUnits() { export function getElevationUnits(currentDistanceUnits = get(distanceUnits)) {
return get(distanceUnits) === 'metric' ? get(_)('units.meters') : get(_)('units.feet'); return currentDistanceUnits === 'metric' ? get(_)('units.meters') : get(_)('units.feet');
} }
export function getHeartRateUnits() { export function getHeartRateUnits() {
@ -150,8 +150,8 @@ export function getTemperatureUnits() {
} }
// Convert only the value // Convert only the value
export function getConvertedDistance(value: number) { export function getConvertedDistance(value: number, currentDistanceUnits = get(distanceUnits)) {
switch (get(distanceUnits)) { switch (currentDistanceUnits) {
case 'metric': case 'metric':
return value; return value;
case 'imperial': case 'imperial':
@ -165,9 +165,9 @@ export function getConvertedElevation(value: number) {
return get(distanceUnits) === 'metric' ? value : metersToFeet(value); return get(distanceUnits) === 'metric' ? value : metersToFeet(value);
} }
export function getConvertedVelocity(value: number) { export function getConvertedVelocity(value: number, currentVelocityUnits = get(velocityUnits), currentDistanceUnits = get(distanceUnits)) {
if (get(velocityUnits) === 'speed') { if (currentVelocityUnits === 'speed') {
switch (get(distanceUnits)) { switch (currentDistanceUnits) {
case 'metric': case 'metric':
return value; return value;
case 'imperial': case 'imperial':
@ -176,7 +176,7 @@ export function getConvertedVelocity(value: number) {
return kilometersToNauticalMiles(value); return kilometersToNauticalMiles(value);
} }
} else { } else {
switch (get(distanceUnits)) { switch (currentDistanceUnits) {
case 'metric': case 'metric':
return distancePerHourToSecondsPerDistance(value); return distancePerHourToSecondsPerDistance(value);
case 'imperial': case 'imperial':