From 031cf0b672da2fbb44bf4e17d653a2831773c8d4 Mon Sep 17 00:00:00 2001 From: fzaninotto Date: Wed, 12 Dec 2018 18:16:23 +0100 Subject: [PATCH] Fix FormDataConsumer not working with custom form name Closes #2429 --- packages/ra-core/src/form/FormDataConsumer.js | 26 +++++++++++++------ .../ra-core/src/form/FormDataConsumer.spec.js | 16 ++++++++---- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/packages/ra-core/src/form/FormDataConsumer.js b/packages/ra-core/src/form/FormDataConsumer.js index 46aec4bb45c..4dc09e0b9b1 100644 --- a/packages/ra-core/src/form/FormDataConsumer.js +++ b/packages/ra-core/src/form/FormDataConsumer.js @@ -1,12 +1,11 @@ +import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { getFormValues } from 'redux-form'; +import { getFormValues, FormName } from 'redux-form'; import get from 'lodash/get'; import warning from '../util/warning'; -const REDUX_FORM_NAME = 'record-form'; - /** * Get the current (edited) value of the record from the form and pass it * to child function @@ -45,8 +44,9 @@ const REDUX_FORM_NAME = 'record-form'; * * ); */ -export const FormDataConsumer = ({ +export const FormDataConsumerView = ({ children, + form, formData, source, index, @@ -100,13 +100,23 @@ export const FormDataConsumer = ({ return ret === undefined ? null : ret; }; -FormDataConsumer.propTypes = { +FormDataConsumerView.propTypes = { children: PropTypes.func.isRequired, data: PropTypes.object, }; -const mapStateToProps = (state, { record }) => ({ - formData: getFormValues(REDUX_FORM_NAME)(state) || record, +const mapStateToProps = (state, { form, record }) => ({ + formData: getFormValues(form)(state) || record, }); -export default connect(mapStateToProps)(FormDataConsumer); +const ConnectedFormDataConsumerView = connect(mapStateToProps)( + FormDataConsumerView +); + +const FormDataConsumer = props => ( + + {({ form }) => } + +); + +export default FormDataConsumer; diff --git a/packages/ra-core/src/form/FormDataConsumer.spec.js b/packages/ra-core/src/form/FormDataConsumer.spec.js index 8bb1acf814f..136f1ac7be9 100644 --- a/packages/ra-core/src/form/FormDataConsumer.spec.js +++ b/packages/ra-core/src/form/FormDataConsumer.spec.js @@ -1,15 +1,17 @@ import React from 'react'; import { shallow } from 'enzyme'; -import { FormDataConsumer } from './FormDataConsumer'; +import { FormDataConsumerView } from './FormDataConsumer'; -describe('FormDataConsumer', () => { +describe('FormDataConsumerView', () => { it('does not call its children function with scopedFormData and getSource if it did not receive an index prop', () => { const children = jest.fn(); const formData = { id: 123, title: 'A title' }; shallow( - {children} + + {children} + ); expect(children).toHaveBeenCalledWith({ @@ -24,9 +26,13 @@ describe('FormDataConsumer', () => { const formData = { id: 123, title: 'A title', authors: [{ id: 0 }] }; shallow( - + {children} - + ); expect(children.mock.calls[0][0].formData).toEqual(formData);