UNPKG

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