diff --git a/android/src/main/java/com/swmansion/enriched/textinput/styles/ParametrizedStyles.kt b/android/src/main/java/com/swmansion/enriched/textinput/styles/ParametrizedStyles.kt index 8152b4cee..82a7922d7 100644 --- a/android/src/main/java/com/swmansion/enriched/textinput/styles/ParametrizedStyles.kt +++ b/android/src/main/java/com/swmansion/enriched/textinput/styles/ParametrizedStyles.kt @@ -365,7 +365,7 @@ class ParametrizedStyles( spannable.removeSpan(span) } - val start = mentionStart ?: return + val start = mentionStart ?: selectionStart view.runAsATransaction { spannable.replace(start, selectionEnd, text) @@ -383,6 +383,7 @@ class ParametrizedStyles( view.mentionHandler?.reset() view.selection.validateStyles() + mentionStart = null } fun getStyleRange(): Pair = view.selection?.getInlineSelection() ?: Pair(0, 0) diff --git a/ios/EnrichedTextInputView.mm b/ios/EnrichedTextInputView.mm index f7889097c..774936eda 100644 --- a/ios/EnrichedTextInputView.mm +++ b/ios/EnrichedTextInputView.mm @@ -1479,15 +1479,15 @@ - (void)addMention:(NSString *)indicator if (mentionStyleClass == nullptr) { return; } - if ([mentionStyleClass getActiveMentionRange] == nullptr) { - return; - } - if ([StyleUtils - handleStyleBlocksAndConflicts:[MentionStyle getType] - range:[[mentionStyleClass - getActiveMentionRange] rangeValue] - forHost:self]) { + NSValue *activeMentionRange = [mentionStyleClass getActiveMentionRange]; + NSRange rangeToUse = activeMentionRange != nullptr + ? [activeMentionRange rangeValue] + : self.textView.selectedRange; + + if ([StyleUtils handleStyleBlocksAndConflicts:[MentionStyle getType] + range:rangeToUse + forHost:self]) { [mentionStyleClass addMention:indicator text:text attributes:attributes]; [self anyTextMayHaveBeenModified]; } diff --git a/ios/styles/MentionStyle.mm b/ios/styles/MentionStyle.mm index ea37d23ad..71ff7c45b 100644 --- a/ios/styles/MentionStyle.mm +++ b/ios/styles/MentionStyle.mm @@ -142,7 +142,11 @@ - (void)addMention:(NSString *)indicator text:(NSString *)text attributes:(NSString *)attributes { if (_activeMentionRange == nullptr) { - return; + // No draft mention (indicator not typed) - fall back to the current + // selection. + _activeMentionRange = + [NSValue valueWithRange:self.host.textView.selectedRange]; + _activeMentionIndicator = indicator; } _blockMentionEditing = YES;