From 80f8944188c7b4502dd10d57c1c001283b246697 Mon Sep 17 00:00:00 2001 From: zzj3720 <17165520+zzj3720@users.noreply.github.com> Date: Mon, 13 Jan 2025 10:43:02 +0000 Subject: [PATCH] fix(editor): should not update table selection after table is destroyed (#9665) --- .../data-view/src/core/group-by/renderer/select-group.ts | 2 +- .../src/view-presets/table/pc/controller/selection.ts | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/blocksuite/affine/data-view/src/core/group-by/renderer/select-group.ts b/blocksuite/affine/data-view/src/core/group-by/renderer/select-group.ts index ad36f6f483..b4200045d0 100644 --- a/blocksuite/affine/data-view/src/core/group-by/renderer/select-group.ts +++ b/blocksuite/affine/data-view/src/core/group-by/renderer/select-group.ts @@ -78,7 +78,7 @@ export class SelectGroupView extends BaseGroup< }; get tag() { - return this.data.options.find(v => v.id === this.value); + return this.data.options?.find(v => v.id === this.value); } protected override render(): unknown { diff --git a/blocksuite/affine/data-view/src/view-presets/table/pc/controller/selection.ts b/blocksuite/affine/data-view/src/view-presets/table/pc/controller/selection.ts index 484b01fcd0..f87c69a384 100644 --- a/blocksuite/affine/data-view/src/view-presets/table/pc/controller/selection.ts +++ b/blocksuite/affine/data-view/src/view-presets/table/pc/controller/selection.ts @@ -1017,6 +1017,9 @@ export class SelectionElement extends WithDisposable(ShadowlessElement) { this.disposables.add( effect(() => { this.startUpdate(this.selection$.value); + return () => { + this.cancelSelectionUpdate(); + }; }) ); } @@ -1033,11 +1036,15 @@ export class SelectionElement extends WithDisposable(ShadowlessElement) { `; } - startUpdate(selection?: TableViewSelection) { + cancelSelectionUpdate() { if (this.preTask) { cancelAnimationFrame(this.preTask); this.preTask = 0; } + } + + startUpdate(selection?: TableViewSelection) { + this.cancelSelectionUpdate(); if ( selection?.selectionType === 'area' && !this.controller.host.props.view.readonly$.value