From ab770621c169f86307aed210b34eb1fd008dd570 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Tue, 28 Apr 2026 12:33:13 +0400 Subject: [PATCH] Cleanup SelectComponent --- .../core/src/commands/view/SelectComponent.ts | 7 +++++-- packages/core/test/specs/commands/index.ts | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/packages/core/src/commands/view/SelectComponent.ts b/packages/core/src/commands/view/SelectComponent.ts index e22849fc8..1d9ee978f 100644 --- a/packages/core/src/commands/view/SelectComponent.ts +++ b/packages/core/src/commands/view/SelectComponent.ts @@ -69,6 +69,10 @@ export default { * */ stopSelectComponent() { this.toggleSelectComponent(); + this.onContainerChange.cancel?.(); + this.onSelect.cancel?.(); + this.updateAttached.cancel?.(); + this._upToolbar.cancel?.(); }, /** @@ -708,7 +712,6 @@ export default { this.stopSelectComponent(); !opts.preserveSelected && em.setSelected(); this.toggleToolsEl(); - this.updateAttached.cancel(); - editor && editor.stopCommand('resize'); + editor?.stopCommand('resize'); }, } as CommandObject; diff --git a/packages/core/test/specs/commands/index.ts b/packages/core/test/specs/commands/index.ts index 14651266c..92a642644 100644 --- a/packages/core/test/specs/commands/index.ts +++ b/packages/core/test/specs/commands/index.ts @@ -48,6 +48,27 @@ describe('Commands', () => { expect(obj.get('select-comp')).not.toBeUndefined(); }); + test('Select component command cancels pending debounced callbacks on teardown', () => { + const command = obj.get('select-comp') as any; + const cancelOnContainerChange = jest.fn(); + const cancelOnSelect = jest.fn(); + const cancelUpdateAttached = jest.fn(); + const cancelToolbar = jest.fn(); + command.toggleSelectComponent = jest.fn(); + command.onContainerChange = { cancel: cancelOnContainerChange }; + command.onSelect = { cancel: cancelOnSelect }; + command.updateAttached = { cancel: cancelUpdateAttached }; + command._upToolbar = { cancel: cancelToolbar }; + + command.stopSelectComponent(); + + expect(command.toggleSelectComponent).toHaveBeenCalledWith(); + expect(cancelOnContainerChange).toHaveBeenCalledTimes(1); + expect(cancelOnSelect).toHaveBeenCalledTimes(1); + expect(cancelUpdateAttached).toHaveBeenCalledTimes(1); + expect(cancelToolbar).toHaveBeenCalledTimes(1); + }); + test('Commands module should not have toLoad property', () => { // @ts-ignore expect(obj.toLoad).toBeUndefined();