UNPKG

@atlaskit/editor-plugin-primary-toolbar

Version:

Primary toolbar plugin for @atlaskit/editor-core

169 lines (168 loc) 6.02 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.getToolbarComponents = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _platformFeatureFlags = require("@atlaskit/platform-feature-flags"); var _experiments = require("@atlaskit/tmp-editor-statsig/experiments"); var getToolbarComponents = exports.getToolbarComponents = function getToolbarComponents(_ref) { var componentRegistry = _ref.componentRegistry, editorState = _ref.editorState, contextualFormattingEnabled = _ref.contextualFormattingEnabled; var configuration; if (contextualFormattingEnabled && (0, _experiments.editorExperiment)('platform_editor_controls', 'variant1', { exposure: true })) { var shouldShowUndoRedoGroup = (0, _platformFeatureFlags.fg)('platform_editor_undo_redo_find_on_primary_toolbar'); configuration = toolbarConfigurationV2(true, shouldShowUndoRedoGroup); } else { var shouldShowFindGroup = !!contextualFormattingEnabled; if (componentRegistry.has('trackChanges')) { configuration = toolbarConfigurationV3(shouldShowFindGroup); } else { configuration = toolbarConfiguration(shouldShowFindGroup); } } return configuration.filter(function (toolbarElement) { return typeof toolbarElement.enabled === 'undefined' || toolbarElement.enabled(componentRegistry, editorState); }).reduce(function (acc, toolbarElement) { if (componentRegistry.has(toolbarElement.name)) { var component = componentRegistry.get(toolbarElement.name); if (!!component) { acc.push(component); } } return acc; }, []); }; var trackChangesGroup = [{ name: 'separator', enabled: function enabled(componentRegistry) { return componentRegistry.has('undoRedo') || componentRegistry.has('trackChanges'); } }, { name: 'undoRedoPlugin', enabled: function enabled(componentRegistry) { return componentRegistry.has('undoRedoPlugin'); } }, { name: 'trackChanges', enabled: function enabled(componentRegistry) { return componentRegistry.has('trackChanges'); } }]; var undoRedoGroup = [{ name: 'undoRedoPlugin' }, { name: 'separator', enabled: function enabled(componentRegistry) { return componentRegistry.has('undoRedoPlugin'); } }]; var spellCheckGroup = [{ name: 'spellCheck' }, { name: 'separator', enabled: function enabled(componentRegistry) { return componentRegistry.has('spellCheck'); } }]; var blockTypeGroup = [{ name: 'blockType' }, { name: 'separator', enabled: function enabled(componentRegistry, editorState) { return componentRegistry.has('blockType') && // Use case where you want to have the block plugin but not render any toolbar items (when you exclude headings), we should be able to get rid of this when we split block type plugin up and check for the presence of the heading plugin directly !!editorState.schema.nodes.heading; } }]; var textFormattingGroup = [{ name: 'textFormatting' }, { name: 'separator', enabled: function enabled(componentRegistry) { return componentRegistry.has('textFormatting'); } }]; var alignmentGroup = [{ name: 'alignment' }, { name: 'separator', enabled: function enabled(componentRegistry) { return componentRegistry.has('alignment'); } }]; var textColorGroup = [{ name: 'textColor' }, { name: 'highlight' }, { name: 'separator', enabled: function enabled(componentRegistry) { return componentRegistry.has('textColor') || componentRegistry.has('highlight'); } }]; var listFormattingGroup = [{ name: 'toolbarListsIndentation' }, { name: 'separator', enabled: function enabled(componentRegistry) { return componentRegistry.has('toolbarListsIndentation'); } }]; var hyperlinkGroup = [{ name: 'hyperlink' }, { name: 'separator', enabled: function enabled(componentRegistry) { return componentRegistry.has('hyperlink'); } }]; var insertBlockGroup = [{ name: 'insertBlock' }]; var others = [{ name: 'beforePrimaryToolbar' }, { name: 'avatarGroup' }, { name: 'findReplace' }, { // TODO: ED-26962 - Should likely be split into three: spelling & grammar, separator, and AI trigger name: 'aiExperience' }, { name: 'loom' }]; var othersGroupNoFind = [{ name: 'beforePrimaryToolbar' }, { name: 'avatarGroup' }, { // TODO: ED-26962 - Should likely be split into three: spelling & grammar, separator, and AI trigger name: 'aiExperience' }, { name: 'loom' }]; var findGroup = [{ name: 'findReplace' }]; var toolbarConfigurationV3 = function toolbarConfigurationV3(shouldShowFindGroup) { return [].concat(spellCheckGroup, blockTypeGroup, textFormattingGroup, alignmentGroup, textColorGroup, listFormattingGroup, insertBlockGroup, (0, _toConsumableArray2.default)(shouldShowFindGroup ? others : othersGroupNoFind), trackChangesGroup); }; var toolbarConfiguration = function toolbarConfiguration(shouldShowFindGroup) { return [].concat(undoRedoGroup, spellCheckGroup, blockTypeGroup, textFormattingGroup, alignmentGroup, textColorGroup, listFormattingGroup, insertBlockGroup, (0, _toConsumableArray2.default)(shouldShowFindGroup ? others : othersGroupNoFind)); }; var pinToolbar = [{ name: 'pinToolbar' }]; var toolbarConfigurationV2 = function toolbarConfigurationV2(shouldShowInsertBlock, shouldShowUndoRedoGroup) { var shouldShowFindGroup = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; return [].concat((0, _toConsumableArray2.default)(shouldShowUndoRedoGroup ? undoRedoGroup : []), blockTypeGroup, textFormattingGroup, textColorGroup, alignmentGroup, listFormattingGroup, hyperlinkGroup, (0, _toConsumableArray2.default)(shouldShowInsertBlock ? insertBlockGroup : []), [{ name: 'selectionExtension' }], pinToolbar, [{ name: 'beforePrimaryToolbar' }], (0, _toConsumableArray2.default)(shouldShowFindGroup ? findGroup : [])); };