UNPKG

5.75 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
7exports.__esModule = true;
8exports["default"] = void 0;
9
10var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
12var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
14var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
15
16var _react = _interopRequireWildcard(require("react"));
17
18var _propTypes = _interopRequireDefault(require("prop-types"));
19
20var _invariant = _interopRequireDefault(require("invariant"));
21
22var _ConnectedField = _interopRequireDefault(require("./ConnectedField"));
23
24var _shallowCompare = _interopRequireDefault(require("./util/shallowCompare"));
25
26var _prefixName = _interopRequireDefault(require("./util/prefixName"));
27
28var _plain = _interopRequireDefault(require("./structure/plain"));
29
30var _ReduxFormContext = require("./ReduxFormContext");
31
32var _validateComponentProp = _interopRequireDefault(require("./util/validateComponentProp"));
33
34var createField = function createField(structure) {
35 var ConnectedField = (0, _ConnectedField["default"])(structure);
36 var setIn = structure.setIn;
37
38 var Field =
39 /*#__PURE__*/
40 function (_Component) {
41 (0, _inheritsLoose2["default"])(Field, _Component);
42
43 function Field(props) {
44 var _this;
45
46 _this = _Component.call(this, props) || this;
47 _this.ref = _react["default"].createRef();
48
49 _this.normalize = function (name, value) {
50 var normalize = _this.props.normalize;
51
52 if (!normalize) {
53 return value;
54 }
55
56 var previousValues = _this.props._reduxForm.getValues();
57
58 var previousValue = _this.value;
59 var nextValues = setIn(previousValues, name, value);
60 return normalize(value, previousValue, nextValues, previousValues, name);
61 };
62
63 if (!props._reduxForm) {
64 throw new Error('Field must be inside a component decorated with reduxForm()');
65 }
66
67 return _this;
68 }
69
70 var _proto = Field.prototype;
71
72 _proto.componentDidMount = function componentDidMount() {
73 var _this2 = this;
74
75 this.props._reduxForm.register(this.name, 'Field', function () {
76 return _this2.props.validate;
77 }, function () {
78 return _this2.props.warn;
79 });
80 };
81
82 _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {
83 return (0, _shallowCompare["default"])(this, nextProps, nextState);
84 };
85
86 _proto.UNSAFE_componentWillReceiveProps = function UNSAFE_componentWillReceiveProps(nextProps) {
87 var oldName = (0, _prefixName["default"])(this.props, this.props.name);
88 var newName = (0, _prefixName["default"])(nextProps, nextProps.name);
89
90 if (oldName !== newName || // use deepEqual here because they could be a function or an array of functions
91 !_plain["default"].deepEqual(this.props.validate, nextProps.validate) || !_plain["default"].deepEqual(this.props.warn, nextProps.warn)) {
92 // unregister old name
93 this.props._reduxForm.unregister(oldName); // register new name
94
95
96 this.props._reduxForm.register(newName, 'Field', function () {
97 return nextProps.validate;
98 }, function () {
99 return nextProps.warn;
100 });
101 }
102 };
103
104 _proto.componentWillUnmount = function componentWillUnmount() {
105 this.props._reduxForm.unregister(this.name);
106 };
107
108 _proto.getRenderedComponent = function getRenderedComponent() {
109 (0, _invariant["default"])(this.props.forwardRef, 'If you want to access getRenderedComponent(), ' + 'you must specify a forwardRef prop to Field');
110 return this.ref.current ? this.ref.current.getRenderedComponent() : undefined;
111 };
112
113 _proto.render = function render() {
114 return (0, _react.createElement)(ConnectedField, (0, _extends2["default"])({}, this.props, {
115 name: this.name,
116 normalize: this.normalize,
117 ref: this.ref
118 }));
119 };
120
121 (0, _createClass2["default"])(Field, [{
122 key: "name",
123 get: function get() {
124 return (0, _prefixName["default"])(this.props, this.props.name);
125 }
126 }, {
127 key: "dirty",
128 get: function get() {
129 return !this.pristine;
130 }
131 }, {
132 key: "pristine",
133 get: function get() {
134 return !!(this.ref.current && this.ref.current.isPristine());
135 }
136 }, {
137 key: "value",
138 get: function get() {
139 return this.ref.current && this.ref.current.getValue();
140 }
141 }]);
142 return Field;
143 }(_react.Component);
144
145 Field.propTypes = {
146 name: _propTypes["default"].string.isRequired,
147 component: _validateComponentProp["default"],
148 format: _propTypes["default"].func,
149 normalize: _propTypes["default"].func,
150 onBlur: _propTypes["default"].func,
151 onChange: _propTypes["default"].func,
152 onFocus: _propTypes["default"].func,
153 onDragStart: _propTypes["default"].func,
154 onDrop: _propTypes["default"].func,
155 parse: _propTypes["default"].func,
156 props: _propTypes["default"].object,
157 validate: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].arrayOf(_propTypes["default"].func)]),
158 warn: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].arrayOf(_propTypes["default"].func)]),
159 forwardRef: _propTypes["default"].bool,
160 immutableProps: _propTypes["default"].arrayOf(_propTypes["default"].string),
161 _reduxForm: _propTypes["default"].object
162 };
163 return (0, _ReduxFormContext.withReduxForm)(Field);
164};
165
166var _default = createField;
167exports["default"] = _default;
\No newline at end of file