@esri/calcite-components
Version:
Web Components for Esri's Calcite Design System.
55 lines (54 loc) • 1.73 kB
JavaScript
/*! All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://github.com/Esri/calcite-design-system/blob/dev/LICENSE.md for details.
v3.2.1 */
import { makeGenericController } from "@arcgis/lumina/controllers";
let openedComponentCount = 0;
let initialDocumentOverflowStyle = "";
const usePreventDocumentScroll = () => {
function addOpenedComponent() {
openedComponentCount++;
if (openedComponentCount === 1) {
initialDocumentOverflowStyle = document.documentElement.style.overflow;
document.documentElement.style.overflow = "hidden";
}
}
function removeOpenedComponent() {
openedComponentCount--;
if (openedComponentCount === 0) {
document.documentElement.style.overflow = initialDocumentOverflowStyle;
}
}
return makeGenericController((component, controller) => {
controller.onConnected(() => {
if (component.opened && component.preventDocumentScroll) {
addOpenedComponent();
}
});
controller.onUpdate((changes) => {
if (!component.hasUpdated) {
return;
}
if (changes.has("opened") && component.preventDocumentScroll) {
if (component.opened) {
addOpenedComponent();
} else {
removeOpenedComponent();
}
} else if (changes.has("preventDocumentScroll") && component.opened) {
if (component.preventDocumentScroll) {
addOpenedComponent();
} else {
removeOpenedComponent();
}
}
});
controller.onDisconnected(() => {
if (component.opened && component.preventDocumentScroll) {
removeOpenedComponent();
}
});
});
};
export {
usePreventDocumentScroll as u
};