UNPKG

5.01 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5exports.__esModule = true;
6exports["default"] = void 0;
7
8var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
9
10var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
12var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
13
14var _mapValues2 = _interopRequireDefault(require("lodash/mapValues"));
15
16var _isEqual2 = _interopRequireDefault(require("lodash/isEqual"));
17
18var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
19
20var _react = _interopRequireDefault(require("react"));
21
22var _reactRedux = require("react-redux");
23
24var _prefixName = _interopRequireDefault(require("./util/prefixName"));
25
26var _ReduxFormContext = require("./ReduxFormContext");
27
28var createValues = function createValues(_ref) {
29 var getIn = _ref.getIn;
30 return function (firstArg) {
31 for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
32 rest[_key - 1] = arguments[_key];
33 }
34
35 // create a class that reads current form name and creates a selector
36 // return
37 return function (Component) {
38 var FormValues =
39 /*#__PURE__*/
40 function (_React$Component) {
41 (0, _inheritsLoose2["default"])(FormValues, _React$Component);
42
43 function FormValues(props) {
44 var _this;
45
46 _this = _React$Component.call(this, props) || this;
47
48 if (!props._reduxForm) {
49 throw new Error('formValues() must be used inside a React tree decorated with reduxForm()');
50 }
51
52 _this.updateComponent(props);
53
54 return _this;
55 }
56
57 var _proto = FormValues.prototype;
58
59 _proto.UNSAFE_componentWillReceiveProps = function UNSAFE_componentWillReceiveProps(props) {
60 if (typeof firstArg === 'function') {
61 this.updateComponent(props);
62 }
63 };
64
65 _proto.render = function render() {
66 var Component = this.Component;
67 return _react["default"].createElement(Component // so that the connected component updates props when sectionPrefix has changed
68 , (0, _extends2["default"])({
69 sectionPrefix: this.props._reduxForm.sectionPrefix
70 }, this.props));
71 };
72
73 _proto.updateComponent = function updateComponent(props) {
74 var valuesMap;
75 var resolvedFirstArg = typeof firstArg === 'function' ? firstArg(props) : firstArg;
76
77 if (typeof resolvedFirstArg === 'string') {
78 var _rest$reduce;
79
80 valuesMap = rest.reduce(function (result, k) {
81 result[k] = k;
82 return result;
83 }, (_rest$reduce = {}, _rest$reduce[resolvedFirstArg] = resolvedFirstArg, _rest$reduce));
84 } else {
85 valuesMap = resolvedFirstArg;
86 }
87
88 if ((0, _isEmpty2["default"])(valuesMap)) {
89 // maybe that empty valuesMap is ok if firstArg is a function?
90 // if this is the case, we probably should set this.Component = Component
91 throw new Error('formValues(): You must specify values to get as formValues(name1, name2, ...) or formValues({propName1: propPath1, ...}) or formValues((props) => name) or formValues((props) => ({propName1: propPath1, ...}))');
92 }
93
94 if ((0, _isEqual2["default"])(valuesMap, this._valuesMap)) {
95 // no change in valuesMap
96 return;
97 }
98
99 this._valuesMap = valuesMap;
100 this.setComponent();
101 };
102
103 _proto.setComponent = function setComponent() {
104 var _this2 = this;
105
106 var formValuesSelector = function formValuesSelector(_, _ref2) {
107 var sectionPrefix = _ref2.sectionPrefix;
108 // Yes, we're only using connect() for listening to updates.
109 // The second argument needs to be there so that connect calls
110 // the selector when props change
111 var getValues = _this2.props._reduxForm.getValues;
112 var values = getValues();
113 return (0, _mapValues2["default"])(_this2._valuesMap, function (path) {
114 return getIn(values, (0, _prefixName["default"])(_this2.props, path));
115 });
116 };
117
118 this.Component = (0, _reactRedux.connect)(formValuesSelector, function () {
119 return {};
120 } // ignore dispatch
121 )(function (_ref3) {
122 var sectionPrefix = _ref3.sectionPrefix,
123 otherProps = (0, _objectWithoutPropertiesLoose2["default"])(_ref3, ["sectionPrefix"]);
124 return _react["default"].createElement(Component, otherProps);
125 });
126 };
127
128 return FormValues;
129 }(_react["default"].Component);
130
131 return (0, _ReduxFormContext.withReduxForm)(FormValues);
132 };
133 };
134};
135
136var _default = createValues;
137exports["default"] = _default;
\No newline at end of file