diff --git a/src/components/views/rooms/BasicMessageComposer.tsx b/src/components/views/rooms/BasicMessageComposer.tsx index d83e2e964a..edf4f515d2 100644 --- a/src/components/views/rooms/BasicMessageComposer.tsx +++ b/src/components/views/rooms/BasicMessageComposer.tsx @@ -181,16 +181,18 @@ export default class BasicMessageEditor extends React.Component if (data) { const { partCreator } = model; - const moveStart = emoticonMatch[0][0] === " " ? 1 : 0; - const moveEnd = emoticonMatch[0].length - emoticonMatch.length - moveStart; + const firstMatch = emoticonMatch[0]; + const moveStart = firstMatch[0] === " " ? 1 : 0; // we need the range to only comprise of the emoticon // because we'll replace the whole range with an emoji, // so move the start forward to the start of the emoticon. // Take + 1 because index is reported without the possible preceding space. range.moveStartForwards(emoticonMatch.index + moveStart); - // and move end backwards so that we don't replace the trailing space/newline - range.moveEndBackwards(moveEnd); + // If the end is a trailing space/newline move end backwards, so that we don't replace it + if (["\n", " "].includes(firstMatch[firstMatch.length - 1])) { + range.moveEndBackwards(1); + } // this returns the amount of added/removed characters during the replace // so the caret position can be adjusted.