From 778604fe07f54f897d8d17eec62cc4a2f6a3fd0d Mon Sep 17 00:00:00 2001 From: MultiMote Date: Fri, 12 Sep 2025 23:19:05 +0300 Subject: [PATCH] Fix image file drop --- package-lock.json | 6 +++--- src/lib/LabelDesigner.svelte | 21 +++++++++++++++++---- src/utils/label_desinder_object_helper.ts | 6 +++++- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 93bb0d3..2add9b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3054,9 +3054,9 @@ "optional": true }, "node_modules/vite": { - "version": "5.4.19", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", - "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "version": "5.4.20", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz", + "integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==", "dev": true, "license": "MIT", "dependencies": { diff --git a/src/lib/LabelDesigner.svelte b/src/lib/LabelDesigner.svelte index bf90912..d4f3f27 100644 --- a/src/lib/LabelDesigner.svelte +++ b/src/lib/LabelDesigner.svelte @@ -324,15 +324,28 @@ selectedCount = 0; }); - fabricCanvas.on("drop", (e): void => { + fabricCanvas.on("dragover", (e): void => { + e.e.preventDefault(); + }); + + fabricCanvas.on("drop:after", async (e): Promise => { const dragEvt = e.e as DragEvent; dragEvt.preventDefault(); + let dropped = false; + if (dragEvt.dataTransfer?.files) { - [...dragEvt.dataTransfer.files].forEach((file: File) => { - LabelDesignerObjectHelper.addImageFile(fabricCanvas, file); + for (const file of dragEvt.dataTransfer.files) { + try { + await LabelDesignerObjectHelper.addImageFile(fabricCanvas, file).catch(); + } catch (e) { + Toasts.error(e); + } + } + + if (dropped) { undo.push(fabricCanvas, labelProps); - }); + } } }); diff --git a/src/utils/label_desinder_object_helper.ts b/src/utils/label_desinder_object_helper.ts index e89e079..5fd7337 100644 --- a/src/utils/label_desinder_object_helper.ts +++ b/src/utils/label_desinder_object_helper.ts @@ -3,6 +3,7 @@ import { OBJECT_DEFAULTS, OBJECT_DEFAULTS_TEXT, OBJECT_DEFAULTS_VECTOR, OBJECT_S import Barcode from "../fabric-object/barcode"; import { QRCode } from "../fabric-object/qrcode"; import type { OjectType } from "../types"; +import { Toasts } from "./toasts"; export class LabelDesignerObjectHelper { static async addSvg(canvas: fabric.Canvas, svgCode: string): Promise { @@ -51,6 +52,8 @@ export class LabelDesignerObjectHelper { console.error(readerEvt); reject(new Error("File read error")); }; + } else { + reject(new Error("Unsupported image")); } }); } @@ -64,7 +67,8 @@ export class LabelDesignerObjectHelper { input.onchange = (e: Event) => { const target = e.target as HTMLInputElement; if (target.files !== null) { - this.addImageFile(fabricCanvas, target.files[0]).then(resolve); + // fixme: catch error in other place + this.addImageFile(fabricCanvas, target.files[0]).then(resolve).catch(Toasts.error); } };