From bcc0865ccd65bbf17b6a972e6a57c5093668b31b Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Fri, 23 Feb 2024 09:41:58 +0100 Subject: [PATCH 1/2] fix: don't clear date input on temporarily invalid value fixes #7897 No test because this is only visually observable --- .changeset/blue-rules-juggle.md | 5 +++++ packages/svelte/src/internal/client/render.js | 8 ++++++++ 2 files changed, 13 insertions(+) create mode 100644 .changeset/blue-rules-juggle.md diff --git a/.changeset/blue-rules-juggle.md b/.changeset/blue-rules-juggle.md new file mode 100644 index 000000000000..6da027091024 --- /dev/null +++ b/.changeset/blue-rules-juggle.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +fix: don't clear date input on temporarily invalid value diff --git a/packages/svelte/src/internal/client/render.js b/packages/svelte/src/internal/client/render.js index 3d8d855e86bb..5b13f30e02b1 100644 --- a/packages/svelte/src/internal/client/render.js +++ b/packages/svelte/src/internal/client/render.js @@ -1026,6 +1026,7 @@ export function bind_value(dom, get_value, update) { /** @type {any} */ let value = dom.value; + console.log('get value', value); if (is_numberlike_input(dom)) { value = to_number(value); } @@ -1042,12 +1043,19 @@ export function bind_value(dom, get_value, update) { const value = get_value(); // @ts-ignore dom.__value = value; + console.log('set value', value); if (is_numberlike_input(dom) && value === to_number(dom.value)) { // handles 0 vs 00 case (see https://github.com/sveltejs/svelte/issues/9959) return; } + if (dom.type === 'date' && !value && !dom.value) { + // Handles the case where a temporarily invalid date is set (while typing, for example with a leading 0 for the day) + // and prevents this state from clearing the other parts of the date input (see https://github.com/sveltejs/svelte/issues/7897) + return; + } + dom.value = stringify(value); }); } From cfe0932c85e4642b1a765a88cd6b58710444af4b Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Fri, 23 Feb 2024 09:45:40 +0100 Subject: [PATCH 2/2] Apply suggestions from code review --- packages/svelte/src/internal/client/render.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/svelte/src/internal/client/render.js b/packages/svelte/src/internal/client/render.js index 5b13f30e02b1..c2868586bf2e 100644 --- a/packages/svelte/src/internal/client/render.js +++ b/packages/svelte/src/internal/client/render.js @@ -1026,7 +1026,6 @@ export function bind_value(dom, get_value, update) { /** @type {any} */ let value = dom.value; - console.log('get value', value); if (is_numberlike_input(dom)) { value = to_number(value); } @@ -1043,7 +1042,6 @@ export function bind_value(dom, get_value, update) { const value = get_value(); // @ts-ignore dom.__value = value; - console.log('set value', value); if (is_numberlike_input(dom) && value === to_number(dom.value)) { // handles 0 vs 00 case (see https://github.com/sveltejs/svelte/issues/9959)