diff --git a/packages/sheets-filter-ui/src/controllers/sheets-filter-render.controller.ts b/packages/sheets-filter-ui/src/controllers/sheets-filter-render.controller.ts index e54c76ffec7..56f8f3193e9 100644 --- a/packages/sheets-filter-ui/src/controllers/sheets-filter-render.controller.ts +++ b/packages/sheets-filter-ui/src/controllers/sheets-filter-render.controller.ts @@ -73,9 +73,13 @@ export class SheetsFilterRenderController extends RxDisposable implements IRende private _initRenderer(): void { // Subscribe to skeleton change and filter model change. - this._sheetSkeletonManagerService.currentSkeleton$ + combineLatest([ + this._selectionRenderService.usable$, + this._sheetSkeletonManagerService.currentSkeleton$, + ]) .pipe( - switchMap((skeletonParams) => { + filter(([usable]) => usable), + switchMap(([_, skeletonParams]) => { if (!skeletonParams) return of(null); const { unitId } = skeletonParams; @@ -91,13 +95,9 @@ export class SheetsFilterRenderController extends RxDisposable implements IRende skeleton: skeletonParams.skeleton, }); - return combineLatest([ - this._selectionRenderService.usable$, - fromCallback(this._commandService.onCommandExecuted), - ]).pipe( - filter(([usable, [command]]) => - usable - && command.type === CommandType.MUTATION + return fromCallback(this._commandService.onCommandExecuted).pipe( + filter(([command]) => + command.type === CommandType.MUTATION && (command.params as ISheetCommandSharedParams).unitId === workbook.getUnitId() && FILTER_MUTATIONS.has(command.id) ), diff --git a/packages/sheets-ui/src/services/selection/__test__/selection-render.test.ts b/packages/sheets-ui/src/services/selection/__test__/selection-render.test.ts index 7ff5a70c791..0fa6e840cc9 100644 --- a/packages/sheets-ui/src/services/selection/__test__/selection-render.test.ts +++ b/packages/sheets-ui/src/services/selection/__test__/selection-render.test.ts @@ -176,6 +176,8 @@ describe('Test indirect', () => { let selectionEndParam: ISelectionWithCoordAndStyle[]; + let selectionServiceUsable: boolean; + beforeEach(() => { const testBed = createCommandTestBed(undefined, [ [IShortcutService, { useClass: DesktopShortcutService }], @@ -226,6 +228,10 @@ describe('Test indirect', () => { selectionEndParam = param; }); + selectionRenderService.usable$.subscribe((param) => { + selectionServiceUsable = param; + }); + selectionRenderService.eventTrigger(mockEvent); scene.triggerPointerMove({ ...mockEvent, offsetX: 200 }); @@ -235,6 +241,8 @@ describe('Test indirect', () => { describe('normal', () => { it('Observer is valid', () => { + expect(selectionServiceUsable).toBeTruthy(); + expect(selectionStartParam == null).toBeFalsy(); expect(selectionMovingParam == null).toBeFalsy(); diff --git a/packages/sheets-ui/src/services/selection/selection-render.service.ts b/packages/sheets-ui/src/services/selection/selection-render.service.ts index 204cfc00a74..fe2dbc3ef50 100644 --- a/packages/sheets-ui/src/services/selection/selection-render.service.ts +++ b/packages/sheets-ui/src/services/selection/selection-render.service.ts @@ -199,7 +199,7 @@ export class SelectionRenderService implements ISelectionRenderService { * This service relies on the scene and skeleton to work * Use usable$ to check if this service works */ - private readonly _usable$ = new Subject(); + private readonly _usable$ = new BehaviorSubject(false); readonly usable$ = this._usable$.asObservable();