Something went wrong. Try again.
A Witchsky fork that is groovy and NEVER glooby!! tenna.party
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169diff --git a/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.h b/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.hindex 914a2494a..0deac55f2 100644--- a/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.h+++ b/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.h@@ -19,6 +19,8 @@ NS_ASSUME_NONNULL_BEGIN */ @interface RCTPullToRefreshViewComponentView : RCTViewComponentView <RCTCustomPullToRefreshViewProtocol> +- (void)beginRefreshingProgrammatically;+ @end NS_ASSUME_NONNULL_ENDdiff --git a/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm b/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mmindex 1494fd225..df643f5c8 100644--- a/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm+++ b/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm@@ -1038,6 +1038,11 @@ static inline UIViewAnimationOptions animationOptionsWithCurve(UIViewAnimationCu } } ++ (BOOL)shouldBeRecycled+{+ return NO;+}+ @end Class<RCTComponentViewProtocol> RCTScrollViewCls(void)diff --git a/React/Views/RefreshControl/RCTRefreshControl.h b/React/Views/RefreshControl/RCTRefreshControl.hindex e9b330fa7..ec5f58c88 100644--- a/React/Views/RefreshControl/RCTRefreshControl.h+++ b/React/Views/RefreshControl/RCTRefreshControl.h@@ -15,5 +15,8 @@ @property (nonatomic, copy) NSString *title; @property (nonatomic, copy) RCTDirectEventBlock onRefresh; @property (nonatomic, weak) UIScrollView *scrollView;+@property (nonatomic, copy) UIColor *customTintColor;++- (void)forwarderBeginRefreshing; @enddiff --git a/React/Views/RefreshControl/RCTRefreshControl.m b/React/Views/RefreshControl/RCTRefreshControl.mindex 53bfd0470..ff1b1ed5e 100644--- a/React/Views/RefreshControl/RCTRefreshControl.m+++ b/React/Views/RefreshControl/RCTRefreshControl.m@@ -23,6 +23,7 @@ UIColor *_titleColor; CGFloat _progressViewOffset; BOOL _hasMovedToWindow;+ UIColor *_customTintColor; } - (instancetype)init@@ -58,6 +59,12 @@ RCT_NOT_IMPLEMENTED(-(instancetype)initWithCoder : (NSCoder *)aDecoder) _isInitialRender = false; } +- (void)didMoveToSuperview+{+ [super didMoveToSuperview];+ [self setTintColor:_customTintColor];+}+ - (void)didMoveToWindow { [super didMoveToWindow];@@ -221,4 +228,50 @@ RCT_NOT_IMPLEMENTED(-(instancetype)initWithCoder : (NSCoder *)aDecoder) } } +// Fix for https://github.com/facebook/react-native/issues/43388+// A bug in iOS 17.4 causes the haptic to not play when refreshing if the tintColor+// is set before the refresh control gets added to the scrollview. We'll call this+// function whenever the superview changes. We'll also call it if the value of customTintColor+// changes.+- (void)setTintColor:(UIColor *)tintColor+{+ if ([self.superview isKindOfClass:[UIScrollView class]] && self.tintColor != tintColor) {+ [super setTintColor:tintColor];+ }+}++// 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);+ }+ }+ ];+}+ @enddiff --git a/React/Views/RefreshControl/RCTRefreshControlManager.m b/React/Views/RefreshControl/RCTRefreshControlManager.mindex 40aaf9c51..1c60164b6 100644--- a/React/Views/RefreshControl/RCTRefreshControlManager.m+++ b/React/Views/RefreshControl/RCTRefreshControlManager.m@@ -22,11 +22,12 @@ RCT_EXPORT_MODULE() RCT_EXPORT_VIEW_PROPERTY(onRefresh, RCTDirectEventBlock) RCT_EXPORT_VIEW_PROPERTY(refreshing, BOOL)-RCT_EXPORT_VIEW_PROPERTY(tintColor, UIColor) RCT_EXPORT_VIEW_PROPERTY(title, NSString) RCT_EXPORT_VIEW_PROPERTY(titleColor, UIColor) RCT_EXPORT_VIEW_PROPERTY(progressViewOffset, CGFloat) +RCT_REMAP_VIEW_PROPERTY(tintColor, customTintColor, UIColor)+ RCT_EXPORT_METHOD(setNativeRefreshing : (nonnull NSNumber *)viewTag toRefreshing : (BOOL)refreshing) { [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.kt b/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.ktindex 8b6571698..27c97bfeb 100644--- a/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.kt+++ b/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.kt@@ -313,8 +313,9 @@ public open class JavaTimerManager( // We also capture the idleCallbackRunnable to tentatively fix: // https://github.com/facebook/react-native/issues/44842 currentIdleCallbackRunnable?.cancel()- currentIdleCallbackRunnable = IdleCallbackRunnable(frameTimeNanos)- reactApplicationContext.runOnJSQueueThread(currentIdleCallbackRunnable)+ val idleCallbackRunnable = IdleCallbackRunnable(frameTimeNanos)+ currentIdleCallbackRunnable = idleCallbackRunnable+ reactApplicationContext.runOnJSQueueThread(idleCallbackRunnable) reactChoreographer.postFrameCallback(ReactChoreographer.CallbackType.IDLE_EVENT, this) } }diff --git a/third-party-podspecs/fmt.podspec b/third-party-podspecs/fmt.podspecindex 2f38990e2..9b02e481e 100644--- a/third-party-podspecs/fmt.podspec+++ b/third-party-podspecs/fmt.podspec@@ -26,4 +26,11 @@ Pod::Spec.new do |spec| spec.public_header_files = "include/fmt/*.h" spec.header_mappings_dir = "include" spec.source_files = ["include/fmt/*.h", "src/format.cc"]++ # TODO: Remove after upgrading React Native past 0.83.x+ # Fix fmt 11.0.2 consteval build error with Xcode 26.4 (facebook/react-native#55601)+ # Fixed in RN 0.84+ which bumps fmt to a compatible version.+ spec.prepare_command = <<~SCRIPT+ perl -i -pe 's/^# define FMT_USE_CONSTEVAL 1$/# define FMT_USE_CONSTEVAL 0/' include/fmt/base.h+ SCRIPT end