UNPKG

@lobehub/editor

Version:

A powerful and extensible rich text editor built on Meta's Lexical framework, providing a modern editing experience with React integration.

46 lines 1.87 kB
import { $getSelection, $isNodeSelection, $isRangeSelection } from 'lexical'; import { $isMentionNode } from "../node/MentionNode"; export function registerMentionNodeSelectionObserver(editor) { var selectMentionKeys = []; return editor.registerUpdateListener(function (_ref) { var editorState = _ref.editorState; var selection = editorState.read(function () { return $getSelection(); }); var newSelectMentionKeys = []; if ($isNodeSelection(selection)) { var nodes = editorState.read(function () { return selection.getNodes(); }); nodes.forEach(function (node) { if (node.getType() === 'mention') { newSelectMentionKeys.push(node.getKey()); } }); } else if ($isRangeSelection(selection) && !selection.isCollapsed()) { editorState.read(function () { selection.getNodes().forEach(function (node) { if ($isMentionNode(node)) { newSelectMentionKeys.push(node.getKey()); } }); }); } var removeKeys = selectMentionKeys.filter(function (key) { return !newSelectMentionKeys.includes(key); }); var addKeys = newSelectMentionKeys.filter(function (key) { return !selectMentionKeys.includes(key); }); selectMentionKeys.length = 0; selectMentionKeys.push.apply(selectMentionKeys, newSelectMentionKeys); removeKeys.forEach(function (key) { var _editor$getElementByK; (_editor$getElementByK = editor.getElementByKey(key)) === null || _editor$getElementByK === void 0 || _editor$getElementByK.classList.remove('selected'); }); addKeys.forEach(function (key) { var _editor$getElementByK2; (_editor$getElementByK2 = editor.getElementByKey(key)) === null || _editor$getElementByK2 === void 0 || _editor$getElementByK2.classList.add('selected'); }); }); }