@atlaskit/editor-plugin-block-menu
Version:
BlockMenu plugin for @atlaskit/editor-core
269 lines (268 loc) • 12.1 kB
JavaScript
"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
});
}
}]);
};