From f1a77284388b3e0d1f67631277302b5244739943 Mon Sep 17 00:00:00 2001 From: Juanra GM Date: Wed, 26 Mar 2025 13:54:39 +0100 Subject: [PATCH 1/2] test(resource): add failing test --- packages/resource/test/index.test.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) 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(); + }); + })); }); From 9914bfc7d8ad53cbaf6050d69b7c5fa449727bbc Mon Sep 17 00:00:00 2001 From: Juanra GM Date: Wed, 26 Mar 2025 13:59:30 +0100 Subject: [PATCH 2/2] fix(resource): use the setter value instead of the initial one --- .changeset/small-coats-obey.md | 5 +++++ packages/resource/src/index.ts | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 .changeset/small-coats-obey.md 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; }