@atlaskit/editor-core
Version:
A package contains Atlassian editor core functionality
152 lines (149 loc) • 8.8 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.EditorInternal = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = require("react");
var _react2 = require("@emotion/react");
var _analytics = require("@atlaskit/editor-common/analytics");
var _portal = require("@atlaskit/editor-common/portal");
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
var _ErrorBoundary = _interopRequireDefault(require("../create-editor/ErrorBoundary"));
var _ReactEditorView = _interopRequireDefault(require("../create-editor/ReactEditorView"));
var _EditorContext = _interopRequireDefault(require("../ui/EditorContext"));
var _IntlProviderIfMissingWrapper = require("../ui/IntlProviderIfMissingWrapper/IntlProviderIfMissingWrapper");
var _featureFlagsFromProps = require("../utils/feature-flags-from-props");
var _RenderTracking = require("../utils/performance/components/RenderTracking");
var _BaseThemeWrapper = require("./BaseThemeWrapper");
var _getBaseFontSize = require("./utils/getBaseFontSize");
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /**
* @jsxRuntime classic
* @jsx jsx
*/ // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
var editorContainerStyles = (0, _react2.css)({
position: 'relative',
width: '100%',
height: '100%'
});
var DEFAULT_VALUE_PROP_TO_IGNORE = ['defaultValue'];
/**
* EditorInternalComponent is used to capture the common component
* from the `render` method of `Editor` and share it with `EditorNext`.
*/
var EditorInternal = exports.EditorInternal = /*#__PURE__*/(0, _react.memo)(function (_ref) {
var props = _ref.props,
handleAnalyticsEvent = _ref.handleAnalyticsEvent,
createAnalyticsEvent = _ref.createAnalyticsEvent,
handleSave = _ref.handleSave,
editorActions = _ref.editorActions,
providerFactory = _ref.providerFactory,
onEditorCreated = _ref.onEditorCreated,
onEditorDestroyed = _ref.onEditorDestroyed,
preset = _ref.preset,
AppearanceComponent = _ref.AppearanceComponent;
var overriddenEditorProps = _objectSpread(_objectSpread({}, props), {}, {
onSave: props.onSave ? handleSave : undefined,
// noop all analytic events, even if a handler is still passed.
analyticsHandler: undefined
});
var featureFlags = (0, _featureFlagsFromProps.createFeatureFlagsFromProps)(props.featureFlags);
// Render tracking is firing too many events in Jira so we are disabling them for now. See - https://product-fabric.atlassian.net/browse/ED-25616
// Also firing too many events for the legacy content macro, so disabling for now. See - https://product-fabric.atlassian.net/browse/ED-26650
var renderTrackingEnabled = !(0, _platformFeatureFlags.fg)('platform_editor_disable_rerender_tracking_jira') && !featureFlags.lcmPreventRenderTracking;
var useShallow = false;
var _usePortalProvider = (0, _portal.usePortalProvider)(),
_usePortalProvider2 = (0, _slicedToArray2.default)(_usePortalProvider, 2),
portalProviderAPI = _usePortalProvider2[0],
PortalRenderer = _usePortalProvider2[1];
var _usePortalProvider3 = (0, _portal.usePortalProvider)(),
_usePortalProvider4 = (0, _slicedToArray2.default)(_usePortalProvider3, 2),
nodeViewPortalProviderAPI = _usePortalProvider4[0],
NodeViewPortalRenderer = _usePortalProvider4[1];
var propsToIgnore = (0, _expValEquals.expValEquals)('platform_editor_perf_lint_cleanup', 'isEnabled', true) ? DEFAULT_VALUE_PROP_TO_IGNORE : ['defaultValue'];
return (0, _react2.jsx)(_react.Fragment, null, renderTrackingEnabled && (0, _react2.jsx)(_RenderTracking.RenderTracking, {
componentProps: props,
action: _analytics.ACTION.RE_RENDERED,
actionSubject: _analytics.ACTION_SUBJECT.EDITOR,
handleAnalyticsEvent: handleAnalyticsEvent,
propsToIgnore: propsToIgnore,
useShallow: useShallow
}), (0, _react2.jsx)(_ErrorBoundary.default, {
errorTracking: true,
createAnalyticsEvent: createAnalyticsEvent,
contextIdentifierProvider: props.contextIdentifierProvider,
featureFlags: featureFlags
}, (0, _react2.jsx)("div", {
css: editorContainerStyles
}, (0, _react2.jsx)(_EditorContext.default, {
editorActions: editorActions
}, (0, _react2.jsx)(_IntlProviderIfMissingWrapper.IntlProviderIfMissingWrapper, null, (0, _react2.jsx)(_react.Fragment, null, (0, _react2.jsx)(_ReactEditorView.default, {
editorProps: overriddenEditorProps,
createAnalyticsEvent: createAnalyticsEvent,
portalProviderAPI: portalProviderAPI,
nodeViewPortalProviderAPI: nodeViewPortalProviderAPI,
providerFactory: providerFactory,
onEditorCreated: onEditorCreated,
onEditorDestroyed: onEditorDestroyed,
disabled: props.disabled,
preset: preset
// eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017: this callback closes over the full props object and derived featureFlags; memoization is ineffective because ReactEditorViewNext is not memo()'d and deps (props, featureFlags) change every render
,
render: function render(_ref2) {
var _props$featureFlags, _props$featureFlags2;
var editor = _ref2.editor,
view = _ref2.view,
eventDispatcher = _ref2.eventDispatcher,
config = _ref2.config,
dispatchAnalyticsEvent = _ref2.dispatchAnalyticsEvent,
editorRef = _ref2.editorRef,
editorAPI = _ref2.editorAPI;
return (0, _react2.jsx)(_BaseThemeWrapper.BaseThemeWrapper, {
baseFontSize: (0, _getBaseFontSize.getBaseFontSize)(props.appearance, props.contentMode)
}, (0, _react2.jsx)(AppearanceComponent, {
innerRef: editorRef,
editorAPI: editorAPI
// Ignored via go/ees005
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
,
appearance: props.appearance,
disabled: props.disabled,
editorActions: editorActions,
editorDOMElement: editor,
editorView: view,
providerFactory: providerFactory,
eventDispatcher: eventDispatcher,
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
maxHeight: props.maxHeight,
minHeight: props.minHeight,
onSave: props.onSave ? handleSave : undefined,
onCancel: props.onCancel,
onSSRMeasure: props.onSSRMeasure,
popupsMountPoint: props.popupsMountPoint,
popupsBoundariesElement: props.popupsBoundariesElement,
popupsScrollableElement: props.popupsScrollableElement,
contentComponents: config.contentComponents,
contentMode: props.contentMode,
primaryToolbarComponents: config.primaryToolbarComponents,
primaryToolbarIconBefore: props.primaryToolbarIconBefore,
secondaryToolbarComponents: config.secondaryToolbarComponents,
customContentComponents: props.contentComponents,
customPrimaryToolbarComponents: props.primaryToolbarComponents,
customSecondaryToolbarComponents: props.secondaryToolbarComponents,
contextPanel: props.contextPanel,
collabEdit: props.collabEdit,
persistScrollGutter: props.persistScrollGutter,
enableToolbarMinWidth: ((_props$featureFlags = props.featureFlags) === null || _props$featureFlags === void 0 ? void 0 : _props$featureFlags.toolbarMinWidthOverflow) != null ? !!((_props$featureFlags2 = props.featureFlags) !== null && _props$featureFlags2 !== void 0 && _props$featureFlags2.toolbarMinWidthOverflow) : props.allowUndoRedoButtons,
useStickyToolbar: props.useStickyToolbar,
featureFlags: featureFlags,
pluginHooks: config.pluginHooks,
__livePage: props.__livePage,
preset: preset
}));
}
}), (0, _react2.jsx)(PortalRenderer, null), (0, _react2.jsx)(NodeViewPortalRenderer, null)))))));
});