@atlaskit/editor-plugin-selection-extension
Version:
editor-plugin-selection-extension plugin for @atlaskit/editor-core
144 lines (141 loc) • 5.11 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.registerInlineToolbar = void 0;
var _react = _interopRequireDefault(require("react"));
var _toolbar = require("@atlaskit/editor-common/toolbar");
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
var _SelectionExtensionMenuItems = require("../menu/SelectionExtensionMenuItems");
var _SelectionExtensionComponentContext = require("../SelectionExtensionComponentContext");
var _MenuItem = require("./MenuItem");
var _ToolbarButton = require("./ToolbarButton");
var _ToolbarMenu = require("./ToolbarMenu");
var EXTENSION_RANK_MULTIPLIER = 100;
var InlineToolbarMenuItemComponent = function InlineToolbarMenuItemComponent(_ref) {
var api = _ref.api,
extension = _ref.extension,
getMenuItems = _ref.getMenuItems;
var _useEditorToolbar = (0, _toolbar.useEditorToolbar)(),
editorView = _useEditorToolbar.editorView;
if (!editorView || !api) {
return null;
}
return /*#__PURE__*/_react.default.createElement(_SelectionExtensionComponentContext.SelectionExtensionComponentContextProvider
// eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed)
, {
value: {
api: api,
editorView: editorView,
extensionKey: extension.key,
extensionSource: extension.source,
extensionLocation: 'inline-toolbar'
}
}, /*#__PURE__*/_react.default.createElement(_SelectionExtensionMenuItems.SelectionExtensionMenuItems, {
getMenuItems: getMenuItems
}));
};
var registerInlineToolbar = exports.registerInlineToolbar = function registerInlineToolbar(_ref2) {
var api = _ref2.api,
extension = _ref2.extension,
index = _ref2.index;
var key = extension.key,
inlineToolbar = extension.inlineToolbar;
var baseKey = "selection-extension-".concat(key);
var components = [];
if (!inlineToolbar) {
return components;
}
var getToolbarItem = inlineToolbar.getToolbarItem,
getMenuItems = inlineToolbar.getMenuItems;
var groupKey = "".concat(baseKey, "-toolbar-group");
var toolbarItemKey = "".concat(baseKey, "-toolbar-").concat(getMenuItems ? 'menu' : 'button');
var menuSectionKey = "".concat(baseKey, "-toolbar-menu-section");
if (getToolbarItem) {
// first we register the group for the button or menu to be added to
components.push({
type: 'group',
key: groupKey,
parents: [{
type: _toolbar.APPS_SECTION.type,
key: _toolbar.APPS_SECTION.key,
rank: (index + 1) * EXTENSION_RANK_MULTIPLIER
}]
});
var toolbarItemConfig = getToolbarItem();
// if toolbar item has menu items, assume it's a menu
if (getMenuItems) {
components.push({
type: 'menu',
key: toolbarItemKey,
parents: [{
type: 'group',
key: groupKey,
rank: EXTENSION_RANK_MULTIPLIER
}],
component: function component() {
return /*#__PURE__*/_react.default.createElement(_ToolbarMenu.ToolbarMenu, {
api: api,
config: toolbarItemConfig
});
}
});
} else {
// else just regsiter a button
components.push({
type: 'button',
key: toolbarItemKey,
parents: [{
type: 'group',
key: groupKey,
rank: EXTENSION_RANK_MULTIPLIER
}],
component: function component() {
return /*#__PURE__*/_react.default.createElement(_ToolbarButton.ToolbarButton, {
api: api,
config: toolbarItemConfig
});
}
});
}
}
if (getMenuItems) {
if (getToolbarItem) {
components.push({
type: 'menu-section',
key: menuSectionKey,
parents: [{
type: 'menu',
key: toolbarItemKey,
rank: EXTENSION_RANK_MULTIPLIER
}]
});
}
// Remove ExtensionMenuSectionConfiguration - only care about items
var menuItems = (0, _platformFeatureFlags.fg)('platform_editor_block_menu_v2_patch_1') ? [] : getMenuItems().filter(function (item) {
return 'label' in item && 'icon' in item;
});
components.push({
type: 'menu-item',
key: key,
parents: [{
type: 'menu-section',
// if we have a custom menu, place items in there, otherwise in the overflow menu
key: getToolbarItem ? menuSectionKey : _toolbar.OVERFLOW_EXTENSIONS_MENU_SECTION.key,
rank: (index + 1) * EXTENSION_RANK_MULTIPLIER
}],
component: function component() {
return (0, _platformFeatureFlags.fg)('platform_editor_block_menu_v2_patch_1') ? /*#__PURE__*/_react.default.createElement(InlineToolbarMenuItemComponent, {
api: api,
extension: extension,
getMenuItems: getMenuItems
}) : /*#__PURE__*/_react.default.createElement(_MenuItem.MenuItem, {
api: api,
extensionMenuItems: menuItems
});
}
});
}
return components;
};