react-native-screens 4.8.0 → 4.9.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/fabric/java/com/swmansion/rnscreens/NativeProxy.kt +15 -2
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +7 -4
- package/android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/BottomSheetDialogRootView.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/DimmingView.kt +2 -1
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/GestureTransparentViewGroup.kt +1 -1
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContainerManagerInterface.java +2 -1
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContentWrapperManagerInterface.java +2 -1
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenFooterManagerInterface.java +2 -1
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +2 -1
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerInterface.java +2 -1
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerInterface.java +2 -1
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerInterface.java +2 -1
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSearchBarManagerInterface.java +2 -1
- package/cpp/RNSScreenRemovalListener.cpp +4 -2
- package/ios/RNSScreenStack.mm +1 -1
- package/package.json +11 -11
|
@@ -41,13 +41,26 @@ class NativeProxy {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
// Called from native
|
|
44
45
|
@DoNotStrip
|
|
45
46
|
public fun notifyScreenRemoved(screenTag: Int) {
|
|
46
|
-
|
|
47
|
+
// Since RN 0.78 the screenTag we receive as argument here might not belong to a screen
|
|
48
|
+
// owned by native stack, but e.g. to one parented by plain ScreenContainer, for which we
|
|
49
|
+
// currently do not want to start exiting transitions. Therefore is it left to caller to
|
|
50
|
+
// ensure that NativeProxy.viewsMap is filled only with screens belonging to screen stacks.
|
|
51
|
+
|
|
52
|
+
val weakScreeRef = viewsMap[screenTag]
|
|
53
|
+
|
|
54
|
+
// `screenTag` belongs to not observed screen or screen with such tag no longer exists.
|
|
55
|
+
if (weakScreeRef == null) {
|
|
56
|
+
return
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
val screen = weakScreeRef.get()
|
|
47
60
|
if (screen is Screen) {
|
|
48
61
|
screen.startRemovalTransition()
|
|
49
62
|
} else {
|
|
50
|
-
Log.w("[RNScreens]", "
|
|
63
|
+
Log.w("[RNScreens]", "Reference stored in NativeProxy for tag $screenTag no longer points to valid object.")
|
|
51
64
|
}
|
|
52
65
|
}
|
|
53
66
|
}
|
|
@@ -371,9 +371,12 @@ class ScreenStackFragment :
|
|
|
371
371
|
ScreenAnimationDelegate(
|
|
372
372
|
this,
|
|
373
373
|
ScreenEventEmitter(this.screen),
|
|
374
|
-
if (enter)
|
|
375
|
-
|
|
376
|
-
|
|
374
|
+
if (enter) {
|
|
375
|
+
ScreenAnimationDelegate.AnimationType.ENTER
|
|
376
|
+
} else {
|
|
377
|
+
ScreenAnimationDelegate.AnimationType.EXIT
|
|
378
|
+
},
|
|
379
|
+
),
|
|
377
380
|
)
|
|
378
381
|
return animatorSet
|
|
379
382
|
}
|
|
@@ -793,7 +796,7 @@ class ScreenStackFragment :
|
|
|
793
796
|
// We set pointer events to BOX_NONE, because we don't want the ScreensCoordinatorLayout
|
|
794
797
|
// to be target of react gestures and effectively prevent interaction with screens
|
|
795
798
|
// underneath the current screen (useful in `modal` & `formSheet` presentation).
|
|
796
|
-
override
|
|
799
|
+
override val pointerEvents: PointerEvents = PointerEvents.BOX_NONE
|
|
797
800
|
}
|
|
798
801
|
|
|
799
802
|
private class ScreensAnimation(
|
|
@@ -11,7 +11,10 @@ internal class ScreensShadowNode(
|
|
|
11
11
|
) : LayoutShadowNode() {
|
|
12
12
|
override fun onBeforeLayout(nativeViewHierarchyOptimizer: NativeViewHierarchyOptimizer) {
|
|
13
13
|
super.onBeforeLayout(nativeViewHierarchyOptimizer)
|
|
14
|
-
(context.getNativeModule(UIManagerModule::class.java))?.addUIBlock { nativeViewHierarchyManager: NativeViewHierarchyManager ->
|
|
14
|
+
(context.getNativeModule(UIManagerModule::class.java))?.addUIBlock { nativeViewHierarchyManager: NativeViewHierarchyManager? ->
|
|
15
|
+
if (nativeViewHierarchyManager == null) {
|
|
16
|
+
return@addUIBlock
|
|
17
|
+
}
|
|
15
18
|
val view = nativeViewHierarchyManager.resolveView(reactTag)
|
|
16
19
|
if (view is ScreenContainer) {
|
|
17
20
|
view.performUpdates()
|
package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/BottomSheetDialogRootView.kt
CHANGED
|
@@ -68,7 +68,7 @@ class BottomSheetDialogRootView(
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
override fun onChildStartedNativeGesture(
|
|
71
|
-
view: View
|
|
71
|
+
view: View?,
|
|
72
72
|
event: MotionEvent,
|
|
73
73
|
) {
|
|
74
74
|
jsTouchDispatcher.onChildStartedNativeGesture(event, eventDispatcher)
|
|
@@ -92,7 +92,7 @@ class BottomSheetDialogRootView(
|
|
|
92
92
|
// need to keep receiving events.
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
override fun handleException(throwable: Throwable
|
|
95
|
+
override fun handleException(throwable: Throwable) {
|
|
96
96
|
// TODO: I need ThemedReactContext here.
|
|
97
97
|
// TODO: Determine where it is initially created & verify its lifecycle
|
|
98
98
|
// reactContext?.reactApplicationContext?.handleException(RuntimeException(throwable))
|
|
@@ -59,7 +59,8 @@ class DimmingView(
|
|
|
59
59
|
y: Float,
|
|
60
60
|
) = blockGestures
|
|
61
61
|
|
|
62
|
-
override
|
|
62
|
+
override val pointerEvents: PointerEvents
|
|
63
|
+
get() = if (blockGestures) PointerEvents.AUTO else PointerEvents.NONE
|
|
63
64
|
|
|
64
65
|
companion object {
|
|
65
66
|
const val TAG = "DimmingView"
|
package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/GestureTransparentViewGroup.kt
CHANGED
|
@@ -15,7 +15,7 @@ class GestureTransparentViewGroup(
|
|
|
15
15
|
context: Context,
|
|
16
16
|
) : FrameLayout(context),
|
|
17
17
|
ReactPointerEventsView {
|
|
18
|
-
override
|
|
18
|
+
override val pointerEvents: PointerEvents = PointerEvents.BOX_NONE
|
|
19
19
|
|
|
20
20
|
companion object {
|
|
21
21
|
const val TAG = "GestureTransparentFrameLayout"
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
package com.facebook.react.viewmanagers;
|
|
11
11
|
|
|
12
12
|
import android.view.View;
|
|
13
|
+
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
|
13
14
|
|
|
14
|
-
public interface RNSScreenContainerManagerInterface<T extends View> {
|
|
15
|
+
public interface RNSScreenContainerManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
|
15
16
|
// No props
|
|
16
17
|
}
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
package com.facebook.react.viewmanagers;
|
|
11
11
|
|
|
12
12
|
import android.view.View;
|
|
13
|
+
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
|
13
14
|
|
|
14
|
-
public interface RNSScreenContentWrapperManagerInterface<T extends View> {
|
|
15
|
+
public interface RNSScreenContentWrapperManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
|
15
16
|
// No props
|
|
16
17
|
}
|
package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenFooterManagerInterface.java
CHANGED
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
package com.facebook.react.viewmanagers;
|
|
11
11
|
|
|
12
12
|
import android.view.View;
|
|
13
|
+
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
|
13
14
|
|
|
14
|
-
public interface RNSScreenFooterManagerInterface<T extends View> {
|
|
15
|
+
public interface RNSScreenFooterManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
|
15
16
|
// No props
|
|
16
17
|
}
|
package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java
CHANGED
|
@@ -13,8 +13,9 @@ import android.view.View;
|
|
|
13
13
|
import androidx.annotation.Nullable;
|
|
14
14
|
import com.facebook.react.bridge.ReadableArray;
|
|
15
15
|
import com.facebook.react.bridge.ReadableMap;
|
|
16
|
+
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
|
16
17
|
|
|
17
|
-
public interface RNSScreenManagerInterface<T extends View> {
|
|
18
|
+
public interface RNSScreenManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
|
18
19
|
void setSheetAllowedDetents(T view, @Nullable ReadableArray value);
|
|
19
20
|
void setSheetLargestUndimmedDetent(T view, int value);
|
|
20
21
|
void setSheetGrabberVisible(T view, boolean value);
|
|
@@ -11,8 +11,9 @@ package com.facebook.react.viewmanagers;
|
|
|
11
11
|
|
|
12
12
|
import android.view.View;
|
|
13
13
|
import androidx.annotation.Nullable;
|
|
14
|
+
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
|
14
15
|
|
|
15
|
-
public interface RNSScreenStackHeaderConfigManagerInterface<T extends View> {
|
|
16
|
+
public interface RNSScreenStackHeaderConfigManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
|
16
17
|
void setBackgroundColor(T view, @Nullable Integer value);
|
|
17
18
|
void setBackTitle(T view, @Nullable String value);
|
|
18
19
|
void setBackTitleFontFamily(T view, @Nullable String value);
|
|
@@ -11,7 +11,8 @@ package com.facebook.react.viewmanagers;
|
|
|
11
11
|
|
|
12
12
|
import android.view.View;
|
|
13
13
|
import androidx.annotation.Nullable;
|
|
14
|
+
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
|
14
15
|
|
|
15
|
-
public interface RNSScreenStackHeaderSubviewManagerInterface<T extends View> {
|
|
16
|
+
public interface RNSScreenStackHeaderSubviewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
|
16
17
|
void setType(T view, @Nullable String value);
|
|
17
18
|
}
|
package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerInterface.java
CHANGED
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
package com.facebook.react.viewmanagers;
|
|
11
11
|
|
|
12
12
|
import android.view.View;
|
|
13
|
+
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
|
13
14
|
|
|
14
|
-
public interface RNSScreenStackManagerInterface<T extends View> {
|
|
15
|
+
public interface RNSScreenStackManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
|
15
16
|
// No props
|
|
16
17
|
}
|
package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSearchBarManagerInterface.java
CHANGED
|
@@ -11,8 +11,9 @@ package com.facebook.react.viewmanagers;
|
|
|
11
11
|
|
|
12
12
|
import android.view.View;
|
|
13
13
|
import androidx.annotation.Nullable;
|
|
14
|
+
import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
|
14
15
|
|
|
15
|
-
public interface RNSSearchBarManagerInterface<T extends View> {
|
|
16
|
+
public interface RNSSearchBarManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
|
16
17
|
void setHideWhenScrolling(T view, boolean value);
|
|
17
18
|
void setAutoCapitalize(T view, @Nullable String value);
|
|
18
19
|
void setPlaceholder(T view, @Nullable String value);
|
|
@@ -10,8 +10,10 @@ std::optional<MountingTransaction> RNSScreenRemovalListener::pullTransaction(
|
|
|
10
10
|
for (const ShadowViewMutation &mutation : mutations) {
|
|
11
11
|
if (mutation.type == ShadowViewMutation::Type::Remove &&
|
|
12
12
|
mutation.oldChildShadowView.componentName != nullptr &&
|
|
13
|
-
strcmp(mutation.
|
|
14
|
-
|
|
13
|
+
strcmp(mutation.oldChildShadowView.componentName, "RNSScreen") == 0) {
|
|
14
|
+
// We call the listener function even if this screen has not been owned
|
|
15
|
+
// by RNSScreenStack as since RN 0.78 we do not have enough information
|
|
16
|
+
// here. This final filter is applied later in NativeProxy.
|
|
15
17
|
listenerFunction_(mutation.oldChildShadowView.tag);
|
|
16
18
|
}
|
|
17
19
|
}
|
package/ios/RNSScreenStack.mm
CHANGED
|
@@ -1232,7 +1232,7 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
1232
1232
|
withSurfaceTelemetry:(const facebook::react::SurfaceTelemetry &)surfaceTelemetry
|
|
1233
1233
|
{
|
|
1234
1234
|
for (const auto &mutation : transaction.getMutations()) {
|
|
1235
|
-
if (mutation.
|
|
1235
|
+
if (mutation.parentTag == self.tag &&
|
|
1236
1236
|
(mutation.type == react::ShadowViewMutation::Type::Insert ||
|
|
1237
1237
|
mutation.type == react::ShadowViewMutation::Type::Remove)) {
|
|
1238
1238
|
// we need to wait until children have their layout set. At this point they don't have the layout
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-screens",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.9.0-beta.0",
|
|
4
4
|
"description": "Native navigation primitives for your React Native app.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"submodules": "git submodule update --init --recursive && (cd react-navigation && yarn && yarn build && cd ../)",
|
|
@@ -81,15 +81,15 @@
|
|
|
81
81
|
"@react-native-community/cli": "15.0.1",
|
|
82
82
|
"@react-native-community/cli-platform-android": "15.0.1",
|
|
83
83
|
"@react-native-community/cli-platform-ios": "15.0.1",
|
|
84
|
-
"@react-native/babel-preset": "0.
|
|
85
|
-
"@react-native/eslint-config": "0.
|
|
86
|
-
"@react-native/metro-config": "0.
|
|
87
|
-
"@react-native/typescript-config": "0.
|
|
84
|
+
"@react-native/babel-preset": "0.78.0-rc.5",
|
|
85
|
+
"@react-native/eslint-config": "0.78.0-rc.5",
|
|
86
|
+
"@react-native/metro-config": "0.78.0-rc.5",
|
|
87
|
+
"@react-native/typescript-config": "0.78.0-rc.5",
|
|
88
88
|
"@react-navigation/native": "^5.8.0",
|
|
89
89
|
"@react-navigation/stack": "^5.10.0",
|
|
90
90
|
"@types/jest": "^29.5.13",
|
|
91
|
-
"@types/react": "^
|
|
92
|
-
"@types/react-test-renderer": "^
|
|
91
|
+
"@types/react": "^19.0.0",
|
|
92
|
+
"@types/react-test-renderer": "^19.0.0",
|
|
93
93
|
"@typescript-eslint/eslint-plugin": "^6.5.0",
|
|
94
94
|
"@typescript-eslint/parser": "^6.5.0",
|
|
95
95
|
"clang-format": "^1.8.0",
|
|
@@ -105,15 +105,15 @@
|
|
|
105
105
|
"jest": "^29.6.3",
|
|
106
106
|
"lint-staged": "^14.0.1",
|
|
107
107
|
"prettier": "^2.8.8",
|
|
108
|
-
"react": "
|
|
109
|
-
"react-dom": "^
|
|
110
|
-
"react-native": "0.
|
|
108
|
+
"react": "^19.0.0",
|
|
109
|
+
"react-dom": "^19.0.0",
|
|
110
|
+
"react-native": "0.78.0-rc.5",
|
|
111
111
|
"react-native-builder-bob": "^0.23.2",
|
|
112
112
|
"react-native-gesture-handler": "^2.22.0",
|
|
113
113
|
"react-native-reanimated": "3.16.7",
|
|
114
114
|
"react-native-safe-area-context": "5.1.0",
|
|
115
115
|
"react-native-windows": "^0.64.8",
|
|
116
|
-
"react-test-renderer": "^
|
|
116
|
+
"react-test-renderer": "^19.0.0",
|
|
117
117
|
"release-it": "^15.6.0",
|
|
118
118
|
"typescript": "5.4.3"
|
|
119
119
|
},
|