Skip to content

Commit 6eb7ab3

Browse files
Luna Weimeta-codesync[bot]
authored andcommitted
Gate with feature flag for canary
Summary: Changelog: [Internal] - Add feature flag around IntersectionObserver for canary Differential Revision: D86547485
1 parent d31fc32 commit 6eb7ab3

File tree

40 files changed

+2202
-74
lines changed

40 files changed

+2202
-74
lines changed

packages/react-native/Package.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,13 @@ let reactWebPerformanceNativeModule = RNTarget(
338338
dependencies: [.reactNativeDependencies, .reactCxxReact, .reactTurboModuleCore, .reactPerformanceTimeline]
339339
)
340340

341+
/// React-intersectionobservernativemodule.podspec
342+
let reactIntersectionObserverNativeModule = RNTarget(
343+
name: .reactIntersectionObserverNativeModule,
344+
path: "ReactCommon/react/nativemodule/intersectionobserver",
345+
dependencies: [.reactNativeDependencies, .reactCxxReact, .reactFabric, .reactTurboModuleBridging, .reactGraphics, .reactRuntimeScheduler]
346+
)
347+
341348
/// React-featureflagnativemodule.podspec
342349
let reactFeatureflagsNativemodule = RNTarget(
343350
name: .reactFeatureflagsNativemodule,
@@ -682,6 +689,7 @@ let targets = [
682689
reactTurboModuleCoreMicrotasks,
683690
reactIdleCallbacksNativeModule,
684691
reactWebPerformanceNativeModule,
692+
reactIntersectionObserverNativeModule,
685693
reactFeatureflagsNativemodule,
686694
reactNativeModuleDom,
687695
reactAppDelegate,
@@ -869,6 +877,7 @@ extension String {
869877
static let reactTurboModuleCoreMicrotasks = "ReactCommon/turbomodule/core/microtasks"
870878
static let reactIdleCallbacksNativeModule = "React-idlecallbacksnativemodule"
871879
static let reactWebPerformanceNativeModule = "React-webperformancenativemodule"
880+
static let reactIntersectionObserverNativeModule = "React-intersectionobservernativemodule"
872881
static let reactFeatureflagsNativemodule = "React-featureflagsnativemodule"
873882
static let reactNativeModuleDom = "React-domnativemodule"
874883
static let reactAppDelegate = "React-RCTAppDelegate"

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<a9af5f83c6e958cf170cd77f69e85ef0>>
7+
* @generated SignedSource<<93d5fa5ffef5c138057b778eefe35c2a>>
88
*/
99

1010
/**
@@ -234,6 +234,12 @@ public object ReactNativeFeatureFlags {
234234
@JvmStatic
235235
public fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean = accessor.enableInteropViewManagerClassLookUpOptimizationIOS()
236236

237+
/**
238+
* Enables the IntersectionObserver Web API in React Native.
239+
*/
240+
@JvmStatic
241+
public fun enableIntersectionObserverByDefault(): Boolean = accessor.enableIntersectionObserverByDefault()
242+
237243
/**
238244
* Enables key up/down/press events to be sent to JS from components
239245
*/

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<3b95ad320a62bf77d5090436f457d87a>>
7+
* @generated SignedSource<<61530a2219a5e47ccd3c77d027fb05f4>>
88
*/
99

1010
/**
@@ -54,6 +54,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
5454
private var enableImmediateUpdateModeForContentOffsetChangesCache: Boolean? = null
5555
private var enableImperativeFocusCache: Boolean? = null
5656
private var enableInteropViewManagerClassLookUpOptimizationIOSCache: Boolean? = null
57+
private var enableIntersectionObserverByDefaultCache: Boolean? = null
5758
private var enableKeyEventsCache: Boolean? = null
5859
private var enableLayoutAnimationsOnAndroidCache: Boolean? = null
5960
private var enableLayoutAnimationsOnIOSCache: Boolean? = null
@@ -413,6 +414,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
413414
return cached
414415
}
415416

417+
override fun enableIntersectionObserverByDefault(): Boolean {
418+
var cached = enableIntersectionObserverByDefaultCache
419+
if (cached == null) {
420+
cached = ReactNativeFeatureFlagsCxxInterop.enableIntersectionObserverByDefault()
421+
enableIntersectionObserverByDefaultCache = cached
422+
}
423+
return cached
424+
}
425+
416426
override fun enableKeyEvents(): Boolean {
417427
var cached = enableKeyEventsCache
418428
if (cached == null) {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<ba3df1f078a7f5f10dced908ef1d170a>>
7+
* @generated SignedSource<<3e09905ae16e4ce50927c2694416f6df>>
88
*/
99

1010
/**
@@ -96,6 +96,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
9696

9797
@DoNotStrip @JvmStatic public external fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean
9898

99+
@DoNotStrip @JvmStatic public external fun enableIntersectionObserverByDefault(): Boolean
100+
99101
@DoNotStrip @JvmStatic public external fun enableKeyEvents(): Boolean
100102

101103
@DoNotStrip @JvmStatic public external fun enableLayoutAnimationsOnAndroid(): Boolean

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<e5c3f111e00075dac0a6e594ce622ca7>>
7+
* @generated SignedSource<<4ce4e5d63ee4965d7de0b462a697fea9>>
88
*/
99

1010
/**
@@ -91,6 +91,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
9191

9292
override fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean = false
9393

94+
override fun enableIntersectionObserverByDefault(): Boolean = false
95+
9496
override fun enableKeyEvents(): Boolean = false
9597

9698
override fun enableLayoutAnimationsOnAndroid(): Boolean = false

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<f484a05ce73cdf166d785560dca0536b>>
7+
* @generated SignedSource<<ab7fdc7c2f385a3e9c7651bfe890eee5>>
88
*/
99

1010
/**
@@ -58,6 +58,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
5858
private var enableImmediateUpdateModeForContentOffsetChangesCache: Boolean? = null
5959
private var enableImperativeFocusCache: Boolean? = null
6060
private var enableInteropViewManagerClassLookUpOptimizationIOSCache: Boolean? = null
61+
private var enableIntersectionObserverByDefaultCache: Boolean? = null
6162
private var enableKeyEventsCache: Boolean? = null
6263
private var enableLayoutAnimationsOnAndroidCache: Boolean? = null
6364
private var enableLayoutAnimationsOnIOSCache: Boolean? = null
@@ -451,6 +452,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
451452
return cached
452453
}
453454

455+
override fun enableIntersectionObserverByDefault(): Boolean {
456+
var cached = enableIntersectionObserverByDefaultCache
457+
if (cached == null) {
458+
cached = currentProvider.enableIntersectionObserverByDefault()
459+
accessedFeatureFlags.add("enableIntersectionObserverByDefault")
460+
enableIntersectionObserverByDefaultCache = cached
461+
}
462+
return cached
463+
}
464+
454465
override fun enableKeyEvents(): Boolean {
455466
var cached = enableKeyEventsCache
456467
if (cached == null) {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Canary_Android.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<f82b5905d822f8009c054a9443f86e39>>
7+
* @generated SignedSource<<2912fe4c90e3b493770bf14e70264656>>
88
*/
99

1010
/**
@@ -27,6 +27,8 @@ public open class ReactNativeFeatureFlagsOverrides_RNOSS_Canary_Android : ReactN
2727

2828
override fun enableFabricRenderer(): Boolean = true
2929

30+
override fun enableIntersectionObserverByDefault(): Boolean = true
31+
3032
override fun useNativeViewConfigsInBridgelessMode(): Boolean = true
3133

3234
override fun useTurboModuleInterop(): Boolean = true

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<a2bdf7bbb1c18dbcdd4ea424362d3e9d>>
7+
* @generated SignedSource<<d837172ce8b07fa5db5b7a0ae910b113>>
88
*/
99

1010
/**
@@ -91,6 +91,8 @@ public interface ReactNativeFeatureFlagsProvider {
9191

9292
@DoNotStrip public fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean
9393

94+
@DoNotStrip public fun enableIntersectionObserverByDefault(): Boolean
95+
9496
@DoNotStrip public fun enableKeyEvents(): Boolean
9597

9698
@DoNotStrip public fun enableLayoutAnimationsOnAndroid(): Boolean

packages/react-native/ReactAndroid/src/main/jni/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ add_react_common_subdir(react/nativemodule/dom)
124124
add_react_common_subdir(react/nativemodule/featureflags)
125125
add_react_common_subdir(react/nativemodule/microtasks)
126126
add_react_common_subdir(react/nativemodule/idlecallbacks)
127+
add_react_common_subdir(react/nativemodule/intersectionobserver)
127128
add_react_common_subdir(react/nativemodule/webperformance)
128129
add_react_common_subdir(react/networking)
129130
add_react_common_subdir(jserrorhandler)
@@ -191,6 +192,7 @@ add_library(reactnative
191192
$<TARGET_OBJECTS:react_nativemodule_dom>
192193
$<TARGET_OBJECTS:react_nativemodule_featureflags>
193194
$<TARGET_OBJECTS:react_nativemodule_idlecallbacks>
195+
$<TARGET_OBJECTS:react_nativemodule_intersectionobserver>
194196
$<TARGET_OBJECTS:react_nativemodule_microtasks>
195197
$<TARGET_OBJECTS:react_nativemodule_webperformance>
196198
$<TARGET_OBJECTS:react_networking>
@@ -282,6 +284,7 @@ target_include_directories(reactnative
282284
$<TARGET_PROPERTY:react_nativemodule_dom,INTERFACE_INCLUDE_DIRECTORIES>
283285
$<TARGET_PROPERTY:react_nativemodule_featureflags,INTERFACE_INCLUDE_DIRECTORIES>
284286
$<TARGET_PROPERTY:react_nativemodule_idlecallbacks,INTERFACE_INCLUDE_DIRECTORIES>
287+
$<TARGET_PROPERTY:react_nativemodule_intersectionobserver,INTERFACE_INCLUDE_DIRECTORIES>
285288
$<TARGET_PROPERTY:react_nativemodule_microtasks,INTERFACE_INCLUDE_DIRECTORIES>
286289
$<TARGET_PROPERTY:react_nativemodule_webperformance,INTERFACE_INCLUDE_DIRECTORIES>
287290
$<TARGET_PROPERTY:react_networking,INTERFACE_INCLUDE_DIRECTORIES>

packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<4c9dda599d2c1467fb1602f71c7c7a54>>
7+
* @generated SignedSource<<d9ca570ab317c71ddcbeabf9ff779a5f>>
88
*/
99

1010
/**
@@ -243,6 +243,12 @@ class ReactNativeFeatureFlagsJavaProvider
243243
return method(javaProvider_);
244244
}
245245

246+
bool enableIntersectionObserverByDefault() override {
247+
static const auto method =
248+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableIntersectionObserverByDefault");
249+
return method(javaProvider_);
250+
}
251+
246252
bool enableKeyEvents() override {
247253
static const auto method =
248254
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableKeyEvents");
@@ -729,6 +735,11 @@ bool JReactNativeFeatureFlagsCxxInterop::enableInteropViewManagerClassLookUpOpti
729735
return ReactNativeFeatureFlags::enableInteropViewManagerClassLookUpOptimizationIOS();
730736
}
731737

738+
bool JReactNativeFeatureFlagsCxxInterop::enableIntersectionObserverByDefault(
739+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
740+
return ReactNativeFeatureFlags::enableIntersectionObserverByDefault();
741+
}
742+
732743
bool JReactNativeFeatureFlagsCxxInterop::enableKeyEvents(
733744
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
734745
return ReactNativeFeatureFlags::enableKeyEvents();
@@ -1122,6 +1133,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
11221133
makeNativeMethod(
11231134
"enableInteropViewManagerClassLookUpOptimizationIOS",
11241135
JReactNativeFeatureFlagsCxxInterop::enableInteropViewManagerClassLookUpOptimizationIOS),
1136+
makeNativeMethod(
1137+
"enableIntersectionObserverByDefault",
1138+
JReactNativeFeatureFlagsCxxInterop::enableIntersectionObserverByDefault),
11251139
makeNativeMethod(
11261140
"enableKeyEvents",
11271141
JReactNativeFeatureFlagsCxxInterop::enableKeyEvents),

0 commit comments

Comments
 (0)