Skip to content

Commit 7a213c7

Browse files
authored
This fix edge bug when you move to the other token by arrows (#122)
Attempt to fix the bug, again :) reference to PR #121 #120 I've apparently fixed in previous #121 another bug :)
1 parent 2b860d0 commit 7a213c7

File tree

1 file changed

+21
-14
lines changed

1 file changed

+21
-14
lines changed

src/Textarea.jsx

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -420,8 +420,10 @@ class ReactTextareaAutocomplete extends React.Component<
420420
const insertedTriggerModifier = insertedTrigger
421421
? insertedTrigger[0].length
422422
: 1;
423+
423424
this.lastTrigger = newCaretPosition - insertedTriggerModifier;
424425
this.textareaRef.value = newValue;
426+
this.textareaRef.selectionEnd = newCaretPosition;
425427
this._changeHandler();
426428

427429
const scrollTop = this.textareaRef.scrollTop;
@@ -619,9 +621,7 @@ class ReactTextareaAutocomplete extends React.Component<
619621
this.setState({
620622
data: null,
621623
dataLoading: false,
622-
currentTrigger: null,
623-
top: null,
624-
left: null
624+
currentTrigger: null
625625
});
626626
};
627627

@@ -699,8 +699,24 @@ class ReactTextareaAutocomplete extends React.Component<
699699
value
700700
});
701701

702+
const setTopLeft = () => {
703+
const { top: newTop, left: newLeft } = getCaretCoordinates(
704+
textarea,
705+
selectionEnd
706+
);
707+
708+
this.setState({
709+
// make position relative to textarea
710+
top: newTop - this.textareaRef.scrollTop || 0,
711+
left: newLeft
712+
});
713+
};
714+
702715
const cleanLastTrigger = () => {
703716
this.lastTrigger = selectionEnd - 1;
717+
718+
this._closeAutocomplete();
719+
setTopLeft();
704720
};
705721

706722
if (selectionEnd <= this.lastTrigger) {
@@ -788,16 +804,7 @@ class ReactTextareaAutocomplete extends React.Component<
788804
// if the trigger got changed, let's reposition the autocomplete
789805
this.state.currentTrigger !== currentTrigger
790806
) {
791-
const { top: newTop, left: newLeft } = getCaretCoordinates(
792-
textarea,
793-
selectionEnd
794-
);
795-
796-
this.setState({
797-
// make position relative to textarea
798-
top: newTop - this.textareaRef.scrollTop || 0,
799-
left: newLeft
800-
});
807+
setTopLeft();
801808
}
802809

803810
this.escListenerInit();
@@ -886,7 +893,7 @@ class ReactTextareaAutocomplete extends React.Component<
886893
const { dataLoading, currentTrigger } = this.state;
887894
const suggestionData = this._getSuggestions();
888895

889-
return (dataLoading || suggestionData) && currentTrigger;
896+
return !!((dataLoading || suggestionData) && currentTrigger);
890897
};
891898

892899
props: TextareaProps;

0 commit comments

Comments
 (0)