1 | import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
2 | import * as React from 'react';
|
3 | import { updateCSS, removeCSS } from "rc-util/es/Dom/dynamicCSS";
|
4 | import useLayoutEffect from "rc-util/es/hooks/useLayoutEffect";
|
5 | import getScrollBarSize from "rc-util/es/getScrollBarSize";
|
6 | import { isBodyOverflowing } from "./util";
|
7 | var UNIQUE_ID = "rc-util-locker-".concat(Date.now());
|
8 | var uuid = 0;
|
9 | export default function useScrollLocker(lock) {
|
10 | var mergedLock = !!lock;
|
11 |
|
12 | var _React$useState = React.useState(function () {
|
13 | uuid += 1;
|
14 | return "".concat(UNIQUE_ID, "_").concat(uuid);
|
15 | }),
|
16 | _React$useState2 = _slicedToArray(_React$useState, 1),
|
17 | id = _React$useState2[0];
|
18 |
|
19 | useLayoutEffect(function () {
|
20 | if (mergedLock) {
|
21 | var scrollbarSize = getScrollBarSize();
|
22 | var isOverflow = isBodyOverflowing();
|
23 | updateCSS("\nhtml body {\n overflow-y: hidden;\n ".concat(isOverflow ? "width: calc(100% - ".concat(scrollbarSize, "px);") : '', "\n}"), id);
|
24 | } else {
|
25 | removeCSS(id);
|
26 | }
|
27 |
|
28 | return function () {
|
29 | removeCSS(id);
|
30 | };
|
31 | }, [mergedLock, id]);
|
32 | } |
\ | No newline at end of file |