Skip to content

Commit 66dca9c

Browse files
authored
fix: use patch by default (#589)
1 parent b89e124 commit 66dca9c

1 file changed

Lines changed: 20 additions & 8 deletions

File tree

src/hydra/dataProvider.ts

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ function normalizeHydraKey(json: JsonLdObj, key: string): JsonLdObj {
182182
* GET_LIST => GET http://my.api.url/posts
183183
* GET_MANY => GET http://my.api.url/posts/123, GET http://my.api.url/posts/456, GET http://my.api.url/posts/789
184184
* GET_ONE => GET http://my.api.url/posts/123
185-
* UPDATE => PUT http://my.api.url/posts/123
185+
* UPDATE => PATCH http://my.api.url/posts/123
186186
*/
187187
function dataProvider(
188188
factoryParams: HydraDataProviderFactoryParams,
@@ -253,13 +253,10 @@ function dataProvider(
253253
};
254254

255255
const transformReactAdminDataToRequestBody = (
256-
resource: string,
256+
apiResource: undefined | Resource,
257257
data: Record<string, unknown> | XMLHttpRequestBodyInit,
258258
extraInformation: { hasFileField?: boolean },
259259
): Promise<XMLHttpRequestBodyInit> => {
260-
const apiResource = apiSchema.resources.find(
261-
({ name }) => resource === name,
262-
);
263260
if (undefined === apiResource) {
264261
return Promise.resolve(data as XMLHttpRequestBodyInit);
265262
}
@@ -366,12 +363,23 @@ function dataProvider(
366363
if (typeof params.meta === 'object') {
367364
extraInformation = params.meta;
368365
}
369-
const updateHttpMethod = extraInformation.hasFileField ? 'POST' : 'PUT';
366+
367+
const apiResource = (apiSchema?.resources ?? []).find(
368+
({ name }) => resource === name,
369+
);
370+
371+
let updateHttpMethod = 'POST';
372+
373+
if (!extraInformation.hasFileField) {
374+
updateHttpMethod =
375+
apiResource?.operations?.find((operation) => operation.type === 'edit')
376+
?.method ?? 'PUT';
377+
}
370378

371379
switch (type) {
372380
case CREATE:
373381
return transformReactAdminDataToRequestBody(
374-
resource,
382+
apiResource,
375383
(params as CreateParams).data,
376384
extraInformation,
377385
).then((body) => ({
@@ -481,13 +489,17 @@ function dataProvider(
481489

482490
case UPDATE:
483491
return transformReactAdminDataToRequestBody(
484-
resource,
492+
apiResource,
485493
(params as UpdateParams).data,
486494
extraInformation,
487495
).then((body) => ({
488496
options: {
489497
body,
490498
method: updateHttpMethod,
499+
headers:
500+
updateHttpMethod === 'PATCH'
501+
? { 'content-type': 'application/merge-patch+json' }
502+
: {},
491503
},
492504
url,
493505
}));

0 commit comments

Comments
 (0)