UNPKG

@atlaskit/editor-plugin-block-menu

Version:

BlockMenu plugin for @atlaskit/editor-core

33 lines (32 loc) 1.8 kB
import { NodeSelection, TextSelection } from '@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 */ export var 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 = 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 = NodeSelection.create(newTr.doc, transformedNodePos.pos); return newTr.setSelection(nodeSelection); } return newTr; };