fix: use delimited format for mention highlighting

This commit is contained in:
CREDO23 2026-01-16 20:10:09 +02:00
parent 80e19a52cb
commit 985f50b683
2 changed files with 9 additions and 5 deletions

View file

@ -38,14 +38,16 @@ def parse_mentions(content: str) -> list[UUID]:
def render_mentions(content: str, user_names: dict[UUID, str]) -> str:
"""
Replace @[uuid] mentions with @DisplayName in content.
Replace @[uuid] mentions with @{DisplayName} in content.
Uses curly braces as delimiters for unambiguous frontend parsing.
Args:
content: Comment text with @[uuid] mentions
user_names: Dict mapping user UUIDs to display names
Returns:
Content with mentions rendered as @DisplayName
Content with mentions rendered as @{DisplayName}
"""
def replace_mention(match: re.Match) -> str:
@ -53,7 +55,7 @@ def render_mentions(content: str, user_names: dict[UUID, str]) -> str:
uuid = UUID(match.group(1))
name = user_names.get(uuid)
if name:
return f"@{name}"
return f"@{{{name}}}"
# Keep original format if user not found
return match.group(0)
except ValueError:

View file

@ -68,7 +68,8 @@ function formatTimestamp(dateString: string): string {
}
function renderMentions(content: string): React.ReactNode {
const mentionPattern = /@(\w+(?:\s+\w+)*)/g;
// Match @{DisplayName} format from backend
const mentionPattern = /@\{([^}]+)\}/g;
const parts: React.ReactNode[] = [];
let lastIndex = 0;
let match: RegExpExecArray | null;
@ -78,9 +79,10 @@ function renderMentions(content: string): React.ReactNode {
parts.push(content.slice(lastIndex, match.index));
}
// Display as @DisplayName (without curly braces)
parts.push(
<span key={match.index} className="rounded bg-primary/10 px-1 font-medium text-primary">
{match[0]}
@{match[1]}
</span>
);