diff --git a/package.json b/package.json index b094c20a..48bc7061 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@api-platform/admin", - "version": "4.0.2", + "version": "4.0.3", "description": "Automatic administration interface for Hydra-enabled APIs.", "files": [ "*.md", diff --git a/src/hydra/dataProvider.ts b/src/hydra/dataProvider.ts index a7efd355..385cc405 100644 --- a/src/hydra/dataProvider.ts +++ b/src/hydra/dataProvider.ts @@ -182,7 +182,7 @@ function normalizeHydraKey(json: JsonLdObj, key: string): JsonLdObj { * GET_LIST => GET http://my.api.url/posts * GET_MANY => GET http://my.api.url/posts/123, GET http://my.api.url/posts/456, GET http://my.api.url/posts/789 * GET_ONE => GET http://my.api.url/posts/123 - * UPDATE => PUT http://my.api.url/posts/123 + * UPDATE => PATCH http://my.api.url/posts/123 */ function dataProvider( factoryParams: HydraDataProviderFactoryParams, @@ -253,13 +253,10 @@ function dataProvider( }; const transformReactAdminDataToRequestBody = ( - resource: string, + apiResource: undefined | Resource, data: Record | XMLHttpRequestBodyInit, extraInformation: { hasFileField?: boolean }, ): Promise => { - const apiResource = apiSchema.resources.find( - ({ name }) => resource === name, - ); if (undefined === apiResource) { return Promise.resolve(data as XMLHttpRequestBodyInit); } @@ -366,12 +363,23 @@ function dataProvider( if (typeof params.meta === 'object') { extraInformation = params.meta; } - const updateHttpMethod = extraInformation.hasFileField ? 'POST' : 'PUT'; + + const apiResource = (apiSchema?.resources ?? []).find( + ({ name }) => resource === name, + ); + + let updateHttpMethod = 'POST'; + + if (!extraInformation.hasFileField) { + updateHttpMethod = + apiResource?.operations?.find((operation) => operation.type === 'edit') + ?.method ?? 'PUT'; + } switch (type) { case CREATE: return transformReactAdminDataToRequestBody( - resource, + apiResource, (params as CreateParams).data, extraInformation, ).then((body) => ({ @@ -481,13 +489,17 @@ function dataProvider( case UPDATE: return transformReactAdminDataToRequestBody( - resource, + apiResource, (params as UpdateParams).data, extraInformation, ).then((body) => ({ options: { body, method: updateHttpMethod, + headers: + updateHttpMethod === 'PATCH' + ? { 'content-type': 'application/merge-patch+json' } + : {}, }, url, })); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy