@atlaskit/editor-plugin-card
Version:
Card plugin for @atlaskit/editor-core
248 lines (247 loc) • 13 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.cardPlugin = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _messages = require("@atlaskit/editor-common/messages");
var _quickInsert = require("@atlaskit/editor-common/quick-insert");
var _utils = require("@atlaskit/editor-common/utils");
var _linkDatasource = require("@atlaskit/link-datasource");
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
var _blockCard = require("./nodeviews/toDOM-fixes/blockCard");
var _embedCard = require("./nodeviews/toDOM-fixes/embedCard");
var _inlineCard = require("./nodeviews/toDOM-fixes/inlineCard");
var _actions = require("./pm-plugins/actions");
var _doc = require("./pm-plugins/doc");
var _keymap = require("./pm-plugins/keymap");
var _main = require("./pm-plugins/main");
var _pluginKey = require("./pm-plugins/plugin-key");
var _utils2 = require("./pm-plugins/utils");
var _createEventsQueue = require("./ui/analytics/create-events-queue");
var _ModalWithState = _interopRequireDefault(require("./ui/DatasourceModal/ModalWithState"));
var _EditorLinkingPlatformAnalytics = require("./ui/EditorLinkingPlatformAnalytics");
var _EditorSmartCardEvents = require("./ui/EditorSmartCardEvents");
var _LayoutButton = _interopRequireDefault(require("./ui/LayoutButton"));
var _toolbar = require("./ui/toolbar");
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; } // Ignored via go/ees005
// eslint-disable-next-line import/no-named-as-default
var cardPlugin = exports.cardPlugin = function cardPlugin(_ref) {
var _api$base, _options$lpLinkPicker;
var _ref$config = _ref.config,
options = _ref$config === void 0 ? {} : _ref$config,
api = _ref.api;
var previousCardProvider;
var cardPluginEvents = (0, _createEventsQueue.createEventsQueue)();
var instanceEmbedCardTransformers = options.embedCardTransformers;
api === null || api === void 0 || (_api$base = api.base) === null || _api$base === void 0 || _api$base.actions.registerMarks(function (_ref2) {
var tr = _ref2.tr,
node = _ref2.node,
pos = _ref2.pos;
var doc = tr.doc;
var schema = doc.type.schema;
var inlineCardNodeType = schema.nodes.inlineCard;
if (node.type === inlineCardNodeType) {
var newText = node.attrs.url;
var currentPos = tr.mapping.map(pos);
tr.replaceWith(currentPos, currentPos + node.nodeSize, schema.text(newText, node.marks));
}
});
return {
name: 'card',
getSharedState: function getSharedState(editorState) {
if (!editorState) {
return null;
}
return _pluginKey.pluginKey.getState(editorState) || null;
},
nodes: function nodes() {
var nodes = [{
name: 'inlineCard',
node: (0, _inlineCard.inlineCardSpecWithFixedToDOM)()
}, {
name: 'blockCard',
node: (0, _blockCard.blockCardSpecWithFixedToDOM)()
}];
if (options.allowEmbeds) {
nodes.push({
name: 'embedCard',
node: (0, _embedCard.embedCardSpecWithFixedToDOM)()
});
}
return nodes;
},
pmPlugins: function pmPlugins() {
var _options$allowBlockCa, _options$allowResizin, _options$useAlternati, _options$allowWrappin, _options$allowAlignme, _options$allowDatasou, _options$showUpgradeD;
var allowBlockCards = (_options$allowBlockCa = options.allowBlockCards) !== null && _options$allowBlockCa !== void 0 ? _options$allowBlockCa : true;
var allowResizing = (_options$allowResizin = options.allowResizing) !== null && _options$allowResizin !== void 0 ? _options$allowResizin : true;
var useAlternativePreloader = (_options$useAlternati = options.useAlternativePreloader) !== null && _options$useAlternati !== void 0 ? _options$useAlternati : true;
var allowWrapping = (_options$allowWrappin = options.allowWrapping) !== null && _options$allowWrappin !== void 0 ? _options$allowWrappin : true;
var allowAlignment = (_options$allowAlignme = options.allowAlignment) !== null && _options$allowAlignme !== void 0 ? _options$allowAlignme : true;
var allowDatasource = (_options$allowDatasou = options.allowDatasource) !== null && _options$allowDatasou !== void 0 ? _options$allowDatasou : false;
var showUpgradeDiscoverability = (_options$showUpgradeD = options.showUpgradeDiscoverability) !== null && _options$showUpgradeD !== void 0 ? _options$showUpgradeD : true;
var plugins = [{
name: 'card',
plugin: (0, _main.createPlugin)(_objectSpread(_objectSpread({}, options), {}, {
allowBlockCards: allowBlockCards,
allowResizing: allowResizing,
useAlternativePreloader: useAlternativePreloader,
allowWrapping: allowWrapping,
allowAlignment: allowAlignment,
allowDatasource: allowDatasource,
cardPluginEvents: cardPluginEvents,
embedCardTransformers: instanceEmbedCardTransformers,
showUpgradeDiscoverability: showUpgradeDiscoverability
}), api)
}];
plugins.push({
name: 'cardKeymap',
plugin: function plugin(_ref3) {
var featureFlags = _ref3.featureFlags;
return (0, _keymap.cardKeymap)(featureFlags);
}
});
return plugins;
},
contentComponent: function contentComponent(_ref4) {
var editorView = _ref4.editorView,
popupsMountPoint = _ref4.popupsMountPoint,
popupsScrollableElement = _ref4.popupsScrollableElement,
popupsBoundariesElement = _ref4.popupsBoundariesElement;
if (!editorView) {
return null;
}
var breakoutEnabled = options.editorAppearance === 'full-page';
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_EditorSmartCardEvents.EditorSmartCardEvents, {
editorView: editorView
}), /*#__PURE__*/_react.default.createElement(_EditorLinkingPlatformAnalytics.EditorLinkingPlatformAnalytics, {
cardPluginEvents: cardPluginEvents,
editorView: editorView
}), breakoutEnabled && /*#__PURE__*/_react.default.createElement(_LayoutButton.default, {
api: api,
editorView: editorView,
mountPoint: popupsMountPoint,
scrollableElement: popupsScrollableElement,
boundariesElement: popupsBoundariesElement
}), /*#__PURE__*/_react.default.createElement(_ModalWithState.default, {
api: api,
editorView: editorView
}));
},
actions: {
setProvider: function () {
var _setProvider2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(providerPromise) {
var _api$core$actions$exe;
var provider;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return providerPromise;
case 2:
provider = _context.sent;
if (!(previousCardProvider === provider || (options === null || options === void 0 ? void 0 : options.provider) === providerPromise)) {
_context.next = 5;
break;
}
return _context.abrupt("return", false);
case 5:
previousCardProvider = provider;
return _context.abrupt("return", (_api$core$actions$exe = api === null || api === void 0 ? void 0 : api.core.actions.execute(function (_ref5) {
var tr = _ref5.tr;
return (0, _actions.setProvider)(provider)(tr);
})) !== null && _api$core$actions$exe !== void 0 ? _api$core$actions$exe : false);
case 7:
case "end":
return _context.stop();
}
}, _callee);
}));
function setProvider(_x) {
return _setProvider2.apply(this, arguments);
}
return setProvider;
}(),
hideLinkToolbar: _actions.hideLinkToolbar,
queueCardsFromChangedTr: _doc.queueCardsFromChangedTr,
registerEmbedCardTransformer: function registerEmbedCardTransformer(transformers) {
instanceEmbedCardTransformers = transformers;
},
getStartingToolbarItems: (0, _toolbar.getStartingToolbarItems)(options, api),
getEndingToolbarItems: (0, _toolbar.getEndingToolbarItems)(options, api)
},
pluginsOptions: {
floatingToolbar: (0, _toolbar.floatingToolbar)(options, (_options$lpLinkPicker = options.lpLinkPicker) !== null && _options$lpLinkPicker !== void 0 ? _options$lpLinkPicker : false, options.linkPicker, api, options.disableFloatingToolbar),
quickInsert: function quickInsert(_ref6) {
var formatMessage = _ref6.formatMessage;
var quickInsertArray = [];
if (!options.allowDatasource) {
return quickInsertArray;
}
quickInsertArray.push(_objectSpread(_objectSpread({
id: 'datasource',
title: formatMessage((0, _platformFeatureFlags.fg)('confluence-issue-terminology-refresh') ? _messages.cardMessages.datasourceJiraIssueIssueTermRefresh : _messages.cardMessages.datasourceJiraIssue),
description: formatMessage((0, _platformFeatureFlags.fg)('confluence-issue-terminology-refresh') ? _messages.cardMessages.datasourceJiraIssueDescriptionIssueTermRefresh : _messages.cardMessages.datasourceJiraIssueDescription),
isDisabledOffline: true,
categories: ['external-content', 'development'],
keywords: ['jira'],
featured: true
}, (0, _platformFeatureFlags.fg)('jim-lower-ranking-in-jira-macro-search') && {
priority: 500
}), {}, {
icon: function icon() {
return /*#__PURE__*/_react.default.createElement(_quickInsert.IconDatasourceJiraIssue, null);
},
action: function action(insert) {
var tr = insert(undefined);
(0, _actions.showDatasourceModal)('jira')(tr);
return tr;
}
}));
if ((0, _utils.canRenderDatasource)(_linkDatasource.ASSETS_LIST_OF_LINKS_DATASOURCE_ID)) {
quickInsertArray.push({
id: 'datasource',
title: formatMessage(_messages.cardMessages.datasourceAssetsObjectsGeneralAvailability),
description: formatMessage(_messages.cardMessages.datasourceAssetsObjectsDescription),
isDisabledOffline: true,
categories: ['external-content', 'development'],
keywords: ['assets'],
icon: function icon() {
return /*#__PURE__*/_react.default.createElement(_quickInsert.IconDatasourceAssetsObjects, null);
},
action: function action(insert) {
var tr = insert(undefined);
(0, _actions.showDatasourceModal)('assets')(tr);
return tr;
}
});
}
if ((0, _utils2.isDatasourceConfigEditable)(_linkDatasource.CONFLUENCE_SEARCH_DATASOURCE_ID)) {
quickInsertArray.push({
id: 'datasource',
title: formatMessage(_messages.cardMessages.datasourceConfluenceSearch),
description: formatMessage(_messages.cardMessages.datasourceConfluenceSearchDescription),
isDisabledOffline: true,
categories: ['external-content', 'development'],
keywords: ['confluence'],
featured: true,
icon: function icon() {
return /*#__PURE__*/_react.default.createElement(_quickInsert.IconDatasourceConfluenceSearch, null);
},
action: function action(insert) {
var tr = insert(undefined);
(0, _actions.showDatasourceModal)('confluence-search')(tr);
return tr;
}
});
}
return quickInsertArray;
}
}
};
};