@atlaskit/editor-plugin-block-menu
Version:
BlockMenu plugin for @atlaskit/editor-core
126 lines (123 loc) • 6.45 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.blockMenuPlugin = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _react = _interopRequireDefault(require("react"));
var _expValEqualsNoExposure = require("@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure");
var _editorActions = require("./editor-actions");
var _isTransformToTargetDisabled = require("./editor-actions/isTransformToTargetDisabled");
var _transformNode2 = require("./editor-commands/transformNode");
var _blockMenuExperiences = require("./pm-plugins/experiences/block-menu-experiences");
var _keymap = require("./pm-plugins/keymap");
var _main = require("./pm-plugins/main");
var _blockMenu = _interopRequireDefault(require("./ui/block-menu"));
var _blockMenuComponents = require("./ui/block-menu-components");
var _blockMenuProvider = require("./ui/block-menu-provider");
var _flag = require("./ui/flag");
var blockMenuPlugin = exports.blockMenuPlugin = function blockMenuPlugin(_ref) {
var api = _ref.api,
config = _ref.config;
var registry = (0, _editorActions.createBlockMenuRegistry)();
registry.register((0, _blockMenuComponents.getBlockMenuComponents)({
api: api,
config: config
}));
var refs = {};
return {
name: 'blockMenu',
pmPlugins: function pmPlugins() {
return [{
name: 'blockMenuPlugin',
plugin: function plugin() {
return (0, _main.createPlugin)(api);
}
}, {
name: 'blockMenuKeymap',
plugin: function plugin() {
return (0, _keymap.keymapPlugin)(api, config);
}
}].concat((0, _toConsumableArray2.default)((0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_experience_tracking_observer', 'isEnabled', true) ? [{
name: 'blockMenuExperiences',
plugin: function plugin() {
return (0, _blockMenuExperiences.getBlockMenuExperiencesPlugin)({
refs: refs,
dispatchAnalyticsEvent: function dispatchAnalyticsEvent(payload) {
var _api$analytics;
return api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || (_api$analytics = _api$analytics.actions) === null || _api$analytics === void 0 ? void 0 : _api$analytics.fireAnalyticsEvent(payload);
}
});
}
}] : []));
},
actions: {
registerBlockMenuComponents: function registerBlockMenuComponents(blockMenuComponents) {
registry.register(blockMenuComponents);
},
getBlockMenuComponents: function getBlockMenuComponents() {
return registry.components;
},
isTransformOptionDisabled: function isTransformOptionDisabled(optionNodeTypeName, optionNodeTypeAttrs) {
var _api$blockControls, _api$selection;
var preservedSelection = api === null || api === void 0 || (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 || (_api$blockControls = _api$blockControls.sharedState.currentState()) === null || _api$blockControls === void 0 ? void 0 : _api$blockControls.preservedSelection;
var selection = api === null || api === void 0 || (_api$selection = api.selection) === null || _api$selection === void 0 || (_api$selection = _api$selection.sharedState) === null || _api$selection === void 0 || (_api$selection = _api$selection.currentState()) === null || _api$selection === void 0 ? void 0 : _api$selection.selection;
var currentSelection = preservedSelection || selection;
if (!currentSelection) {
return true;
}
return (0, _isTransformToTargetDisabled.isTransformToTargetDisabled)({
selection: currentSelection,
targetNodeTypeName: optionNodeTypeName,
targetNodeTypeAttrs: optionNodeTypeAttrs
});
}
},
commands: {
transformNode: function transformNode(targetType, metadata) {
return (0, _transformNode2.transformNode)(api)(targetType, metadata);
}
},
getSharedState: function getSharedState(editorState) {
var _config$useStandardNo, _api$blockControls2, _pluginState$showFlag;
var useStandardNodeWidth = (_config$useStandardNo = config === null || config === void 0 ? void 0 : config.useStandardNodeWidth) !== null && _config$useStandardNo !== void 0 ? _config$useStandardNo : false;
if (!editorState) {
return {
currentSelectedNodeName: undefined,
showFlag: false,
useStandardNodeWidth: useStandardNodeWidth
};
}
// Get the menuTriggerBy from blockControls plugin if available
var currentSelectedNodeName = api === null || api === void 0 || (_api$blockControls2 = api.blockControls) === null || _api$blockControls2 === void 0 || (_api$blockControls2 = _api$blockControls2.sharedState.currentState()) === null || _api$blockControls2 === void 0 ? void 0 : _api$blockControls2.menuTriggerBy;
// Get the showFlag from plugin state
var pluginState = _main.blockMenuPluginKey.getState(editorState);
var showFlag = (_pluginState$showFlag = pluginState === null || pluginState === void 0 ? void 0 : pluginState.showFlag) !== null && _pluginState$showFlag !== void 0 ? _pluginState$showFlag : false;
return {
currentSelectedNodeName: currentSelectedNodeName,
showFlag: showFlag,
useStandardNodeWidth: useStandardNodeWidth
};
},
contentComponent: function contentComponent(_ref2) {
var editorView = _ref2.editorView,
popupsMountPoint = _ref2.popupsMountPoint,
popupsBoundariesElement = _ref2.popupsBoundariesElement,
popupsScrollableElement = _ref2.popupsScrollableElement;
refs.popupsMountPoint = popupsMountPoint || undefined;
return /*#__PURE__*/_react.default.createElement(_blockMenuProvider.BlockMenuProvider, {
api: api,
editorView: editorView
}, /*#__PURE__*/_react.default.createElement(_blockMenu.default, {
editorView: editorView,
api: api,
mountTo: popupsMountPoint,
boundariesElement: popupsBoundariesElement,
scrollableElement: popupsScrollableElement
}), /*#__PURE__*/_react.default.createElement(_flag.Flag, {
api: api
}));
}
};
};