@winglet/react-utils
Version:
React utility library providing custom hooks, higher-order components (HOCs), and utility functions to enhance React application development with improved reusability and functionality
29 lines (25 loc) • 1.25 kB
JavaScript
var jsxRuntime = require('react/jsx-runtime');
var react = require('react');
var reactDom = require('react-dom');
var array = require('@winglet/common-utils/array');
var lib = require('@winglet/common-utils/lib');
var PortalContext = require('./PortalContext.cjs');
const PortalContextProvider = ({ children }) => {
const [components, setComponents] = react.useState([]);
const portalAnchorRef = react.useRef(null);
const value = react.useMemo(() => ({
portalAnchorRef,
register: (element) => {
const id = lib.getRandomString(36);
setComponents((previous) => [...previous, { id, element }]);
return id;
},
unregister: (id) => {
setComponents((previous) => previous.filter((component) => component.id !== id));
},
}), []);
return (jsxRuntime.jsxs(PortalContext.PortalContext.Provider, { value: value, children: [children, portalAnchorRef.current &&
reactDom.createPortal(jsxRuntime.jsx(react.Fragment, { children: array.map(components, ({ id, element }) => (jsxRuntime.jsx(react.Fragment, { children: element }, id))) }), portalAnchorRef.current)] }));
};
exports.PortalContextProvider = PortalContextProvider;
;