diff --git a/src/panelWebView/components/DataBlock/DataBlockField.tsx b/src/panelWebView/components/DataBlock/DataBlockField.tsx index 16762fae..c3478584 100644 --- a/src/panelWebView/components/DataBlock/DataBlockField.tsx +++ b/src/panelWebView/components/DataBlock/DataBlockField.tsx @@ -23,7 +23,7 @@ export const DataBlockField: React.FunctionComponent = ({ const [ selectedGroup, setSelectedGroup ] = useState(null); const [ selectedBlockData, setSelectedBlockData ] = useState(null); - const onFieldUpdate = useCallback((crntField: string | undefined, crntValue: any) => { + const onFieldUpdate = useCallback((crntField: string | undefined, crntValue: any, parents: string[]) => { const dataClone: any[] = Object.assign([], value); if (!crntField) { @@ -32,14 +32,40 @@ export const DataBlockField: React.FunctionComponent = ({ if (selectedIndex !== null && selectedIndex !== undefined) { const data = Object.assign({}, dataClone[selectedIndex]); + + let parentObj: any = data; + if (parents.length > 1) { + parents.shift(); + for (const parent of parents) { + if (!data[parent]) { + data[parent] = {}; + } + + parentObj = data[parent]; + } + } + + parentObj[crntField] = crntValue; + dataClone[selectedIndex] = { ...data, - [crntField]: crntValue, fieldGroup: selectedGroup?.id }; } else { + const data: any = {}; + let parentObj: any = data; + if (parents.length > 1) { + parents.shift(); + for (const parent of parents) { + data[parent] = {}; + parentObj = data[parent]; + } + } + + parentObj[crntField] = crntValue; + dataClone.push({ - [crntField]: crntValue, + ...data, fieldGroup: selectedGroup?.id }); diff --git a/src/panelWebView/components/Metadata.tsx b/src/panelWebView/components/Metadata.tsx index f4a990ce..ed9c5584 100644 --- a/src/panelWebView/components/Metadata.tsx +++ b/src/panelWebView/components/Metadata.tsx @@ -225,8 +225,12 @@ const Metadata: React.FunctionComponent = ({settings, metadata, onChanged={(value: boolean | string) => onSendUpdate(field.name, value, parentFields)} /> ); - } else if (field.type === 'fields') { - if (field.fields && parent && parent[field.name]) { + } else if (field.type === 'fields') { + if (field.fields && parent) { + if (!parent[field.name]) { + parent[field.name] = {}; + } + const subMetadata = parent[field.name] as IMetadata; return ( @@ -237,7 +241,7 @@ const Metadata: React.FunctionComponent = ({settings, metadata, - { renderFields(field.fields, subMetadata, [...parentFields, field.name]) } + { renderFields(field.fields, subMetadata, [...parentFields, field.name], onFieldUpdate) } );