support folder upload even with "accept" filter
Massimo Melina committed
Mar 29, 2023 at 16:12 UTC
52ffa768f7f72fcd4e9e212ed2e5f748459f097a
1 file changed
+12
-11
frontend/src/upload.ts
+12
-11
@@ -94,7 +94,7 @@ export function showUpload() {
94
!can_upload ? t('no_upload_here', "No upload permission for the current folder")
95
: h(Flex, { justifyContent: 'center', flexWrap: 'wrap', marginTop: '1em' },
96
h('button', { onClick: () => pickFiles({ accept: normalizeAccept(accept) }) }, t`Pick files`),
97
- !accept && h('button', { onClick: () => pickFiles({ folder: true }) }, t`Pick folder`),
97
+ h('button', { onClick: () => pickFiles({ folder: true }) }, t`Pick folder`),
98
files.length > 0 && h('button', {
99
onClick() {
100
enqueue(files)
@@ -142,7 +142,9 @@ export function showUpload() {
142
)
143
144
function pickFiles(options: Parameters<typeof selectFiles>[1]) {
145
- selectFiles(list => setFiles([ ...files, ...list ||[] ] ), options)
145
+ selectFiles(list => {
146
+ setFiles([...files, ...Array.from(list || []).filter(simulateBrowserAccept)])
147
+ }, options)
148
}
149
}
150
@@ -219,16 +221,15 @@ export async function enqueue(files: File[]) {
221
const to = location.pathname
222
_.find(uploadState.qs, { to })?.files.push(...files.map(ref))
223
|| uploadState.qs.push({ to, files: files.map(ref) })
224
+}
225
223
- function simulateBrowserAccept(f: File) {
224
- const { accept } = state
225
- if (!accept) return true
226
- return normalizeAccept(accept)!.split(/ *[|,] */).some(pattern =>
227
- pattern.startsWith('.') ? f.name.endsWith(pattern)
228
- : f.type.match(pattern.replace('*', '.*'))
229
- )
230
- }
231
-
226
+function simulateBrowserAccept(f: File) {
227
+ const { accept } = state
228
+ if (!accept) return true
229
+ return normalizeAccept(accept)!.split(/ *[|,] */).some(pattern =>
230
+ pattern.startsWith('.') ? f.name.endsWith(pattern)
231
+ : f.type.match(pattern.replace('*', '.*'))
232
+ )
233
}
234
235
function normalizeAccept(accept?: string) {