UNPKG

@atlaskit/editor-plugin-extension

Version:

editor-plugin-extension plugin for @atlaskit/editor-core

239 lines (238 loc) • 12.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.extensionPlugin = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _uuid = require("uuid"); var _extension = require("@atlaskit/adf-schema/extension"); var _inlineExtension = require("@atlaskit/adf-schema/inline-extension"); var _multiBodiedExtension = require("@atlaskit/adf-schema/multi-bodied-extension"); var _safePlugin = require("@atlaskit/editor-common/safe-plugin"); var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled"); var _fg = require("@atlaskit/platform-feature-flags/fg"); var _actions = require("./editor-actions/actions"); var _commands = require("./editor-commands/commands"); var _extensionApi = require("./pm-plugins/extension-api"); var _keymap = _interopRequireDefault(require("./pm-plugins/keymap")); var _actions2 = require("./pm-plugins/macro/actions"); var _plugin = require("./pm-plugins/macro/plugin"); var _main = require("./pm-plugins/main"); var _pluginKey = require("./pm-plugins/plugin-key"); var _bodiedExtension = require("./pm-plugins/toDOM-fixes/bodiedExtension"); var _toolbar = require("./pm-plugins/toolbar"); var _uniqueId = require("./pm-plugins/unique-id"); var _constants = require("./ui/ConfigPanel/constants"); var _contextPanel = require("./ui/context-panel"); var _useConfigPanelPluginHook = require("./ui/useConfigPanelPluginHook"); 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; } // eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead var extensionPlugin = exports.extensionPlugin = function extensionPlugin(_ref) { var _api$featureFlags, _api$contextPanel, _api$analytics2, _api$analytics3, _api$contextPanel4; var _ref$config = _ref.config, options = _ref$config === void 0 ? {} : _ref$config, _api = _ref.api; // eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead var configPanelId = "".concat(_constants.CONFIG_PANEL_ID, "-").concat((0, _uuid.v4)()); var featureFlags = (_api === null || _api === void 0 || (_api$featureFlags = _api.featureFlags) === null || _api$featureFlags === void 0 ? void 0 : _api$featureFlags.sharedState.currentState()) || {}; //Note: This is a hack to get the editor view reference in the plugin. Copied from table plugin. //This is needed to get the current selection in the editor var editorViewRef = { current: null }; var extensionLoadingHandlers = {}; var showContextPanel = _api === null || _api === void 0 || (_api$contextPanel = _api.contextPanel) === null || _api$contextPanel === void 0 || (_api$contextPanel = _api$contextPanel.actions) === null || _api$contextPanel === void 0 ? void 0 : _api$contextPanel.showPanel; return { name: 'extension', nodes: function nodes() { var extensionNodes = [{ name: 'extension', node: (0, _fg.fg)('cc_maui_annotations_on_extensions') ? _extension.extensionWithAnnotationStage0 : _extension.extension }, { name: 'bodiedExtension', node: (0, _bodiedExtension.bodiedExtensionSpecWithFixedToDOM)() }, { name: 'inlineExtension', node: _inlineExtension.inlineExtension }, { name: 'extensionFrame', node: _multiBodiedExtension.extensionFrame }, { name: 'multiBodiedExtension', node: _multiBodiedExtension.multiBodiedExtension }]; return extensionNodes; }, getSharedState: function getSharedState(state) { var _pluginState$shouldAn; if (!state) { return undefined; } var pluginState = _pluginKey.pluginKey.getState(state); return _objectSpread(_objectSpread({ showContextPanel: pluginState === null || pluginState === void 0 ? void 0 : pluginState.showContextPanel }, (0, _isExperimentEnabled.isExperimentEnabled)('cwr_remix_animate_stream_only') && { shouldAnimateInsertedContent: (_pluginState$shouldAn = pluginState === null || pluginState === void 0 ? void 0 : pluginState.shouldAnimateInsertedContent) !== null && _pluginState$shouldAn !== void 0 ? _pluginState$shouldAn : false }), {}, { extensionProvider: pluginState === null || pluginState === void 0 ? void 0 : pluginState.extensionProvider, processParametersAfter: pluginState === null || pluginState === void 0 ? void 0 : pluginState.processParametersAfter }); }, commands: { setInsertAnimationEnabled: function setInsertAnimationEnabled(enabled) { return function (_ref2) { var tr = _ref2.tr; return (0, _isExperimentEnabled.isExperimentEnabled)('cwr_remix_animate_stream_only') ? tr.setMeta(_pluginKey.pluginKey, { type: 'UPDATE_STATE', data: { shouldAnimateInsertedContent: enabled } }).setMeta('addToHistory', false) : null; }; } }, pmPlugins: function pmPlugins() { return [{ name: 'extension', plugin: function plugin(_ref3) { var dispatch = _ref3.dispatch, providerFactory = _ref3.providerFactory, portalProviderAPI = _ref3.portalProviderAPI, eventDispatcher = _ref3.eventDispatcher, getIntl = _ref3.getIntl; var extensionHandlers = options.extensionHandlers || {}; return (0, _main.createPlugin)(dispatch, providerFactory, extensionHandlers, extensionLoadingHandlers, portalProviderAPI, eventDispatcher, _api, options.useLongPressSelection, { appearance: options.appearance, getExtensionHeight: options.getExtensionHeight, allowAIGeneratedContentMotion: options.allowAIGeneratedContentMotion }, featureFlags, options === null || options === void 0 ? void 0 : options.__rendererExtensionOptions, getIntl()); } }, { name: 'extensionKeymap', plugin: function plugin() { var _api$contextPanel2; return (0, _keymap.default)(_api === null || _api === void 0 || (_api$contextPanel2 = _api.contextPanel) === null || _api$contextPanel2 === void 0 ? void 0 : _api$contextPanel2.actions.applyChange); } }, { name: 'extensionUniqueId', plugin: function plugin() { return (0, _uniqueId.createPlugin)(); } }, { name: 'extensionEditorViewRef', plugin: function plugin() { return new _safePlugin.SafePlugin({ view: function view(editorView) { // Do not cleanup the editorViewRef on destroy // because some functions may point to a stale // reference and this means we will return null. // EditorView is assumed to be stable so we do not need to // cleanup. // See: #hot-106316 editorViewRef.current = editorView; return {}; } }); } }, { name: 'macro', plugin: function plugin(_ref4) { var dispatch = _ref4.dispatch, providerFactory = _ref4.providerFactory; return (0, _plugin.createPlugin)(dispatch, providerFactory); } }]; }, actions: { api: function api() { var _api$contextPanel3, _api$analytics; return (0, _extensionApi.createExtensionAPI)({ // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion editorView: editorViewRef.current, applyChange: _api === null || _api === void 0 || (_api$contextPanel3 = _api.contextPanel) === null || _api$contextPanel3 === void 0 ? void 0 : _api$contextPanel3.actions.applyChange, editorAnalyticsAPI: _api === null || _api === void 0 || (_api$analytics = _api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions }); }, getExtensionLoadingHandlers: function getExtensionLoadingHandlers() { return extensionLoadingHandlers; }, insertMacroFromMacroBrowser: (0, _actions2.insertMacroFromMacroBrowser)(_api === null || _api === void 0 || (_api$analytics2 = _api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions), insertOrReplaceExtension: function insertOrReplaceExtension(_ref5) { var editorView = _ref5.editorView, action = _ref5.action, attrs = _ref5.attrs, content = _ref5.content, position = _ref5.position, size = _ref5.size, tr = _ref5.tr; return (0, _actions.insertOrReplaceExtension)({ editorView: editorView, action: action, attrs: attrs, content: content, position: position, size: size, tr: tr }); }, insertOrReplaceBodiedExtension: function insertOrReplaceBodiedExtension(_ref6) { var editorView = _ref6.editorView, action = _ref6.action, attrs = _ref6.attrs, content = _ref6.content, position = _ref6.position, size = _ref6.size, tr = _ref6.tr; return (0, _actions.insertOrReplaceBodiedExtension)({ editorView: editorView, action: action, attrs: attrs, content: content, position: position, size: size, tr: tr }); }, editSelectedExtension: (0, _actions.createEditSelectedExtensionAction)({ editorViewRef: editorViewRef, editorAnalyticsAPI: _api === null || _api === void 0 || (_api$analytics3 = _api.analytics) === null || _api$analytics3 === void 0 ? void 0 : _api$analytics3.actions, applyChangeToContextPanel: _api === null || _api === void 0 || (_api$contextPanel4 = _api.contextPanel) === null || _api$contextPanel4 === void 0 ? void 0 : _api$contextPanel4.actions.applyChange }), registerExtensionLoadingHandler: function registerExtensionLoadingHandler(_ref7) { var extensionType = _ref7.extensionType, handler = _ref7.handler; extensionLoadingHandlers[extensionType] = handler; return function () { if (extensionLoadingHandlers[extensionType] === handler) { delete extensionLoadingHandlers[extensionType]; } }; }, runMacroAutoConvert: _actions2.runMacroAutoConvert, forceAutoSave: _commands.forceAutoSave }, pluginsOptions: { floatingToolbar: (0, _toolbar.getToolbarConfig)({ breakoutEnabled: options.breakoutEnabled, copyEnabled: options.copyEnabled, deleteEnabled: options.deleteEnabled, extensionApi: _api, getUnsupportedContent: options.getUnsupportedContent }), contextPanel: !showContextPanel ? (0, _contextPanel.getContextPanel)(function () { var _editorViewRef$curren; return (_editorViewRef$curren = editorViewRef.current) !== null && _editorViewRef$curren !== void 0 ? _editorViewRef$curren : undefined; })(_api, featureFlags) : undefined }, usePluginHook: showContextPanel ? function (_ref8) { var editorView = _ref8.editorView; (0, _useConfigPanelPluginHook.useConfigPanelPluginHook)({ api: _api, configPanelId: configPanelId, editorView: editorView }); } : undefined }; };