mirror of
https://github.com/purrgrammer/grimoire.git
synced 2026-04-10 23:47:12 +02:00
fix(editor): prevent '@' character appearing when backspacing emoji
When backspacing a custom emoji in the text composer, TipTap's Mention extension would fall back to its default renderText implementation which uses `suggestion?.char ?? '@'`. When the suggestion context is unavailable (e.g., during backspace/delete operations), this fallback produces '@' followed by the emoji shortcode, which then triggers the profile mention suggestion showing "No profiles found". Fix by providing an explicit renderText option to EmojiMention.configure() that always returns the correct format: the actual character for unicode emojis, or `:shortcode:` for custom emojis. This ensures consistent text representation regardless of whether suggestion context is available. Applied to both MentionEditor and RichEditor components. https://claude.ai/code/session_01YWNAEhjLprna1iWcnQEr1o
This commit is contained in:
@@ -900,7 +900,15 @@ export const MentionEditor = forwardRef<
|
||||
.run();
|
||||
},
|
||||
},
|
||||
// Note: renderLabel is not used when nodeView is defined
|
||||
// Provide renderText option to prevent fallback to '@' character
|
||||
// TipTap's default renderText uses `suggestion?.char ?? '@'` which
|
||||
// can produce '@' when suggestion context is unavailable (e.g., during backspace)
|
||||
renderText({ node }: any) {
|
||||
if (node.attrs.source === "unicode") {
|
||||
return node.attrs.url || "";
|
||||
}
|
||||
return `:${node.attrs.id}:`;
|
||||
},
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -507,6 +507,15 @@ export const RichEditor = forwardRef<RichEditorHandle, RichEditorProps>(
|
||||
.run();
|
||||
},
|
||||
},
|
||||
// Provide renderText option to prevent fallback to '@' character
|
||||
// TipTap's default renderText uses `suggestion?.char ?? '@'` which
|
||||
// can produce '@' when suggestion context is unavailable (e.g., during backspace)
|
||||
renderText({ node }: any) {
|
||||
if (node.attrs.source === "unicode") {
|
||||
return node.attrs.url || "";
|
||||
}
|
||||
return `:${node.attrs.id}:`;
|
||||
},
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user