UNPKG

@atlaskit/editor-plugin-block-menu

Version:

BlockMenu plugin for @atlaskit/editor-core

57 lines • 2.93 kB
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; }; }; };