Fix room mention (#1459)
authorAjay Bura <32841439+ajbura@users.noreply.github.com>
Thu, 19 Oct 2023 06:43:54 +0000 (17:43 +1100)
committerGitHub <noreply@github.com>
Thu, 19 Oct 2023 06:43:54 +0000 (17:43 +1100)
* create room mention with alias if possible

* display room mention text as they were sent

src/app/components/editor/autocomplete/RoomMentionAutocomplete.tsx
src/app/components/editor/input.ts
src/app/plugins/react-custom-html-parser.tsx

index 31acd2c5416fed2296dbce8c7164186926532175..b9fee8788f6555ecf459ee855aae458d8bae1980 100644 (file)
@@ -32,14 +32,14 @@ function UnknownRoomMentionItem({
   const mx = useMatrixClient();
   const roomAlias: string = roomAliasFromQueryText(mx, query.text);
 
+  const handleSelect = () => handleAutocomplete(roomAlias, roomAlias);
+
   return (
     <MenuItem
       as="button"
       radii="300"
-      onKeyDown={(evt: ReactKeyboardEvent<HTMLButtonElement>) =>
-        onTabPress(evt, () => handleAutocomplete(roomAlias, roomAlias))
-      }
-      onClick={() => handleAutocomplete(roomAlias, roomAlias)}
+      onKeyDown={(evt: ReactKeyboardEvent<HTMLButtonElement>) => onTabPress(evt, handleSelect)}
+      onClick={handleSelect}
       before={
         <Avatar size="200">
           <Icon src={Icons.Hash} size="100" />
@@ -140,15 +140,17 @@ export function RoomMentionAutocomplete({
           const avatarUrl = getRoomAvatarUrl(mx, room);
           const iconSrc = !dm && joinRuleToIconSrc(Icons, room.getJoinRule(), room.isSpaceRoom());
 
+          const handleSelect = () => handleAutocomplete(room.getCanonicalAlias() ?? rId, room.name);
+
           return (
             <MenuItem
               key={rId}
               as="button"
               radii="300"
               onKeyDown={(evt: ReactKeyboardEvent<HTMLButtonElement>) =>
-                onTabPress(evt, () => handleAutocomplete(rId, room.name))
+                onTabPress(evt, handleSelect)
               }
-              onClick={() => handleAutocomplete(room.getCanonicalAlias() ?? rId, room.name)}
+              onClick={handleSelect}
               after={
                 <Text size="T200" priority="300" truncate>
                   {room.getCanonicalAlias() ?? ''}
index 37aa7244299cf5926daba5f9cb3ae8dd523bb712..91386a87777153723db822a58444532233be5593 100644 (file)
@@ -74,7 +74,7 @@ const elementToInlineNode = (node: Element): MentionElement | EmoticonElement |
     if (typeof href !== 'string') return undefined;
     const [mxId] = parseMatrixToUrl(href);
     if (mxId) {
-      return createMentionElement(mxId, mxId, false);
+      return createMentionElement(mxId, parseNodeText(node) || mxId, false);
     }
   }
   return undefined;
index aba5997dc174519b14f011b102c1792b4ed5a200..09f09d8f6bfc5c51bc9c7e70ad4fab0f9ae436fc 100644 (file)
@@ -180,10 +180,7 @@ export const getReactCustomHtmlParser = (
                 mentionPrefix === '#'
                   ? getRoomWithCanonicalAlias(mx, mentionId)
                   : mx.getRoom(mentionId);
-              const mentionName = mentionRoom?.name;
 
-              const mentionDisplayName =
-                mentionName && (mentionName.startsWith('#') ? mentionName : `#${mentionName}`);
               return (
                 <span
                   {...props}
@@ -198,7 +195,7 @@ export const getReactCustomHtmlParser = (
                   onClick={params.handleMentionClick}
                   style={{ cursor: 'pointer' }}
                 >
-                  {mentionDisplayName ?? mentionId}
+                  {domToReact(children, opts)}
                 </span>
               );
             }