diff --git a/ts/components/MediaEditor.tsx b/ts/components/MediaEditor.tsx index cf481cc8ba..3cb0566854 100644 --- a/ts/components/MediaEditor.tsx +++ b/ts/components/MediaEditor.tsx @@ -167,6 +167,8 @@ export const MediaEditor = ({ [ ev => ev.key === 'Escape', () => { + setEditMode(undefined); + if (fabricCanvas.getActiveObject()) { fabricCanvas.discardActiveObject(); fabricCanvas.requestRenderAll(); @@ -294,10 +296,25 @@ export const MediaEditor = ({ }); } + function handleMouseup(ev: MouseEvent): void { + if ( + ev.target instanceof HTMLCanvasElement || + ev.target instanceof HTMLButtonElement + ) { + return; + } + + setEditMode(undefined); + ev.stopPropagation(); + ev.preventDefault(); + } + document.addEventListener('keydown', handleKeydown); + document.addEventListener('mouseup', handleMouseup); return () => { document.removeEventListener('keydown', handleKeydown); + document.removeEventListener('mouseup', handleMouseup); }; }, [fabricCanvas, history]); diff --git a/ts/mediaEditor/useFabricHistory.ts b/ts/mediaEditor/useFabricHistory.ts index 3b4a4c252a..2eb8992467 100644 --- a/ts/mediaEditor/useFabricHistory.ts +++ b/ts/mediaEditor/useFabricHistory.ts @@ -109,7 +109,7 @@ export class FabricHistory extends EventEmitter { } if (this.canRedo()) { - this.snapshots.splice(this.highWatermark, this.snapshots.length); + this.snapshots.splice(this.highWatermark + 1, this.snapshots.length); } this.snapshots.push({ canvasState: this.getState(), imageState });