126 lines
4.3 KiB
Diff
126 lines
4.3 KiB
Diff
diff --git a/node_modules/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.mm b/packages/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.mm
|
|
index b0d71dc..34cb289 100644
|
|
--- a/node_modules/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.mm
|
|
+++ b/node_modules/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.mm
|
|
@@ -377,10 +377,6 @@
|
|
self.backedTextInputView.attributedText = [NSAttributedString new];
|
|
}
|
|
|
|
- if (_selectTextOnFocus) {
|
|
- [self.backedTextInputView selectAll:nil];
|
|
- }
|
|
-
|
|
[_eventDispatcher sendTextEventWithType:RCTTextEventTypeFocus
|
|
reactTag:self.reactTag
|
|
text:[self.backedTextInputView.attributedText.string copy]
|
|
@@ -611,6 +607,10 @@
|
|
- (void)reactFocus
|
|
{
|
|
[self.backedTextInputView reactFocus];
|
|
+
|
|
+ if (_selectTextOnFocus) {
|
|
+ [self.backedTextInputView selectAll:nil];
|
|
+ }
|
|
}
|
|
|
|
- (void)reactBlur
|
|
diff --git a/node_modules/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm b/packages/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm
|
|
index b0d71dc..34cb289 100644
|
|
--- a/node_modules/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm
|
|
+++ b/node_modules/react-native/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm
|
|
@@ -281,11 +281,6 @@
|
|
[self textInputDidChange];
|
|
}
|
|
|
|
- if (props.traits.selectTextOnFocus) {
|
|
- [_backedTextInputView selectAll:nil];
|
|
- [self textInputDidChangeSelection];
|
|
- }
|
|
-
|
|
if (_eventEmitter) {
|
|
static_cast<const TextInputEventEmitter &>(*_eventEmitter).onFocus([self _textInputMetrics]);
|
|
}
|
|
@@ -425,6 +420,13 @@
|
|
- (void)focus
|
|
{
|
|
[_backedTextInputView becomeFirstResponder];
|
|
+
|
|
+ const auto &props = static_cast<const TextInputProps &>(*_props);
|
|
+
|
|
+ if (props.traits.selectTextOnFocus) {
|
|
+ [_backedTextInputView selectAll:nil];
|
|
+ [self textInputDidChangeSelection];
|
|
+ }
|
|
}
|
|
|
|
- (void)blur
|
|
diff --git a/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.h b/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.h
|
|
index e9b330f..1ecdf0a 100644
|
|
--- a/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.h
|
|
+++ b/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.h
|
|
@@ -16,4 +16,6 @@
|
|
@property (nonatomic, copy) RCTDirectEventBlock onRefresh;
|
|
@property (nonatomic, weak) UIScrollView *scrollView;
|
|
|
|
+- (void)forwarderBeginRefreshing;
|
|
+
|
|
@end
|
|
diff --git a/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.m b/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.m
|
|
index b09e653..4c32b31 100644
|
|
--- a/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.m
|
|
+++ b/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.m
|
|
@@ -198,9 +198,53 @@ - (void)refreshControlValueChanged
|
|
[self setCurrentRefreshingState:super.refreshing];
|
|
_refreshingProgrammatically = NO;
|
|
|
|
+ if (@available(iOS 17.4, *)) {
|
|
+ if (_currentRefreshingState) {
|
|
+ UIImpactFeedbackGenerator *feedbackGenerator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleLight];
|
|
+ [feedbackGenerator prepare];
|
|
+ [feedbackGenerator impactOccurred];
|
|
+ }
|
|
+ }
|
|
+
|
|
if (_onRefresh) {
|
|
_onRefresh(nil);
|
|
}
|
|
}
|
|
|
|
+/*
|
|
+ This method is used by Bluesky's ExpoScrollForwarder. This allows other React Native
|
|
+ libraries to perform a refresh of a scrollview and access the refresh control's onRefresh
|
|
+ function.
|
|
+ */
|
|
+- (void)forwarderBeginRefreshing
|
|
+{
|
|
+ _refreshingProgrammatically = NO;
|
|
+
|
|
+ [self sizeToFit];
|
|
+
|
|
+ if (!self.scrollView) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ UIScrollView *scrollView = (UIScrollView *)self.scrollView;
|
|
+
|
|
+ [UIView animateWithDuration:0.3
|
|
+ delay:0
|
|
+ options:UIViewAnimationOptionBeginFromCurrentState
|
|
+ animations:^(void) {
|
|
+ // Whenever we call this method, the scrollview will always be at a position of
|
|
+ // -130 or less. Scrolling back to -65 simulates the default behavior of RCTRefreshControl
|
|
+ [scrollView setContentOffset:CGPointMake(0, -65)];
|
|
+ }
|
|
+ completion:^(__unused BOOL finished) {
|
|
+ [super beginRefreshing];
|
|
+ [self setCurrentRefreshingState:super.refreshing];
|
|
+
|
|
+ if (self->_onRefresh) {
|
|
+ self->_onRefresh(nil);
|
|
+ }
|
|
+ }
|
|
+ ];
|
|
+}
|
|
+
|
|
@end
|