UNPKG

@atlaskit/editor-plugin-block-menu

Version:

BlockMenu plugin for @atlaskit/editor-core

269 lines (268 loc) 12.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.getBlockMenuComponents = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _react = _interopRequireDefault(require("react")); var _blockMenu = require("@atlaskit/editor-common/block-menu"); var _messages = require("@atlaskit/editor-common/messages"); var _editorToolbar = require("@atlaskit/editor-toolbar"); var _utils = require("./block-menu-renderer/utils"); var _copyLink = require("./copy-link"); var _copySection = require("./copy-section"); var _deleteButton = require("./delete-button"); var _deleteSection = require("./delete-section"); var _formatMenuNested = require("./format-menu-nested"); var _formatMenuSection = require("./format-menu-section"); var _MenuSection = require("./MenuSection"); var _moveDown = require("./move-down"); var _moveUp = require("./move-up"); var _suggestedItemsMenuSection = require("./suggested-items-menu-section"); var _suggestedMenuItems = require("./suggested-menu-items"); var _checkHasPreviousSectionContent = require("./utils/checkHasPreviousSectionContent"); var _checkIsFormatMenuHidden = require("./utils/checkIsFormatMenuHidden"); var _createMenuItemsMap = require("./utils/createMenuItemsMap"); var _getSuggestedItemsFromSelection = require("./utils/getSuggestedItemsFromSelection"); var MIN_NUMBER_OF_AVAILABLE_NATIVE_TRANSFORMS = 7; var getTotalNumberOfAvailableNativeTransforms = function getTotalNumberOfAvailableNativeTransforms(blockMenuComponents) { if (!blockMenuComponents) { return 0; } var childrenMap = (0, _utils.buildChildrenMap)(blockMenuComponents); var headingsKey = (0, _utils.getChildrenMapKey)(_blockMenu.TRANSFORM_HEADINGS_MENU_SECTION.key, 'block-menu-section'); var structureKey = (0, _utils.getChildrenMapKey)(_blockMenu.TRANSFORM_STRUCTURE_MENU_SECTION.key, 'block-menu-section'); var headingsChildren = childrenMap.get(headingsKey) || []; var structureChildren = childrenMap.get(structureKey) || []; return [].concat((0, _toConsumableArray2.default)(headingsChildren), (0, _toConsumableArray2.default)(structureChildren)).filter(function (c) { return (0, _utils.willComponentRender)(c, childrenMap); }).length; }; var getMoveUpMoveDownMenuComponents = function getMoveUpMoveDownMenuComponents(api) { return [{ type: 'block-menu-item', key: _blockMenu.POSITION_MOVE_UP_MENU_ITEM.key, parent: { type: 'block-menu-section', key: _blockMenu.POSITION_MENU_SECTION.key, rank: _blockMenu.POSITION_MENU_SECTION_RANK[_blockMenu.POSITION_MOVE_UP_MENU_ITEM.key] }, component: function component() { return /*#__PURE__*/_react.default.createElement(_moveUp.MoveUpDropdownItem, { api: api }); } }, { type: 'block-menu-item', key: _blockMenu.POSITION_MOVE_DOWN_MENU_ITEM.key, parent: { type: 'block-menu-section', key: _blockMenu.POSITION_MENU_SECTION.key, rank: _blockMenu.POSITION_MENU_SECTION_RANK[_blockMenu.POSITION_MOVE_DOWN_MENU_ITEM.key] }, component: function component() { return /*#__PURE__*/_react.default.createElement(_moveDown.MoveDownDropdownItem, { api: api }); } }]; }; var getTurnIntoMenuComponents = function getTurnIntoMenuComponents(api) { return [{ type: 'block-menu-nested', key: _blockMenu.TRANSFORM_MENU_ITEM.key, parent: { type: 'block-menu-section', key: _blockMenu.TRANSFORM_MENU_SECTION.key, rank: _blockMenu.TRANSFORM_MENU_SECTION_RANK[_blockMenu.TRANSFORM_MENU_ITEM.key] }, component: function component() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { children: null }, children = _ref.children; return /*#__PURE__*/_react.default.createElement(_formatMenuNested.FormatMenuComponent, { api: api }, children); }, isHidden: function isHidden() { return (0, _checkIsFormatMenuHidden.checkIsFormatMenuHidden)(api); } }, { type: 'block-menu-section', key: _blockMenu.TRANSFORM_SUGGESTED_MENU_SECTION.key, parent: { type: 'block-menu-nested', key: _blockMenu.TRANSFORM_MENU_ITEM.key, rank: _blockMenu.TRANSFORM_MENU_ITEM_RANK[_blockMenu.TRANSFORM_SUGGESTED_MENU_SECTION.key] }, component: function component() { var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { children: null }, children = _ref2.children; return /*#__PURE__*/_react.default.createElement(_suggestedItemsMenuSection.SuggestedItemsMenuSection, { api: api }, children); } }, { type: 'block-menu-item', key: _blockMenu.TRANSFORM_SUGGESTED_MENU_ITEM.key, parent: { type: 'block-menu-section', key: _blockMenu.TRANSFORM_SUGGESTED_MENU_SECTION.key, rank: _blockMenu.TRANSFORM_SUGGESTED_MENU_SECTION_RANK[_blockMenu.TRANSFORM_SUGGESTED_MENU_ITEM.key] }, component: function component() { return /*#__PURE__*/_react.default.createElement(_suggestedMenuItems.SuggestedMenuItems, { api: api }); }, isHidden: function isHidden() { var _api$blockMenu, _api$selection, _api$blockControls; var blockMenuComponents = api === null || api === void 0 || (_api$blockMenu = api.blockMenu) === null || _api$blockMenu === void 0 ? void 0 : _api$blockMenu.actions.getBlockMenuComponents(); if (getTotalNumberOfAvailableNativeTransforms(blockMenuComponents) < MIN_NUMBER_OF_AVAILABLE_NATIVE_TRANSFORMS) { return true; } var menuItemsMap = (0, _createMenuItemsMap.createMenuItemsMap)(blockMenuComponents); var selection = api === null || api === void 0 || (_api$selection = api.selection) === null || _api$selection === void 0 || (_api$selection = _api$selection.sharedState.currentState()) === null || _api$selection === void 0 ? void 0 : _api$selection.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 currentSelection = preservedSelection || selection; var suggestedItems = (0, _getSuggestedItemsFromSelection.getSuggestedItemsFromSelection)(menuItemsMap, currentSelection); return suggestedItems.length === 0; } }, { type: 'block-menu-section', key: _blockMenu.TRANSFORM_CREATE_MENU_SECTION.key, parent: { type: 'block-menu-nested', key: _blockMenu.TRANSFORM_MENU_ITEM.key, rank: _blockMenu.TRANSFORM_MENU_ITEM_RANK[_blockMenu.TRANSFORM_CREATE_MENU_SECTION.key] }, component: function component() { var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { children: null }, children = _ref3.children; return /*#__PURE__*/_react.default.createElement(_MenuSection.MenuSection, { title: _messages.blockMenuMessages.create, hasSeparator: (0, _checkHasPreviousSectionContent.hasContentBeforeCreate)(api) }, children); } }, { type: 'block-menu-section', key: _blockMenu.TRANSFORM_STRUCTURE_MENU_SECTION.key, parent: { type: 'block-menu-nested', key: _blockMenu.TRANSFORM_MENU_ITEM.key, rank: _blockMenu.TRANSFORM_MENU_ITEM_RANK[_blockMenu.TRANSFORM_STRUCTURE_MENU_SECTION.key] }, component: function component() { var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { children: null }, children = _ref4.children; return /*#__PURE__*/_react.default.createElement(_MenuSection.MenuSection, { title: _messages.blockMenuMessages.structure, hasSeparator: (0, _checkHasPreviousSectionContent.hasContentBeforeStructure)(api) }, children); } }, { type: 'block-menu-section', key: _blockMenu.TRANSFORM_HEADINGS_MENU_SECTION.key, parent: { type: 'block-menu-nested', key: _blockMenu.TRANSFORM_MENU_ITEM.key, rank: _blockMenu.TRANSFORM_MENU_ITEM_RANK[_blockMenu.TRANSFORM_HEADINGS_MENU_SECTION.key] }, component: function component() { var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { children: null }, children = _ref5.children; return /*#__PURE__*/_react.default.createElement(_MenuSection.MenuSection, { title: _messages.blockMenuMessages.headings, hasSeparator: (0, _checkHasPreviousSectionContent.hasContentBeforeHeadings)(api) }, children); } }, { type: 'block-menu-section', key: _blockMenu.TRANSFORM_MENU_SECTION.key, rank: _blockMenu.MAIN_BLOCK_MENU_SECTION_RANK[_blockMenu.TRANSFORM_MENU_SECTION.key], component: function component(_ref6) { var children = _ref6.children; return /*#__PURE__*/_react.default.createElement(_formatMenuSection.FormatMenuSection, { api: api }, children); } }]; }; var getBlockMenuComponents = exports.getBlockMenuComponents = function getBlockMenuComponents(_ref7) { var api = _ref7.api, config = _ref7.config; return [].concat((0, _toConsumableArray2.default)(getTurnIntoMenuComponents(api)), [{ type: 'block-menu-section', key: _blockMenu.BLOCK_ACTIONS_MENU_SECTION.key, rank: _blockMenu.MAIN_BLOCK_MENU_SECTION_RANK[_blockMenu.BLOCK_ACTIONS_MENU_SECTION.key], component: function component(_ref8) { var children = _ref8.children; return /*#__PURE__*/_react.default.createElement(_copySection.CopySection, null, children); } }, { type: 'block-menu-section', key: _blockMenu.BLOCK_ACTIONS_COPY_MENU_SECTION.key, rank: _blockMenu.MAIN_BLOCK_MENU_SECTION_RANK[_blockMenu.BLOCK_ACTIONS_COPY_MENU_SECTION.key], component: function component(_ref9) { var children = _ref9.children; return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItemSection, { hasSeparator: true }, children); } }, { type: 'block-menu-item', key: _blockMenu.BLOCK_ACTIONS_COPY_LINK_TO_BLOCK_MENU_ITEM.key, parent: { type: 'block-menu-section', key: _blockMenu.BLOCK_ACTIONS_COPY_MENU_SECTION.key, rank: _blockMenu.BLOCK_ACTIONS_COPY_MENU_SECTION_RANK[_blockMenu.BLOCK_ACTIONS_COPY_LINK_TO_BLOCK_MENU_ITEM.key] }, component: function component() { return /*#__PURE__*/_react.default.createElement(_copyLink.CopyLinkDropdownItem, { api: api, config: config }); } }, { type: 'block-menu-section', key: _blockMenu.POSITION_MENU_SECTION.key, rank: _blockMenu.MAIN_BLOCK_MENU_SECTION_RANK[_blockMenu.POSITION_MENU_SECTION.key], component: function component(_ref0) { var children = _ref0.children; return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItemSection, { hasSeparator: true }, children); } }], (0, _toConsumableArray2.default)(getMoveUpMoveDownMenuComponents(api)), [{ type: 'block-menu-section', key: _blockMenu.DELETE_MENU_SECTION.key, rank: _blockMenu.MAIN_BLOCK_MENU_SECTION_RANK[_blockMenu.DELETE_MENU_SECTION.key], component: function component(_ref1) { var children = _ref1.children; return /*#__PURE__*/_react.default.createElement(_deleteSection.DeleteSection, null, children); } }, { type: 'block-menu-item', key: _blockMenu.DELETE_MENU_ITEM.key, parent: { type: 'block-menu-section', key: _blockMenu.DELETE_MENU_SECTION.key, rank: _blockMenu.DELETE_MENU_SECTION_RANK[_blockMenu.DELETE_MENU_ITEM.key] }, component: function component() { return /*#__PURE__*/_react.default.createElement(_deleteButton.DeleteDropdownItem, { api: api }); } }]); };