From 8ca806eb280586ad98484b922480cf831a8168d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Fri, 12 Apr 2019 12:45:44 +0200 Subject: [PATCH] [IMP] store: make sure set function works with arrays --- src/store.ts | 8 ++------ tests/store.test.ts | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/store.ts b/src/store.ts index 8c1aaffb..e4a1409d 100644 --- a/src/store.ts +++ b/src/store.ts @@ -114,18 +114,14 @@ export function makeObserver(): Observer { }; function set(target: any, key: number | string, value: any) { - if (Array.isArray(target)) { - // todo - } else { - addProp(target, key as string, value); - } + addProp(target, key, value); target.__rev__++; observer.__rev__++; } function addProp( obj: T, - key: string, + key: string | number, value: any ) { Object.defineProperty(obj, key, { diff --git a/tests/store.test.ts b/tests/store.test.ts index a504ebb9..b58f73e5 100644 --- a/tests/store.test.ts +++ b/tests/store.test.ts @@ -162,6 +162,23 @@ describe("observer", () => { expect(ob2.__rev__).toBe(2); }); + test("can change values in array", () => { + const observer = makeObserver(); + const obj: any = { arr: [1, 2] }; + + observer.observe(obj); + expect(obj.arr.__rev__).toBe(0); + expect(observer.__rev__).toBe(0); + + obj.arr[0] = "nope"; + expect(obj.arr.__rev__).toBe(0); + expect(observer.__rev__).toBe(0); + + observer.set(obj.arr, 0, "yep"); + expect(obj.arr.__rev__).toBe(1); + expect(observer.__rev__).toBe(1); + }); + test("various object property changes", () => { const observer = makeObserver(); const obj: any = { a: 1 };