Skip to content

Commit 9354acf

Browse files
committed
fix(settings): fix changed settings consantly resetting #2080
1 parent bc61337 commit 9354acf

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

src/components/device-page/DeviceSettings.tsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export class DeviceSettings extends Component<DeviceSettingsProps, DeviceSetting
2222

2323
updatedDeviceConfig: {},
2424
};
25+
formData: KVP | KVP[] | undefined = undefined;
2526
getGenericDeviceSettingsSchema(): JSONSchema7 {
2627
const {
2728
bridgeInfo: { config_schema: configSchema = {} },
@@ -53,6 +54,10 @@ export class DeviceSettings extends Component<DeviceSettingsProps, DeviceSetting
5354

5455
render(): ReactNode {
5556
const { schema, data, uiSchema } = this.getSchemaAndConfig();
57+
// Put formData in separate variable to prevent overwrites on re-render.
58+
if (!this.formData) {
59+
this.formData = data;
60+
}
5661
return (
5762
<>
5863
<ReadTheDocsInfo
@@ -61,7 +66,8 @@ export class DeviceSettings extends Component<DeviceSettingsProps, DeviceSetting
6166

6267
<Form
6368
schema={schema}
64-
formData={data}
69+
formData={this.formData}
70+
onChange={(data) => this.formData = data.formData}
6571
onSubmit={this.updateConfig}
6672
uiSchema={uiSchema}
6773
fields={{ TitleField, DescriptionField }}

src/components/settings-page/index.tsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ class SettingsPage extends Component<
9797
state = {
9898
keyName: ROOT_KEY_NAME,
9999
};
100+
settingsFormData: {[s: string]: Record<string, unknown>} = {};
100101
renderCategoriesTabs(): JSX.Element {
101102
const { t } = this.props;
102103
return (
@@ -380,6 +381,10 @@ class SettingsPage extends Component<
380381
renderSettings(): JSX.Element {
381382
const { keyName } = this.state;
382383
const { currentSchema, currentConfig } = this.getSettingsInfo();
384+
// Put formData in separate variable to prevent overwrites on re-render.
385+
if (!(keyName in this.settingsFormData)) {
386+
this.settingsFormData[keyName] = currentConfig;
387+
}
383388
return (
384389
<div className="tab">
385390
{this.renderSettingsTabs()}
@@ -388,7 +393,8 @@ class SettingsPage extends Component<
388393
<Form
389394
idPrefix={keyName}
390395
schema={currentSchema}
391-
formData={currentConfig}
396+
formData={this.settingsFormData[keyName]}
397+
onChange={(data) => this.settingsFormData[keyName] = data.formData}
392398
onSubmit={this.onSettingsSave}
393399
uiSchema={uiSchemas[keyName] as UiSchema}
394400
fields={{ TitleField, DescriptionField }}

0 commit comments

Comments
 (0)