UNPKG

6 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5exports.__esModule = true;
6exports["default"] = void 0;
7
8var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
10var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
12var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
13
14var _react = require("react");
15
16var _propTypes = _interopRequireDefault(require("prop-types"));
17
18var _invariant = _interopRequireDefault(require("invariant"));
19
20var _get = _interopRequireDefault(require("lodash/get"));
21
22var _ConnectedFields = _interopRequireDefault(require("./ConnectedFields"));
23
24var _shallowCompare = _interopRequireDefault(require("./util/shallowCompare"));
25
26var _plain = _interopRequireDefault(require("./structure/plain"));
27
28var _prefixName = _interopRequireDefault(require("./util/prefixName"));
29
30var _ReduxFormContext = require("./ReduxFormContext");
31
32var _validateComponentProp = _interopRequireDefault(require("./util/validateComponentProp"));
33
34var validateNameProp = function validateNameProp(prop) {
35 if (!prop) {
36 return new Error('No "names" prop was specified <Fields/>');
37 }
38
39 if (!Array.isArray(prop) && !prop._isFieldArray) {
40 return new Error('Invalid prop "names" supplied to <Fields/>. Must be either an array of strings or the fields array generated by FieldArray.');
41 }
42};
43
44var warnAndValidatePropType = _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].arrayOf(_propTypes["default"].func), _propTypes["default"].objectOf(_propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].arrayOf(_propTypes["default"].func)]))]);
45
46var fieldsPropTypes = {
47 component: _validateComponentProp["default"],
48 format: _propTypes["default"].func,
49 parse: _propTypes["default"].func,
50 props: _propTypes["default"].object,
51 forwardRef: _propTypes["default"].bool,
52 validate: warnAndValidatePropType,
53 warn: warnAndValidatePropType
54};
55
56var getFieldWarnAndValidate = function getFieldWarnAndValidate(prop, name) {
57 return Array.isArray(prop) || typeof prop === 'function' ? prop : (0, _get["default"])(prop, name, undefined);
58};
59
60var createFields = function createFields(structure) {
61 var ConnectedFields = (0, _ConnectedFields["default"])(structure);
62
63 var Fields =
64 /*#__PURE__*/
65 function (_Component) {
66 (0, _inheritsLoose2["default"])(Fields, _Component);
67
68 function Fields(props) {
69 var _this;
70
71 _this = _Component.call(this, props) || this;
72
73 if (!props._reduxForm) {
74 throw new Error('Fields must be inside a component decorated with reduxForm()');
75 }
76
77 var error = validateNameProp(props.names);
78
79 if (error) {
80 throw error;
81 }
82
83 return _this;
84 }
85
86 var _proto = Fields.prototype;
87
88 _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {
89 return (0, _shallowCompare["default"])(this, nextProps);
90 };
91
92 _proto.componentDidMount = function componentDidMount() {
93 this.registerFields(this.props.names);
94 };
95
96 _proto.UNSAFE_componentWillReceiveProps = function UNSAFE_componentWillReceiveProps(nextProps) {
97 if (!_plain["default"].deepEqual(this.props.names, nextProps.names)) {
98 var props = this.props;
99 var unregister = props._reduxForm.unregister; // unregister old name
100
101 this.props.names.forEach(function (name) {
102 return unregister((0, _prefixName["default"])(props, name));
103 }); // register new name
104
105 this.registerFields(nextProps.names);
106 }
107 };
108
109 _proto.componentWillUnmount = function componentWillUnmount() {
110 var props = this.props;
111 var unregister = props._reduxForm.unregister;
112 this.props.names.forEach(function (name) {
113 return unregister((0, _prefixName["default"])(props, name));
114 });
115 };
116
117 _proto.registerFields = function registerFields(names) {
118 var _this2 = this;
119
120 var props = this.props;
121 var register = props._reduxForm.register;
122 names.forEach(function (name) {
123 return register((0, _prefixName["default"])(props, name), 'Field', function () {
124 return getFieldWarnAndValidate(_this2.props.validate, name);
125 }, function () {
126 return getFieldWarnAndValidate(_this2.props.warn, name);
127 });
128 });
129 };
130
131 _proto.getRenderedComponent = function getRenderedComponent() {
132 (0, _invariant["default"])(this.props.forwardRef, 'If you want to access getRenderedComponent(), ' + 'you must specify a forwardRef prop to Fields');
133 return this.refs.connected.getRenderedComponent();
134 };
135
136 _proto.render = function render() {
137 var props = this.props;
138 return (0, _react.createElement)(ConnectedFields, (0, _extends2["default"])({}, this.props, {
139 names: this.props.names.map(function (name) {
140 return (0, _prefixName["default"])(props, name);
141 }),
142 ref: 'connected'
143 }));
144 };
145
146 (0, _createClass2["default"])(Fields, [{
147 key: "names",
148 get: function get() {
149 var props = this.props;
150 return this.props.names.map(function (name) {
151 return (0, _prefixName["default"])(props, name);
152 });
153 }
154 }, {
155 key: "dirty",
156 get: function get() {
157 return this.refs.connected.isDirty();
158 }
159 }, {
160 key: "pristine",
161 get: function get() {
162 return !this.dirty;
163 }
164 }, {
165 key: "values",
166 get: function get() {
167 return this.refs.connected && this.refs.connected.getValues();
168 }
169 }]);
170 return Fields;
171 }(_react.Component);
172
173 Fields.propTypes = (0, _extends2["default"])({
174 names: function names(props, propName) {
175 return validateNameProp(props[propName]);
176 }
177 }, fieldsPropTypes);
178 return (0, _ReduxFormContext.withReduxForm)(Fields);
179};
180
181var _default = createFields;
182exports["default"] = _default;
\No newline at end of file