@atlaskit/renderer
Version:
Renderer component
78 lines (77 loc) • 3.65 kB
JavaScript
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;