UNPKG

3.62 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
8
9var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
10
11var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
12
13var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
14
15var _createClass2 = require('babel-runtime/helpers/createClass');
16
17var _createClass3 = _interopRequireDefault(_createClass2);
18
19var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
20
21var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
22
23var _inherits2 = require('babel-runtime/helpers/inherits');
24
25var _inherits3 = _interopRequireDefault(_inherits2);
26
27var _react = require('react');
28
29var _propTypes = require('prop-types');
30
31var _propTypes2 = _interopRequireDefault(_propTypes);
32
33function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
34
35var originalBodyOverflow = null;
36var lockingCounter = 0;
37
38var AutoLockScrolling = function (_Component) {
39 (0, _inherits3.default)(AutoLockScrolling, _Component);
40
41 function AutoLockScrolling() {
42 var _ref;
43
44 var _temp, _this, _ret;
45
46 (0, _classCallCheck3.default)(this, AutoLockScrolling);
47
48 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
49 args[_key] = arguments[_key];
50 }
51
52 return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = AutoLockScrolling.__proto__ || (0, _getPrototypeOf2.default)(AutoLockScrolling)).call.apply(_ref, [this].concat(args))), _this), _this.locked = false, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
53 }
54
55 (0, _createClass3.default)(AutoLockScrolling, [{
56 key: 'componentDidMount',
57 value: function componentDidMount() {
58 if (this.props.lock === true) {
59 this.preventScrolling();
60 }
61 }
62 }, {
63 key: 'componentWillReceiveProps',
64 value: function componentWillReceiveProps(nextProps) {
65 if (this.props.lock !== nextProps.lock) {
66 if (nextProps.lock) {
67 this.preventScrolling();
68 } else {
69 this.allowScrolling();
70 }
71 }
72 }
73 }, {
74 key: 'componentWillUnmount',
75 value: function componentWillUnmount() {
76 this.allowScrolling();
77 }
78
79 // force to only lock/unlock once
80
81 }, {
82 key: 'preventScrolling',
83 value: function preventScrolling() {
84 if (this.locked === true) {
85 return;
86 }
87
88 lockingCounter = lockingCounter + 1;
89 this.locked = true;
90
91 // only lock the first time the component is mounted.
92 if (lockingCounter === 1) {
93 var body = document.getElementsByTagName('body')[0];
94 originalBodyOverflow = body.style.overflow;
95 body.style.overflow = 'hidden';
96 }
97 }
98 }, {
99 key: 'allowScrolling',
100 value: function allowScrolling() {
101 if (this.locked === true) {
102 lockingCounter = lockingCounter - 1;
103 this.locked = false;
104 }
105
106 if (lockingCounter === 0 && originalBodyOverflow !== null) {
107 var body = document.getElementsByTagName('body')[0];
108 body.style.overflow = originalBodyOverflow || '';
109 originalBodyOverflow = null;
110 }
111 }
112 }, {
113 key: 'render',
114 value: function render() {
115 return null;
116 }
117 }]);
118 return AutoLockScrolling;
119}(_react.Component);
120
121AutoLockScrolling.propTypes = process.env.NODE_ENV !== "production" ? {
122 lock: _propTypes2.default.bool.isRequired
123} : {};
124exports.default = AutoLockScrolling;
\No newline at end of file