UNPKG

@atlaskit/renderer

Version:
71 lines (70 loc) 2.74 kB
"use strict"; 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]); };