diff --git a/packages/web-app-preview/src/components/Sources/MediaImage.vue b/packages/web-app-preview/src/components/Sources/MediaImage.vue index 128796d030..21919877d3 100644 --- a/packages/web-app-preview/src/components/Sources/MediaImage.vue +++ b/packages/web-app-preview/src/components/Sources/MediaImage.vue @@ -69,12 +69,14 @@ const setTransform = ({ scale, x, y }: { scale: number; x: number; y: number }) ) } +const destroyPanzoom = () => { + unref(img)?.removeEventListener('wheel', onWheelEvent) + unref(panzoom)?.destroy() + panzoom.value = undefined +} + const initPanzoom = async () => { - if (unref(panzoom)) { - await nextTick() - ;(unref(img) as unknown as HTMLElement).removeEventListener('wheel', onWheelEvent) - unref(panzoom)?.destroy() - } + destroyPanzoom() // wait for next tick until image is rendered await nextTick() @@ -87,7 +89,7 @@ const initPanzoom = async () => { maxScale: 10, setTransform: (_, { scale, x, y }) => setTransform({ scale, x, y }) } as PanzoomOptions) - unref(img).addEventListener('wheel', onWheelEvent) + unref(img).addEventListener('wheel', onWheelEvent, { passive: false }) } watch(() => file, initPanzoom, { immediate: true, deep: true }) @@ -122,6 +124,8 @@ onMounted(() => { }) onBeforeUnmount(() => { + destroyPanzoom() + eventBus.unsubscribe('app.preview.media.image.reset', resetEventToken) eventBus.unsubscribe('app.preview.media.image.zoom', zoomToken) eventBus.unsubscribe('app.preview.media.image.shrink', shrinkToken) diff --git a/packages/web-pkg/src/services/uppy/uppyService.ts b/packages/web-pkg/src/services/uppy/uppyService.ts index b95b549713..b4785369f9 100644 --- a/packages/web-pkg/src/services/uppy/uppyService.ts +++ b/packages/web-pkg/src/services/uppy/uppyService.ts @@ -280,11 +280,15 @@ export class UppyService { const listenerRegistered = el.getAttribute('listener') if (listenerRegistered !== 'true') { el.setAttribute('listener', 'true') - el.addEventListener('change', (event) => { - const target = event.target as HTMLInputElement - const files = Array.from(target.files) - this.addFiles(files) - }) + el.addEventListener( + 'change', + (event) => { + const target = event.target as HTMLInputElement + const files = Array.from(target.files) + this.addFiles(files) + }, + { once: true } + ) this.uploadInputs.push(el) } }