@atlaskit/editor-plugin-insert-block
Version:
Insert block plugin for @atlaskit/editor-core
266 lines (265 loc) • 11.8 kB
JavaScript
"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);