Skip to content

Commit b12ed6f

Browse files
authored
Fix prevent roam upload dnd (#18)
* prevent roam upload/create block on dnd * type fixes * 1.2.1
1 parent 6826eaa commit b12ed6f

File tree

3 files changed

+37
-21
lines changed

3 files changed

+37
-21
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "google",
3-
"version": "1.2.0",
3+
"version": "1.2.1",
44
"description": "Connect to various Google services to your Roam graph!",
55
"main": "./build/main.js",
66
"scripts": {

src/services/drive.ts

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import createBlock from "roamjs-components/writes/createBlock";
1010
import getDropUidOffset from "roamjs-components/dom/getDropUidOffset";
1111
import apiGet from "roamjs-components/util/apiGet";
1212
import apiPost from "roamjs-components/util/apiPost";
13-
import apiPut from "roamjs-components/util/apiPut";
1413
import mimeTypes from "../utils/mimeTypes";
14+
import { render as renderToast } from "roamjs-components/components/Toast";
1515

1616
const 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

Comments
 (0)