@atlaskit/editor-plugin-block-menu
Version:
BlockMenu plugin for @atlaskit/editor-core
56 lines (54 loc) • 2.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.wrapStep = void 0;
var _codeBlock = require("@atlaskit/editor-common/code-block");
var _utils = require("@atlaskit/editor-common/utils");
var _marks = require("../marks");
var _utils2 = require("../utils");
/**
* Wraps nodes into the target container type.
* When wrapping into expand, any expand children are converted to nestedExpand
* since expand cannot be a direct child of expand.
*
* Preserves breakout marks when both source and target nodes support resizing
* (codeBlock, expand, layoutSection).
*/
var wrapStep = exports.wrapStep = function wrapStep(nodes, context) {
var schema = context.schema,
targetNodeTypeName = context.targetNodeTypeName,
fromNode = context.fromNode;
// When wrapping into expand, convert any expand children to nestedExpand
// since expand cannot be a direct child of expand
var processedNodes = nodes;
if (targetNodeTypeName === 'expand') {
processedNodes = nodes.map(function (node) {
if (node.type.name === 'expand') {
var nestedExpandNode = (0, _utils2.convertExpandToNestedExpand)(node, schema);
return nestedExpandNode !== null && nestedExpandNode !== void 0 ? nestedExpandNode : node;
}
return node;
});
}
var targetNodeType = schema.nodes[targetNodeTypeName];
var isExpandType = targetNodeTypeName === 'expand' || targetNodeTypeName === 'nestedExpand';
var isCodeBlock = targetNodeTypeName === 'codeBlock';
var nodeAttrs = isExpandType ? {
localId: crypto.randomUUID()
} : isCodeBlock ? (0, _codeBlock.getDefaultCodeBlockAttrs)() : {};
var sourceSupportsBreakout = _utils.breakoutResizableNodes.includes(fromNode.type.name);
var targetSupportsBreakout = _utils.breakoutResizableNodes.includes(targetNodeType.name);
var shouldPreserveBreakout = sourceSupportsBreakout && targetSupportsBreakout;
var marks;
if (shouldPreserveBreakout) {
var breakoutMark = fromNode.marks.find(function (mark) {
return mark.type.name === 'breakout';
});
if (breakoutMark) {
marks = [breakoutMark];
}
}
var outputNode = targetNodeType.createAndFill(nodeAttrs, (0, _marks.removeDisallowedMarks)(processedNodes, schema.nodes[targetNodeTypeName]), marks);
return outputNode ? [outputNode] : nodes;
};