diff --git a/src/components/common/helpers/renderTextWithEntities.tsx b/src/components/common/helpers/renderTextWithEntities.tsx index 61468b5d7..4a1f970e2 100644 --- a/src/components/common/helpers/renderTextWithEntities.tsx +++ b/src/components/common/helpers/renderTextWithEntities.tsx @@ -473,10 +473,11 @@ function processEntity({ {renderNestedMessagePart()} ); - case ApiMessageEntityTypes.Hashtag: + case ApiMessageEntityTypes.Hashtag: { + const [tag, username] = entityContent.split('@'); return ( handleHashtagClick(tag, username)} className="text-entity-link" dir="auto" data-entity-type={entity.type} @@ -484,10 +485,12 @@ function processEntity({ {renderNestedMessagePart()} ); - case ApiMessageEntityTypes.Cashtag: + } + case ApiMessageEntityTypes.Cashtag: { + const [tag, username] = entityContent.split('@'); return ( handleHashtagClick(tag, username)} className="text-entity-link" dir="auto" data-entity-type={entity.type} @@ -495,6 +498,7 @@ function processEntity({ {renderNestedMessagePart()} ); + } case ApiMessageEntityTypes.Code: return ( ) { getActions().sendBotCommand({ command: e.currentTarget.innerText }); } -function handleHashtagClick(e: React.MouseEvent) { - getActions().searchHashtag({ hashtag: e.currentTarget.innerText }); +function handleHashtagClick(hashtag?: string, username?: string) { + if (!hashtag) return; + if (username) { + getActions().openChatByUsername({ + username, + onChatChanged: { + action: 'searchHashtag', + payload: { hashtag }, + }, + }); + return; + } + getActions().searchHashtag({ hashtag }); } function handleCodeClick(e: React.MouseEvent) { diff --git a/src/global/actions/api/chats.ts b/src/global/actions/api/chats.ts index 6f85db895..96c75bd82 100644 --- a/src/global/actions/api/chats.ts +++ b/src/global/actions/api/chats.ts @@ -1500,7 +1500,8 @@ addActionHandler('acceptChatInvite', async (global, actions, payload): Promise => { const { - username, messageId, commentId, startParam, startAttach, attach, threadId, originalParts, startApp, text, + username, messageId, commentId, startParam, startAttach, attach, threadId, originalParts, startApp, + text, onChatChanged, tabId = getCurrentTabId(), } = payload; @@ -1542,6 +1543,10 @@ addActionHandler('openChatByUsername', async (global, actions, payload): Promise text, }, tabId, ); + if (onChatChanged) { + // @ts-ignore + actions[onChatChanged.action](onChatChanged.payload); + } return; } } @@ -1586,6 +1591,10 @@ addActionHandler('openChatByUsername', async (global, actions, payload): Promise tabId, focusMessageId: commentId, }); + if (onChatChanged) { + // @ts-ignore + actions[onChatChanged.action](onChatChanged.payload); + } }); addActionHandler('togglePreHistoryHidden', async (global, actions, payload): Promise => { diff --git a/src/global/types.ts b/src/global/types.ts index 412b0ba4d..048c06b9c 100644 --- a/src/global/types.ts +++ b/src/global/types.ts @@ -1828,6 +1828,7 @@ export interface ActionPayloads { startApp?: string; text?: string; originalParts?: (string | undefined)[]; + onChatChanged?: CallbackAction; } & WithTabId; processBoostParameters: { usernameOrId: string;