{"version":3,"file":"createMountWrapper.js","names":["stringOrFunction","PropTypes","oneOfType","func","string","makeValidElementType","adapter","validElementTypeRequired","props","propName","isValidElementType","args","isRequired","propValue","TypeError","validElementType","createMountWrapper","node","options","WrappingComponent","wrappingComponent","WrapperComponent","wrappingComponentProps","context","state","mount","newProps","newContext","callback","undefined","oldProps","oldContext","setState","Component","refProp","component","React","propTypes","ref","object","defaultProps","type","contextTypes","childContextTypes","prototype","getChildContext"],"sources":["../src/createMountWrapper.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { ref } from 'airbnb-prop-types';\nimport RootFinder from './RootFinder';\n\n/* eslint react/forbid-prop-types: 0 */\n\nconst stringOrFunction = PropTypes.oneOfType([PropTypes.func, PropTypes.string]);\nconst makeValidElementType = (adapter) => {\n if (!adapter) {\n return stringOrFunction;\n }\n\n function validElementTypeRequired(props, propName, ...args) {\n if (!adapter.isValidElementType) {\n return stringOrFunction.isRequired(props, propName, ...args);\n }\n const propValue = props[propName]; // eslint-disable-line react/destructuring-assignment\n if (adapter.isValidElementType(propValue)) {\n return null;\n }\n return new TypeError(`${propName} must be a valid element type!`);\n }\n\n function validElementType(props, propName, ...args) {\n const propValue = props[propName];\n if (propValue == null) {\n return null;\n }\n return validElementTypeRequired(props, propName, ...args);\n }\n validElementType.isRequired = validElementTypeRequired;\n\n return validElementType;\n};\n\n/**\n * This is a utility component to wrap around the nodes we are\n * passing in to `mount()`. Theoretically, you could do everything\n * we are doing without this, but this makes it easier since\n * `renderIntoDocument()` doesn't really pass back a reference to\n * the DOM node it rendered to, so we can't really \"re-render\" to\n * pass new props in.\n */\nexport default function createMountWrapper(node, options = {}) {\n const { adapter, wrappingComponent: WrappingComponent } = options;\n\n class WrapperComponent extends React.Component {\n constructor(...args) {\n super(...args);\n const { props, wrappingComponentProps, context } = this.props;\n this.state = {\n mount: true,\n props,\n wrappingComponentProps,\n context,\n };\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n setChildProps(newProps, newContext, callback = undefined) {\n const { props: oldProps, context: oldContext } = this.state;\n const props = { ...oldProps, ...newProps };\n const context = { ...oldContext, ...newContext };\n this.setState({ props, context }, callback);\n }\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n setWrappingComponentProps(props, callback = undefined) {\n this.setState({ wrappingComponentProps: props }, callback);\n }\n\n render() {\n const { Component, refProp } = this.props;\n const { mount, props, wrappingComponentProps } = this.state;\n if (!mount) return null;\n // eslint-disable-next-line react/jsx-props-no-spreading\n const component = ;\n if (WrappingComponent) {\n return (\n // eslint-disable-next-line react/jsx-props-no-spreading\n \n {component}\n \n );\n }\n return component;\n }\n }\n WrapperComponent.propTypes = {\n Component: makeValidElementType(adapter).isRequired,\n refProp: PropTypes.oneOfType([PropTypes.string, ref()]),\n props: PropTypes.object.isRequired,\n wrappingComponentProps: PropTypes.object,\n context: PropTypes.object,\n };\n WrapperComponent.defaultProps = {\n refProp: null,\n context: null,\n wrappingComponentProps: null,\n };\n\n if (options.context && (node.type.contextTypes || options.childContextTypes)) {\n // For full rendering, we are using this wrapper component to provide context if it is\n // specified in both the options AND the child component defines `contextTypes` statically\n // OR the merged context types for all children (the node component or deeper children) are\n // specified in options parameter under childContextTypes.\n // In that case, we define both a `getChildContext()` function and a `childContextTypes` prop.\n const childContextTypes = {\n ...node.type.contextTypes,\n ...options.childContextTypes,\n };\n\n WrapperComponent.prototype.getChildContext = function getChildContext() {\n return this.state.context;\n };\n WrapperComponent.childContextTypes = childContextTypes;\n }\n return WrapperComponent;\n}\n"],"mappings":"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"}