UNPKG

@atlaskit/editor-common

Version:

A package that contains common classes and components for editor and renderer

22 lines (21 loc) 1.08 kB
import { useEffect, useMemo } from 'react'; import { createPortalRendererComponent, getPortalProviderAPI } from './common'; import { PortalManager } from './PortalManager'; /** * Initializes PortalManager and creates PortalRendererComponent. Offers an API (portalProviderAPI) for managing portals. * @returns {[PortalProviderAPI, PortalRendererComponent]} An array containing two elements: * 1. portalProviderAPI: An object providing an API for rendering and removing portals. * 2. PortalRenderer: A React component responsible for rendering the portal content. */ export function usePortalProvider() { const portalManager = useMemo(() => new PortalManager(), []); const PortalRenderer = useMemo(() => createPortalRendererComponent(portalManager), [portalManager]); const portalProviderAPI = useMemo(() => getPortalProviderAPI(portalManager), [portalManager]); // Cleanup on unmount useEffect(() => { return () => { portalProviderAPI.destroy(); }; }, [portalManager, portalProviderAPI]); return [portalProviderAPI, PortalRenderer]; }