From e9a0dc4ed2228bf9f2354495d9aeb19c2f66e858 Mon Sep 17 00:00:00 2001 From: Kevin Jahns Date: Fri, 25 Mar 2022 11:08:26 +0100 Subject: [PATCH] add destroy logic --- src/utils/UndoManager.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/utils/UndoManager.js b/src/utils/UndoManager.js index f94279c8..c2a4dcc8 100644 --- a/src/utils/UndoManager.js +++ b/src/utils/UndoManager.js @@ -180,7 +180,10 @@ export class UndoManager extends Observable { this.redoing = false this.doc = /** @type {Doc} */ (this.scope[0].doc) this.lastChange = 0 - this.doc.on('afterTransaction', /** @param {Transaction} transaction */ transaction => { + /** + * @param {Transaction} transaction + */ + this.afterTransactionHandler = transaction => { // Only track certain transactions if (!this.scope.some(type => transaction.changedParentTypes.has(type)) || (!this.trackedOrigins.has(transaction.origin) && (!transaction.origin || !this.trackedOrigins.has(transaction.origin.constructor)))) { return @@ -229,7 +232,8 @@ export class UndoManager extends Observable { } else { this.emit('stack-item-updated', changeEvent) } - }) + } + this.doc.on('afterTransaction', this.afterTransactionHandler) this.doc.on('destroy', () => { this.destroy() }) @@ -350,4 +354,10 @@ export class UndoManager extends Observable { canRedo () { return this.redoStack.length > 0 } + + destroy () { + this.trackedOrigins.delete(this) + this.doc.off('afterTransaction', this.afterTransactionHandler) + super.destroy() + } }