diff --git a/src/MarkdownTextInput.web.tsx b/src/MarkdownTextInput.web.tsx index 872b77e4..2745b9a7 100644 --- a/src/MarkdownTextInput.web.tsx +++ b/src/MarkdownTextInput.web.tsx @@ -560,8 +560,7 @@ const MarkdownTextInput = React.forwardRef( const text = processedValue !== undefined ? processedValue : ''; - const currentCursorPostion = contentSelection?.current && contentSelection?.current.end <= text.length ? contentSelection.current.end : text.length; - parseText(divRef.current, text, processedMarkdownStyle, currentCursorPostion); + parseText(divRef.current, text, processedMarkdownStyle, contentSelection.current?.end); updateTextColor(divRef.current, value); }, [multiline, processedMarkdownStyle, processedValue], diff --git a/src/web/parserUtils.ts b/src/web/parserUtils.ts index 5e2ef243..3758bbaf 100644 --- a/src/web/parserUtils.ts +++ b/src/web/parserUtils.ts @@ -179,12 +179,13 @@ function moveCursor(isFocused: boolean, alwaysMoveCursorToTheEnd: boolean, curso } } -function parseText(target: HTMLElement, text: string, curosrPositionIndex: number | null, markdownStyle: PartialMarkdownStyle = {}, alwaysMoveCursorToTheEnd = false) { +function parseText(target: HTMLElement, text: string, cursorPositionIndex: number | null, markdownStyle: PartialMarkdownStyle = {}, alwaysMoveCursorToTheEnd = false) { const targetElement = target; - let cursorPosition: number | null = curosrPositionIndex; + // in case the cursorPositionIndex is larger than text length, cursorPosition will be null, i.e: move the caret to the end + let cursorPosition: number | null = cursorPositionIndex && cursorPositionIndex <= text.length ? cursorPositionIndex : null; const isFocused = document.activeElement === target; - if (isFocused && curosrPositionIndex === null) { + if (isFocused && cursorPositionIndex === null) { const selection = CursorUtils.getCurrentCursorPosition(target); cursorPosition = selection ? selection.end : null; }