Skip to content

Commit b2e3098

Browse files
committed
fix: state change emitting with default values improvement
1 parent 0ac2907 commit b2e3098

1 file changed

Lines changed: 12 additions & 6 deletions

File tree

ios/EnrichedTextInputView.mm

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,9 @@ - (void)tryUpdatingActiveStyles {
601601
// style updates are emitted only if something differs from the previously active styles
602602
BOOL updateNeeded = NO;
603603

604+
// active styles are kept in a separate set until we're sure they can be emitted
605+
NSMutableSet *newActiveStyles = [_activeStyles mutableCopy];
606+
604607
// data for onLinkDetected event
605608
LinkData *detectedLinkData;
606609
NSRange detectedLinkRange = NSMakeRange(0, 0);
@@ -611,14 +614,14 @@ - (void)tryUpdatingActiveStyles {
611614

612615
for (NSNumber* type in stylesDict) {
613616
id<BaseStyleProtocol> style = stylesDict[type];
614-
BOOL wasActive = [_activeStyles containsObject: type];
617+
BOOL wasActive = [newActiveStyles containsObject: type];
615618
BOOL isActive = [style detectStyle:textView.selectedRange];
616619
if(wasActive != isActive) {
617620
updateNeeded = YES;
618621
if(isActive) {
619-
[_activeStyles addObject:type];
622+
[newActiveStyles addObject:type];
620623
} else {
621-
[_activeStyles removeObject:type];
624+
[newActiveStyles removeObject:type];
622625
}
623626
}
624627

@@ -678,6 +681,9 @@ - (void)tryUpdatingActiveStyles {
678681
if(updateNeeded) {
679682
auto emitter = [self getEventEmitter];
680683
if(emitter != nullptr) {
684+
// update activeStyles only if emitter is available
685+
_activeStyles = newActiveStyles;
686+
681687
emitter->onChangeState({
682688
.isBold = [_activeStyles containsObject: @([BoldStyle getStyleType])],
683689
.isItalic = [_activeStyles containsObject: @([ItalicStyle getStyleType])],
@@ -990,6 +996,9 @@ - (void)manageSelectionBasedChanges {
990996
textView.typingAttributes = defaultTypingAttributes;
991997
}
992998
}
999+
1000+
// update active styles as well
1001+
[self tryUpdatingActiveStyles];
9931002
}
9941003

9951004
- (void)handleWordModificationBasedChanges:(NSString*)word inRange:(NSRange)range {
@@ -1200,9 +1209,6 @@ - (void)textViewDidChangeSelection:(UITextView *)textView {
12001209

12011210
// manage selection changes
12021211
[self manageSelectionBasedChanges];
1203-
1204-
// update active styles
1205-
[self tryUpdatingActiveStyles];
12061212
}
12071213

12081214
// this function isn't called always when some text changes (for example setting link or starting mention with indicator doesn't fire it)

0 commit comments

Comments
 (0)