UNPKG

@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
'use strict'; 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;