Skip to content

Commit 314c1ba

Browse files
committed
fix: improve file handling logic in FwbFileInput for multiple file uploads
1 parent 8b17cf8 commit 314c1ba

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

src/components/FwbFileInput/FwbFileInput.vue

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
:multiple="multiple"
5656
class="hidden"
5757
type="file"
58+
@change="handleChange"
5859
>
5960
</label>
6061
</div>
@@ -112,7 +113,12 @@ const model = computed({
112113
const handleChange = (event: Event) => {
113114
const target = event.target as HTMLInputElement
114115
if (props.multiple) {
115-
model.value = Array.from(target.files ?? [])
116+
const newFiles = Array.from(target.files ?? [])
117+
if (Array.isArray(model.value) && model.value.length > 0) {
118+
model.value = [...model.value, ...newFiles]
119+
} else {
120+
model.value = newFiles
121+
}
116122
} else {
117123
model.value = target.files?.[0] ?? null
118124
}
@@ -129,15 +135,25 @@ const dropFileHandler = (event: DragEvent) => {
129135
}
130136
})
131137
if (props.multiple) {
132-
model.value = arr
138+
if (Array.isArray(model.value) && model.value.length > 0) {
139+
model.value = [...model.value, ...arr]
140+
} else {
141+
model.value = arr
142+
}
133143
} else {
134-
model.value = arr[0]
144+
model.value = arr[0] || null
135145
}
136146
} else if (event.dataTransfer?.files) {
137-
Object.values(event.dataTransfer.files)
138-
.forEach((file: File) => {
139-
model.value = file
140-
})
147+
const files = Array.from(event.dataTransfer.files)
148+
if (props.multiple) {
149+
if (Array.isArray(model.value) && model.value.length > 0) {
150+
model.value = [...model.value, ...files]
151+
} else {
152+
model.value = files
153+
}
154+
} else {
155+
model.value = files[0] || null
156+
}
141157
}
142158
}
143159

0 commit comments

Comments
 (0)