UNPKG

cloudhubui

Version:

Various components to use in react projects

98 lines (85 loc) 3.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _finalForm = require("final-form"); var _isPromise = _interopRequireDefault(require("./isPromise")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var tripleEquals = function tripleEquals(a, b) { return a === b; }; var createDecorator = function createDecorator() { for (var _len = arguments.length, calculations = new Array(_len), _key = 0; _key < _len; _key++) { calculations[_key] = arguments[_key]; } return function (form) { var previousValues = {}; var unsubscribe = form.subscribe(function (_ref) { var values = _ref.values; form.batch(function () { var runUpdates = function runUpdates(field, isEqual, updates) { var next = values && (0, _finalForm.getIn)(values, field); var previous = previousValues && (0, _finalForm.getIn)(previousValues, field); if (!isEqual(next, previous)) { if (typeof updates === 'function') { var results = updates(next, field, values, previousValues); if ((0, _isPromise.default)(results)) { results.then(function (resolved) { Object.keys(resolved).forEach(function (destField) { form.change(destField, resolved[destField]); }); }); } else { Object.keys(results).forEach(function (destField) { form.change(destField, results[destField]); }); } } else { Object.keys(updates).forEach(function (destField) { var update = updates[destField]; var result = update(next, values, previousValues); if ((0, _isPromise.default)(result)) { result.then(function (resolved) { form.change(destField, resolved); }); } else { form.change(destField, result); } }); } } }; var fields = form.getRegisteredFields(); calculations.forEach(function (_ref2) { var field = _ref2.field, isEqual = _ref2.isEqual, updates = _ref2.updates; if (typeof field === 'string') { runUpdates(field, isEqual || tripleEquals, updates); } else { // field is a either array or regex var matches = Array.isArray(field) ? function (name) { return ~field.indexOf(name) || field.findIndex(function (f) { return f instanceof RegExp && f.test(name); }) !== -1; } : function (name) { return field.test(name); }; fields.forEach(function (fieldName) { if (matches(fieldName)) { runUpdates(fieldName, isEqual || tripleEquals, updates); } }); } }); previousValues = values; }); }, { values: true }); return unsubscribe; }; }; var _default = createDecorator; exports.default = _default;