UNPKG

@atlaskit/editor-plugin-block-menu

Version:

BlockMenu plugin for @atlaskit/editor-core

39 lines (37 loc) 1.95 kB
"use strict"; 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; };