@atlaskit/renderer
Version:
Renderer component
71 lines (70 loc) • 2.74 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useMultiBodiedExtensionContext = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireDefault(require("react"));
var _memoizeOne = _interopRequireDefault(require("memoize-one"));
var _extensions = require("@atlaskit/editor-common/extensions");
var _providerFactory = require("@atlaskit/editor-common/provider-factory");
var useMultiBodiedExtensionContext = exports.useMultiBodiedExtensionContext = function useMultiBodiedExtensionContext(_ref) {
var extensionType = _ref.extensionType,
extensionKey = _ref.extensionKey;
var isMounted = _react.default.useRef(true);
var localGetNodeRenderer = _react.default.useMemo(function () {
return (0, _memoizeOne.default)(_extensions.getNodeRenderer);
}, []);
var _React$useState = _react.default.useState(),
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
provider = _React$useState2[0],
setProvider = _React$useState2[1];
// eslint-disable-next-line @typescript-eslint/no-explicit-any
var _React$useState3 = _react.default.useState(),
_React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
privateProps = _React$useState4[0],
setPrivateProps = _React$useState4[1];
var providerPromise = (0, _providerFactory.useProvider)('extensionProvider');
_react.default.useEffect(function () {
if (providerPromise) {
providerPromise.then(function (p) {
if (isMounted.current) {
setProvider(p);
}
return (0, _extensions.getExtensionModuleNodePrivateProps)(p, extensionType, extensionKey);
}).then(function (pr) {
if (isMounted.current) {
setPrivateProps(pr);
}
});
}
}, [providerPromise, extensionType, extensionKey]);
var NodeRenderer = _react.default.useMemo(function () {
if (!provider) {
return null;
}
return localGetNodeRenderer(provider, extensionType, extensionKey);
}, [provider, extensionType, extensionKey, localGetNodeRenderer]);
_react.default.useEffect(function () {
isMounted.current = true;
return function () {
isMounted.current = false;
};
}, []);
return _react.default.useMemo(function () {
if (!provider || !NodeRenderer || !privateProps) {
return {
extensionContext: null,
loading: true
};
}
return {
extensionContext: {
NodeRenderer: NodeRenderer,
privateProps: privateProps
},
loading: false
};
}, [provider, NodeRenderer, privateProps]);
};