@atlaskit/editor-plugin-selection-extension
Version:
editor-plugin-selection-extension plugin for @atlaskit/editor-core
65 lines (64 loc) • 2.71 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.MenuItem = void 0;
var _react = _interopRequireDefault(require("react"));
var _toolbar = require("@atlaskit/editor-common/toolbar");
var _editorToolbar = require("@atlaskit/editor-toolbar");
var _lozenge = _interopRequireDefault(require("@atlaskit/lozenge"));
var _compiled = require("@atlaskit/primitives/compiled");
var _main = require("../../pm-plugins/main");
var _utils = require("../../pm-plugins/utils");
var _types = require("../../types");
var MenuItem = exports.MenuItem = function MenuItem(_ref) {
var extensionMenuItems = _ref.extensionMenuItems,
api = _ref.api;
var _useEditorToolbar = (0, _toolbar.useEditorToolbar)(),
editorView = _useEditorToolbar.editorView;
if (!(extensionMenuItems !== null && extensionMenuItems !== void 0 && extensionMenuItems.length) || !editorView || !api) {
return null;
}
var onClickHandle = function onClickHandle(extension) {
return function () {
if (extension.contentComponent) {
var selection = (0, _utils.getSelectionTextInfo)(editorView, api);
api.core.actions.execute(api.selectionExtension.commands.setActiveExtension({
extension: extension,
selection: selection
}));
}
api.core.actions.execute(function (_ref2) {
var tr = _ref2.tr;
var _getSelectionAdfInfoN = (0, _utils.getSelectionAdfInfoNew)(tr.selection),
selectedNode = _getSelectionAdfInfoN.selectedNode,
nodePos = _getSelectionAdfInfoN.nodePos;
tr.setMeta(_main.selectionExtensionPluginKey, {
type: _types.SelectionExtensionActionTypes.SET_SELECTED_NODE,
selectedNode: selectedNode,
nodePos: nodePos
});
return tr;
});
extension.onClick && extension.onClick();
};
};
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, extensionMenuItems.map(function (extension) {
var Icon = extension.icon;
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, {
key: extension.label,
elemBefore: /*#__PURE__*/_react.default.createElement(Icon, {
size: "small",
label: ""
}),
onClick: onClickHandle(extension),
isDisabled: extension.isDisabled
}, extension.label, extension.lozenge && /*#__PURE__*/_react.default.createElement(_compiled.Box, {
as: "span",
paddingInline: "space.100"
}, /*#__PURE__*/_react.default.createElement(_lozenge.default, {
appearance: 'new'
}, extension.lozenge.label)));
}));
};