diff --git a/packages/workflow/src/ObservableObject.ts b/packages/workflow/src/ObservableObject.ts index 6923924374..90eec3d132 100644 --- a/packages/workflow/src/ObservableObject.ts +++ b/packages/workflow/src/ObservableObject.ts @@ -13,7 +13,7 @@ export function create(target: IDataObject, parent?: IObservableObject, option?: // Make all the children of target also observeable for (const key in target) { - if (typeof target[key] === 'object') { + if (typeof target[key] === 'object' && target[key] !== null) { target[key] = create(target[key] as IDataObject, (parent || target) as IObservableObject, option, depth + 1); } } diff --git a/packages/workflow/test/ObservableObject.test.ts b/packages/workflow/test/ObservableObject.test.ts index ff3e3e71eb..1e4c04ca19 100644 --- a/packages/workflow/test/ObservableObject.test.ts +++ b/packages/workflow/test/ObservableObject.test.ts @@ -142,6 +142,15 @@ describe('ObservableObject', () => { expect(testObject).toEqual({ a: {} }); }); + test('should recognize that item on second child level changed with null (init data exists)', () => { + const testObject = ObservableObject.create({ a: { b: { c: null } } }); + expect(testObject.__dataChanged).toBeFalsy(); + expect((testObject.a! as IDataObject).b).toEqual({ c: null }); + expect(((testObject.a! as IDataObject).b! as IDataObject).c).toEqual(null); + ((testObject.a! as IDataObject).b! as IDataObject).c = 2; + expect(testObject.__dataChanged).toBeTruthy(); + expect((testObject.a! as IDataObject).b).toEqual({ c: 2 }); + });