diff --git a/docs/DataProviders.md b/docs/DataProviders.md index 9ea6cc13e2c..c195d61229e 100644 --- a/docs/DataProviders.md +++ b/docs/DataProviders.md @@ -467,8 +467,8 @@ Request Type | Response format `CREATE` | `{ data: {Record} }` `UPDATE` | `{ data: {Record} }` `UPDATE_MANY` | `{ data: {mixed[]} }` The ids which have been updated -`DELETE` | `{ data: {Record} }` -`DELETE_MANY` | `{ data: {mixed[]} }` The ids which have been deleted +`DELETE` | `{ data: {Record|null} }` The record that has been deleted (optional) +`DELETE_MANY` | `{ data: {mixed[]} }` The ids of the deleted records (optional) `GET_MANY` | `{ data: {Record[]} }` `GET_MANY_REFERENCE` | `{ data: {Record[]}, total: {int} }` @@ -678,6 +678,8 @@ export default (type, resource, params) => { }; case CREATE: return { data: { ...params.data, id: json.id } }; + case DELETE_MANY: + return { data: json || [] }; default: return { data: json }; } diff --git a/packages/ra-core/src/dataFetchActions.ts b/packages/ra-core/src/dataFetchActions.ts index dee3bafb89b..d2d16da8270 100644 --- a/packages/ra-core/src/dataFetchActions.ts +++ b/packages/ra-core/src/dataFetchActions.ts @@ -8,7 +8,7 @@ export const UPDATE_MANY = 'UPDATE_MANY'; export const DELETE = 'DELETE'; export const DELETE_MANY = 'DELETE_MANY'; -export const fetchActionsWithRecordResponse = [GET_ONE, CREATE, UPDATE, DELETE]; +export const fetchActionsWithRecordResponse = [GET_ONE, CREATE, UPDATE]; export const fetchActionsWithArrayOfIdentifiedRecordsResponse = [ GET_LIST, GET_MANY, diff --git a/packages/ra-core/src/sideEffect/fetch.ts b/packages/ra-core/src/sideEffect/fetch.ts index aaa9a2d1e6d..a10d89801ee 100644 --- a/packages/ra-core/src/sideEffect/fetch.ts +++ b/packages/ra-core/src/sideEffect/fetch.ts @@ -44,10 +44,10 @@ function validateResponseFormat( fetchActionsWithArrayOfIdentifiedRecordsResponse.includes(type) && Array.isArray(response.data) && response.data.length > 0 && - !response.data[0].hasOwnProperty('id') + response.data.some(d => !d.hasOwnProperty('id')) ) { logger( - `The response to '${type}' must be like { data : [{ id: 123, ...}, ...] }, but the received data items do not have an 'id' key. The dataProvider is probably wrong for '${type}'` + `The response to '${type}' must be like { data : [{ id: 123, ...}, ...] }, but at least one received data item do not have an 'id' key. The dataProvider is probably wrong for '${type}'` ); throw new Error('ra.notification.data_provider_error'); } diff --git a/packages/ra-data-json-server/src/index.js b/packages/ra-data-json-server/src/index.js index 87fae364adb..b455049ed6d 100644 --- a/packages/ra-data-json-server/src/index.js +++ b/packages/ra-data-json-server/src/index.js @@ -121,6 +121,8 @@ export default (apiUrl, httpClient = fetchUtils.fetchJson) => { }; case CREATE: return { data: { ...params.data, id: json.id } }; + case DELETE_MANY: + return { data: json || [] }; default: return { data: json }; } diff --git a/packages/ra-data-simple-rest/src/index.js b/packages/ra-data-simple-rest/src/index.js index b4720e3712c..eeeb349aa68 100644 --- a/packages/ra-data-simple-rest/src/index.js +++ b/packages/ra-data-simple-rest/src/index.js @@ -126,6 +126,9 @@ export default (apiUrl, httpClient = fetchUtils.fetchJson) => { }; case CREATE: return { data: { ...params.data, id: json.id } }; + case DELETE_MANY: { + return { data: json || [] }; + } default: return { data: json }; }