Skip to content

Commit 8ccaf00

Browse files
lunaleapsmeta-codesync[bot]
authored andcommitted
Gate with feature flag for canary (#54454)
Summary: Pull Request resolved: #54454 Changelog: [Internal] - Add feature flag around IntersectionObserver for canary Reviewed By: rubennorte, cipolleschi Differential Revision: D86547485 fbshipit-source-id: 0c6d84e276d1f6337a8da0bea141cc371010cd75
1 parent 5df92e1 commit 8ccaf00

File tree

42 files changed

+2230
-79
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+2230
-79
lines changed

packages/react-native/Package.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ let reactTurboModuleCore = RNTarget(
314314
let reactTurboModuleCoreDefaults = RNTarget(
315315
name: .reactTurboModuleCoreDefaults,
316316
path: "ReactCommon/react/nativemodule/defaults",
317-
dependencies: [.reactNativeDependencies, .jsi, .reactJsiExecutor, .reactTurboModuleCore]
317+
dependencies: [.reactNativeDependencies, .jsi, .reactJsiExecutor, .reactTurboModuleCore, .reactFabric]
318318
)
319319

320320
/// React-microtasknativemodule.podspec
@@ -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, .reactTurboModuleCore, .reactGraphics, .reactGraphicsApple, .reactRuntimeScheduler, .yoga]
346+
)
347+
341348
/// React-featureflagnativemodule.podspec
342349
let reactFeatureflagsNativemodule = RNTarget(
343350
name: .reactFeatureflagsNativemodule,
@@ -451,7 +458,7 @@ let reactFabric = RNTarget(
451458
"components/root/tests",
452459
],
453460
dependencies: [.reactNativeDependencies, .reactJsiExecutor, .rctTypesafety, .reactTurboModuleCore, .jsi, .logger, .reactDebug, .reactFeatureFlags, .reactUtils, .reactRuntimeScheduler, .reactCxxReact, .reactRendererDebug, .reactGraphics, .yoga],
454-
sources: ["animations", "attributedstring", "core", "componentregistry", "componentregistry/native", "components/root", "components/view", "components/view/platform/cxx", "components/scrollview", "components/scrollview/platform/cxx", "components/legacyviewmanagerinterop", "dom", "scheduler", "mounting", "observers/events", "telemetry", "consistency", "leakchecker", "uimanager", "uimanager/consistency"]
461+
sources: ["animations", "attributedstring", "core", "componentregistry", "componentregistry/native", "components/root", "components/view", "components/view/platform/cxx", "components/scrollview", "components/scrollview/platform/cxx", "components/legacyviewmanagerinterop", "dom", "scheduler", "mounting", "observers/events", "observers/intersection", "telemetry", "consistency", "leakchecker", "uimanager", "uimanager/consistency"]
455462
)
456463

457464
let reactFabricInputAccessory = RNTarget(
@@ -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<<9cb554e599417e707c0953baa6adb0c2>>
7+
* @generated SignedSource<<10999fe360a25451c316eed2d27b6d92>>
88
*/
99

1010
/**
@@ -240,6 +240,12 @@ public object ReactNativeFeatureFlags {
240240
@JvmStatic
241241
public fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean = accessor.enableInteropViewManagerClassLookUpOptimizationIOS()
242242

243+
/**
244+
* Enables the IntersectionObserver Web API in React Native.
245+
*/
246+
@JvmStatic
247+
public fun enableIntersectionObserverByDefault(): Boolean = accessor.enableIntersectionObserverByDefault()
248+
243249
/**
244250
* Enables key up/down/press events to be sent to JS from components
245251
*/

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<<24a3e681a86bce628917f5e20ce1b1eb>>
7+
* @generated SignedSource<<b935cd2546fdba877e317aea30fceaf9>>
88
*/
99

1010
/**
@@ -55,6 +55,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
5555
private var enableImmediateUpdateModeForContentOffsetChangesCache: Boolean? = null
5656
private var enableImperativeFocusCache: Boolean? = null
5757
private var enableInteropViewManagerClassLookUpOptimizationIOSCache: Boolean? = null
58+
private var enableIntersectionObserverByDefaultCache: Boolean? = null
5859
private var enableKeyEventsCache: Boolean? = null
5960
private var enableLayoutAnimationsOnAndroidCache: Boolean? = null
6061
private var enableLayoutAnimationsOnIOSCache: Boolean? = null
@@ -423,6 +424,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
423424
return cached
424425
}
425426

427+
override fun enableIntersectionObserverByDefault(): Boolean {
428+
var cached = enableIntersectionObserverByDefaultCache
429+
if (cached == null) {
430+
cached = ReactNativeFeatureFlagsCxxInterop.enableIntersectionObserverByDefault()
431+
enableIntersectionObserverByDefaultCache = cached
432+
}
433+
return cached
434+
}
435+
426436
override fun enableKeyEvents(): Boolean {
427437
var cached = enableKeyEventsCache
428438
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<<f57b2ecf22eabb7f207b86c472059084>>
7+
* @generated SignedSource<<b7a9d14c50bae9afa15b3ead8308fc9b>>
88
*/
99

1010
/**
@@ -98,6 +98,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
9898

9999
@DoNotStrip @JvmStatic public external fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean
100100

101+
@DoNotStrip @JvmStatic public external fun enableIntersectionObserverByDefault(): Boolean
102+
101103
@DoNotStrip @JvmStatic public external fun enableKeyEvents(): Boolean
102104

103105
@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<<47b33d1a21af24f369e52d3b8f226d73>>
7+
* @generated SignedSource<<a388c8e701ece8b9ea1dc23915a09399>>
88
*/
99

1010
/**
@@ -93,6 +93,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
9393

9494
override fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean = false
9595

96+
override fun enableIntersectionObserverByDefault(): Boolean = false
97+
9698
override fun enableKeyEvents(): Boolean = false
9799

98100
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<<a9c53954bffc14f69cf1e7c4707cb37a>>
7+
* @generated SignedSource<<bd86cec4dcf659b9586aeee1c141963c>>
88
*/
99

1010
/**
@@ -59,6 +59,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
5959
private var enableImmediateUpdateModeForContentOffsetChangesCache: Boolean? = null
6060
private var enableImperativeFocusCache: Boolean? = null
6161
private var enableInteropViewManagerClassLookUpOptimizationIOSCache: Boolean? = null
62+
private var enableIntersectionObserverByDefaultCache: Boolean? = null
6263
private var enableKeyEventsCache: Boolean? = null
6364
private var enableLayoutAnimationsOnAndroidCache: Boolean? = null
6465
private var enableLayoutAnimationsOnIOSCache: Boolean? = null
@@ -462,6 +463,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
462463
return cached
463464
}
464465

466+
override fun enableIntersectionObserverByDefault(): Boolean {
467+
var cached = enableIntersectionObserverByDefaultCache
468+
if (cached == null) {
469+
cached = currentProvider.enableIntersectionObserverByDefault()
470+
accessedFeatureFlags.add("enableIntersectionObserverByDefault")
471+
enableIntersectionObserverByDefaultCache = cached
472+
}
473+
return cached
474+
}
475+
465476
override fun enableKeyEvents(): Boolean {
466477
var cached = enableKeyEventsCache
467478
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<<da5879ddbaea7cd51f828e284bc0e913>>
7+
* @generated SignedSource<<90fd5f8d9c5b6833c6fdd10167577bb9>>
88
*/
99

1010
/**
@@ -93,6 +93,8 @@ public interface ReactNativeFeatureFlagsProvider {
9393

9494
@DoNotStrip public fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean
9595

96+
@DoNotStrip public fun enableIntersectionObserverByDefault(): Boolean
97+
9698
@DoNotStrip public fun enableKeyEvents(): Boolean
9799

98100
@DoNotStrip public fun enableLayoutAnimationsOnAndroid(): Boolean

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ add_react_common_subdir(react/renderer/components/scrollview)
114114
add_react_common_subdir(react/renderer/components/safeareaview)
115115
add_react_common_subdir(react/renderer/leakchecker)
116116
add_react_common_subdir(react/renderer/observers/events)
117+
add_react_common_subdir(react/renderer/observers/intersection)
117118
add_react_common_subdir(react/renderer/textlayoutmanager)
118119
add_react_common_subdir(react/utils)
119120
add_react_common_subdir(react/bridging)
@@ -124,6 +125,7 @@ add_react_common_subdir(react/nativemodule/dom)
124125
add_react_common_subdir(react/nativemodule/featureflags)
125126
add_react_common_subdir(react/nativemodule/microtasks)
126127
add_react_common_subdir(react/nativemodule/idlecallbacks)
128+
add_react_common_subdir(react/nativemodule/intersectionobserver)
127129
add_react_common_subdir(react/nativemodule/webperformance)
128130
add_react_common_subdir(react/networking)
129131
add_react_common_subdir(jserrorhandler)
@@ -192,6 +194,7 @@ add_library(reactnative
192194
$<TARGET_OBJECTS:react_nativemodule_dom>
193195
$<TARGET_OBJECTS:react_nativemodule_featureflags>
194196
$<TARGET_OBJECTS:react_nativemodule_idlecallbacks>
197+
$<TARGET_OBJECTS:react_nativemodule_intersectionobserver>
195198
$<TARGET_OBJECTS:react_nativemodule_microtasks>
196199
$<TARGET_OBJECTS:react_nativemodule_webperformance>
197200
$<TARGET_OBJECTS:react_networking>
@@ -213,6 +216,7 @@ add_library(reactnative
213216
$<TARGET_OBJECTS:react_renderer_mapbuffer>
214217
$<TARGET_OBJECTS:react_renderer_mounting>
215218
$<TARGET_OBJECTS:react_renderer_observers_events>
219+
$<TARGET_OBJECTS:react_renderer_observers_intersection>
216220
$<TARGET_OBJECTS:react_renderer_runtimescheduler>
217221
$<TARGET_OBJECTS:react_renderer_scheduler>
218222
$<TARGET_OBJECTS:react_renderer_telemetry>
@@ -284,6 +288,7 @@ target_include_directories(reactnative
284288
$<TARGET_PROPERTY:react_nativemodule_dom,INTERFACE_INCLUDE_DIRECTORIES>
285289
$<TARGET_PROPERTY:react_nativemodule_featureflags,INTERFACE_INCLUDE_DIRECTORIES>
286290
$<TARGET_PROPERTY:react_nativemodule_idlecallbacks,INTERFACE_INCLUDE_DIRECTORIES>
291+
$<TARGET_PROPERTY:react_nativemodule_intersectionobserver,INTERFACE_INCLUDE_DIRECTORIES>
287292
$<TARGET_PROPERTY:react_nativemodule_microtasks,INTERFACE_INCLUDE_DIRECTORIES>
288293
$<TARGET_PROPERTY:react_nativemodule_webperformance,INTERFACE_INCLUDE_DIRECTORIES>
289294
$<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<<1a3267843d7400974e8686c83d359c7b>>
7+
* @generated SignedSource<<a0ef5d4a761067631023f6b5ec797cc6>>
88
*/
99

1010
/**
@@ -249,6 +249,12 @@ class ReactNativeFeatureFlagsJavaProvider
249249
return method(javaProvider_);
250250
}
251251

252+
bool enableIntersectionObserverByDefault() override {
253+
static const auto method =
254+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableIntersectionObserverByDefault");
255+
return method(javaProvider_);
256+
}
257+
252258
bool enableKeyEvents() override {
253259
static const auto method =
254260
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableKeyEvents");
@@ -740,6 +746,11 @@ bool JReactNativeFeatureFlagsCxxInterop::enableInteropViewManagerClassLookUpOpti
740746
return ReactNativeFeatureFlags::enableInteropViewManagerClassLookUpOptimizationIOS();
741747
}
742748

749+
bool JReactNativeFeatureFlagsCxxInterop::enableIntersectionObserverByDefault(
750+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
751+
return ReactNativeFeatureFlags::enableIntersectionObserverByDefault();
752+
}
753+
743754
bool JReactNativeFeatureFlagsCxxInterop::enableKeyEvents(
744755
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
745756
return ReactNativeFeatureFlags::enableKeyEvents();
@@ -1136,6 +1147,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
11361147
makeNativeMethod(
11371148
"enableInteropViewManagerClassLookUpOptimizationIOS",
11381149
JReactNativeFeatureFlagsCxxInterop::enableInteropViewManagerClassLookUpOptimizationIOS),
1150+
makeNativeMethod(
1151+
"enableIntersectionObserverByDefault",
1152+
JReactNativeFeatureFlagsCxxInterop::enableIntersectionObserverByDefault),
11391153
makeNativeMethod(
11401154
"enableKeyEvents",
11411155
JReactNativeFeatureFlagsCxxInterop::enableKeyEvents),

0 commit comments

Comments
 (0)