Observables: More owners

This commit is contained in:
Henning Dieterichs 2024-03-28 13:38:36 +01:00 committed by Henning Dieterichs
parent a7f384badb
commit d70459b44c
3 changed files with 5 additions and 5 deletions

View file

@ -19,8 +19,8 @@ export const defaultEqualityComparer: EqualityComparer<any> = (a, b) => a === b;
* {@link computeFn} should start with a JS Doc using `@description` to name the derived.
*/
export function derived<T>(computeFn: (reader: IReader) => T): IObservable<T>;
export function derived<T>(owner: object, computeFn: (reader: IReader) => T): IObservable<T>;
export function derived<T>(computeFnOrOwner: ((reader: IReader) => T) | object, computeFn?: ((reader: IReader) => T) | undefined): IObservable<T> {
export function derived<T>(owner: Owner, computeFn: (reader: IReader) => T): IObservable<T>;
export function derived<T>(computeFnOrOwner: ((reader: IReader) => T) | Owner, computeFn?: ((reader: IReader) => T) | undefined): IObservable<T> {
if (computeFn !== undefined) {
return new Derived(
new DebugNameData(computeFnOrOwner, undefined, computeFn),

View file

@ -404,9 +404,9 @@ export class KeepAliveObserver implements IObserver {
}
}
export function derivedObservableWithCache<T>(computeFn: (reader: IReader, lastValue: T | undefined) => T): IObservable<T> {
export function derivedObservableWithCache<T>(owner: Owner, computeFn: (reader: IReader, lastValue: T | undefined) => T): IObservable<T> {
let lastValue: T | undefined = undefined;
const observable = derived(reader => {
const observable = derived(owner, reader => {
lastValue = computeFn(reader, lastValue);
return lastValue;
});

View file

@ -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<VirtualizedViewItem | undefined>((reader, lastValue) => this.activeDiffItem.read(reader) ?? lastValue);
public readonly lastActiveDiffItem = derivedObservableWithCache<VirtualizedViewItem | undefined>(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));