UNPKG

4.76 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 _ConnectedFieldArray = _interopRequireDefault(require("./ConnectedFieldArray"));
23
24var _prefixName = _interopRequireDefault(require("./util/prefixName"));
25
26var _ReduxFormContext = require("./ReduxFormContext");
27
28var _validateComponentProp = _interopRequireDefault(require("./util/validateComponentProp"));
29
30var toArray = function toArray(value) {
31 return Array.isArray(value) ? value : [value];
32};
33
34var wrapError = function wrapError(fn, key) {
35 return fn && function () {
36 var validators = toArray(fn);
37
38 for (var i = 0; i < validators.length; i++) {
39 var result = validators[i].apply(validators, arguments);
40
41 if (result) {
42 var _ref;
43
44 return _ref = {}, _ref[key] = result, _ref;
45 }
46 }
47 };
48};
49
50var createFieldArray = function createFieldArray(structure) {
51 var ConnectedFieldArray = (0, _ConnectedFieldArray["default"])(structure);
52
53 var FieldArray =
54 /*#__PURE__*/
55 function (_Component) {
56 (0, _inheritsLoose2["default"])(FieldArray, _Component);
57
58 function FieldArray(props) {
59 var _this;
60
61 _this = _Component.call(this, props) || this;
62 _this.ref = _react["default"].createRef();
63
64 if (!props._reduxForm) {
65 throw new Error('FieldArray must be inside a component decorated with reduxForm()');
66 }
67
68 return _this;
69 }
70
71 var _proto = FieldArray.prototype;
72
73 _proto.componentDidMount = function componentDidMount() {
74 var _this2 = this;
75
76 this.props._reduxForm.register(this.name, 'FieldArray', function () {
77 return wrapError(_this2.props.validate, '_error');
78 }, function () {
79 return wrapError(_this2.props.warn, '_warning');
80 });
81 };
82
83 _proto.UNSAFE_componentWillReceiveProps = function UNSAFE_componentWillReceiveProps(nextProps) {
84 var oldName = (0, _prefixName["default"])(this.props, this.props.name);
85 var newName = (0, _prefixName["default"])(nextProps, nextProps.name);
86
87 if (oldName !== newName) {
88 // unregister old name
89 this.props._reduxForm.unregister(oldName); // register new name
90
91
92 this.props._reduxForm.register(newName, 'FieldArray');
93 }
94 };
95
96 _proto.componentWillUnmount = function componentWillUnmount() {
97 this.props._reduxForm.unregister(this.name);
98 };
99
100 _proto.getRenderedComponent = function getRenderedComponent() {
101 (0, _invariant["default"])(this.props.forwardRef, 'If you want to access getRenderedComponent(), ' + 'you must specify a forwardRef prop to FieldArray');
102 return this.ref && this.ref.current.getRenderedComponent();
103 };
104
105 _proto.render = function render() {
106 return (0, _react.createElement)(ConnectedFieldArray, (0, _extends2["default"])({}, this.props, {
107 name: this.name,
108 ref: this.ref
109 }));
110 };
111
112 (0, _createClass2["default"])(FieldArray, [{
113 key: "name",
114 get: function get() {
115 return (0, _prefixName["default"])(this.props, this.props.name);
116 }
117 }, {
118 key: "dirty",
119 get: function get() {
120 return !this.ref || this.ref.current.dirty;
121 }
122 }, {
123 key: "pristine",
124 get: function get() {
125 return !!(this.ref && this.ref.current.pristine);
126 }
127 }, {
128 key: "value",
129 get: function get() {
130 return this.ref ? this.ref.current.value : undefined;
131 }
132 }]);
133 return FieldArray;
134 }(_react.Component);
135
136 FieldArray.propTypes = {
137 name: _propTypes["default"].string.isRequired,
138 component: _validateComponentProp["default"],
139 props: _propTypes["default"].object,
140 validate: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].arrayOf(_propTypes["default"].func)]),
141 warn: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].arrayOf(_propTypes["default"].func)]),
142 forwardRef: _propTypes["default"].bool,
143 _reduxForm: _propTypes["default"].object
144 };
145 return (0, _ReduxFormContext.withReduxForm)(FieldArray);
146};
147
148var _default = createFieldArray;
149exports["default"] = _default;
\No newline at end of file