Skip to content

Commit 01797ab

Browse files
authored
Implement getViewState, fixes microsoft#133444 (microsoft#158199)
* Implement getViewState, fixes microsoft#133444 * Fix viewstate vs restore scenario collision
1 parent f5b90a4 commit 01797ab

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -349,8 +349,9 @@ export class SettingsEditor2 extends EditorPane {
349349
this.defaultSettingsEditorModel = model;
350350

351351
options = options || validateSettingsEditorOptions({});
352-
if (!this.viewState.settingsTarget) {
353-
if (!options.target) {
352+
if (!this.viewState.settingsTarget || !this.settingsTargetsWidget.settingsTarget) {
353+
const optionsHasViewStateTarget = options.viewState && (options.viewState as ISettingsEditorViewState).settingsTarget;
354+
if (!options.target && !optionsHasViewStateTarget) {
354355
options.target = ConfigurationTarget.USER_LOCAL;
355356
}
356357
}
@@ -387,6 +388,10 @@ export class SettingsEditor2 extends EditorPane {
387388
return withUndefinedAsNull(cachedState);
388389
}
389390

391+
override getViewState(): object | undefined {
392+
return this.viewState;
393+
}
394+
390395
override setOptions(options: ISettingsEditorOptions | undefined): void {
391396
super.setOptions(options);
392397

@@ -401,11 +406,16 @@ export class SettingsEditor2 extends EditorPane {
401406
this.focusSearch();
402407
}
403408

404-
if (options.query) {
405-
this.searchWidget.setValue(options.query);
409+
const recoveredViewState = options.viewState ?
410+
options.viewState as ISettingsEditorViewState : undefined;
411+
412+
const query: string | undefined = recoveredViewState?.query ?? options.query;
413+
if (query !== undefined) {
414+
this.searchWidget.setValue(query);
415+
this.viewState.query = query;
406416
}
407417

408-
const target: SettingsTarget = options.folderUri || <SettingsTarget>options.target;
418+
const target: SettingsTarget | undefined = options.folderUri ?? recoveredViewState?.settingsTarget ?? <SettingsTarget | undefined>options.target;
409419
if (target) {
410420
this.settingsTargetsWidget.settingsTarget = target;
411421
this.viewState.settingsTarget = target;
@@ -1237,8 +1247,9 @@ export class SettingsEditor2 extends EditorPane {
12371247
this.settingsTreeModel.update(resolvedSettingsRoot);
12381248
this.tocTreeModel.settingsTreeRoot = this.settingsTreeModel.root as SettingsTreeGroupElement;
12391249

1240-
const cachedState = this.restoreCachedState();
1241-
if (cachedState && cachedState.searchQuery || !!this.searchWidget.getValue()) {
1250+
// Don't restore the cached state if we already have a query value from calling _setOptions().
1251+
const cachedState = !this.viewState.query ? this.restoreCachedState() : undefined;
1252+
if (cachedState?.searchQuery || this.searchWidget.getValue()) {
12421253
await this.onSearchInputChanged();
12431254
} else {
12441255
this.refreshTOCTree();
@@ -1358,6 +1369,7 @@ export class SettingsEditor2 extends EditorPane {
13581369
}
13591370

13601371
const query = this.searchWidget.getValue().trim();
1372+
this.viewState.query = query;
13611373
this.delayedFilterLogging.cancel();
13621374
await this.triggerSearch(query.replace(/\u203A/g, ' '));
13631375

src/vs/workbench/contrib/preferences/browser/settingsTreeModels.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export const ONLINE_SERVICES_SETTING_TAG = 'usesOnlineServices';
2626

2727
export interface ISettingsEditorViewState {
2828
settingsTarget: SettingsTarget;
29+
query?: string; // used to keep track of loading from setInput vs loading from cache
2930
tagFilters?: Set<string>;
3031
extensionFilters?: Set<string>;
3132
featureFilters?: Set<string>;

0 commit comments

Comments
 (0)