@atlaskit/renderer
Version:
Renderer component
64 lines • 2.28 kB
JavaScript
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]);
};