Skip to content

Commit de70a4e

Browse files
authored
Correctly handle null default values for objects (#101807)
Fixes #101637
1 parent cf5a79f commit de70a4e

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

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

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,17 @@ function getObjectValueType(schema: IJSONSchema): ObjectValue['type'] {
105105
}
106106

107107
function getObjectDisplayValue(element: SettingsTreeSettingElement): IObjectDataItem[] {
108+
const elementDefaultValue: Record<string, unknown> = typeof element.defaultValue === 'object'
109+
? element.defaultValue ?? {}
110+
: {};
111+
112+
const elementScopeValue: Record<string, unknown> = typeof element.scopeValue === 'object'
113+
? element.scopeValue ?? {}
114+
: {};
115+
108116
const data = element.isConfigured ?
109-
{ ...element.defaultValue, ...element.scopeValue } :
110-
element.defaultValue;
117+
{ ...elementDefaultValue, ...elementScopeValue } :
118+
elementDefaultValue;
111119

112120
const { objectProperties, objectPatternProperties, objectAdditionalProperties } = element.setting;
113121
const patternsAndSchemas = Object
@@ -129,7 +137,7 @@ function getObjectDisplayValue(element: SettingsTreeSettingElement): IObjectData
129137

130138
return Object.keys(data).map(key => {
131139
if (isDefined(objectProperties) && key in objectProperties) {
132-
const defaultValue = element.defaultValue[key];
140+
const defaultValue = elementDefaultValue[key];
133141
const valueEnumOptions = getEnumOptionsFromSchema(objectProperties[key]);
134142

135143
return {
@@ -144,7 +152,7 @@ function getObjectDisplayValue(element: SettingsTreeSettingElement): IObjectData
144152
options: valueEnumOptions,
145153
},
146154
removable: isUndefinedOrNull(defaultValue),
147-
};
155+
} as IObjectDataItem;
148156
}
149157

150158
const schema = patternsAndSchemas.find(({ pattern }) => pattern.test(key))?.schema;
@@ -159,7 +167,7 @@ function getObjectDisplayValue(element: SettingsTreeSettingElement): IObjectData
159167
options: valueEnumOptions,
160168
},
161169
removable: true,
162-
};
170+
} as IObjectDataItem;
163171
}
164172

165173
return {
@@ -170,7 +178,7 @@ function getObjectDisplayValue(element: SettingsTreeSettingElement): IObjectData
170178
options: additionalValueEnums,
171179
},
172180
removable: true,
173-
};
181+
} as IObjectDataItem;
174182
});
175183
}
176184

@@ -1055,8 +1063,14 @@ export class SettingObjectRenderer extends AbstractSettingRenderer implements IT
10551063

10561064
private onDidChangeObject(template: ISettingObjectItemTemplate, e: ISettingListChangeEvent<IObjectDataItem>): void {
10571065
if (template.context) {
1058-
const defaultValue: Record<string, unknown> = template.context.defaultValue;
1059-
const scopeValue: Record<string, unknown> = template.context.scopeValue;
1066+
const defaultValue: Record<string, unknown> = typeof template.context.defaultValue === 'object'
1067+
? template.context.defaultValue ?? {}
1068+
: {};
1069+
1070+
const scopeValue: Record<string, unknown> = typeof template.context.scopeValue === 'object'
1071+
? template.context.scopeValue ?? {}
1072+
: {};
1073+
10601074
const newValue: Record<string, unknown> = {};
10611075
let newItems: IObjectDataItem[] = [];
10621076

0 commit comments

Comments
 (0)