From 43666109467066a4c9f12fbeaf8f06131e37dce1 Mon Sep 17 00:00:00 2001 From: Tan Li Hau Date: Thu, 20 Aug 2020 00:38:40 +0800 Subject: [PATCH] handle undefined input value with spread --- .../compile/render_dom/wrappers/Element/index.ts | 9 +++++++++ .../spread-element-input-value-undefined/_config.js | 12 ++++++++++++ .../spread-element-input-value-undefined/main.svelte | 5 +++++ 3 files changed, 26 insertions(+) create mode 100644 test/runtime/samples/spread-element-input-value-undefined/_config.js create mode 100644 test/runtime/samples/spread-element-input-value-undefined/main.svelte diff --git a/src/compiler/compile/render_dom/wrappers/Element/index.ts b/src/compiler/compile/render_dom/wrappers/Element/index.ts index f11ce63023..695f41d344 100644 --- a/src/compiler/compile/render_dom/wrappers/Element/index.ts +++ b/src/compiler/compile/render_dom/wrappers/Element/index.ts @@ -725,6 +725,15 @@ export default class ElementWrapper extends Wrapper { block.chunks.update.push(b` if (${block.renderer.dirty(Array.from(dependencies))} && ${data}.multiple) @select_options(${this.var}, ${data}.value); `); + } else if (this.node.name === 'input' && this.attributes.find(attr => attr.node.name === 'value')) { + block.chunks.mount.push(b` + ${this.var}.value = ${data}.value; + `); + block.chunks.update.push(b` + if ('value' in ${data}) { + ${this.var}.value = ${data}.value; + } + `); } } diff --git a/test/runtime/samples/spread-element-input-value-undefined/_config.js b/test/runtime/samples/spread-element-input-value-undefined/_config.js new file mode 100644 index 0000000000..1459462e07 --- /dev/null +++ b/test/runtime/samples/spread-element-input-value-undefined/_config.js @@ -0,0 +1,12 @@ +export default { + async test({ assert, component, target, window }) { + const input = target.querySelector("input"); + component.value = undefined; + + assert.equal(input.value, "undefined"); + + component.value = "foobar"; + + assert.equal(input.value, "foobar"); + }, +}; diff --git a/test/runtime/samples/spread-element-input-value-undefined/main.svelte b/test/runtime/samples/spread-element-input-value-undefined/main.svelte new file mode 100644 index 0000000000..5c9121dc03 --- /dev/null +++ b/test/runtime/samples/spread-element-input-value-undefined/main.svelte @@ -0,0 +1,5 @@ + + + \ No newline at end of file