Skip to content

Commit f68631b

Browse files
authored
Merge pull request #304 from ogzcode/fileinput-dropzone-label
feat: Label added for FileInput dropzone
2 parents 94fe48e + 3c8fd8b commit f68631b

File tree

1 file changed

+23
-17
lines changed

1 file changed

+23
-17
lines changed

src/components/FwbFileInput/FwbFileInput.vue

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,26 @@
44
<label>
55
<span :class="labelClasses">{{ label }}</span>
66
<input
7+
:accept="accept"
78
:class="fileInpClasses"
89
:multiple="multiple"
910
type="file"
10-
:accept="accept"
1111
@change="handleChange"
1212
>
1313
</label>
1414
<slot />
1515
</div>
1616
<div
1717
v-else
18-
class="flex items-center justify-center"
18+
class="flex flex-col items-start justify-center"
1919
@change="handleChange"
2020
@dragover="dragOverHandler"
2121
@drop="dropFileHandler"
2222
>
23+
<span
24+
v-if="label !== ''"
25+
:class="labelClasses"
26+
>{{ label }}</span>
2327
<label :class="dropzoneLabelClasses">
2428
<div :class="dropzoneWrapClasses">
2529
<svg
@@ -47,10 +51,10 @@
4751
<p v-else>File: {{ dropZoneText }}</p>
4852
</div>
4953
<input
50-
:multiple="multiple"
51-
type="file"
5254
:accept="accept"
55+
:multiple="multiple"
5356
class="hidden"
57+
type="file"
5458
>
5559
</label>
5660
</div>
@@ -64,21 +68,21 @@ import { computed } from 'vue'
6468
import { useFileInputClasses } from './composables/useFileInputClasses'
6569
6670
interface FileInputProps {
71+
accept?: string
6772
dropzone?: boolean
6873
label?: string
6974
modelValue?: File | File[] | null
7075
multiple?: boolean
7176
size?: string
72-
accept?: string
7377
}
7478
7579
const props = withDefaults(defineProps<FileInputProps>(), {
80+
accept: '',
7681
dropzone: false,
7782
label: '',
7883
modelValue: null,
7984
multiple: false,
8085
size: 'sm',
81-
accept: '',
8286
})
8387
8488
const dropZoneText = computed(() => {
@@ -118,20 +122,22 @@ const dropFileHandler = (event: DragEvent) => {
118122
event.preventDefault()
119123
const arr: File[] = []
120124
if (event.dataTransfer?.items) {
121-
Object.values(event.dataTransfer.items).forEach((item: DataTransferItem) => {
122-
if (item.kind === 'file') {
123-
arr.push(item.getAsFile() as File)
124-
}
125-
})
125+
Object.values(event.dataTransfer.items)
126+
.forEach((item: DataTransferItem) => {
127+
if (item.kind === 'file') {
128+
arr.push(item.getAsFile() as File)
129+
}
130+
})
126131
if (props.multiple) {
127132
model.value = arr
128133
} else {
129134
model.value = arr[0]
130135
}
131136
} else if (event.dataTransfer?.files) {
132-
Object.values(event.dataTransfer.files).forEach((file: File) => {
133-
model.value = file
134-
})
137+
Object.values(event.dataTransfer.files)
138+
.forEach((file: File) => {
139+
model.value = file
140+
})
135141
}
136142
}
137143
@@ -140,10 +146,10 @@ const dragOverHandler = (event: Event) => {
140146
}
141147
142148
const {
143-
fileInpClasses,
144-
labelClasses,
145149
dropzoneLabelClasses,
146-
dropzoneWrapClasses,
147150
dropzoneTextClasses,
151+
dropzoneWrapClasses,
152+
fileInpClasses,
153+
labelClasses,
148154
} = useFileInputClasses(props.size)
149155
</script>

0 commit comments

Comments
 (0)