diff --git a/packages/ra-core/src/dataProvider/getDataProviderCallArguments.ts b/packages/ra-core/src/dataProvider/getDataProviderCallArguments.ts index 68f35a1b94e..ff7c01a92ae 100644 --- a/packages/ra-core/src/dataProvider/getDataProviderCallArguments.ts +++ b/packages/ra-core/src/dataProvider/getDataProviderCallArguments.ts @@ -9,6 +9,7 @@ const OptionsProperties = [ 'onSuccess', 'undoable', 'mutationMode', + 'enabled', ]; const isDataProviderOptions = (value: any) => { diff --git a/packages/ra-core/src/dataProvider/useDataProvider.spec.js b/packages/ra-core/src/dataProvider/useDataProvider.spec.js index 70ea58dfac4..a7d601384c7 100644 --- a/packages/ra-core/src/dataProvider/useDataProvider.spec.js +++ b/packages/ra-core/src/dataProvider/useDataProvider.spec.js @@ -319,6 +319,71 @@ describe('useDataProvider', () => { expect(onFailure.mock.calls[0][0]).toEqual(new Error('foo')); }); + it('should accept an enabled option to block the query until a condition is met', async () => { + const UseGetOneWithEnabled = () => { + const [data, setData] = useState(); + const [error, setError] = useState(); + const [isEnabled, setIsEnabled] = useState(false); + const dataProvider = useDataProvider(); + useEffect(() => { + dataProvider + .getOne('dummy', {}, { enabled: isEnabled }) + .then(res => { + if (res) { + // @fzaninotto I don't think this is correct + // because we return a empty resolved Promise, + // res is undefined here + setData(res.data); + } + }) + .catch(e => setError(e)); + }, [dataProvider, isEnabled]); + + let content =