UNPKG

@atlaskit/editor-core

Version:

A package contains Atlassian editor core functionality

152 lines (149 loc) • 8.8 kB
"use strict"; 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))))))); });