UNPKG

@atlaskit/editor-plugin-insert-block

Version:

Insert block plugin for @atlaskit/editor-core

266 lines (265 loc) 11.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.createItems = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _memoize = _interopRequireDefault(require("lodash/memoize")); var _memoizeOne = _interopRequireDefault(require("memoize-one")); var _keymaps = require("@atlaskit/editor-common/keymaps"); var _messages = require("@atlaskit/editor-common/messages"); var _platformFeatureFlags = require("@atlaskit/platform-feature-flags"); var _experiments = require("@atlaskit/tmp-editor-statsig/experiments"); var _item = require("./item"); var _shallowEquals = require("./shallow-equals"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var buttonToItem = (0, _memoize.default)(function (button) { return _objectSpread(_objectSpread({}, button), {}, { title: /*#__PURE__*/_react.default.createElement(_keymaps.ToolTipContent, { description: button.content, shortcutOverride: button.shortcut }) }); }); var buttonToDropdownItem = (0, _memoizeOne.default)(function (title) { return (0, _memoize.default)(function (button) { return _objectSpread(_objectSpread({}, button), {}, { title: /*#__PURE__*/_react.default.createElement(_keymaps.ToolTipContent, { description: title, shortcutOverride: "/" }) }); }); }); var createInsertBlockItems = function createInsertBlockItems(config) { var isTypeAheadAllowed = config.isTypeAheadAllowed, tableSupported = config.tableSupported, tableSelectorSupported = config.tableSelectorSupported, mediaUploadsEnabled = config.mediaUploadsEnabled, mediaSupported = config.mediaSupported, imageUploadSupported = config.imageUploadSupported, imageUploadEnabled = config.imageUploadEnabled, mentionsSupported = config.mentionsSupported, mentionsDisabled = config.mentionsDisabled, availableWrapperBlockTypes = config.availableWrapperBlockTypes, actionSupported = config.actionSupported, decisionSupported = config.decisionSupported, linkSupported = config.linkSupported, linkDisabled = config.linkDisabled, emojiDisabled = config.emojiDisabled, emojiProvider = config.emojiProvider, hasEmojiPlugin = config.hasEmojiPlugin, hasMentionsPlugin = config.hasMentionsPlugin, hasMediaPlugin = config.hasMediaPlugin, nativeStatusSupported = config.nativeStatusSupported, insertMenuItems = config.insertMenuItems, dateEnabled = config.dateEnabled, placeholderTextEnabled = config.placeholderTextEnabled, horizontalRuleEnabled = config.horizontalRuleEnabled, layoutSectionEnabled = config.layoutSectionEnabled, expandEnabled = config.expandEnabled, numberOfButtons = config.numberOfButtons, schema = config.schema, formatMessage = config.formatMessage, isEditorOffline = config.isEditorOffline; var items = []; var isOffline = isEditorOffline === true; if (actionSupported) { items.push((0, _item.action)({ content: formatMessage(_messages.toolbarInsertBlockMessages.action), tooltipDescription: formatMessage(_messages.toolbarInsertBlockMessages.actionDescription), disabled: false })); } if (linkSupported) { items.push((0, _item.link)({ content: formatMessage(_messages.toolbarInsertBlockMessages.link), tooltipDescription: formatMessage(_messages.toolbarInsertBlockMessages.linkDescription), disabled: !!linkDisabled, 'aria-haspopup': 'dialog' })); } if ((0, _experiments.editorExperiment)('platform_editor_prevent_toolbar_layout_shifts', true)) { if (imageUploadSupported) { items.push((0, _item.imageUpload)({ content: formatMessage(_messages.toolbarInsertBlockMessages.image), disabled: !imageUploadEnabled || isOffline })); } else if (hasMediaPlugin) { items.push((0, _item.media)({ content: formatMessage(_messages.toolbarInsertBlockMessages.addMediaFiles), tooltipDescription: formatMessage(_messages.toolbarInsertBlockMessages.mediaFilesDescription), disabled: isOffline || !mediaSupported || !mediaUploadsEnabled })); } if (hasMentionsPlugin) { items.push((0, _item.mention)({ content: formatMessage(_messages.toolbarInsertBlockMessages.mention), tooltipDescription: formatMessage(_messages.toolbarInsertBlockMessages.mentionDescription), disabled: !isTypeAheadAllowed || !!mentionsDisabled || !mentionsSupported, 'aria-haspopup': 'listbox' })); } if (hasEmojiPlugin) { items.push((0, _item.emoji)({ content: formatMessage(_messages.toolbarInsertBlockMessages.emoji), tooltipDescription: formatMessage(_messages.toolbarInsertBlockMessages.emojiDescription), disabled: emojiDisabled || !isTypeAheadAllowed || !emojiProvider, 'aria-haspopup': 'dialog' })); } } else { if (mediaSupported && mediaUploadsEnabled) { items.push((0, _item.media)({ content: formatMessage(_messages.toolbarInsertBlockMessages.addMediaFiles), tooltipDescription: formatMessage(_messages.toolbarInsertBlockMessages.mediaFilesDescription), disabled: isOffline })); } if (imageUploadSupported) { items.push((0, _item.imageUpload)({ content: formatMessage(_messages.toolbarInsertBlockMessages.image), disabled: !imageUploadEnabled || isOffline })); } if (mentionsSupported) { items.push((0, _item.mention)({ content: formatMessage(_messages.toolbarInsertBlockMessages.mention), tooltipDescription: formatMessage(_messages.toolbarInsertBlockMessages.mentionDescription), disabled: !isTypeAheadAllowed || !!mentionsDisabled, 'aria-haspopup': 'listbox' })); } if (emojiProvider) { items.push((0, _item.emoji)({ content: formatMessage(_messages.toolbarInsertBlockMessages.emoji), tooltipDescription: formatMessage(_messages.toolbarInsertBlockMessages.emojiDescription), disabled: emojiDisabled || !isTypeAheadAllowed, 'aria-haspopup': 'dialog' })); } } if (tableSupported) { items.push((0, _item.table)({ content: formatMessage(_messages.toolbarInsertBlockMessages.table), tooltipDescription: formatMessage(_messages.toolbarInsertBlockMessages.tableDescription), disabled: false })); } if (tableSupported && tableSelectorSupported) { items.push((0, _item.tableSelector)({ content: formatMessage(_messages.toolbarInsertBlockMessages.tableSelector), tooltipDescription: formatMessage(_messages.toolbarInsertBlockMessages.tableSelectorDescription), disabled: false })); } if (layoutSectionEnabled) { var labelColumns = formatMessage(_messages.toolbarInsertBlockMessages.columns); items.push((0, _item.layout)({ content: labelColumns, tooltipDescription: formatMessage(_messages.toolbarInsertBlockMessages.columnsDescription), disabled: false })); } var blockTypes = availableWrapperBlockTypes || []; var codeblockData = blockTypes.find(function (type) { return type.name === 'codeblock'; }); var panelData = blockTypes.find(function (type) { return type.name === 'panel'; }); var blockquoteData = blockTypes.find(function (type) { return type.name === 'blockquote'; }); if (codeblockData) { items.push((0, _item.codeblock)({ content: formatMessage(codeblockData.title), tooltipDescription: formatMessage(_messages.blockTypeMessages.codeblockDescription), disabled: false, shortcut: '```' })); } if (panelData) { items.push((0, _item.panel)({ content: formatMessage(panelData.title), tooltipDescription: formatMessage(_messages.blockTypeMessages.infoPanelDescription), disabled: false })); } if (blockquoteData) { items.push((0, _item.blockquote)({ content: formatMessage(blockquoteData.title), tooltipDescription: formatMessage(_messages.blockTypeMessages.blockquoteDescription), disabled: false, shortcut: '>' })); } if (decisionSupported) { items.push((0, _item.decision)({ content: formatMessage(_messages.toolbarInsertBlockMessages.decision), tooltipDescription: formatMessage(_messages.toolbarInsertBlockMessages.decisionDescription), disabled: false })); } if (horizontalRuleEnabled && schema.nodes.rule) { items.push((0, _item.horizontalrule)({ content: formatMessage(_messages.toolbarInsertBlockMessages.horizontalRule), tooltipDescription: formatMessage(_messages.toolbarInsertBlockMessages.horizontalRuleDescription), disabled: false })); } if (expandEnabled && schema.nodes.expand) { items.push((0, _item.expand)({ content: formatMessage(_messages.toolbarInsertBlockMessages.expand), tooltipDescription: formatMessage(_messages.toolbarInsertBlockMessages.expandDescription), disabled: false })); } if (dateEnabled) { var labelDate = formatMessage(_messages.toolbarInsertBlockMessages.date); items.push((0, _item.date)({ content: labelDate, tooltipDescription: formatMessage(_messages.toolbarInsertBlockMessages.dateDescription), disabled: false })); } if (placeholderTextEnabled) { items.push((0, _item.placeholder)({ content: formatMessage(_messages.toolbarInsertBlockMessages.placeholderText), disabled: false })); } if (nativeStatusSupported) { var labelStatus = formatMessage(_messages.toolbarInsertBlockMessages.status); items.push((0, _item.status)({ content: labelStatus, tooltipDescription: formatMessage(_messages.toolbarInsertBlockMessages.statusDescription), disabled: false })); } if (insertMenuItems) { items.push.apply(items, (0, _toConsumableArray2.default)(insertMenuItems)); } var numButtonsAdjusted = numberOfButtons; if ((0, _platformFeatureFlags.fg)('platform_editor_toolbar_responsive_fixes')) { if (items.slice(0, numButtonsAdjusted).some(function (item) { return item.value.name === 'table selector'; })) { numButtonsAdjusted++; } } else { numButtonsAdjusted = tableSupported && tableSelectorSupported ? numberOfButtons + 1 : numberOfButtons; } var buttonItems = items.slice(0, numButtonsAdjusted).map(buttonToItem); var remainingItems = items.slice(numButtonsAdjusted).filter(function (_ref) { var name = _ref.value.name; return name !== 'table selector'; }); var dropdownItems = remainingItems.map(buttonToDropdownItem(formatMessage(_messages.toolbarInsertBlockMessages.insertMenu))); return [buttonItems, dropdownItems]; }; var createItems = exports.createItems = (0, _memoizeOne.default)(createInsertBlockItems, _shallowEquals.shallowEquals);