File tree 2 files changed +24
-8
lines changed
src/components/FwbFileInput 2 files changed +24
-8
lines changed Original file line number Diff line number Diff line change 55
55
:multiple =" multiple"
56
56
class =" hidden"
57
57
type =" file"
58
+ @change =" handleChange"
58
59
>
59
60
</label >
60
61
</div >
@@ -112,7 +113,12 @@ const model = computed({
112
113
const handleChange = (event : Event ) => {
113
114
const target = event .target as HTMLInputElement
114
115
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
+ }
116
122
} else {
117
123
model .value = target .files ?.[0 ] ?? null
118
124
}
@@ -129,15 +135,25 @@ const dropFileHandler = (event: DragEvent) => {
129
135
}
130
136
})
131
137
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
+ }
133
143
} else {
134
- model .value = arr [0 ]
144
+ model .value = arr [0 ] || null
135
145
}
136
146
} 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
+ }
141
157
}
142
158
}
143
159
Original file line number Diff line number Diff line change @@ -2,7 +2,7 @@ import { computed } from 'vue'
2
2
3
3
import { simplifyTailwindClasses } from '@/utils/simplifyTailwindClasses'
4
4
5
- const fileInpDefaultClasses = 'block w-full text-sm text-gray-900 border-[1px] border-gray-300 rounded-lg cursor-pointer bg-gray-50 dark:text-gray-400 focus:outline-none dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400'
5
+ const fileInpDefaultClasses = 'block w-full py-1 px-2 text-sm text-gray-900 border-[1px] border-gray-300 rounded-lg cursor-pointer bg-gray-50 dark:text-gray-400 focus:outline-none dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400'
6
6
const fileInpLabelClasses = 'block mb-2 text-sm font-medium text-gray-900 dark:text-white'
7
7
const fileInpDropzoneClasses = 'flex flex-col items-center justify-center w-full h-64 border-2 border-gray-300 border-dashed rounded-lg cursor-pointer bg-gray-50 dark:hover:bg-bray-800 dark:bg-gray-700 hover:bg-gray-100 dark:border-gray-600 dark:hover:border-gray-500 dark:hover:bg-gray-600'
8
8
const fileDropzoneWrapClasses = 'flex flex-col items-center justify-center pt-5 pb-6'
You can’t perform that action at this time.
0 commit comments