UNPKG

@atlaskit/editor-plugin-selection-extension

Version:

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

144 lines (141 loc) 5.11 kB
"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; };