Home Reference Source

src/components/widgets/Form/ReduxForm.jsx

import React from 'react';
import { compose, withProps, getContext } from 'recompose';
import { Prompt } from 'react-router-dom';
import { reduxForm } from 'redux-form';
import Form from './Form';
import ReduxField from './ReduxField';
import createValidator from '../../../core/validation/createValidator';
import PropTypes from 'prop-types';

/**
 *
 * @reactProps {object} props.prompt - флаг включения обработки выхода с несохраненной формы
 * @reactProps {object} props.dirty - флаг отличия формы от initialState
 * @returns {*}
 * @constructor
 */
function ReduxForm(props, context) {
  return (
    <React.Fragment>
      {props.prompt && (
        <Prompt when={props.dirty} message={context.defaultPromptMessage} />
      )}
      <Form {...props} />
    </React.Fragment>
  );
}

ReduxForm.contextTypes = {
  defaultPromptMessage: PropTypes.string,
};

ReduxForm.propTypes = {
  prompt: PropTypes.bool,
};

ReduxForm.defaultProps = {
  prompt: false,
};

ReduxForm.Field = ReduxField;

export default compose(
  getContext({
    state: PropTypes.object,
  }),
  withProps(props => {
    return {
      ...createValidator(props.validation, props.form, props.state),
      ...props,
    };
  }),
  reduxForm({
    destroyOnUnmount: true,
    enableReinitialize: true,
  })
)(ReduxForm);