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 };
}