44 *--------------------------------------------------------------------------------------------*/
55
66import { Disposable , DisposableStore , toDisposable } from '../../../../base/common/lifecycle.js' ;
7- import { IObservable , ITransaction , ObservablePromise , ObservableResolvedPromise , constObservable , derived , derivedObservableWithWritableCache , mapObservableArrayCached , observableFromValueWithChangeEvent , observableValue , transaction } from '../../../../base/common/observable.js' ;
7+ import { IObservable , ITransaction , ObservablePromise , ObservableResolvedPromise , constObservable , derived , derivedObservableWithWritableCache , mapObservableArrayCached , observableFromValueWithChangeEvent , observableValue , transaction , waitForState } from '../../../../base/common/observable.js' ;
88import { timeout } from '../../../../base/common/async.js' ;
99import { URI } from '../../../../base/common/uri.js' ;
1010import { ContextKeyValue } from '../../../../platform/contextkey/common/contextkey.js' ;
@@ -28,6 +28,7 @@ export class MultiDiffEditorViewModel extends Disposable {
2828 } ) ;
2929
3030 public readonly isLoading ;
31+ private readonly _waitForNewDiffs : IObservable < ObservablePromise < readonly RefCounted < DocumentDiffItemViewModel > [ ] > > ;
3132
3233 public readonly items : IObservable < readonly DocumentDiffItemViewModel [ ] > ;
3334
@@ -36,10 +37,12 @@ export class MultiDiffEditorViewModel extends Disposable {
3637 ( reader , lastValue ) => this . focusedDiffItem . read ( reader ) ?? ( lastValue && this . items . read ( reader ) . indexOf ( lastValue ) !== - 1 ) ? lastValue : undefined
3738 ) ;
3839
39- public async waitForDiffs ( ) : Promise < void > {
40- for ( const d of this . items . get ( ) ) {
41- await d . diffEditorViewModel . waitForDiff ( ) ;
40+ public async waitForDiffOr1s ( ) : Promise < void > {
41+ if ( this . _documents . get ( ) === 'loading' ) {
42+ await waitForState ( this . _documents , documents => documents !== 'loading' ) ;
4243 }
44+
45+ await this . _waitForNewDiffs . get ( ) . promise ;
4346 }
4447
4548 public collapseAll ( ) : void {
@@ -75,7 +78,7 @@ export class MultiDiffEditorViewModel extends Disposable {
7578 ( d , store ) => store . add ( RefCounted . create ( this . _instantiationService . createInstance ( DocumentDiffItemViewModel , d , this ) ) )
7679 ) . recomputeInitiallyAndOnChange ( this . _store ) ;
7780
78- const waitForNewDiffs : IObservable < ObservablePromise < readonly RefCounted < DocumentDiffItemViewModel > [ ] > > = derived ( this , reader => {
81+ this . _waitForNewDiffs = derived ( this , reader => {
7982 const next = allItems . read ( reader ) ;
8083 const unresolved = next . filter ( i => ! i . object . waitForInitialDiffOr1s . promiseResult . read ( undefined ) ) ;
8184 if ( unresolved . length === 0 ) {
@@ -86,7 +89,7 @@ export class MultiDiffEditorViewModel extends Disposable {
8689 ) ;
8790 } ) ;
8891
89- const resolved = new ObservableResolvedPromise ( waitForNewDiffs , [ ] as readonly RefCounted < DocumentDiffItemViewModel > [ ] , this . _store ) ;
92+ const resolved = new ObservableResolvedPromise ( this . _waitForNewDiffs , [ ] as readonly RefCounted < DocumentDiffItemViewModel > [ ] , this . _store ) ;
9093
9194 this . items = derived ( this , reader => {
9295 const resolvedItems = resolved . lastResolved . read ( reader ) ;
0 commit comments