{"dependencies":[{"name":"react","loc":{"line":11,"column":20}},{"name":"./Errors","loc":{"line":12,"column":23}},{"name":"./Form","loc":{"line":13,"column":21}}],"generated":{"js":"\"use strict\";\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = require(\"react\");\nvar Errors_1 = require(\"./Errors\");\nvar Form_1 = require(\"./Form\");\nvar findInTree = function (path, key, arr) {\n    if (arr === void 0) { arr = []; }\n    var keyNode, pathNode;\n    for (var i = 0; i < arr.length; i++) {\n        if (key && arr[i].key && arr[i].key === key)\n            keyNode = keyNode || arr[i];\n        if (arr[i].path.join('.') === path.join('.'))\n            pathNode = pathNode || arr[i];\n    }\n    return keyNode || pathNode;\n};\nvar clone = function (options) {\n    var tree = [];\n    var nodeIndexCount = __assign({}, options.nodeIndexCount);\n    var children = React.Children.map(options.children, function (child) {\n        // CASE: Plain Text (Non React node)\n        if (typeof child !== 'object' || child === null)\n            return child;\n        // CASE: Errors Component\n        if (child.type === Errors_1.default)\n            return React.cloneElement(child, { _errors: options.errors });\n        var name = child.props[options.propName];\n        // CASE: Non Formable Node, div, span, etc\n        if (!name) {\n            var cloneResults = clone(__assign({}, options, { children: child.props.children, nodeIndexCount: nodeIndexCount }));\n            nodeIndexCount = cloneResults.nodeIndexCount;\n            tree = tree.concat(cloneResults.tree);\n            return React.cloneElement(child, {}, cloneResults.children);\n        }\n        nodeIndexCount[name] = (nodeIndexCount[name] || 0) + 1;\n        var nodeIndex = nodeIndexCount[name] - 1;\n        // CASE: Formable Node\n        var path = options.path.concat([name, nodeIndex && \"[\" + nodeIndex + \"]\"]).filter(function (x) { return x; });\n        var _a = clone(__assign({}, options, { path: path,\n            tree: tree, children: child.props.children, nodeIndexCount: {} })), children = _a.children, subTree = _a.tree;\n        // SUBCASE: Formable node with children (wrapper node)\n        if (subTree.length) {\n            tree = tree.concat(subTree);\n            return React.cloneElement(child, {}, children);\n        }\n        var _b = options.configureForm(child.type, child.props) || Form_1.defaultConfigureInput, defaultProp = _b.defaultProp, eventName = _b.eventName, getValueFromEvent = _b.getValueFromEvent, fieldErrorsToProps = _b.fieldErrorsToProps, valueProp = _b.valueProp;\n        var errorsToProps = fieldErrorsToProps || options.fieldErrorsToProps;\n        // SUBCASE: Normal Formable node without children\n        var oldTreeNode = findInTree(path, child.key, options.previousRenderTree);\n        var fieldErrors = (oldTreeNode ? oldTreeNode.fieldErrors : []) || [];\n        // If we have an old node, get the value from that node,\n        // otherwise derive the value from props\n        var value = oldTreeNode\n            ? oldTreeNode.value\n            : child.props[valueProp] !== undefined\n                ? child.props[valueProp]\n                : child.props[defaultProp];\n        tree = tree.concat({\n            value: value,\n            fieldErrors: fieldErrors,\n            path: path,\n            name: name,\n            key: child.key,\n            validators: (child.props.validators || []).concat((child.type.validators || [])),\n        });\n        var newProps = __assign({}, child.props, errorsToProps(fieldErrors, child.props), (_c = { ref: child.ref }, _c[eventName] = function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            options.onChange(path, getValueFromEvent.apply(void 0, args));\n            if (child.props[eventName]) {\n                (_a = child.props)[eventName].apply(_a, args);\n            }\n            var _a;\n        }, _c));\n        if (options.removeValidators)\n            delete newProps.validators;\n        if (options.removePropName)\n            delete newProps[options.propName];\n        return React.createElement(child.type, newProps, children);\n        var _c;\n    });\n    return { children: children, tree: tree, nodeIndexCount: nodeIndexCount };\n};\nexports.default = clone;\n//# sourceMappingURL=clone.js.map"},"hash":"3154c3ec529af92ea3211cb48f35524d"}