Skip to content

Commit 5119db4

Browse files
lunaleapscipolleschi
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 5777a4e commit 5119db4

File tree

42 files changed

+2232
-81
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

+2232
-81
lines changed

packages/react-native/Package.swift

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

321321
/// React-microtasknativemodule.podspec
@@ -339,6 +339,13 @@ let reactWebPerformanceNativeModule = RNTarget(
339339
dependencies: [.reactNativeDependencies, .reactCxxReact, .reactTurboModuleCore, .reactPerformanceTimeline]
340340
)
341341

342+
/// React-intersectionobservernativemodule.podspec
343+
let reactIntersectionObserverNativeModule = RNTarget(
344+
name: .reactIntersectionObserverNativeModule,
345+
path: "ReactCommon/react/nativemodule/intersectionobserver",
346+
dependencies: [.reactNativeDependencies, .reactCxxReact, .reactFabric, .reactTurboModuleBridging, .reactTurboModuleCore, .reactGraphics, .reactGraphicsApple, .reactRuntimeScheduler, .yoga]
347+
)
348+
342349
/// React-featureflagnativemodule.podspec
343350
let reactFeatureflagsNativemodule = RNTarget(
344351
name: .reactFeatureflagsNativemodule,
@@ -452,7 +459,7 @@ let reactFabric = RNTarget(
452459
"components/root/tests",
453460
],
454461
dependencies: [.reactNativeDependencies, .reactJsiExecutor, .rctTypesafety, .reactTurboModuleCore, .jsi, .logger, .reactDebug, .reactFeatureFlags, .reactUtils, .reactRuntimeScheduler, .reactCxxReact, .reactRendererDebug, .reactGraphics, .yoga],
455-
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"]
462+
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"]
456463
)
457464

458465
let reactFabricInputAccessory = RNTarget(
@@ -683,6 +690,7 @@ let targets = [
683690
reactTurboModuleCoreMicrotasks,
684691
reactIdleCallbacksNativeModule,
685692
reactWebPerformanceNativeModule,
693+
reactIntersectionObserverNativeModule,
686694
reactFeatureflagsNativemodule,
687695
reactNativeModuleDom,
688696
reactAppDelegate,
@@ -870,6 +878,7 @@ extension String {
870878
static let reactTurboModuleCoreMicrotasks = "ReactCommon/turbomodule/core/microtasks"
871879
static let reactIdleCallbacksNativeModule = "React-idlecallbacksnativemodule"
872880
static let reactWebPerformanceNativeModule = "React-webperformancenativemodule"
881+
static let reactIntersectionObserverNativeModule = "React-intersectionobservernativemodule"
873882
static let reactFeatureflagsNativemodule = "React-featureflagsnativemodule"
874883
static let reactNativeModuleDom = "React-domnativemodule"
875884
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<<09d1f1bdf5e156afcd7ce15f73ca1c3b>>
7+
* @generated SignedSource<<f350f756268554418a046d0793ee0146>>
88
*/
99

1010
/**
@@ -210,6 +210,12 @@ public object ReactNativeFeatureFlags {
210210
@JvmStatic
211211
public fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean = accessor.enableInteropViewManagerClassLookUpOptimizationIOS()
212212

213+
/**
214+
* Enables the IntersectionObserver Web API in React Native.
215+
*/
216+
@JvmStatic
217+
public fun enableIntersectionObserverByDefault(): Boolean = accessor.enableIntersectionObserverByDefault()
218+
213219
/**
214220
* Enables key up/down/press events to be sent to JS from components
215221
*/

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<<017aba8e549dc289c27bb4fa93e6d038>>
7+
* @generated SignedSource<<c9a6711220ca600dacaed5754df5caab>>
88
*/
99

1010
/**
@@ -50,6 +50,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
5050
private var enableImmediateUpdateModeForContentOffsetChangesCache: Boolean? = null
5151
private var enableImperativeFocusCache: Boolean? = null
5252
private var enableInteropViewManagerClassLookUpOptimizationIOSCache: Boolean? = null
53+
private var enableIntersectionObserverByDefaultCache: Boolean? = null
5354
private var enableKeyEventsCache: Boolean? = null
5455
private var enableLayoutAnimationsOnAndroidCache: Boolean? = null
5556
private var enableLayoutAnimationsOnIOSCache: Boolean? = null
@@ -375,6 +376,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
375376
return cached
376377
}
377378

379+
override fun enableIntersectionObserverByDefault(): Boolean {
380+
var cached = enableIntersectionObserverByDefaultCache
381+
if (cached == null) {
382+
cached = ReactNativeFeatureFlagsCxxInterop.enableIntersectionObserverByDefault()
383+
enableIntersectionObserverByDefaultCache = cached
384+
}
385+
return cached
386+
}
387+
378388
override fun enableKeyEvents(): Boolean {
379389
var cached = enableKeyEventsCache
380390
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<<278f3853a98e1dd72b66ad6168e11686>>
7+
* @generated SignedSource<<d936abca211ad153f40c44187a1f8867>>
88
*/
99

1010
/**
@@ -88,6 +88,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
8888

8989
@DoNotStrip @JvmStatic public external fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean
9090

91+
@DoNotStrip @JvmStatic public external fun enableIntersectionObserverByDefault(): Boolean
92+
9193
@DoNotStrip @JvmStatic public external fun enableKeyEvents(): Boolean
9294

9395
@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<<31da0143bec4eacc9884c950970f0a25>>
7+
* @generated SignedSource<<1729d5f55d3ff0d3ca97e5c5bd34292b>>
88
*/
99

1010
/**
@@ -83,6 +83,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
8383

8484
override fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean = false
8585

86+
override fun enableIntersectionObserverByDefault(): Boolean = false
87+
8688
override fun enableKeyEvents(): Boolean = false
8789

8890
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<<14a5680355bb8c42e39a67edfa6a8974>>
7+
* @generated SignedSource<<98eb8f2d7036cf8a3023a8c560375f6a>>
88
*/
99

1010
/**
@@ -54,6 +54,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
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
@@ -409,6 +410,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
409410
return cached
410411
}
411412

413+
override fun enableIntersectionObserverByDefault(): Boolean {
414+
var cached = enableIntersectionObserverByDefaultCache
415+
if (cached == null) {
416+
cached = currentProvider.enableIntersectionObserverByDefault()
417+
accessedFeatureFlags.add("enableIntersectionObserverByDefault")
418+
enableIntersectionObserverByDefaultCache = cached
419+
}
420+
return cached
421+
}
422+
412423
override fun enableKeyEvents(): Boolean {
413424
var cached = enableKeyEventsCache
414425
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<<5a348c354bb6dd2ddfbc869a9e2f0dbe>>
7+
* @generated SignedSource<<18744192baedc0d5fa0fc7873adf0422>>
88
*/
99

1010
/**
@@ -83,6 +83,8 @@ public interface ReactNativeFeatureFlagsProvider {
8383

8484
@DoNotStrip public fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean
8585

86+
@DoNotStrip public fun enableIntersectionObserverByDefault(): Boolean
87+
8688
@DoNotStrip public fun enableKeyEvents(): Boolean
8789

8890
@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)
@@ -191,6 +193,7 @@ add_library(reactnative
191193
$<TARGET_OBJECTS:react_nativemodule_dom>
192194
$<TARGET_OBJECTS:react_nativemodule_featureflags>
193195
$<TARGET_OBJECTS:react_nativemodule_idlecallbacks>
196+
$<TARGET_OBJECTS:react_nativemodule_intersectionobserver>
194197
$<TARGET_OBJECTS:react_nativemodule_microtasks>
195198
$<TARGET_OBJECTS:react_nativemodule_webperformance>
196199
$<TARGET_OBJECTS:react_networking>
@@ -211,6 +214,7 @@ add_library(reactnative
211214
$<TARGET_OBJECTS:react_renderer_mapbuffer>
212215
$<TARGET_OBJECTS:react_renderer_mounting>
213216
$<TARGET_OBJECTS:react_renderer_observers_events>
217+
$<TARGET_OBJECTS:react_renderer_observers_intersection>
214218
$<TARGET_OBJECTS:react_renderer_runtimescheduler>
215219
$<TARGET_OBJECTS:react_renderer_scheduler>
216220
$<TARGET_OBJECTS:react_renderer_telemetry>
@@ -282,6 +286,7 @@ target_include_directories(reactnative
282286
$<TARGET_PROPERTY:react_nativemodule_dom,INTERFACE_INCLUDE_DIRECTORIES>
283287
$<TARGET_PROPERTY:react_nativemodule_featureflags,INTERFACE_INCLUDE_DIRECTORIES>
284288
$<TARGET_PROPERTY:react_nativemodule_idlecallbacks,INTERFACE_INCLUDE_DIRECTORIES>
289+
$<TARGET_PROPERTY:react_nativemodule_intersectionobserver,INTERFACE_INCLUDE_DIRECTORIES>
285290
$<TARGET_PROPERTY:react_nativemodule_microtasks,INTERFACE_INCLUDE_DIRECTORIES>
286291
$<TARGET_PROPERTY:react_nativemodule_webperformance,INTERFACE_INCLUDE_DIRECTORIES>
287292
$<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<<5b2d44dcf36386f86f26c694d3f00229>>
7+
* @generated SignedSource<<adc73df33ed2112584feaf83fb8d5e17>>
88
*/
99

1010
/**
@@ -219,6 +219,12 @@ class ReactNativeFeatureFlagsJavaProvider
219219
return method(javaProvider_);
220220
}
221221

222+
bool enableIntersectionObserverByDefault() override {
223+
static const auto method =
224+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableIntersectionObserverByDefault");
225+
return method(javaProvider_);
226+
}
227+
222228
bool enableKeyEvents() override {
223229
static const auto method =
224230
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableKeyEvents");
@@ -697,6 +703,11 @@ bool JReactNativeFeatureFlagsCxxInterop::enableInteropViewManagerClassLookUpOpti
697703
return ReactNativeFeatureFlags::enableInteropViewManagerClassLookUpOptimizationIOS();
698704
}
699705

706+
bool JReactNativeFeatureFlagsCxxInterop::enableIntersectionObserverByDefault(
707+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
708+
return ReactNativeFeatureFlags::enableIntersectionObserverByDefault();
709+
}
710+
700711
bool JReactNativeFeatureFlagsCxxInterop::enableKeyEvents(
701712
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
702713
return ReactNativeFeatureFlags::enableKeyEvents();
@@ -1088,6 +1099,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
10881099
makeNativeMethod(
10891100
"enableInteropViewManagerClassLookUpOptimizationIOS",
10901101
JReactNativeFeatureFlagsCxxInterop::enableInteropViewManagerClassLookUpOptimizationIOS),
1102+
makeNativeMethod(
1103+
"enableIntersectionObserverByDefault",
1104+
JReactNativeFeatureFlagsCxxInterop::enableIntersectionObserverByDefault),
10911105
makeNativeMethod(
10921106
"enableKeyEvents",
10931107
JReactNativeFeatureFlagsCxxInterop::enableKeyEvents),

0 commit comments

Comments
 (0)