Permalink
Browse files

TextInput `setSelection` method was moved to base class

Summary: This method was identical between two subclasses, so it was moved to baseclass.

Reviewed By: javache

Differential Revision: D5297401

fbshipit-source-id: 8f56bef33f9ab0184f69da76177b5e8da10d7514
  • Loading branch information...
shergin authored and facebook-github-bot committed Jul 18, 2017
1 parent ee9697e commit da9a183e81e5bea3ea9294b4b6bcc6ddf5109ceb
@@ -21,7 +21,6 @@
@property (nonatomic, assign) BOOL caretHidden;
@property (nonatomic, assign) BOOL selectTextOnFocus;
@property (nonatomic, assign) BOOL blurOnSubmit;
@property (nonatomic, assign) NSInteger mostRecentEventCount;
@property (nonatomic, strong) NSNumber *maxLength;
@property (nonatomic, copy) RCTDirectEventBlock onSelectionChange;
@@ -27,9 +27,7 @@ @interface RCTTextField () <RCTBackedTextInputDelegate>
@implementation RCTTextField
{
RCTUITextField *_backedTextInput;
NSInteger _nativeEventCount;
BOOL _submitted;
UITextRange *_previousSelectionRange;
NSString *_finalText;
CGSize _previousContentSize;
}
@@ -71,26 +69,6 @@ - (void)sendKeyValueForString:(NSString *)string
#pragma mark - Properties
- (void)setSelection:(RCTTextSelection *)selection
{
if (!selection) {
return;
}
UITextRange *currentSelection = _backedTextInput.selectedTextRange;
UITextPosition *start = [_backedTextInput positionFromPosition:_backedTextInput.beginningOfDocument offset:selection.start];
UITextPosition *end = [_backedTextInput positionFromPosition:_backedTextInput.beginningOfDocument offset:selection.end];
UITextRange *selectedTextRange = [_backedTextInput textRangeFromPosition:start toPosition:end];
NSInteger eventLag = _nativeEventCount - _mostRecentEventCount;
if (eventLag == 0 && ![currentSelection isEqual:selectedTextRange]) {
_previousSelectionRange = selectedTextRange;
_backedTextInput.selectedTextRange = selectedTextRange;
} else if (eventLag > RCTTextUpdateLagWarningThreshold) {
RCTLogWarn(@"Native TextInput(%@) is %zd events ahead of JS - try to make your JS faster.", self.text, eventLag);
}
}
- (NSString *)text
{
return _backedTextInput.text;
@@ -20,6 +20,9 @@
@protected
RCTBridge *_bridge;
RCTEventDispatcher *_eventDispatcher;
UITextRange *_previousSelectionRange;
NSInteger _nativeEventCount;
NSInteger _mostRecentEventCount;
}
- (instancetype)initWithBridge:(RCTBridge *)bridge NS_DESIGNATED_INITIALIZER;
@@ -36,6 +39,8 @@
@property (nonatomic, copy) RCTDirectEventBlock onContentSizeChange;
@property (nonatomic, assign) NSInteger mostRecentEventCount;
- (void)invalidateContentSize;
@end
@@ -16,6 +16,8 @@
#import <React/RCTUIManager.h>
#import <React/UIView+React.h>
#import "RCTTextSelection.h"
@implementation RCTTextInput {
CGSize _previousContentSize;
}
@@ -60,6 +62,28 @@ - (void)setReactBorderInsets:(UIEdgeInsets)reactBorderInsets
[self setNeedsLayout];
}
- (void)setSelection:(RCTTextSelection *)selection
{
if (!selection) {
return;
}
id<RCTBackedTextInputViewProtocol> backedTextInput = self.backedTextInputView;
UITextRange *currentSelection = backedTextInput.selectedTextRange;
UITextPosition *start = [backedTextInput positionFromPosition:backedTextInput.beginningOfDocument offset:selection.start];
UITextPosition *end = [backedTextInput positionFromPosition:backedTextInput.beginningOfDocument offset:selection.end];
UITextRange *selectedTextRange = [backedTextInput textRangeFromPosition:start toPosition:end];
NSInteger eventLag = _nativeEventCount - _mostRecentEventCount;
if (eventLag == 0 && ![currentSelection isEqual:selectedTextRange]) {
_previousSelectionRange = selectedTextRange;
backedTextInput.selectedTextRange = selectedTextRange;
} else if (eventLag > RCTTextUpdateLagWarningThreshold) {
RCTLogWarn(@"Native TextInput(%@) is %zd events ahead of JS - try to make your JS faster.", backedTextInput.text, eventLag);
}
}
#pragma mark - Content Size (in Yoga terms, without any insets)
- (CGSize)contentSize
@@ -28,7 +28,6 @@
@property (nonatomic, strong) UIColor *placeholderTextColor;
@property (nonatomic, copy) NSString *placeholder;
@property (nonatomic, strong) UIFont *font;
@property (nonatomic, assign) NSInteger mostRecentEventCount;
@property (nonatomic, strong) NSNumber *maxLength;
@property (nonatomic, copy) RCTDirectEventBlock onChange;
@@ -30,12 +30,10 @@ @implementation RCTTextView
RCTText *_richTextView;
NSAttributedString *_pendingAttributedText;
UITextRange *_previousSelectionRange;
NSString *_predictedText;
BOOL _blockTextShouldChange;
BOOL _nativeUpdatesInFlight;
NSInteger _nativeEventCount;
}
- (instancetype)initWithBridge:(RCTBridge *)bridge
@@ -208,26 +206,6 @@ - (void)setFont:(UIFont *)font
[self setNeedsLayout];
}
- (void)setSelection:(RCTTextSelection *)selection
{
if (!selection) {
return;
}
UITextRange *currentSelection = _backedTextInput.selectedTextRange;
UITextPosition *start = [_backedTextInput positionFromPosition:_backedTextInput.beginningOfDocument offset:selection.start];
UITextPosition *end = [_backedTextInput positionFromPosition:_backedTextInput.beginningOfDocument offset:selection.end];
UITextRange *selectedTextRange = [_backedTextInput textRangeFromPosition:start toPosition:end];
NSInteger eventLag = _nativeEventCount - _mostRecentEventCount;
if (eventLag == 0 && ![currentSelection isEqual:selectedTextRange]) {
_previousSelectionRange = selectedTextRange;
_backedTextInput.selectedTextRange = selectedTextRange;
} else if (eventLag > RCTTextUpdateLagWarningThreshold) {
RCTLogWarn(@"Native TextInput(%@) is %zd events ahead of JS - try to make your JS faster.", self.text, eventLag);
}
}
- (NSString *)text
{
return _backedTextInput.text;

0 comments on commit da9a183

Please sign in to comment.