UNPKG

@atlaskit/renderer

Version:
64 lines 2.28 kB
import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import React from 'react'; import memoizeOne from 'memoize-one'; import { getExtensionModuleNodePrivateProps, getNodeRenderer } from '@atlaskit/editor-common/extensions'; import { useProvider } from '@atlaskit/editor-common/provider-factory'; export var useMultiBodiedExtensionContext = function useMultiBodiedExtensionContext(_ref) { var extensionType = _ref.extensionType, extensionKey = _ref.extensionKey; var isMounted = React.useRef(true); var localGetNodeRenderer = React.useMemo(function () { return memoizeOne(getNodeRenderer); }, []); var _React$useState = React.useState(), _React$useState2 = _slicedToArray(_React$useState, 2), provider = _React$useState2[0], setProvider = _React$useState2[1]; // eslint-disable-next-line @typescript-eslint/no-explicit-any var _React$useState3 = React.useState(), _React$useState4 = _slicedToArray(_React$useState3, 2), privateProps = _React$useState4[0], setPrivateProps = _React$useState4[1]; var providerPromise = useProvider('extensionProvider'); React.useEffect(function () { if (providerPromise) { providerPromise.then(function (p) { if (isMounted.current) { setProvider(p); } return getExtensionModuleNodePrivateProps(p, extensionType, extensionKey); }).then(function (pr) { if (isMounted.current) { setPrivateProps(pr); } }); } }, [providerPromise, extensionType, extensionKey]); var NodeRenderer = React.useMemo(function () { if (!provider) { return null; } return localGetNodeRenderer(provider, extensionType, extensionKey); }, [provider, extensionType, extensionKey, localGetNodeRenderer]); React.useEffect(function () { isMounted.current = true; return function () { isMounted.current = false; }; }, []); return React.useMemo(function () { if (!provider || !NodeRenderer || !privateProps) { return { extensionContext: null, loading: true }; } return { extensionContext: { NodeRenderer: NodeRenderer, privateProps: privateProps }, loading: false }; }, [provider, NodeRenderer, privateProps]); };