diff --git a/src/libs/convertToLTRForComposer/index.ts b/src/libs/convertToLTRForComposer/index.ts index eb14bfa8c11a3..79c1eaed59a53 100644 --- a/src/libs/convertToLTRForComposer/index.ts +++ b/src/libs/convertToLTRForComposer/index.ts @@ -1,20 +1,21 @@ import CONST from '../../CONST'; import ConvertToLTRForComposer from './types'; -function hasLTRorRTLCharacters(text: string): boolean { - // Regular expressions to match LTR and RTL character ranges. - // eslint-disable-next-line no-control-regex - const ltrPattern = /[\u0001-\u05FF\u0600-\u06FF\u0750-\u077F\uFB50-\uFDFF\uFE70-\uFEFF]/; +function hasRTLCharacters(text: string): boolean { + // Regular expressions to match RTL character ranges. const rtlPattern = /[\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC]/; - - return ltrPattern.test(text) || rtlPattern.test(text); + return rtlPattern.test(text); } // Converts a given text to ensure it starts with the LTR (Left-to-Right) marker. const convertToLTRForComposer: ConvertToLTRForComposer = (text) => { - // Ensure the text contains LTR or RTL characters to avoid an unwanted special character at the beginning, even after a backspace deletion. - if (!hasLTRorRTLCharacters(text)) { - return ''; + // Ensure that the text starts with RTL characters if not we return the same text to avoid concatination with special character at the start which leads to unexpected behaviour for Emoji/Mention suggestions. + if (!hasRTLCharacters(text)) { + // If text is empty string return empty string to avoid an empty draft due to special character. + if (text === '' || CONST.UNICODE.LTR.match(text)) { + return ''; + } + return text; } // Check if the text contains only spaces. If it does, we do not concatenate it with CONST.UNICODE.LTR,