From d70459b44ccca679e093388dc1934a4c6443a19d Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Thu, 28 Mar 2024 13:38:36 +0100 Subject: [PATCH] Observables: More owners --- src/vs/base/common/observableInternal/derived.ts | 4 ++-- src/vs/base/common/observableInternal/utils.ts | 4 ++-- .../widget/multiDiffEditor/multiDiffEditorWidgetImpl.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/vs/base/common/observableInternal/derived.ts b/src/vs/base/common/observableInternal/derived.ts index 70dc7168418..a7b66b44221 100644 --- a/src/vs/base/common/observableInternal/derived.ts +++ b/src/vs/base/common/observableInternal/derived.ts @@ -19,8 +19,8 @@ export const defaultEqualityComparer: EqualityComparer = (a, b) => a === b; * {@link computeFn} should start with a JS Doc using `@description` to name the derived. */ export function derived(computeFn: (reader: IReader) => T): IObservable; -export function derived(owner: object, computeFn: (reader: IReader) => T): IObservable; -export function derived(computeFnOrOwner: ((reader: IReader) => T) | object, computeFn?: ((reader: IReader) => T) | undefined): IObservable { +export function derived(owner: Owner, computeFn: (reader: IReader) => T): IObservable; +export function derived(computeFnOrOwner: ((reader: IReader) => T) | Owner, computeFn?: ((reader: IReader) => T) | undefined): IObservable { if (computeFn !== undefined) { return new Derived( new DebugNameData(computeFnOrOwner, undefined, computeFn), diff --git a/src/vs/base/common/observableInternal/utils.ts b/src/vs/base/common/observableInternal/utils.ts index 0ac31f7f881..a88b998339f 100644 --- a/src/vs/base/common/observableInternal/utils.ts +++ b/src/vs/base/common/observableInternal/utils.ts @@ -404,9 +404,9 @@ export class KeepAliveObserver implements IObserver { } } -export function derivedObservableWithCache(computeFn: (reader: IReader, lastValue: T | undefined) => T): IObservable { +export function derivedObservableWithCache(owner: Owner, computeFn: (reader: IReader, lastValue: T | undefined) => T): IObservable { let lastValue: T | undefined = undefined; - const observable = derived(reader => { + const observable = derived(owner, reader => { lastValue = computeFn(reader, lastValue); return lastValue; }); diff --git a/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.ts b/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.ts index bad68c115c1..9a264e2d341 100644 --- a/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.ts +++ b/src/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.ts @@ -95,7 +95,7 @@ export class MultiDiffEditorWidgetImpl extends Disposable { private readonly _totalHeight = this._viewItems.map(this, (items, reader) => items.reduce((r, i) => r + i.contentHeight.read(reader) + this._spaceBetweenPx, 0)); public readonly activeDiffItem = derived(this, reader => this._viewItems.read(reader).find(i => i.template.read(reader)?.isFocused.read(reader))); - public readonly lastActiveDiffItem = derivedObservableWithCache((reader, lastValue) => this.activeDiffItem.read(reader) ?? lastValue); + public readonly lastActiveDiffItem = derivedObservableWithCache(this, (reader, lastValue) => this.activeDiffItem.read(reader) ?? lastValue); public readonly activeControl = derived(this, reader => this.lastActiveDiffItem.read(reader)?.template.read(reader)?.editor); private readonly _contextKeyService = this._register(this._parentContextKeyService.createScoped(this._element));