UNPKG

carbon-react

Version:

A library of reusable React components for easily building user interfaces.

2 lines (1 loc) 1.45 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),l=require("../../../__internal__/utils/helpers/guid/index.js");const t=new(require("./scroll-block-manager.js").default),r=()=>{const{documentElement:e,body:l}=document||{},t=window.innerWidth-e.clientWidth;return[{element:e,property:"position",blockingValue:"relative"},{element:e,property:"overflow",blockingValue:"hidden"},{element:l,property:"position",blockingValue:"relative"},{element:l,property:"overflow",blockingValue:"hidden"},{element:l,property:"paddingRight",blockingValue:`${(parseInt(window.getComputedStyle(l).getPropertyValue("padding-right"))||0)+t}px`}]};exports.default=()=>{const{current:n}=e.useRef(l.default()),o=e.useRef([]),a=e.useCallback((()=>{r().forEach((({element:e,property:l},t)=>{e.style[l]=o.current[t]}))}),[]);return{blockScroll:e.useCallback((()=>{const e=r(),l=t.isBlocked();if(t.registerComponent(n),l)return;const i=e.map((({element:e,property:l})=>e.style[l]));o.current=i,t.saveRestoreValuesCallback(a),t.saveOriginalValues(i),e.slice(-3).forEach((({element:e,property:l,blockingValue:t})=>{e.style[l]=t}))}),[a,n]),allowScroll:e.useCallback((()=>{if(t.unregisterComponent(n),t.isBlocked())return;const e=t.getRestoreValuesCallback();if(e)return e(),void t.saveRestoreValuesCallback(null);const l=t.getOriginalValues();r().forEach((({element:e,property:t},r)=>{e.style[t]=l[r]})),t.saveOriginalValues([])}),[n])}};