UNPKG

@pdftron/webviewer-react-toolkit

Version:

A React component library for integrating with PDFTron WebViewer API.

53 lines (52 loc) 1.75 kB
import { useEffect } from 'react'; import { createPortal } from 'react-dom'; function generateOverlayLayer() { var currentId = 1; var elements = new Set(); var classes = {}; var overlayRoot = document.createElement('div'); overlayRoot.classList.add('ui__base', 'ui__overlay'); var appendElement = function () { return document.body.appendChild(overlayRoot); }; var removeElement = function () { return document.body.removeChild(overlayRoot); }; var addClass = function (className) { if (!className) return; overlayRoot.classList.add(className); classes[className] = (classes[className] || 0) + 1; }; var removeClass = function (className) { if (!className) return; classes[className] = (classes[className] || 0) - 1; if (classes[className] <= 0) { delete classes[className]; overlayRoot.classList.remove(className); } }; var add = function (props) { var id = currentId++; addClass(props.className); elements.add(id); if (elements.size === 1) appendElement(); return function () { elements.delete(id); removeClass(props.className); if (elements.size === 0) removeElement(); }; }; return (function (_a) { var children = _a.children, className = _a.className; useEffect(function () { return add({ className: className }); }, [className]); return createPortal(children, overlayRoot); }); } var Overlay; if (typeof window !== 'undefined') { Overlay = generateOverlayLayer(); } else { Overlay = function () { return null; }; } export { Overlay };