23 lines
817 B
JavaScript
23 lines
817 B
JavaScript
// test is located in test/extract-mentions
|
|
export function extractMentions(nodes) {
|
|
const mentions = [];
|
|
collectMentions(nodes, mentions);
|
|
return mentions;
|
|
}
|
|
function collectMentions(nodes, mentions) {
|
|
for(let i = 0; i < nodes.length; i++){
|
|
const node = nodes[i];
|
|
if (node.type === "mention" && !isWrappedUserEmojiMention(nodes, i)) {
|
|
mentions.push(node.props);
|
|
}
|
|
if ("children" in node && Array.isArray(node.children)) {
|
|
collectMentions(node.children, mentions);
|
|
}
|
|
}
|
|
}
|
|
function isWrappedUserEmojiMention(nodes, index) {
|
|
const previous = nodes[index - 1];
|
|
const next = nodes[index + 1];
|
|
return previous?.type === "text" && next?.type === "text" && previous.props.text.endsWith(":") && next.props.text.startsWith(":");
|
|
}
|