From 55fa38e48e5fbd88d022b735dbd87aecef8ba12a Mon Sep 17 00:00:00 2001 From: Gildas Garcia Date: Thu, 4 Jul 2019 13:54:08 +0200 Subject: [PATCH] Ensure dataProvider callback sideeffect is called when using withDataProvider Fix #3369 --- packages/ra-core/src/util/withDataProvider.ts | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/packages/ra-core/src/util/withDataProvider.ts b/packages/ra-core/src/util/withDataProvider.ts index d1c42f5482f..4f92b5030db 100644 --- a/packages/ra-core/src/util/withDataProvider.ts +++ b/packages/ra-core/src/util/withDataProvider.ts @@ -13,6 +13,9 @@ interface DispatchProps { const mapDispatchToProps = (dispatch): DispatchProps => ({ dataProvider: (type, resource: string, payload: any, meta: any = {}) => new Promise((resolve, reject) => { + const onSuccess = get(meta, 'onSuccess', {}); + const onFailure = get(meta, 'onFailure', {}); + const action = { type: 'CUSTOM_FETCH', payload, @@ -21,15 +24,28 @@ const mapDispatchToProps = (dispatch): DispatchProps => ({ resource, fetch: type, onSuccess: { - ...get(meta, 'onSuccess', {}), - callback: ({ payload: response }) => resolve(response), + ...onSuccess, + callback: ({ payload: response }) => { + if (onSuccess.callback) { + onSuccess.callback(response); + } + + resolve(response); + }, }, onFailure: { ...get(meta, 'onFailure', {}), - callback: ({ error }) => - reject( - new Error(error.message ? error.message : error) - ), + callback: ({ error }) => { + const sanitizedError = new Error( + error.message ? error.message : error + ); + + if (onFailure.callback) { + onFailure.callback(sanitizedError); + } + + reject(sanitizedError); + }, }, }, };