1234567891011121314151617181920212223242526272829 |
- import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
- import * as React from 'react';
- import { updateCSS, removeCSS } from "rc-util/es/Dom/dynamicCSS";
- import useLayoutEffect from "rc-util/es/hooks/useLayoutEffect";
- import { getTargetScrollBarSize } from "rc-util/es/getScrollBarSize";
- import { isBodyOverflowing } from "./util";
- var UNIQUE_ID = "rc-util-locker-".concat(Date.now());
- var uuid = 0;
- export default function useScrollLocker(lock) {
- var mergedLock = !!lock;
- var _React$useState = React.useState(function () {
- uuid += 1;
- return "".concat(UNIQUE_ID, "_").concat(uuid);
- }),
- _React$useState2 = _slicedToArray(_React$useState, 1),
- id = _React$useState2[0];
- useLayoutEffect(function () {
- if (mergedLock) {
- var scrollbarSize = getTargetScrollBarSize(document.body).width;
- var isOverflow = isBodyOverflowing();
- updateCSS("\nhtml body {\n overflow-y: hidden;\n ".concat(isOverflow ? "width: calc(100% - ".concat(scrollbarSize, "px);") : '', "\n}"), id);
- } else {
- removeCSS(id);
- }
- return function () {
- removeCSS(id);
- };
- }, [mergedLock, id]);
- }
|