UNPKG

2.18 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports.default = ScrollbarSize;
11
12var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
14var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
15
16var React = _interopRequireWildcard(require("react"));
17
18var _propTypes = _interopRequireDefault(require("prop-types"));
19
20var _debounce = _interopRequireDefault(require("../utils/debounce"));
21
22var styles = {
23 width: 99,
24 height: 99,
25 position: 'absolute',
26 top: -9999,
27 overflow: 'scroll'
28};
29/**
30 * @ignore - internal component.
31 * The component originates from https://github.com/STORIS/react-scrollbar-size.
32 * It has been moved into the core in order to minimize the bundle size.
33 */
34
35function ScrollbarSize(props) {
36 var onChange = props.onChange,
37 other = (0, _objectWithoutProperties2.default)(props, ["onChange"]);
38 var scrollbarHeight = React.useRef();
39 var nodeRef = React.useRef(null);
40
41 var setMeasurements = function setMeasurements() {
42 scrollbarHeight.current = nodeRef.current.offsetHeight - nodeRef.current.clientHeight;
43 };
44
45 React.useEffect(function () {
46 var handleResize = (0, _debounce.default)(function () {
47 var prevHeight = scrollbarHeight.current;
48 setMeasurements();
49
50 if (prevHeight !== scrollbarHeight.current) {
51 onChange(scrollbarHeight.current);
52 }
53 });
54 window.addEventListener('resize', handleResize);
55 return function () {
56 handleResize.clear();
57 window.removeEventListener('resize', handleResize);
58 };
59 }, [onChange]);
60 React.useEffect(function () {
61 setMeasurements();
62 onChange(scrollbarHeight.current);
63 }, [onChange]);
64 return /*#__PURE__*/React.createElement("div", (0, _extends2.default)({
65 style: styles,
66 ref: nodeRef
67 }, other));
68}
69
70process.env.NODE_ENV !== "production" ? ScrollbarSize.propTypes = {
71 onChange: _propTypes.default.func.isRequired
72} : void 0;
\No newline at end of file