提交 71a147f9 编写于 作者: A Aditya Thakral 提交者: Aditya Thakral

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.
上级 440c1c41
......@@ -1132,6 +1132,7 @@ export class SettingObjectRenderer extends AbstractSettingRenderer implements IT
const items = getObjectDisplayValue(dataElement);
template.objectWidget.setValue(items, {
settingKey: dataElement.setting.key,
showAddButton: (
typeof dataElement.setting.objectAdditionalProperties === 'object' ||
isDefined(dataElement.setting.objectPatternProperties) ||
......
......@@ -188,7 +188,7 @@ export class ListSettingListModel<TDataItem extends object> {
this._dataItems = listData;
}
select(idx: number): void {
select(idx: number | null): void {
this._selectedIdx = idx;
}
......@@ -664,6 +664,7 @@ export interface IObjectKeySuggester {
}
interface IObjectSetValueOptions {
settingKey: string;
showAddButton: boolean;
keySuggester: IObjectKeySuggester;
valueSuggester: IObjectValueSuggester;
......@@ -678,6 +679,7 @@ interface IObjectRenderEditWidgetOptions {
}
export class ObjectSettingWidget extends AbstractListSettingWidget<IObjectDataItem> {
private currentSettingKey: string = '';
private showAddButton: boolean = true;
private keySuggester: IObjectKeySuggester = () => undefined;
private valueSuggester: IObjectValueSuggester = () => undefined;
......@@ -686,6 +688,13 @@ export class ObjectSettingWidget extends AbstractListSettingWidget<IObjectDataIt
this.showAddButton = options?.showAddButton ?? this.showAddButton;
this.keySuggester = options?.keySuggester ?? this.keySuggester;
this.valueSuggester = options?.valueSuggester ?? this.valueSuggester;
if (isDefined(options) && options.settingKey !== this.currentSettingKey) {
this.model.setEditKey('none');
this.model.select(null);
this.currentSettingKey = options.settingKey;
}
super.setValue(listData);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册