@atlaskit/editor-plugin-block-menu
Version:
BlockMenu plugin for @atlaskit/editor-core
39 lines (37 loc) • 1.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.setSelectionAfterTransform = void 0;
var _state = require("@atlaskit/editor-prosemirror/state");
/**
* Sets the appropriate selection after transforming a node to a target type
* @param newTr - The transaction containing the transformed node
* @param nodePos - The position of the transformed node
* @param targetType - The target type the node was transformed to
* @returns The transaction with the updated selection, or the original transaction if no selection change needed
*/
var setSelectionAfterTransform = exports.setSelectionAfterTransform = function setSelectionAfterTransform(newTr, nodePos, targetType) {
// Find the actual node that was transformed to get its positioning
var transformedNodePos = newTr.doc.resolve(nodePos);
var transformedNode = transformedNodePos.nodeAfter;
if (!transformedNode) {
return newTr;
}
// Check if target type is other than list, text, heading, blockquotes
var isListNode = targetType === 'bulletList' || targetType === 'orderedList' || targetType === 'taskList';
var isBlockquote = targetType === 'blockquote';
var isContainer = ['panel', 'expand', 'codeBlock', 'layoutSection'].includes(targetType);
if (isListNode || isBlockquote) {
// For taskList, select all content within the list
var textStart = transformedNodePos.pos + 1; // Inside the taskList
var textEnd = transformedNodePos.pos + transformedNode.nodeSize - 1; // End of taskList content
var textSelection = _state.TextSelection.between(newTr.doc.resolve(textStart), newTr.doc.resolve(textEnd));
return newTr.setSelection(textSelection);
} else if (isContainer) {
// Use NodeSelection for types other than list, text, heading, blockquotes
var nodeSelection = _state.NodeSelection.create(newTr.doc, transformedNodePos.pos);
return newTr.setSelection(nodeSelection);
}
return newTr;
};