UNPKG

found-relay

Version:
191 lines (147 loc) 7.74 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = void 0; var _construct = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/reflect/construct")); var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends")); var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys")); var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutPropertiesLoose")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/getPrototypeOf")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/inheritsLoose")); var _propTypes = _interopRequireDefault(require("prop-types")); var _react = _interopRequireDefault(require("react")); var _reactRelay = require("react-relay"); var _warning = _interopRequireDefault(require("warning")); var _QuerySubscription = _interopRequireDefault(require("./QuerySubscription")); var _renderElement = _interopRequireDefault(require("./renderElement")); function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = (0, _construct["default"])(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_construct["default"]) return false; if (_construct["default"].sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call((0, _construct["default"])(Date, [], function () {})); return true; } catch (e) { return false; } } var hasOwnProperty = Object.prototype.hasOwnProperty; var propTypes = { match: _propTypes["default"].shape({ route: _propTypes["default"].object.isRequired }).isRequired, Component: _propTypes["default"].elementType, isComponentResolved: _propTypes["default"].bool.isRequired, hasComponent: _propTypes["default"].bool.isRequired, element: _propTypes["default"].oneOfType([_propTypes["default"].element, _propTypes["default"].func]), routeChildren: _propTypes["default"].oneOfType([_propTypes["default"].object, _propTypes["default"].element]), querySubscription: _propTypes["default"].instanceOf(_QuerySubscription["default"]).isRequired, fetched: _propTypes["default"].bool.isRequired }; var ReadyStateRenderer = /*#__PURE__*/function (_React$Component) { (0, _inheritsLoose2["default"])(ReadyStateRenderer, _React$Component); var _super = _createSuper(ReadyStateRenderer); function ReadyStateRenderer(props) { var _this; _this = _React$Component.call(this, props) || this; _this.onUpdate = function () { if (!_this.props.fetched) { // Ignore subscription updates if our data aren't yet fetched. We'll // rerender anyway once fetching finishes. return; } var _this$props = _this.props, match = _this$props.match, Component = _this$props.Component, isComponentResolved = _this$props.isComponentResolved, hasComponent = _this$props.hasComponent, querySubscription = _this$props.querySubscription; var element = (0, _renderElement["default"])({ match: match, Component: Component, isComponentResolved: isComponentResolved, hasComponent: hasComponent, querySubscription: querySubscription, resolving: false }); _this.setState({ element: element || null }); }; var _element = props.element, _querySubscription = props.querySubscription; _this.state = { isInitialRender: true, element: _element, propsElement: _element, querySubscription: _querySubscription, selectionReference: _querySubscription.retain(), onUpdate: _this.onUpdate }; return _this; } var _proto = ReadyStateRenderer.prototype; _proto.componentDidMount = function componentDidMount() { this.props.querySubscription.subscribe(this.onUpdate); }; ReadyStateRenderer.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, state) { var element = _ref.element, querySubscription = _ref.querySubscription; if (state.isInitialRender) { return { isInitialRender: false }; } var nextState = null; if (element !== state.propsElement) { nextState = { element: element, propsElement: element }; } if (querySubscription !== state.querySubscription) { state.selectionReference.dispose(); state.querySubscription.unsubscribe(state.onUpdate); nextState = nextState || {}; nextState.querySubscription = querySubscription; nextState.selectionReference = querySubscription.retain(); querySubscription.subscribe(state.onUpdate); } return nextState; }; _proto.componentWillUnmount = function componentWillUnmount() { this.state.selectionReference.dispose(); this.props.querySubscription.unsubscribe(this.onUpdate); }; _proto.render = function render() { var element = this.state.element; if (!element) { return element; } var _this$props2 = this.props, _m = _this$props2.match, _C = _this$props2.Component, _iCR = _this$props2.isComponentResolved, _hC = _this$props2.hasComponent, _e = _this$props2.element, routeChildren = _this$props2.routeChildren, querySubscription = _this$props2.querySubscription, _f = _this$props2.fetched, ownProps = (0, _objectWithoutPropertiesLoose2["default"])(_this$props2, ["match", "Component", "isComponentResolved", "hasComponent", "element", "routeChildren", "querySubscription", "fetched"]); var relayProps = querySubscription.readyState.props; if (relayProps) { var _context; (0, _forEach["default"])(_context = (0, _keys["default"])(relayProps)).call(_context, function (relayPropName) { // At least on Node v8.x, it's slightly faster to guard the delete here // with this hasOwnProperty check. if (hasOwnProperty.call(ownProps, relayPropName)) { process.env.NODE_ENV !== "production" ? (0, _warning["default"])(false, 'Ignoring <ReadyStateRenderer> prop `%s` that shadows a Relay prop from its query `%s`. This is most likely due to its parent cloning it and adding extraneous Relay props.', relayPropName, querySubscription.getQueryName()) : void 0; delete ownProps[relayPropName]; } }); } return /*#__PURE__*/_react["default"].createElement(_reactRelay.ReactRelayContext.Provider, { value: querySubscription.relayContext }, typeof element === 'function' ? _react["default"].cloneElement(element(routeChildren), ownProps) : _react["default"].cloneElement(element, (0, _extends2["default"])({}, _react["default"].isValidElement(routeChildren) ? { children: routeChildren } : routeChildren, {}, ownProps))); }; return ReadyStateRenderer; }(_react["default"].Component); ReadyStateRenderer.propTypes = propTypes; var _default = ReadyStateRenderer; exports["default"] = _default; module.exports = exports.default;