UNPKG

3.11 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.useViewportScanner = undefined;
7
8var _objectWithoutProperties2 = require("babel-runtime/helpers/objectWithoutProperties");
9
10var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
11
12var _slicedToArray2 = require("babel-runtime/helpers/slicedToArray");
13
14var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
15
16var _react = require("react");
17
18var _react2 = _interopRequireDefault(_react);
19
20var _propTypes = require("prop-types");
21
22var _propTypes2 = _interopRequireDefault(_propTypes);
23
24function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
26var useViewportScanner = function useViewportScanner(_ref) {
27 var containerSelector = _ref.containerSelector,
28 _ref$onViewportStatus = _ref.onViewportStatusChange,
29 onViewportStatusChange = _ref$onViewportStatus === undefined ? function () {} : _ref$onViewportStatus,
30 _ref$defaultBottomIsV = _ref.defaultBottomIsVisible,
31 defaultBottomIsVisible = _ref$defaultBottomIsV === undefined ? true : _ref$defaultBottomIsV,
32 isLocked = _ref.isLocked,
33 children = _ref.children;
34
35 var _useState = (0, _react.useState)(defaultBottomIsVisible),
36 _useState2 = (0, _slicedToArray3.default)(_useState, 2),
37 bottomIsVisible = _useState2[0],
38 setBottomIsVisibleTo = _useState2[1];
39
40 var _useState3 = (0, _react.useState)(null),
41 _useState4 = (0, _slicedToArray3.default)(_useState3, 2),
42 containerElement = _useState4[0],
43 setContainerElementTo = _useState4[1];
44
45 var usePrevious = function usePrevious(value) {
46 var ref = (0, _react.useRef)();
47 (0, _react.useEffect)(function () {
48 ref.current = value;
49 });
50 return ref.current;
51 };
52 var prevBottomIsVisible = usePrevious(bottomIsVisible);
53 (0, _react.useEffect)(function () {
54 if (prevBottomIsVisible !== bottomIsVisible) {
55 onViewportStatusChange({ bottomIsVisible: bottomIsVisible, prevBottomIsVisible: prevBottomIsVisible });
56 }
57 });
58 var handleScroll = function handleScroll() {
59 if (containerElement === null) {
60 setContainerElementTo(document.querySelector(containerSelector));
61 }
62 if (!isLocked && containerElement !== null) {
63 if (containerElement.getBoundingClientRect().bottom > 0) {
64 setBottomIsVisibleTo(true);
65 } else {
66 setBottomIsVisibleTo(false);
67 }
68 }
69 };
70
71 (0, _react.useEffect)(function () {
72 if (typeof window !== "undefined") {
73 //console.log(`mount`)
74 window.addEventListener("scroll", handleScroll);
75 }
76 return function () {
77 //console.log(`unmount`)
78
79 window.removeEventListener("scroll", handleScroll);
80 };
81 });
82
83 return {
84 bottomIsVisible: bottomIsVisible
85 };
86};
87
88var ViewportScanner = function ViewportScanner(_ref2) {
89 var children = _ref2.children,
90 props = (0, _objectWithoutProperties3.default)(_ref2, ["children"]);
91 return children(useViewportScanner(props));
92};
93
94exports.useViewportScanner = useViewportScanner;
95exports.default = ViewportScanner;
\No newline at end of file