[IMP] store: make sure set function works with arrays

This commit is contained in:
Géry Debongnie
2019-04-12 12:45:44 +02:00
parent e0608aa7fd
commit 8ca806eb28
2 changed files with 19 additions and 6 deletions
+2 -6
View File
@@ -114,18 +114,14 @@ export function makeObserver(): Observer {
}; };
function set(target: any, key: number | string, value: any) { function set(target: any, key: number | string, value: any) {
if (Array.isArray(target)) { addProp(target, key, value);
// todo
} else {
addProp(target, key as string, value);
}
target.__rev__++; target.__rev__++;
observer.__rev__++; observer.__rev__++;
} }
function addProp<T extends { __rev__?: number }>( function addProp<T extends { __rev__?: number }>(
obj: T, obj: T,
key: string, key: string | number,
value: any value: any
) { ) {
Object.defineProperty(obj, key, { Object.defineProperty(obj, key, {
+17
View File
@@ -162,6 +162,23 @@ describe("observer", () => {
expect(ob2.__rev__).toBe(2); 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", () => { test("various object property changes", () => {
const observer = makeObserver(); const observer = makeObserver();
const obj: any = { a: 1 }; const obj: any = { a: 1 };