From 50e16de270aab110dedef73fd7846df4763b0398 Mon Sep 17 00:00:00 2001 From: Jan Oberhauser Date: Mon, 28 Dec 2020 19:18:16 +0100 Subject: [PATCH] :bug: Fix bug with null in ObservableObject --- packages/workflow/src/ObservableObject.ts | 2 +- packages/workflow/test/ObservableObject.test.ts | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/workflow/src/ObservableObject.ts b/packages/workflow/src/ObservableObject.ts index 692392437..90eec3d13 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 ff3e3e71e..1e4c04ca1 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 }); + });