mirror of
https://github.com/Microsoft/vscode
synced 2024-08-28 05:19:39 +00:00
Observables: More owners
This commit is contained in:
parent
a7f384badb
commit
d70459b44c
|
@ -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.
|
* {@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>(computeFn: (reader: IReader) => T): IObservable<T>;
|
||||||
export function derived<T>(owner: object, computeFn: (reader: IReader) => T): IObservable<T>;
|
export function derived<T>(owner: Owner, 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>(computeFnOrOwner: ((reader: IReader) => T) | Owner, computeFn?: ((reader: IReader) => T) | undefined): IObservable<T> {
|
||||||
if (computeFn !== undefined) {
|
if (computeFn !== undefined) {
|
||||||
return new Derived(
|
return new Derived(
|
||||||
new DebugNameData(computeFnOrOwner, undefined, computeFn),
|
new DebugNameData(computeFnOrOwner, undefined, computeFn),
|
||||||
|
|
|
@ -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;
|
let lastValue: T | undefined = undefined;
|
||||||
const observable = derived(reader => {
|
const observable = derived(owner, reader => {
|
||||||
lastValue = computeFn(reader, lastValue);
|
lastValue = computeFn(reader, lastValue);
|
||||||
return lastValue;
|
return lastValue;
|
||||||
});
|
});
|
||||||
|
|
|
@ -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));
|
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 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);
|
public readonly activeControl = derived(this, reader => this.lastActiveDiffItem.read(reader)?.template.read(reader)?.editor);
|
||||||
|
|
||||||
private readonly _contextKeyService = this._register(this._parentContextKeyService.createScoped(this._element));
|
private readonly _contextKeyService = this._register(this._parentContextKeyService.createScoped(this._element));
|
||||||
|
|
Loading…
Reference in a new issue