Skip to content

Commit 6657134

Browse files
committed
Bugfix: Show duration settings in their declared unit
The auto-generated Advanced section rendered duration values as raw ms next to the unit label, so `Update check interval` displayed `3600000 min` instead of `60 min`. Convert the stored ms value (and `minMs`/`maxMs`) to the setting's `unit` for display, and convert back to ms on edit.
1 parent 206ec7d commit 6657134

1 file changed

Lines changed: 33 additions & 6 deletions

File tree

apps/desktop/src/lib/settings/sections/AdvancedSection.svelte

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
type SettingsValues,
1111
formatDuration,
1212
} from '$lib/settings'
13+
import type { DurationUnit } from '$lib/settings/types'
1314
import SettingsSection from '../components/SettingsSection.svelte'
1415
import Button from '$lib/ui/Button.svelte'
1516
import { Switch } from '@ark-ui/svelte/switch'
@@ -63,8 +64,26 @@
6364
setSetting(id, checked as SettingsValues[typeof id])
6465
}
6566
66-
function handleNumberChange(id: SettingId, details: NumberInputValueChangeDetails) {
67-
setSetting(id, details.valueAsNumber as SettingsValues[typeof id])
67+
const DURATION_UNIT_MS: Record<DurationUnit, number> = {
68+
ms: 1,
69+
s: 1000,
70+
min: 60_000,
71+
h: 3_600_000,
72+
d: 86_400_000,
73+
}
74+
75+
function unitFactor(unit: DurationUnit | undefined): number {
76+
return unit ? DURATION_UNIT_MS[unit] : 1
77+
}
78+
79+
function handleNumberChange(
80+
id: SettingId,
81+
details: NumberInputValueChangeDetails,
82+
durationUnit?: DurationUnit,
83+
) {
84+
const raw = details.valueAsNumber
85+
const value = durationUnit ? raw * unitFactor(durationUnit) : raw
86+
setSetting(id, value as SettingsValues[typeof id])
6887
}
6988
7089
function handleReset(id: SettingId) {
@@ -138,13 +157,21 @@
138157
<Switch.HiddenInput />
139158
</Switch.Root>
140159
{:else if setting.type === 'number' || setting.type === 'duration'}
160+
{@const durationUnit =
161+
setting.type === 'duration' ? setting.constraints?.unit : undefined}
162+
{@const factor = unitFactor(durationUnit)}
163+
{@const rawValue = Number(getSetting(id))}
141164
<NumberInput.Root
142-
value={String(getSetting(id))}
165+
value={String(durationUnit ? rawValue / factor : rawValue)}
143166
onValueChange={(d) => {
144-
handleNumberChange(id, d)
167+
handleNumberChange(id, d, durationUnit)
145168
}}
146-
min={setting.constraints?.min ?? setting.constraints?.minMs}
147-
max={setting.constraints?.max ?? setting.constraints?.maxMs}
169+
min={setting.type === 'duration'
170+
? (setting.constraints?.minMs ?? 0) / factor
171+
: setting.constraints?.min}
172+
max={setting.type === 'duration'
173+
? (setting.constraints?.maxMs ?? Infinity) / factor
174+
: setting.constraints?.max}
148175
step={setting.constraints?.step ?? 1}
149176
>
150177
<NumberInput.Control class="number-control">

0 commit comments

Comments
 (0)