UNPKG

@centreon/react-components

Version:
190 lines (148 loc) 6.09 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _reactDom = require("react-dom"); var _propTypes = _interopRequireDefault(require("prop-types")); var _helpers = require("./helpers"); /* eslint-disable class-methods-use-this */ /* eslint-disable react/no-did-update-set-state */ /* eslint-disable react/prop-types */ /* eslint-disable react/destructuring-assignment */ /* eslint-disable react/sort-comp */ /* eslint-disable react/no-find-dom-node */ /* eslint-disable react/require-default-props */ /* eslint-disable no-unused-vars */ var BoundingBox = /*#__PURE__*/ function (_Component) { (0, _inherits2["default"])(BoundingBox, _Component); function BoundingBox() { var _getPrototypeOf2; var _this; (0, _classCallCheck2["default"])(this, BoundingBox); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf2 = (0, _getPrototypeOf3["default"])(BoundingBox)).call.apply(_getPrototypeOf2, [this].concat(args))); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", { isInViewport: null }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getContainer", function () { return window; }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "startWatching", function () { if (_this.interval) { return; } _this.interval = setInterval(_this.isIn, 0); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "stopWatching", function () { if (_this.interval) { _this.interval = clearInterval(_this.interval); } }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "isIn", function () { var element = _this.node; if (!element) { return _this.state; } var rect = (0, _helpers.normalize)(_this.roundRectDown(element.getBoundingClientRect())); var windowRect = { top: 0, left: 0, bottom: window.innerHeight || document.documentElement.clientHeight, right: window.innerWidth || document.documentElement.clientWidth }; var rectBox = { top: windowRect.top - rect.top, left: windowRect.left - rect.left, bottom: windowRect.bottom - rect.bottom, right: windowRect.right - rect.right, offsetHeight: element.offsetHeight }; var isNotHidden = rect.height > 0 && rect.width > 0; var isInViewport = isNotHidden && rect.top >= windowRect.top && rect.left >= windowRect.left && rect.bottom <= windowRect.bottom && rect.right <= windowRect.right; var _assertThisInitialize = (0, _assertThisInitialized2["default"])(_this), state = _assertThisInitialize.state; if (_this.state.isInViewport !== isInViewport || _this.state.rectBox.top !== rectBox.top || rectBox.bottom !== _this.state.rectBox.bottom) { state = { rectBox: rectBox }; _this.setState(state); if (_this.props.onChange) _this.props.onChange(isInViewport); } return state; }); return _this; } (0, _createClass2["default"])(BoundingBox, [{ key: "componentDidMount", value: function componentDidMount() { this.node = (0, _reactDom.findDOMNode)(this); if (!this.node) { return; } var rect = (0, _helpers.normalize)(this.roundRectDown(this.node.getBoundingClientRect())); var isHidden = rect.height === 0 && rect.width === 0; if (this.props.active && !isHidden) { this.startWatching(); } } }, { key: "componentWillUnmount", value: function componentWillUnmount() { this.stopWatching(); } }, { key: "componentDidUpdate", value: function componentDidUpdate(prevProps) { this.node = (0, _reactDom.findDOMNode)(this); if (this.props.active && !prevProps.active) { this.setState({ isInViewport: null }); this.startWatching(); } else if (!this.props.active) { this.stopWatching(); } } }, { key: "roundRectDown", value: function roundRectDown(rect) { return { top: Math.floor(rect.top), left: Math.floor(rect.left), bottom: Math.floor(rect.bottom), right: Math.floor(rect.right) }; } }, { key: "render", value: function render() { if (this.props.children instanceof Function) { return this.props.children({ rectBox: this.state.rectBox }); } return _react.Children.only(this.props.children); } }]); return BoundingBox; }(_react.Component); exports["default"] = BoundingBox; (0, _defineProperty2["default"])(BoundingBox, "propTypes", { onChange: _propTypes["default"].func, children: _propTypes["default"].oneOfType([_propTypes["default"].element, _propTypes["default"].func]) });