@@ -10,8 +10,8 @@ import createBlock from "roamjs-components/writes/createBlock";
1010import getDropUidOffset from "roamjs-components/dom/getDropUidOffset" ;
1111import apiGet from "roamjs-components/util/apiGet" ;
1212import apiPost from "roamjs-components/util/apiPost" ;
13- import apiPut from "roamjs-components/util/apiPut" ;
1413import mimeTypes from "../utils/mimeTypes" ;
14+ import { render as renderToast } from "roamjs-components/components/Toast" ;
1515
1616const mimeLookup = ( path : string ) => {
1717 if ( ! path || typeof path !== "string" ) {
@@ -282,7 +282,7 @@ const uploadToDrive = async ({
282282 }
283283} ;
284284
285- const textareaRef : { current : HTMLTextAreaElement } = {
285+ const textareaRef : { current : HTMLTextAreaElement | null } = {
286286 current : null ,
287287} ;
288288
@@ -296,21 +296,29 @@ const loadGoogleDrive = (args: OnloadArgs) => {
296296 createHTMLObserver ( {
297297 tag : "DIV" ,
298298 className : "dnd-drop-area" ,
299- callback : ( d : HTMLDivElement ) => {
299+ callback : ( e : HTMLElement ) => {
300+ const d = e as HTMLDivElement ;
300301 d . addEventListener ( "drop" , ( e ) => {
301- uploadToDrive ( {
302- extensionAPI : args . extensionAPI ,
303- files : e . dataTransfer . files ,
304- getLoadingUid : ( ) => {
305- const { parentUid, offset } = getDropUidOffset ( d ) ;
306- return createBlock ( {
307- parentUid,
308- order : offset ,
309- node : { text : "Loading..." } ,
310- } ) ;
311- } ,
312- e,
313- } ) ;
302+ if (
303+ e . dataTransfer ?. types . includes ( "Files" ) &&
304+ e . dataTransfer . files . length > 0
305+ ) {
306+ e . preventDefault ( ) ; // prevent browser loading image in new tab
307+ e . stopPropagation ( ) ; // prevent roam uploading / creating image block
308+ uploadToDrive ( {
309+ extensionAPI : args . extensionAPI ,
310+ files : e . dataTransfer . files ,
311+ getLoadingUid : ( ) => {
312+ const { parentUid, offset } = getDropUidOffset ( d ) ;
313+ return createBlock ( {
314+ parentUid,
315+ order : offset ,
316+ node : { text : "Loading..." } ,
317+ } ) ;
318+ } ,
319+ e,
320+ } ) ;
321+ }
314322 } ) ;
315323 } ,
316324 } )
@@ -319,9 +327,11 @@ const loadGoogleDrive = (args: OnloadArgs) => {
319327 createHTMLObserver ( {
320328 tag : "TEXTAREA" ,
321329 className : "rm-block-input" ,
322- callback : ( t : HTMLTextAreaElement ) => {
330+ callback : ( e : HTMLElement ) => {
331+ const t = e as HTMLTextAreaElement ;
323332 textareaRef . current = t ;
324333 t . addEventListener ( "paste" , ( e ) => {
334+ if ( ! e . clipboardData ) return ;
325335 uploadToDrive ( {
326336 extensionAPI : args . extensionAPI ,
327337 files : e . clipboardData . files ,
@@ -349,9 +359,15 @@ const loadGoogleDrive = (args: OnloadArgs) => {
349359 target . addEventListener (
350360 "change" ,
351361 ( e ) => {
362+ const files = ( e . target as HTMLInputElement ) . files ;
363+ if ( ! files )
364+ return renderToast ( {
365+ id : "google-drive" ,
366+ content : "No files selected!" ,
367+ } ) ;
352368 uploadToDrive ( {
353369 extensionAPI : args . extensionAPI ,
354- files : ( e . target as HTMLInputElement ) . files ,
370+ files,
355371 getLoadingUid : ( ) => {
356372 const { blockUid } = getUids ( textareaRef . current ) ;
357373 return updateBlock ( {
0 commit comments