mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
[IMP] store: make sure set function works with arrays
This commit is contained in:
+2
-6
@@ -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, {
|
||||||
|
|||||||
@@ -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 };
|
||||||
|
|||||||
Reference in New Issue
Block a user