1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 |
|
5 | exports.__esModule = true;
|
6 | exports["default"] = void 0;
|
7 |
|
8 | var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
9 |
|
10 | var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
11 |
|
12 | var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
|
13 |
|
14 | var _react = require("react");
|
15 |
|
16 | var _propTypes = _interopRequireDefault(require("prop-types"));
|
17 |
|
18 | var _invariant = _interopRequireDefault(require("invariant"));
|
19 |
|
20 | var _get = _interopRequireDefault(require("lodash/get"));
|
21 |
|
22 | var _ConnectedFields = _interopRequireDefault(require("./ConnectedFields"));
|
23 |
|
24 | var _shallowCompare = _interopRequireDefault(require("./util/shallowCompare"));
|
25 |
|
26 | var _plain = _interopRequireDefault(require("./structure/plain"));
|
27 |
|
28 | var _prefixName = _interopRequireDefault(require("./util/prefixName"));
|
29 |
|
30 | var _ReduxFormContext = require("./ReduxFormContext");
|
31 |
|
32 | var _validateComponentProp = _interopRequireDefault(require("./util/validateComponentProp"));
|
33 |
|
34 | var 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 |
|
44 | var 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 |
|
46 | var 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 |
|
56 | var getFieldWarnAndValidate = function getFieldWarnAndValidate(prop, name) {
|
57 | return Array.isArray(prop) || typeof prop === 'function' ? prop : (0, _get["default"])(prop, name, undefined);
|
58 | };
|
59 |
|
60 | var createFields = function createFields(structure) {
|
61 | var ConnectedFields = (0, _ConnectedFields["default"])(structure);
|
62 |
|
63 | var Fields =
|
64 |
|
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;
|
100 |
|
101 | this.props.names.forEach(function (name) {
|
102 | return unregister((0, _prefixName["default"])(props, name));
|
103 | });
|
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 |
|
181 | var _default = createFields;
|
182 | exports["default"] = _default; |
\ | No newline at end of file |