提交 0332c701 编写于 作者: R Rob Lourens

Fix #50632

上级 5fad13aa
......@@ -56,6 +56,7 @@ export class SettingsEditor2 extends BaseEditor {
private delayedFilterLogging: Delayer<void>;
private localSearchDelayer: Delayer<void>;
private remoteSearchThrottle: ThrottledDelayer<void>;
private searchInProgress: TPromise<void>;
private pendingSettingModifiedReport: { key: string, value: any };
......@@ -424,14 +425,18 @@ export class SettingsEditor2 extends BaseEditor {
private triggerSearch(query: string): TPromise<void> {
if (query) {
return TPromise.join([
return this.searchInProgress = TPromise.join([
this.localSearchDelayer.trigger(() => this.localFilterPreferences(query)),
this.remoteSearchThrottle.trigger(() => this.remoteSearchPreferences(query), 500)
]) as TPromise;
]).then(() => {
this.searchInProgress = null;
});
} else {
// When clearing the input, update immediately to clear it
this.localSearchDelayer.cancel();
this.remoteSearchThrottle.cancel();
if (this.searchInProgress && this.searchInProgress.cancel) {
this.searchInProgress.cancel();
}
this.searchResultModel = null;
this.settingsTree.setInput(this.defaultSettingsEditorModel);
......@@ -495,15 +500,25 @@ export class SettingsEditor2 extends BaseEditor {
private filterOrSearchPreferences(query: string, type: SearchResultIdx, searchProvider: ISearchProvider): TPromise<void> {
const filterPs: TPromise<ISearchResult>[] = [this._filterOrSearchPreferencesModel(query, this.defaultSettingsEditorModel, searchProvider)];
return TPromise.join(filterPs).then(results => {
const [result] = results;
if (!this.searchResultModel) {
this.searchResultModel = new SearchResultModel();
this.settingsTree.setInput(this.searchResultModel);
}
let isCanceled = false;
return new TPromise(resolve => {
return TPromise.join(filterPs).then(results => {
if (isCanceled) {
// Handle cancellation like this because cancellation is lost inside the search provider due to async/await
return null;
}
const [result] = results;
if (!this.searchResultModel) {
this.searchResultModel = new SearchResultModel();
this.settingsTree.setInput(this.searchResultModel);
}
this.searchResultModel.setResult(type, result);
return this.refreshTreeAndMaintainFocus();
this.searchResultModel.setResult(type, result);
resolve(this.refreshTreeAndMaintainFocus());
});
}, () => {
isCanceled = true;
});
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册