Outlook_Addin_LLM/node_modules/@fluentui/react-dialog/lib/utils/useDisableBodyScroll.js

45 lines
1.8 KiB
JavaScript
Raw Normal View History

import { useFluent_unstable } from '@fluentui/react-shared-contexts';
import { useCallback } from 'react';
import { useBodyNoScrollStyles, useHTMLNoScrollStyles } from './useDisableBodyScroll.styles';
/**
* @internal
* A React *hook* that disables body scrolling through `overflowY: hidden` CSS property
*/ export function useDisableBodyScroll() {
const htmlNoScrollStyles = useHTMLNoScrollStyles();
const bodyNoScrollStyles = useBodyNoScrollStyles();
const { targetDocument } = useFluent_unstable();
const disableBodyScroll = useCallback(()=>{
var _targetDocument_defaultView;
if (!targetDocument) {
return;
}
var _targetDocument_defaultView_innerHeight;
const isHorizontalScrollbarVisible = targetDocument.body.clientHeight > ((_targetDocument_defaultView_innerHeight = (_targetDocument_defaultView = targetDocument.defaultView) === null || _targetDocument_defaultView === void 0 ? void 0 : _targetDocument_defaultView.innerHeight) !== null && _targetDocument_defaultView_innerHeight !== void 0 ? _targetDocument_defaultView_innerHeight : 0);
if (!isHorizontalScrollbarVisible) {
return;
}
targetDocument.documentElement.classList.add(htmlNoScrollStyles);
targetDocument.body.classList.add(bodyNoScrollStyles);
return;
}, [
targetDocument,
htmlNoScrollStyles,
bodyNoScrollStyles
]);
const enableBodyScroll = useCallback(()=>{
if (!targetDocument) {
return;
}
targetDocument.documentElement.classList.remove(htmlNoScrollStyles);
targetDocument.body.classList.remove(bodyNoScrollStyles);
}, [
targetDocument,
htmlNoScrollStyles,
bodyNoScrollStyles
]);
return {
disableBodyScroll,
enableBodyScroll
};
}