@blocknote/core
Version:
A "Notion-style" block-based extensible text editor built on top of Prosemirror and Tiptap.
39 lines (31 loc) • 869 B
text/typescript
import { Node } from "prosemirror-model";
/**
* Get a TipTap node by id
*/
export function getNodeById(
id: string,
doc: Node
): { node: Node; posBeforeNode: number } | undefined {
let targetNode: Node | undefined = undefined;
let posBeforeNode: number | undefined = undefined;
doc.firstChild!.descendants((node, pos) => {
// Skips traversing nodes after node with target ID has been found.
if (targetNode) {
return false;
}
// Keeps traversing nodes if block with target ID has not been found.
if (!node.type.isInGroup("bnBlock") || node.attrs.id !== id) {
return true;
}
targetNode = node;
posBeforeNode = pos + 1;
return false;
});
if (targetNode === undefined || posBeforeNode === undefined) {
return undefined;
}
return {
node: targetNode,
posBeforeNode: posBeforeNode,
};
}