@atlaskit/editor-plugin-extension
Version:
editor-plugin-extension plugin for @atlaskit/editor-core
205 lines (202 loc) • 9.72 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.extensionPlugin = void 0;
var _v = _interopRequireDefault(require("uuid/v4"));
var _adfSchema = require("@atlaskit/adf-schema");
var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
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");
// eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead
// Remove below line when cleaning up platform_editor_ai_object_sidebar_injection feature flag
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, _v.default)());
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 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: _adfSchema.extension
}, {
name: 'bodiedExtension',
node: (0, _bodiedExtension.bodiedExtensionSpecWithFixedToDOM)()
}, {
name: 'inlineExtension',
node: _adfSchema.inlineExtension
}, {
name: 'extensionFrame',
node: _adfSchema.extensionFrame
}, {
name: 'multiBodiedExtension',
node: _adfSchema.multiBodiedExtension
}];
return extensionNodes;
},
getSharedState: function getSharedState(state) {
if (!state) {
return undefined;
}
var pluginState = _pluginKey.pluginKey.getState(state);
return {
showContextPanel: pluginState === null || pluginState === void 0 ? void 0 : pluginState.showContextPanel,
extensionProvider: pluginState === null || pluginState === void 0 ? void 0 : pluginState.extensionProvider,
processParametersAfter: pluginState === null || pluginState === void 0 ? void 0 : pluginState.processParametersAfter
};
},
pmPlugins: function pmPlugins() {
return [{
name: 'extension',
plugin: function plugin(_ref2) {
var dispatch = _ref2.dispatch,
providerFactory = _ref2.providerFactory,
portalProviderAPI = _ref2.portalProviderAPI,
eventDispatcher = _ref2.eventDispatcher;
var extensionHandlers = options.extensionHandlers || {};
return (0, _main.createPlugin)(dispatch, providerFactory, extensionHandlers, portalProviderAPI, eventDispatcher, _api, options.useLongPressSelection, {
appearance: options.appearance,
getExtensionHeight: options.getExtensionHeight
}, featureFlags, options === null || options === void 0 ? void 0 : options.__rendererExtensionOptions);
}
}, {
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(_ref3) {
var dispatch = _ref3.dispatch,
providerFactory = _ref3.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
});
},
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(_ref4) {
var editorView = _ref4.editorView,
action = _ref4.action,
attrs = _ref4.attrs,
content = _ref4.content,
position = _ref4.position,
size = _ref4.size,
tr = _ref4.tr;
return (0, _actions.insertOrReplaceExtension)({
editorView: editorView,
action: action,
attrs: attrs,
content: content,
position: position,
size: size,
tr: tr
});
},
insertOrReplaceBodiedExtension: function insertOrReplaceBodiedExtension(_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.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
}),
runMacroAutoConvert: _actions2.runMacroAutoConvert,
forceAutoSave: _commands.forceAutoSave
},
pluginsOptions: {
floatingToolbar: (0, _toolbar.getToolbarConfig)({
breakoutEnabled: options.breakoutEnabled,
extensionApi: _api,
getUnsupportedContent: options.getUnsupportedContent
}),
contextPanel:
// if showContextPanel action is not available, or platform_editor_ai_object_sidebar_injection feature flag is off
// then keep using old context panel.
!showContextPanel || !(0, _platformFeatureFlags.fg)('platform_editor_ai_object_sidebar_injection') ? (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 && (0, _platformFeatureFlags.fg)('platform_editor_ai_object_sidebar_injection') ? function (_ref6) {
var editorView = _ref6.editorView;
(0, _useConfigPanelPluginHook.useConfigPanelPluginHook)({
api: _api,
configPanelId: configPanelId,
editorView: editorView
});
} : undefined
};
};