"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _reactDom = _interopRequireDefault(require("react-dom")); var _warning = _interopRequireDefault(require("warning")); var _propTypes = _interopRequireDefault(require("prop-types")); var propTypes = { scrollKey: _propTypes.default.string.isRequired, shouldUpdateScroll: _propTypes.default.func, children: _propTypes.default.element.isRequired }; var contextTypes = { // This is necessary when rendering on the client. However, when rendering on // the server, this container will do nothing, and thus does not require the // scroll behavior context. scrollBehavior: _propTypes.default.object }; var ScrollContainer = /*#__PURE__*/ function (_React$Component) { (0, _inheritsLoose2.default)(ScrollContainer, _React$Component); function ScrollContainer(props, context) { var _this; _this = _React$Component.call(this, props, context) || this; // We don't re-register if the scroll key changes, so make sure we // unregister with the initial scroll key just in case the user changes it. (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "shouldUpdateScroll", function (prevRouterProps, routerProps) { var shouldUpdateScroll = _this.props.shouldUpdateScroll; if (!shouldUpdateScroll) { return true; } // Hack to allow accessing scrollBehavior._stateStorage. return shouldUpdateScroll.call(_this.context.scrollBehavior.scrollBehavior, prevRouterProps, routerProps); }); _this.scrollKey = props.scrollKey; return _this; } var _proto = ScrollContainer.prototype; _proto.componentDidMount = function componentDidMount() { this.context.scrollBehavior.registerElement(this.props.scrollKey, _reactDom.default.findDOMNode(this), // eslint-disable-line react/no-find-dom-node this.shouldUpdateScroll); // Only keep around the current DOM node in development, as this is only // for emitting the appropriate warning. if (process.env.NODE_ENV !== "production") { this.domNode = _reactDom.default.findDOMNode(this); // eslint-disable-line react/no-find-dom-node } }; _proto.componentDidUpdate = function componentDidUpdate(prevProps) { (0, _warning.default)(prevProps.scrollKey === this.props.scrollKey, " does not support changing scrollKey."); if (process.env.NODE_ENV !== "production") { var prevDomNode = this.domNode; this.domNode = _reactDom.default.findDOMNode(this); // eslint-disable-line react/no-find-dom-node (0, _warning.default)(this.domNode === prevDomNode, " does not support changing DOM node."); } }; _proto.componentWillUnmount = function componentWillUnmount() { this.context.scrollBehavior.unregisterElement(this.scrollKey); }; _proto.render = function render() { return this.props.children; }; return ScrollContainer; }(_react.default.Component); ScrollContainer.propTypes = propTypes; ScrollContainer.contextTypes = contextTypes; var _default = ScrollContainer; exports.default = _default;