From ac1afe4d9bdc9f817847080ed47a67140011e57d Mon Sep 17 00:00:00 2001 From: jqlio18 Date: Sun, 11 Dec 2022 22:45:43 -0500 Subject: [PATCH] NumberInput : Fix error states --- src/NumberInput/NumberInput.svelte | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/NumberInput/NumberInput.svelte b/src/NumberInput/NumberInput.svelte index 2b0f76ee..2d98b278 100644 --- a/src/NumberInput/NumberInput.svelte +++ b/src/NumberInput/NumberInput.svelte @@ -39,8 +39,8 @@ /** Set to `true` for the input to be read-only */ export let readonly = false; - /** Set to `true` to allow for an empty value */ - export let allowEmpty = false; + /** Set to `true` for the input to be required */ + export let required = true; /** Set to `true` to disable the input */ export let disabled = false; @@ -99,6 +99,8 @@ /** Obtain a reference to the input HTML element */ export let ref = null; + let error = false; + import { createEventDispatcher } from "svelte"; import Add from "../icons/Add.svelte"; import Subtract from "../icons/Subtract.svelte"; @@ -127,11 +129,6 @@ $: incrementLabel = translateWithId("increment"); $: decrementLabel = translateWithId("decrement"); - $: error = - invalid || - (!allowEmpty && value == null) || - value > max || - (typeof value === "number" && value < min); $: errorId = `error-${id}`; $: ariaLabel = $$props["aria-label"] || @@ -143,11 +140,14 @@ function onInput({ target }) { value = parse(target.value); + error = !ref.checkValidity() || invalid; dispatch("input", value); } function onChange({ target }) { + error = !ref.checkValidity() || invalid; + dispatch("change", parse(target.value)); } @@ -202,6 +202,7 @@ step="{step}" value="{value ?? ''}" readonly="{readonly}" + required="{required}" {...$$restProps} on:change="{onChange}" on:input="{onInput}" @@ -211,10 +212,10 @@ on:blur on:paste /> - {#if invalid} + {#if invalid || error} {/if} - {#if !invalid && warn} + {#if !invalid && !error && warn} @@ -265,7 +266,7 @@ {helperText} {/if} - {#if error} + {#if invalid || error}
{invalidText}