@@ -135,7 +135,10 @@ import {
135135 useKeyboardActions ,
136136 useRoute ,
137137 useRouteQuery ,
138- FolderLoaderOptions
138+ FolderLoaderOptions ,
139+ useClipboardStore ,
140+ useService ,
141+ UppyService
139142} from ' @opencloud-eu/web-pkg'
140143import FilesViewWrapper from ' ../../components/FilesViewWrapper.vue'
141144import ListInfo from ' ../../components/FilesList/ListInfo.vue'
@@ -156,6 +159,7 @@ import {
156159import { storeToRefs } from ' pinia'
157160import { folderViewsFolderExtensionPoint } from ' ../../extensionPoints'
158161import ListHeader from ' ../../components/FilesList/ListHeader.vue'
162+ import { useEventListener } from ' @vueuse/core'
159163
160164const props = defineProps <{
161165 space? : SpaceResource
@@ -174,6 +178,8 @@ const { startWorker } = usePasteWorker()
174178const { breadcrumbsFromPath, concatBreadcrumbs } = useBreadcrumbsFromPath ()
175179const { openWithDefaultApp } = useOpenWithDefaultApp ()
176180const { triggerDefaultAction } = useFileActions ()
181+ const clipboardStore = useClipboardStore ()
182+ const uppyService = useService <UppyService >(' $uppyService' )
177183
178184const space = computed (() => props .space )
179185
@@ -511,4 +517,20 @@ watch(
511517 performLoaderTask (true )
512518 }
513519)
520+
521+ useEventListener (document , ' paste' , (event : ClipboardEvent ) => {
522+ // Ignore file in clipboard if there are already files from OpenCloud in the clipboard
523+ if (clipboardStore .resources .length || ! unref (canUpload )) {
524+ return
525+ }
526+ // Browsers only allow single files to be pasted for security reasons
527+ const items = event .clipboardData .items
528+ const fileItem = [... items ].find ((i ) => i .kind === ' file' )
529+ if (! fileItem ) {
530+ return
531+ }
532+ const file = fileItem .getAsFile ()
533+ uppyService .addFiles ([file ])
534+ event .preventDefault ()
535+ })
514536 </script >
0 commit comments