Skip to content

Commit e95f9e6

Browse files
authored
Reset model state if setting key changes (#101806)
As the same instance of the object widget could be used for different settings, it is necessary to make sure to reset the model state (edit key and selection index) when an instance is reused.
1 parent de70a4e commit e95f9e6

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,6 +1132,7 @@ export class SettingObjectRenderer extends AbstractSettingRenderer implements IT
11321132
const items = getObjectDisplayValue(dataElement);
11331133

11341134
template.objectWidget.setValue(items, {
1135+
settingKey: dataElement.setting.key,
11351136
showAddButton: (
11361137
typeof dataElement.setting.objectAdditionalProperties === 'object' ||
11371138
isDefined(dataElement.setting.objectPatternProperties) ||

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ export class ListSettingListModel<TDataItem extends object> {
188188
this._dataItems = listData;
189189
}
190190

191-
select(idx: number): void {
191+
select(idx: number | null): void {
192192
this._selectedIdx = idx;
193193
}
194194

@@ -664,6 +664,7 @@ export interface IObjectKeySuggester {
664664
}
665665

666666
interface IObjectSetValueOptions {
667+
settingKey: string;
667668
showAddButton: boolean;
668669
keySuggester: IObjectKeySuggester;
669670
valueSuggester: IObjectValueSuggester;
@@ -678,6 +679,7 @@ interface IObjectRenderEditWidgetOptions {
678679
}
679680

680681
export class ObjectSettingWidget extends AbstractListSettingWidget<IObjectDataItem> {
682+
private currentSettingKey: string = '';
681683
private showAddButton: boolean = true;
682684
private keySuggester: IObjectKeySuggester = () => undefined;
683685
private valueSuggester: IObjectValueSuggester = () => undefined;
@@ -686,6 +688,13 @@ export class ObjectSettingWidget extends AbstractListSettingWidget<IObjectDataIt
686688
this.showAddButton = options?.showAddButton ?? this.showAddButton;
687689
this.keySuggester = options?.keySuggester ?? this.keySuggester;
688690
this.valueSuggester = options?.valueSuggester ?? this.valueSuggester;
691+
692+
if (isDefined(options) && options.settingKey !== this.currentSettingKey) {
693+
this.model.setEditKey('none');
694+
this.model.select(null);
695+
this.currentSettingKey = options.settingKey;
696+
}
697+
689698
super.setValue(listData);
690699
}
691700

0 commit comments

Comments
 (0)