fix:coerce numeric values, and handle nullable correctly

This commit is contained in:
Harsh Mahajan
2025-08-09 00:05:09 +05:30
parent 253843d5f1
commit 27eff3fc7d
+15 -2
View File
@@ -18,6 +18,18 @@
let error: string;
function coerceToNumber(event: Event & { currentTarget: EventTarget & HTMLInputElement }) {
const raw = event.currentTarget?.value ?? '';
if (raw === '') {
value = nullable ? null : (undefined as unknown as number);
return;
}
const parsed = step === 'any' ? Number.parseFloat(raw) : Number.parseInt(raw, 10);
value = Number.isNaN(parsed) ? null : parsed;
}
const handleInvalid = (event: Event & { currentTarget: EventTarget & HTMLInputElement }) => {
event.preventDefault();
@@ -39,7 +51,7 @@
error = event.currentTarget.validationMessage;
};
$: if (value) {
$: if (value !== null && value !== undefined && !Number.isNaN(value)) {
error = null;
}
</script>
@@ -61,7 +73,8 @@
helper={error || helper}
state={error ? 'error' : 'default'}
on:invalid={handleInvalid}
on:input>
on:input={coerceToNumber}
on:change={coerceToNumber}>
<svelte:fragment slot="info">
<slot name="info" slot="info" />
</svelte:fragment>