diff --git a/src/modules/Message/components/TextFragment/index.tsx b/src/modules/Message/components/TextFragment/index.tsx index b32997d93..bd7777fa1 100644 --- a/src/modules/Message/components/TextFragment/index.tsx +++ b/src/modules/Message/components/TextFragment/index.tsx @@ -50,6 +50,8 @@ export default function TextFragment({ : 'sendbird-label--color-onbackground-1' } href={asSafeURL(groups[2])} + target="_blank" + rel="noopener noreferrer" > diff --git a/src/ui/MessageInput/__tests__/MessageInput.spec.js b/src/ui/MessageInput/__tests__/MessageInput.spec.js index 3f99de316..5fb340219 100644 --- a/src/ui/MessageInput/__tests__/MessageInput.spec.js +++ b/src/ui/MessageInput/__tests__/MessageInput.spec.js @@ -172,7 +172,7 @@ describe('ui/MessageInput', () => { expect(input.textContent).toBe(mockText); fireEvent.keyDown(input, { key: 'Enter' }); - expect(onSendMessage).toHaveBeenCalledWith({ mentionTemplate: mockText, message: mockText }); + expect(onSendMessage).toHaveBeenCalledWith({ mentionTemplate: '', message: mockText }); }); it('should call sendMessage with valid string; new lines included', async () => { @@ -187,7 +187,7 @@ describe('ui/MessageInput', () => { expect(input.textContent).toBe(mockText); fireEvent.keyDown(input, { key: 'Enter' }); - expect(onSendMessage).toHaveBeenCalledWith({ mentionTemplate: mockText, message: mockText }); + expect(onSendMessage).toHaveBeenCalledWith({ mentionTemplate: '', message: mockText }); }); it('should not call sendMessage with invalid string; only white spaces', async() => { @@ -202,7 +202,7 @@ describe('ui/MessageInput', () => { expect(input.textContent).toBe(mockText); fireEvent.keyDown(input, { key: 'Enter' }); - expect(onSendMessage).not.toHaveBeenCalledWith({ mentionTemplate: mockText, message: mockText }); + expect(onSendMessage).not.toHaveBeenCalledWith({ mentionTemplate: '', message: mockText }); }); it('should render send icon if text is present', async() => { diff --git a/src/ui/MessageInput/index.tsx b/src/ui/MessageInput/index.tsx index 3d9441f02..54ab2aa95 100644 --- a/src/ui/MessageInput/index.tsx +++ b/src/ui/MessageInput/index.tsx @@ -349,8 +349,9 @@ const MessageInput = React.forwardRef((prop try { const textField = internalRef?.current; if (!isEdit && textField?.textContent) { - const { messageText, mentionTemplate } = extractTextAndMentions(textField.childNodes); + const { messageText, mentionTemplate, isMentionedMessage } = extractTextAndMentions(textField.childNodes); const params = { message: messageText, mentionTemplate }; + if (!isMentionedMessage) params.mentionTemplate = ''; onSendMessage(params); resetInput(internalRef); /** diff --git a/src/ui/MessageInput/utils.ts b/src/ui/MessageInput/utils.ts index 2d241cb37..13929f094 100644 --- a/src/ui/MessageInput/utils.ts +++ b/src/ui/MessageInput/utils.ts @@ -34,10 +34,12 @@ function isHTMLElement(node: ChildNode): node is HTMLElement { export function extractTextAndMentions(childNodes: NodeListOf) { let messageText = ''; let mentionTemplate = ''; + let isMentionedMessage = false; childNodes.forEach((node) => { if (isHTMLElement(node) && node.nodeName === NodeNames.Span) { const { innerText, dataset = {} } = node; const { userid = '' } = dataset; + if (userid) isMentionedMessage = true; messageText += innerText; mentionTemplate += `${USER_MENTION_TEMP_CHAR}{${userid}}`; } else if (isHTMLElement(node) && node.nodeName === NodeNames.Br) { @@ -53,5 +55,5 @@ export function extractTextAndMentions(childNodes: NodeListOf) { mentionTemplate += textContent; } }); - return { messageText, mentionTemplate }; + return { messageText, mentionTemplate, isMentionedMessage }; }