Skip to content

Commit 0c10b3c

Browse files
committed
allow setting files
1 parent f5101c0 commit 0c10b3c

File tree

4 files changed

+34
-0
lines changed

4 files changed

+34
-0
lines changed

.changeset/soft-geese-learn.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: allow setting files binding for `<input type="file" />`

packages/svelte/src/compiler/phases/bindings.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ export const binding_properties = {
182182
},
183183
files: {
184184
event: 'change',
185+
type: 'set',
185186
valid_elements: ['input'],
186187
omit_in_ssr: true
187188
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { test } from '../../assert';
2+
3+
export default test({
4+
async test({ assert, window }) {
5+
const input = window.document.querySelector('input');
6+
await new Promise((r) => setTimeout(r, 100));
7+
assert.equal(input?.files?.length, 1);
8+
window.document.querySelector('button')?.click();
9+
await new Promise((r) => setTimeout(r, 100));
10+
assert.equal(input?.files?.length, 0);
11+
}
12+
});
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<script>
2+
import { onMount } from "svelte";
3+
4+
let files;
5+
6+
onMount(() => {
7+
let list = new DataTransfer();
8+
let file = new File(["content"], "filename.jpg");
9+
list.items.add(file);
10+
files = list.files;
11+
})
12+
</script>
13+
14+
<input type="file" bind:files />
15+
16+
<button onclick={() => files = new DataTransfer().files}>Reset</button>

0 commit comments

Comments
 (0)