@atlaskit/renderer
Version:
Renderer component
76 lines (75 loc) • 3.1 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';
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;