From f93228fc58fcb6af9e7e59fed8fc307b85e7d4c0 Mon Sep 17 00:00:00 2001
From: Gildas Garcia <1122076+djhi@users.noreply.github.com>
Date: Wed, 26 Jun 2024 15:18:57 +0200
Subject: [PATCH] Fix useUpdate throws an error when record id is a valid falsy
value such as zero
---
.../src/dataProvider/useUpdate.spec.tsx | 32 +++++++++++++++++++
.../ra-core/src/dataProvider/useUpdate.ts | 2 +-
2 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/packages/ra-core/src/dataProvider/useUpdate.spec.tsx b/packages/ra-core/src/dataProvider/useUpdate.spec.tsx
index adf20b4df85..648e2b83004 100644
--- a/packages/ra-core/src/dataProvider/useUpdate.spec.tsx
+++ b/packages/ra-core/src/dataProvider/useUpdate.spec.tsx
@@ -91,6 +91,38 @@ describe('useUpdate', () => {
});
});
+ it('accepts falsy value that are not null nor undefined as the record id', async () => {
+ const dataProvider = {
+ update: jest.fn(() =>
+ Promise.resolve({ data: { id: 1 } } as any)
+ ),
+ } as any;
+ let localUpdate;
+ const Dummy = () => {
+ const [update] = useUpdate('foo', {
+ id: 0,
+ data: { bar: 'baz' },
+ previousData: { id: 0, bar: 'bar' },
+ });
+ localUpdate = update;
+ return ;
+ };
+
+ render(
+
+
+
+ );
+ localUpdate();
+ await waitFor(() => {
+ expect(dataProvider.update).toHaveBeenCalledWith('foo', {
+ id: 0,
+ data: { bar: 'baz' },
+ previousData: { id: 0, bar: 'bar' },
+ });
+ });
+ });
+
it('replaces hook call time params by and callback time params', async () => {
const dataProvider = {
update: jest.fn(() =>
diff --git a/packages/ra-core/src/dataProvider/useUpdate.ts b/packages/ra-core/src/dataProvider/useUpdate.ts
index 8fda6893108..cf5b79c34da 100644
--- a/packages/ra-core/src/dataProvider/useUpdate.ts
+++ b/packages/ra-core/src/dataProvider/useUpdate.ts
@@ -203,7 +203,7 @@ export const useUpdate = (
'useUpdate mutation requires a non-empty resource'
);
}
- if (!callTimeId) {
+ if (callTimeId == null) {
throw new Error('useUpdate mutation requires a non-empty id');
}
if (!callTimeData) {