From 6af34dc3a6eafc856edf52f048b144867028822b Mon Sep 17 00:00:00 2001 From: Danielv123 Date: Mon, 22 Nov 2021 13:17:39 +0100 Subject: [PATCH] Update BaseConfigTree when props.id changes --- .../web_ui/src/components/BaseConfigTree.jsx | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/web_ui/src/components/BaseConfigTree.jsx b/packages/web_ui/src/components/BaseConfigTree.jsx index e693d9cb..15581814 100644 --- a/packages/web_ui/src/components/BaseConfigTree.jsx +++ b/packages/web_ui/src/components/BaseConfigTree.jsx @@ -16,8 +16,13 @@ export default function BaseConfigTree(props) { let newConfig = new props.ConfigClass("control"); await newConfig.load(serializedConfig); setConfig(newConfig); + return newConfig; } - useEffect(() => { updateConfig(); }, [props.id]); + useEffect(() => { + updateConfig().then(config => { + form.setFieldsValue(getInitialValues(config, props)); + }); + }, [props.id]); function renderInput(def) { if (def.type === "boolean") { @@ -250,3 +255,28 @@ export default function BaseConfigTree(props) { ; } + +function getInitialValues(config, props) { + let initialValues = {}; + for (let [name, GroupClass] of props.ConfigClass.groups) { + let group = config.group(name); + for (let def of GroupClass.definitions.values()) { + if (!group.canAccess(def.name)) { + continue; + } + + let value = group.get(def.name); + let fieldName = `${group.name}.${def.name}`; + + if (def.type === "object") { + for (let prop of Object.keys(value)) { + let propPath = `${group.name}.${def.name}.${prop}`; + initialValues[propPath] = JSON.stringify(value[prop]); + } + } else { + initialValues[fieldName] = value; + } + } + } + return initialValues; +}