UNPKG

@atlaskit/renderer

Version:
76 lines (75 loc) 3.1 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'; const BodiedExtension = props => { const { children, layout = 'default', path = [], extensionKey, extensionType, parameters, extensionViewportSizes, localId, shouldDisplayExtensionAsInline, fireAnalyticsEvent } = props; const { createAnalyticsEvent } = useAnalyticsEvents(); const removeOverflow = React.Children.toArray(children) // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any .map(child => /*#__PURE__*/React.isValidElement(child) ? child.props.nodeType === 'table' : false).every(Boolean); const validationContextValue = useMemo(() => ({ allowNestedTables: true }), []); return /*#__PURE__*/React.createElement(ErrorBoundary, { component: ACTION_SUBJECT.RENDERER, componentId: ACTION_SUBJECT_ID.EXTENSION_BODIED, createAnalyticsEvent: createAnalyticsEvent, additionalInfo: `${extensionType}: ${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" }), ({ node, 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 }, removeOverflow, parameters === null || parameters === void 0 ? void 0 : parameters.extensionId, extensionViewportSizes, undefined, localId, shouldDisplayExtensionAsInline, node); } } catch { /** 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 }, removeOverflow, parameters === null || parameters === void 0 ? void 0 : parameters.extensionId, extensionViewportSizes, undefined, localId, shouldDisplayExtensionAsInline, node); })))); }; export default BodiedExtension;