@atlaskit/editor-common
Version:
A package that contains common classes and components for editor and renderer
22 lines (21 loc) • 1.08 kB
JavaScript
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];
}