diff --git a/packages/web_ui/src/components/InstanceViewPage.jsx b/packages/web_ui/src/components/InstanceViewPage.jsx
index 116b7e54..af981afa 100644
--- a/packages/web_ui/src/components/InstanceViewPage.jsx
+++ b/packages/web_ui/src/components/InstanceViewPage.jsx
@@ -359,6 +359,23 @@ function InstanceConfigTree(props) {
}
let initialValues = {};
+ function onValuesChange(changedValues) {
+ let newChangedFields = new Set(changedFields);
+ let changed = false;
+ for (let [key, value] of Object.entries(changedValues)) {
+ if (initialValues[key] === value) {
+ changed = newChangedFields.delete(key) || changed;
+ } else {
+ changed = !newChangedFields.has(key) || changed;
+ newChangedFields.add(key);
+ }
+ }
+
+ if (changed) {
+ setChangedFields(newChangedFields);
+ }
+ }
+
let treeData = [];
let propsMap = new Map();
for (let [name, GroupClass] of libConfig.InstanceConfig.groups) {
@@ -387,6 +404,9 @@ function InstanceConfigTree(props) {
name={propPath}
label={`"${prop}"`}
rules={[{ validator: (_, fieldValue) => {
+ if (!fieldValue.length) {
+ return Promise.reject(new Error("Will be removed"));
+ }
try {
JSON.parse(fieldValue);
} catch (err) {
@@ -403,6 +423,49 @@ function InstanceConfigTree(props) {
propsMap.set(propPath, [fieldName, prop]);
}
+ let newPropPath = `${group.name}.${def.name}:add`;
+ childNode.children.push({
+ key: newPropPath,
+ title: