@centreon/react-components
Version:
react components used by centreon web frontend
190 lines (148 loc) • 6.09 kB
JavaScript
;
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])
});