@veracity/vui
Version:
Veracity UI is a React component library crafted for use within Veracity applications and pages. Based on Styled Components and @xstyled.
33 lines (31 loc) • 1.04 kB
JavaScript
import { useBodyScrollLock } from "../core/vuiProvider/useBodyScrollLock.js";
import { useEffect } from "react";
//#region src/modal/modalManager.ts
/** State management for nested modals. */
var ModalManager = class {
modals = [];
add = (modal) => this.modals.push(modal);
remove = (modal) => this.modals = this.modals.filter((m) => m !== modal);
isTopModal = (modal) => {
return this.modals[this.modals.length - 1] === modal;
};
};
const manager = new ModalManager();
/** Refs of new modals will be automatically added/removed from the state when rendering. */
function useModalManager(ref, isOpen, disableScrollLock) {
const { setIsScrollLocked } = useBodyScrollLock();
useEffect(() => {
if (isOpen) {
manager.add(ref);
if (!disableScrollLock) setIsScrollLocked(true);
}
return () => {
manager.remove(ref);
if (!disableScrollLock) setIsScrollLocked(false);
};
}, [isOpen, ref]);
}
//#endregion
export { manager, useModalManager };
globalThis.__vuiVersion__ = "5.3.1"
//# sourceMappingURL=modalManager.js.map