UNPKG

@kiwicom/orbit-components

Version:

Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com’s products.

86 lines (72 loc) 3.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = require("react"); var _boundingClientRect = _interopRequireDefault(require("../../utils/boundingClientRect")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } var useDimensions = function useDimensions(_ref) { var containerRef = _ref.containerRef, popover = _ref.popover, content = _ref.content, fixed = _ref.fixed, scrollableParent = _ref.scrollableParent; var _useState = (0, _react.useState)({ containerTop: 0, containerPureTop: 0, containerLeft: 0, containerHeight: 0, containerWidth: 0, popoverHeight: 0, popoverWidth: 0, windowScrollTop: 0, windowWidth: 0, windowHeight: 0, contentHeight: 0, documentHeight: 0 }), _useState2 = _slicedToArray(_useState, 2), positions = _useState2[0], setPositions = _useState2[1]; (0, _react.useEffect)(function () { var calculate = function calculate() { var containerDimensions = (0, _boundingClientRect.default)(containerRef); var popoverDimensions = (0, _boundingClientRect.default)(popover); var contentDimensions = (0, _boundingClientRect.default)(content); if (containerDimensions && popoverDimensions && contentDimensions && typeof window !== "undefined") { var documentDimensions = window.document.body.getBoundingClientRect(); setPositions({ containerTop: containerDimensions.top, containerLeft: containerDimensions.left, containerHeight: containerDimensions.height, containerWidth: containerDimensions.width, containerPureTop: containerDimensions.pureTop, popoverHeight: popoverDimensions.height, popoverWidth: popoverDimensions.width, windowScrollTop: window.scrollY || window.pageYOffset, windowWidth: window.innerWidth, windowHeight: window.innerHeight, contentHeight: contentDimensions.height, documentHeight: documentDimensions.height }); } }; calculate(); window.addEventListener("resize", calculate); if (fixed) window.addEventListener("scroll", calculate); if (scrollableParent !== document.body && scrollableParent) scrollableParent.addEventListener("scroll", calculate); return function () { window.removeEventListener("resize", calculate); if (fixed) window.removeEventListener("scroll", calculate); if (scrollableParent !== document.body && scrollableParent) scrollableParent.removeEventListener("scroll", calculate); }; }, [containerRef, content, popover, fixed, scrollableParent]); return positions; }; var _default = useDimensions; exports.default = _default;