diff --git a/.changeset/small-coats-obey.md b/.changeset/small-coats-obey.md new file mode 100644 index 000000000..1c0211cf0 --- /dev/null +++ b/.changeset/small-coats-obey.md @@ -0,0 +1,5 @@ +--- +"@solid-primitives/resource": patch +--- + +Fix setter input value in `createDeepSignal`. diff --git a/packages/resource/src/index.ts b/packages/resource/src/index.ts index b5da335e5..9faa3cfc3 100644 --- a/packages/resource/src/index.ts +++ b/packages/resource/src/index.ts @@ -298,7 +298,8 @@ export function createDeepSignal(v?: T): Signal { return [ () => store[0], (update: T) => ( - setStore(0, reconcile(typeof update === "function" ? update(unwrap(store[0])) : v)), store[0] + setStore(0, reconcile(typeof update === "function" ? update(unwrap(store[0])) : update)), + store[0] ), ] as Signal; } diff --git a/packages/resource/test/index.test.ts b/packages/resource/test/index.test.ts index 6849b7eee..4974ee009 100644 --- a/packages/resource/test/index.test.ts +++ b/packages/resource/test/index.test.ts @@ -419,4 +419,26 @@ describe("createDeepSignal", () => { return run + 1; }); })); + test("mutates the resource with callback", () => + testEffect(done => { + const [data, { mutate }] = createResource(() => ({ counter: 1 }), { + storage: createDeepSignal, + }); + mutate(() => ({ counter: 2 })); + createEffect(() => { + expect(data()?.counter).toBe(2); + done(); + }); + })); + test("mutates the resource with plain object", () => + testEffect(done => { + const [data, { mutate }] = createResource(() => ({ counter: 1 }), { + storage: createDeepSignal, + }); + mutate({ counter: 2 }); + createEffect(() => { + expect(data()?.counter).toBe(2); + done(); + }); + })); });