UNPKG

@atlaskit/renderer

Version:
78 lines (77 loc) 3.65 kB
import _extends from "@babel/runtime/helpers/extends"; import React, { useMemo } from 'react'; import { useAnalyticsEvents } from '@atlaskit/analytics-next'; import { renderExtension } from './extension'; import { ErrorBoundary } from '../../ui/Renderer/ErrorBoundary'; import ExtensionRenderer from '../../ui/ExtensionRenderer'; import { ACTION_SUBJECT } from '../../analytics/enums'; import { ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics'; import { AnnotationsPositionContext } from '../../ui/annotations'; import { ValidationContextProvider } from '../../ui/Renderer/ValidationContext'; var BodiedExtension = function BodiedExtension(props) { var children = props.children, _props$layout = props.layout, layout = _props$layout === void 0 ? 'default' : _props$layout, _props$path = props.path, path = _props$path === void 0 ? [] : _props$path, extensionKey = props.extensionKey, extensionType = props.extensionType, parameters = props.parameters, extensionViewportSizes = props.extensionViewportSizes, localId = props.localId, shouldDisplayExtensionAsInline = props.shouldDisplayExtensionAsInline, fireAnalyticsEvent = props.fireAnalyticsEvent; var _useAnalyticsEvents = useAnalyticsEvents(), createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent; var removeOverflow = React.Children.toArray(children) // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any .map(function (child) { return /*#__PURE__*/React.isValidElement(child) ? child.props.nodeType === 'table' : false; }).every(Boolean); var validationContextValue = useMemo(function () { return { allowNestedTables: true }; }, []); return /*#__PURE__*/React.createElement(ErrorBoundary, { component: ACTION_SUBJECT.RENDERER, componentId: ACTION_SUBJECT_ID.EXTENSION_BODIED, createAnalyticsEvent: createAnalyticsEvent, additionalInfo: "".concat(extensionType, ": ").concat(extensionKey, " ") }, /*#__PURE__*/React.createElement(AnnotationsPositionContext.Provider, { value: { startPos: props.startPos + 1 } }, /*#__PURE__*/React.createElement(ValidationContextProvider, { value: validationContextValue }, /*#__PURE__*/React.createElement(ExtensionRenderer // Ignored via go/ees005 // eslint-disable-next-line react/jsx-props-no-spreading , _extends({}, props, { type: "bodiedExtension" }), function (_ref) { var node = _ref.node, result = _ref.result; try { if (result && /*#__PURE__*/React.isValidElement(result)) { // Return the content directly if it's a valid JSX.Element return renderExtension(result, layout, { isTopLevel: path.length < 1, rendererAppearance: props.rendererAppearance, fireAnalyticsEvent: fireAnalyticsEvent }, removeOverflow, parameters === null || parameters === void 0 ? void 0 : parameters.extensionId, extensionViewportSizes, undefined, localId, shouldDisplayExtensionAsInline, node); } } catch (_unused) { /** We don't want this error to block renderer */ /** We keep rendering the default content */ } // Always return default content if anything goes wrong return renderExtension(children, layout, { isTopLevel: path.length < 1, rendererAppearance: props.rendererAppearance, fireAnalyticsEvent: fireAnalyticsEvent }, removeOverflow, parameters === null || parameters === void 0 ? void 0 : parameters.extensionId, extensionViewportSizes, undefined, localId, shouldDisplayExtensionAsInline, node); })))); }; export default BodiedExtension;