@atlaskit/editor-plugin-block-menu
Version:
BlockMenu plugin for @atlaskit/editor-core
57 lines • 2.93 kB
JavaScript
import { startMeasure, stopMeasure } from '@atlaskit/editor-common/performance-measures';
import { NodeSelection } from '@atlaskit/editor-prosemirror/state';
import { isNestedNode } from '../ui/utils/isNestedNode';
import { isEmptyLine } from './is-empty-line';
import { createTransformAnalytics } from './transform-analytics';
export var transformInlineNode = function transformInlineNode(api) {
return function (metadata) {
return function (_ref) {
var _api$blockControls;
var tr = _ref.tr;
var preservedSelection = api === null || api === void 0 || (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 || (_api$blockControls = _api$blockControls.sharedState.currentState()) === null || _api$blockControls === void 0 ? void 0 : _api$blockControls.preservedSelection;
if (!preservedSelection || !(preservedSelection instanceof NodeSelection)) {
return tr;
}
var source = {
node: preservedSelection.node,
pos: preservedSelection.from
};
var analytics = createTransformAnalytics(api, tr, preservedSelection);
var measureId = "transformInlineNode_".concat(metadata.targetTypeName, "_").concat(Date.now());
startMeasure(measureId);
var isParentLayout = tr.doc.resolve(source.pos).parent.type === tr.doc.type.schema.nodes.layoutColumn;
var isNested = isNestedNode(preservedSelection, '') && !isParentLayout;
try {
var _api$blockControls2, _api$blockControls3;
var inlineNode = metadata.buildInlineNode(source.node);
var paragraphNode = tr.doc.type.schema.nodes.paragraph.createChecked({}, [inlineNode]);
tr.replaceWith(source.pos, source.pos + source.node.nodeSize, paragraphNode);
if (NodeSelection.isSelectable(inlineNode)) {
tr.setSelection(NodeSelection.create(tr.doc, source.pos + 1));
}
api === null || api === void 0 || (_api$blockControls2 = api.blockControls) === null || _api$blockControls2 === void 0 || _api$blockControls2.commands.stopPreservingSelection()({
tr: tr
});
api === null || api === void 0 || (_api$blockControls3 = api.blockControls) === null || _api$blockControls3 === void 0 || _api$blockControls3.commands.toggleBlockMenu({
closeMenu: true
})({
tr: tr
});
stopMeasure(measureId, function (duration, startTime) {
analytics.transformed(duration, startTime, {
isEmptyLine: isEmptyLine([source.node]),
isNested: isNested,
isSuggested: Boolean(metadata.isSuggested),
outputNodesCount: 1,
sourceNodes: [source.node],
targetNodeType: metadata.targetTypeName
});
});
} catch (error) {
stopMeasure(measureId);
analytics.errored(error, [source.node], metadata.targetTypeName);
}
return tr;
};
};
};