react-native-screens 3.31.1 → 3.33.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/README.md +21 -11
- package/RNScreens.podspec +11 -52
- package/android/CMakeLists.txt +48 -4
- package/android/build.gradle +16 -9
- package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +25 -16
- package/android/src/fabric/java/com/swmansion/rnscreens/NativeProxy.kt +53 -0
- package/android/src/main/cpp/NativeProxy.cpp +51 -0
- package/android/src/main/cpp/NativeProxy.h +35 -0
- package/android/src/main/cpp/OnLoad.cpp +8 -0
- package/android/src/main/cpp/jni-adapter.cpp +86 -93
- package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +7 -2
- package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +6 -1
- package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +36 -17
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +150 -40
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +52 -30
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt +27 -4
- package/android/src/main/java/com/swmansion/rnscreens/ScreenEventDispatcher.kt +10 -2
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +56 -27
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragmentWrapper.kt +8 -1
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +50 -19
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +63 -39
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragmentWrapper.kt +4 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +88 -57
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +131 -36
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +19 -4
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +16 -10
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +28 -25
- package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +177 -77
- package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +77 -25
- package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +31 -9
- package/android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +160 -54
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +29 -22
- package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +7 -2
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderAttachedEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderDetachedEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt +5 -6
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenAppearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDisappearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDismissedEvent.kt +8 -4
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenTransitionProgressEvent.kt +7 -6
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillAppearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillDisappearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarBlurEvent.kt +5 -2
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarChangeTextEvent.kt +4 -3
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarCloseEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarFocusEvent.kt +5 -2
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarOpenEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarSearchButtonPressEvent.kt +9 -4
- package/android/src/main/java/com/swmansion/rnscreens/events/StackFinishTransitioningEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/utils/DeviceUtils.kt +1 -5
- package/android/src/main/java/com/swmansion/rnscreens/utils/ScreenDummyLayoutHelper.kt +214 -0
- package/android/src/main/jni/CMakeLists.txt +5 -4
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContainerManagerDelegate.java +25 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContainerManagerInterface.java +16 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +6 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +2 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerDelegate.java +3 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerInterface.java +1 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSearchBarManagerDelegate.java +99 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSearchBarManagerInterface.java +37 -0
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +10 -5
- package/android/src/paper/java/com/swmansion/rnscreens/NativeProxy.kt +19 -0
- package/android/src/paper/java/com/swmansion/rnscreens/NativeScreensModuleSpec.java +4 -0
- package/common/cpp/react/renderer/components/rnscreens/FrameCorrectionModes.h +51 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenComponentDescriptor.h +8 -9
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.cpp +2 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.h +9 -8
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h +147 -10
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +51 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h +29 -7
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +22 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +30 -10
- package/common/cpp/react/renderer/components/rnscreens/utils/RectUtil.h +36 -0
- package/cpp/RNSScreenRemovalListener.cpp +25 -0
- package/cpp/RNSScreenRemovalListener.h +20 -0
- package/cpp/RNScreensTurboModule.cpp +31 -23
- package/cpp/RNScreensTurboModule.h +17 -20
- package/ios/RNSConvert.h +7 -0
- package/ios/RNSConvert.mm +24 -0
- package/ios/RNSModalScreen.mm +22 -0
- package/ios/RNSModule.mm +2 -3
- package/ios/RNSScreen.h +2 -1
- package/ios/RNSScreen.mm +35 -19
- package/ios/RNSScreenContainer.mm +1 -1
- package/ios/RNSScreenStack.mm +59 -54
- package/ios/RNSScreenStackAnimator.mm +43 -6
- package/ios/RNSScreenStackHeaderConfig.h +2 -0
- package/ios/RNSScreenStackHeaderConfig.mm +93 -28
- package/ios/RNSScreenStackHeaderSubview.mm +8 -0
- package/ios/RNSSearchBar.h +5 -5
- package/ios/RNSSearchBar.mm +11 -11
- package/ios/utils/RCTSurfaceTouchHandler+RNSUtility.h +15 -0
- package/ios/utils/RCTSurfaceTouchHandler+RNSUtility.mm +14 -0
- package/ios/utils/RCTTouchHandler+RNSUtility.h +15 -0
- package/ios/utils/RCTTouchHandler+RNSUtility.mm +15 -0
- package/ios/utils/UIView+RNSUtility.h +23 -0
- package/ios/utils/UIView+RNSUtility.mm +55 -0
- package/lib/commonjs/components/Screen.js +119 -127
- package/lib/commonjs/components/Screen.js.map +1 -1
- package/lib/commonjs/components/ScreenStack.js +8 -1
- package/lib/commonjs/components/ScreenStack.js.map +1 -1
- package/lib/commonjs/components/SearchBar.js +39 -36
- package/lib/commonjs/components/SearchBar.js.map +1 -1
- package/lib/commonjs/fabric/ModalScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/commonjs/native-stack/views/HeaderConfig.js +2 -0
- package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
- package/lib/commonjs/native-stack/views/NativeStackView.js +4 -0
- package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/module/components/Screen.js +118 -126
- package/lib/module/components/Screen.js.map +1 -1
- package/lib/module/components/ScreenStack.js +8 -1
- package/lib/module/components/ScreenStack.js.map +1 -1
- package/lib/module/components/SearchBar.js +39 -36
- package/lib/module/components/SearchBar.js.map +1 -1
- package/lib/module/fabric/ModalScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/module/native-stack/views/HeaderConfig.js +2 -0
- package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
- package/lib/module/native-stack/views/NativeStackView.js +4 -0
- package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/typescript/TransitionProgressContext.d.ts +1 -1
- package/lib/typescript/TransitionProgressContext.d.ts.map +1 -1
- package/lib/typescript/components/Screen.d.ts +3 -14
- package/lib/typescript/components/Screen.d.ts.map +1 -1
- package/lib/typescript/components/ScreenStack.d.ts.map +1 -1
- package/lib/typescript/components/SearchBar.d.ts +14 -21
- package/lib/typescript/components/SearchBar.d.ts.map +1 -1
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts +12 -10
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts +12 -10
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts +5 -3
- package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/SearchBarNativeComponent.d.ts +9 -9
- package/lib/typescript/fabric/SearchBarNativeComponent.d.ts.map +1 -1
- package/lib/typescript/gesture-handler/RNScreensTurboModule.d.ts +1 -1
- package/lib/typescript/gesture-handler/RNScreensTurboModule.d.ts.map +1 -1
- package/lib/typescript/native-stack/types.d.ts +39 -14
- package/lib/typescript/native-stack/types.d.ts.map +1 -1
- package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts +1 -1
- package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts.map +1 -1
- package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts +1 -1
- package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts.map +1 -1
- package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts +1 -1
- package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts.map +1 -1
- package/lib/typescript/native-stack/views/HeaderConfig.d.ts +2 -2
- package/lib/typescript/native-stack/views/HeaderConfig.d.ts.map +1 -1
- package/lib/typescript/native-stack/views/NativeStackView.d.ts +1 -1
- package/lib/typescript/native-stack/views/NativeStackView.d.ts.map +1 -1
- package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts +1 -1
- package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +39 -13
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/useTransitionProgress.d.ts +3 -3
- package/native-stack/README.md +116 -98
- package/package.json +16 -7
- package/react-native.config.js +17 -15
- package/src/TransitionProgressContext.tsx +1 -1
- package/src/components/Screen.tsx +31 -37
- package/src/components/ScreenStack.tsx +11 -1
- package/src/components/ScreenStackHeaderConfig.tsx +5 -5
- package/src/components/ScreenStackHeaderConfig.web.tsx +6 -6
- package/src/components/SearchBar.tsx +77 -65
- package/src/core.ts +1 -1
- package/src/fabric/ModalScreenNativeComponent.ts +2 -0
- package/src/fabric/ScreenNativeComponent.ts +2 -0
- package/src/fabric/ScreenNavigationContainerNativeComponent.ts +1 -1
- package/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +4 -1
- package/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +1 -1
- package/src/fabric/SearchBarNativeComponent.ts +7 -7
- package/src/gesture-handler/ScreenGestureDetector.tsx +5 -5
- package/src/gesture-handler/constraints.ts +5 -5
- package/src/gesture-handler/fabricUtils.ts +1 -1
- package/src/native-stack/contexts/GHContext.tsx +1 -1
- package/src/native-stack/navigators/createNativeStackNavigator.tsx +3 -3
- package/src/native-stack/types.tsx +29 -4
- package/src/native-stack/utils/getDefaultHeaderHeight.tsx +1 -1
- package/src/native-stack/utils/getStatusBarHeight.tsx +1 -1
- package/src/native-stack/utils/useAnimatedHeaderHeight.tsx +1 -1
- package/src/native-stack/utils/useBackPressSubscription.tsx +1 -1
- package/src/native-stack/utils/useHeaderHeight.tsx +1 -1
- package/src/native-stack/views/FontProcessor.tsx +1 -1
- package/src/native-stack/views/HeaderConfig.tsx +3 -1
- package/src/native-stack/views/NativeStackView.tsx +13 -9
- package/src/reanimated/ReanimatedHeaderHeightContext.tsx +1 -1
- package/src/reanimated/ReanimatedNativeStackScreen.tsx +5 -5
- package/src/reanimated/ReanimatedScreen.tsx +2 -2
- package/src/reanimated/ReanimatedScreenProvider.tsx +1 -1
- package/src/reanimated/useReanimatedHeaderHeight.tsx +1 -1
- package/src/reanimated/useReanimatedTransitionProgress.tsx +1 -1
- package/src/types.tsx +31 -5
- package/src/useTransitionProgress.tsx +1 -1
- package/windows/README.md +4 -1
|
@@ -16,7 +16,9 @@ import com.swmansion.rnscreens.events.HeaderDetachedEvent
|
|
|
16
16
|
import javax.annotation.Nonnull
|
|
17
17
|
|
|
18
18
|
@ReactModule(name = ScreenStackHeaderConfigViewManager.REACT_CLASS)
|
|
19
|
-
class ScreenStackHeaderConfigViewManager :
|
|
19
|
+
class ScreenStackHeaderConfigViewManager :
|
|
20
|
+
ViewGroupManager<ScreenStackHeaderConfig>(),
|
|
21
|
+
RNSScreenStackHeaderConfigManagerInterface<ScreenStackHeaderConfig> {
|
|
20
22
|
private val delegate: ViewManagerDelegate<ScreenStackHeaderConfig>
|
|
21
23
|
|
|
22
24
|
init {
|
|
@@ -27,16 +29,22 @@ class ScreenStackHeaderConfigViewManager : ViewGroupManager<ScreenStackHeaderCon
|
|
|
27
29
|
|
|
28
30
|
override fun createViewInstance(reactContext: ThemedReactContext) = ScreenStackHeaderConfig(reactContext)
|
|
29
31
|
|
|
30
|
-
override fun addView(
|
|
32
|
+
override fun addView(
|
|
33
|
+
parent: ScreenStackHeaderConfig,
|
|
34
|
+
child: View,
|
|
35
|
+
index: Int,
|
|
36
|
+
) {
|
|
31
37
|
if (child !is ScreenStackHeaderSubview) {
|
|
32
38
|
throw JSApplicationCausedNativeException(
|
|
33
|
-
"Config children should be of type " + ScreenStackHeaderSubviewManager.REACT_CLASS
|
|
39
|
+
"Config children should be of type " + ScreenStackHeaderSubviewManager.REACT_CLASS,
|
|
34
40
|
)
|
|
35
41
|
}
|
|
36
42
|
parent.addConfigSubview(child, index)
|
|
37
43
|
}
|
|
38
44
|
|
|
39
|
-
override fun onDropViewInstance(
|
|
45
|
+
override fun onDropViewInstance(
|
|
46
|
+
@Nonnull view: ScreenStackHeaderConfig,
|
|
47
|
+
) {
|
|
40
48
|
view.destroy()
|
|
41
49
|
}
|
|
42
50
|
|
|
@@ -44,13 +52,19 @@ class ScreenStackHeaderConfigViewManager : ViewGroupManager<ScreenStackHeaderCon
|
|
|
44
52
|
parent.removeAllConfigSubviews()
|
|
45
53
|
}
|
|
46
54
|
|
|
47
|
-
override fun removeViewAt(
|
|
55
|
+
override fun removeViewAt(
|
|
56
|
+
parent: ScreenStackHeaderConfig,
|
|
57
|
+
index: Int,
|
|
58
|
+
) {
|
|
48
59
|
parent.removeConfigSubview(index)
|
|
49
60
|
}
|
|
50
61
|
|
|
51
62
|
override fun getChildCount(parent: ScreenStackHeaderConfig): Int = parent.configSubviewsCount
|
|
52
63
|
|
|
53
|
-
override fun getChildAt(
|
|
64
|
+
override fun getChildAt(
|
|
65
|
+
parent: ScreenStackHeaderConfig,
|
|
66
|
+
index: Int,
|
|
67
|
+
): View = parent.getConfigSubview(index)
|
|
54
68
|
|
|
55
69
|
override fun needsCustomLayoutForChildren() = true
|
|
56
70
|
|
|
@@ -60,88 +74,126 @@ class ScreenStackHeaderConfigViewManager : ViewGroupManager<ScreenStackHeaderCon
|
|
|
60
74
|
}
|
|
61
75
|
|
|
62
76
|
@ReactProp(name = "title")
|
|
63
|
-
override fun setTitle(
|
|
77
|
+
override fun setTitle(
|
|
78
|
+
config: ScreenStackHeaderConfig,
|
|
79
|
+
title: String?,
|
|
80
|
+
) {
|
|
64
81
|
config.setTitle(title)
|
|
65
82
|
}
|
|
66
83
|
|
|
67
84
|
@ReactProp(name = "titleFontFamily")
|
|
68
|
-
override fun setTitleFontFamily(
|
|
85
|
+
override fun setTitleFontFamily(
|
|
86
|
+
config: ScreenStackHeaderConfig,
|
|
87
|
+
titleFontFamily: String?,
|
|
88
|
+
) {
|
|
69
89
|
config.setTitleFontFamily(titleFontFamily)
|
|
70
90
|
}
|
|
71
91
|
|
|
72
92
|
@ReactProp(name = "titleFontSize")
|
|
73
|
-
override fun setTitleFontSize(
|
|
93
|
+
override fun setTitleFontSize(
|
|
94
|
+
config: ScreenStackHeaderConfig,
|
|
95
|
+
titleFontSize: Int,
|
|
96
|
+
) {
|
|
74
97
|
config.setTitleFontSize(titleFontSize.toFloat())
|
|
75
98
|
}
|
|
76
99
|
|
|
77
100
|
@ReactProp(name = "titleFontWeight")
|
|
78
|
-
override fun setTitleFontWeight(
|
|
101
|
+
override fun setTitleFontWeight(
|
|
102
|
+
config: ScreenStackHeaderConfig,
|
|
103
|
+
titleFontWeight: String?,
|
|
104
|
+
) {
|
|
79
105
|
config.setTitleFontWeight(titleFontWeight)
|
|
80
106
|
}
|
|
81
107
|
|
|
82
108
|
@ReactProp(name = "titleColor", customType = "Color")
|
|
83
|
-
override fun setTitleColor(
|
|
109
|
+
override fun setTitleColor(
|
|
110
|
+
config: ScreenStackHeaderConfig,
|
|
111
|
+
titleColor: Int?,
|
|
112
|
+
) {
|
|
84
113
|
if (titleColor != null) {
|
|
85
114
|
config.setTitleColor(titleColor)
|
|
86
115
|
}
|
|
87
116
|
}
|
|
88
117
|
|
|
89
118
|
@ReactProp(name = "backgroundColor", customType = "Color")
|
|
90
|
-
override fun setBackgroundColor(
|
|
119
|
+
override fun setBackgroundColor(
|
|
120
|
+
config: ScreenStackHeaderConfig,
|
|
121
|
+
backgroundColor: Int?,
|
|
122
|
+
) {
|
|
91
123
|
config.setBackgroundColor(backgroundColor)
|
|
92
124
|
}
|
|
93
125
|
|
|
94
126
|
@ReactProp(name = "hideShadow")
|
|
95
|
-
override fun setHideShadow(
|
|
127
|
+
override fun setHideShadow(
|
|
128
|
+
config: ScreenStackHeaderConfig,
|
|
129
|
+
hideShadow: Boolean,
|
|
130
|
+
) {
|
|
96
131
|
config.setHideShadow(hideShadow)
|
|
97
132
|
}
|
|
98
133
|
|
|
99
134
|
@ReactProp(name = "hideBackButton")
|
|
100
|
-
override fun setHideBackButton(
|
|
135
|
+
override fun setHideBackButton(
|
|
136
|
+
config: ScreenStackHeaderConfig,
|
|
137
|
+
hideBackButton: Boolean,
|
|
138
|
+
) {
|
|
101
139
|
config.setHideBackButton(hideBackButton)
|
|
102
140
|
}
|
|
103
141
|
|
|
104
142
|
@ReactProp(name = "topInsetEnabled")
|
|
105
|
-
override fun setTopInsetEnabled(
|
|
143
|
+
override fun setTopInsetEnabled(
|
|
144
|
+
config: ScreenStackHeaderConfig,
|
|
145
|
+
topInsetEnabled: Boolean,
|
|
146
|
+
) {
|
|
106
147
|
config.setTopInsetEnabled(topInsetEnabled)
|
|
107
148
|
}
|
|
108
149
|
|
|
109
150
|
@ReactProp(name = "color", customType = "Color")
|
|
110
|
-
override fun setColor(
|
|
151
|
+
override fun setColor(
|
|
152
|
+
config: ScreenStackHeaderConfig,
|
|
153
|
+
color: Int?,
|
|
154
|
+
) {
|
|
111
155
|
config.setTintColor(color ?: 0)
|
|
112
156
|
}
|
|
113
157
|
|
|
114
158
|
@ReactProp(name = "hidden")
|
|
115
|
-
override fun setHidden(
|
|
159
|
+
override fun setHidden(
|
|
160
|
+
config: ScreenStackHeaderConfig,
|
|
161
|
+
hidden: Boolean,
|
|
162
|
+
) {
|
|
116
163
|
config.setHidden(hidden)
|
|
117
164
|
}
|
|
118
165
|
|
|
119
166
|
@ReactProp(name = "translucent")
|
|
120
|
-
override fun setTranslucent(
|
|
167
|
+
override fun setTranslucent(
|
|
168
|
+
config: ScreenStackHeaderConfig,
|
|
169
|
+
translucent: Boolean,
|
|
170
|
+
) {
|
|
121
171
|
config.setTranslucent(translucent)
|
|
122
172
|
}
|
|
123
173
|
|
|
124
174
|
@ReactProp(name = "backButtonInCustomView")
|
|
125
175
|
override fun setBackButtonInCustomView(
|
|
126
176
|
config: ScreenStackHeaderConfig,
|
|
127
|
-
backButtonInCustomView: Boolean
|
|
177
|
+
backButtonInCustomView: Boolean,
|
|
128
178
|
) {
|
|
129
179
|
config.setBackButtonInCustomView(backButtonInCustomView)
|
|
130
180
|
}
|
|
131
181
|
|
|
132
182
|
@ReactProp(name = "direction")
|
|
133
|
-
override fun setDirection(
|
|
183
|
+
override fun setDirection(
|
|
184
|
+
config: ScreenStackHeaderConfig,
|
|
185
|
+
direction: String?,
|
|
186
|
+
) {
|
|
134
187
|
config.setDirection(direction)
|
|
135
188
|
}
|
|
136
189
|
|
|
137
|
-
override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any>?
|
|
138
|
-
|
|
190
|
+
override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any>? =
|
|
191
|
+
MapBuilder.of(
|
|
139
192
|
HeaderAttachedEvent.EVENT_NAME,
|
|
140
193
|
MapBuilder.of("registrationName", "onAttached"),
|
|
141
194
|
HeaderDetachedEvent.EVENT_NAME,
|
|
142
195
|
MapBuilder.of("registrationName", "onDetached"),
|
|
143
196
|
)
|
|
144
|
-
}
|
|
145
197
|
|
|
146
198
|
protected override fun getDelegate(): ViewManagerDelegate<ScreenStackHeaderConfig> = delegate
|
|
147
199
|
|
|
@@ -151,54 +203,97 @@ class ScreenStackHeaderConfigViewManager : ViewGroupManager<ScreenStackHeaderCon
|
|
|
151
203
|
|
|
152
204
|
// TODO: Find better way to handle platform specific props
|
|
153
205
|
private fun logNotAvailable(propName: String) {
|
|
154
|
-
Log.w("
|
|
206
|
+
Log.w("[RNScreens]", "$propName prop is not available on Android")
|
|
155
207
|
}
|
|
156
208
|
|
|
157
|
-
override fun setBackTitle(
|
|
209
|
+
override fun setBackTitle(
|
|
210
|
+
view: ScreenStackHeaderConfig?,
|
|
211
|
+
value: String?,
|
|
212
|
+
) {
|
|
158
213
|
logNotAvailable("backTitle")
|
|
159
214
|
}
|
|
160
215
|
|
|
161
|
-
override fun setBackTitleFontFamily(
|
|
216
|
+
override fun setBackTitleFontFamily(
|
|
217
|
+
view: ScreenStackHeaderConfig?,
|
|
218
|
+
value: String?,
|
|
219
|
+
) {
|
|
162
220
|
logNotAvailable("backTitleFontFamily")
|
|
163
221
|
}
|
|
164
222
|
|
|
165
|
-
override fun setBackTitleFontSize(
|
|
223
|
+
override fun setBackTitleFontSize(
|
|
224
|
+
view: ScreenStackHeaderConfig?,
|
|
225
|
+
value: Int,
|
|
226
|
+
) {
|
|
166
227
|
logNotAvailable("backTitleFontSize")
|
|
167
228
|
}
|
|
168
229
|
|
|
169
|
-
override fun setBackTitleVisible(
|
|
230
|
+
override fun setBackTitleVisible(
|
|
231
|
+
view: ScreenStackHeaderConfig?,
|
|
232
|
+
value: Boolean,
|
|
233
|
+
) {
|
|
170
234
|
logNotAvailable("backTitleVisible")
|
|
171
235
|
}
|
|
172
236
|
|
|
173
|
-
override fun setLargeTitle(
|
|
237
|
+
override fun setLargeTitle(
|
|
238
|
+
view: ScreenStackHeaderConfig?,
|
|
239
|
+
value: Boolean,
|
|
240
|
+
) {
|
|
174
241
|
logNotAvailable("largeTitle")
|
|
175
242
|
}
|
|
176
243
|
|
|
177
|
-
override fun setLargeTitleFontFamily(
|
|
244
|
+
override fun setLargeTitleFontFamily(
|
|
245
|
+
view: ScreenStackHeaderConfig?,
|
|
246
|
+
value: String?,
|
|
247
|
+
) {
|
|
178
248
|
logNotAvailable("largeTitleFontFamily")
|
|
179
249
|
}
|
|
180
250
|
|
|
181
|
-
override fun setLargeTitleFontSize(
|
|
251
|
+
override fun setLargeTitleFontSize(
|
|
252
|
+
view: ScreenStackHeaderConfig?,
|
|
253
|
+
value: Int,
|
|
254
|
+
) {
|
|
182
255
|
logNotAvailable("largeTitleFontSize")
|
|
183
256
|
}
|
|
184
257
|
|
|
185
|
-
override fun setLargeTitleFontWeight(
|
|
258
|
+
override fun setLargeTitleFontWeight(
|
|
259
|
+
view: ScreenStackHeaderConfig?,
|
|
260
|
+
value: String?,
|
|
261
|
+
) {
|
|
186
262
|
logNotAvailable("largeTitleFontWeight")
|
|
187
263
|
}
|
|
188
264
|
|
|
189
|
-
override fun setLargeTitleBackgroundColor(
|
|
265
|
+
override fun setLargeTitleBackgroundColor(
|
|
266
|
+
view: ScreenStackHeaderConfig?,
|
|
267
|
+
value: Int?,
|
|
268
|
+
) {
|
|
190
269
|
logNotAvailable("largeTitleBackgroundColor")
|
|
191
270
|
}
|
|
192
271
|
|
|
193
|
-
override fun setLargeTitleHideShadow(
|
|
272
|
+
override fun setLargeTitleHideShadow(
|
|
273
|
+
view: ScreenStackHeaderConfig?,
|
|
274
|
+
value: Boolean,
|
|
275
|
+
) {
|
|
194
276
|
logNotAvailable("largeTitleHideShadow")
|
|
195
277
|
}
|
|
196
278
|
|
|
197
|
-
override fun setLargeTitleColor(
|
|
279
|
+
override fun setLargeTitleColor(
|
|
280
|
+
view: ScreenStackHeaderConfig?,
|
|
281
|
+
value: Int?,
|
|
282
|
+
) {
|
|
198
283
|
logNotAvailable("largeTitleColor")
|
|
199
284
|
}
|
|
200
285
|
|
|
201
|
-
override fun setDisableBackButtonMenu(
|
|
286
|
+
override fun setDisableBackButtonMenu(
|
|
287
|
+
view: ScreenStackHeaderConfig?,
|
|
288
|
+
value: Boolean,
|
|
289
|
+
) {
|
|
202
290
|
logNotAvailable("disableBackButtonMenu")
|
|
203
291
|
}
|
|
292
|
+
|
|
293
|
+
override fun setBackButtonDisplayMode(
|
|
294
|
+
view: ScreenStackHeaderConfig?,
|
|
295
|
+
value: String?,
|
|
296
|
+
) {
|
|
297
|
+
logNotAvailable("backButtonDisplayMode")
|
|
298
|
+
}
|
|
204
299
|
}
|
|
@@ -6,7 +6,9 @@ import com.facebook.react.bridge.ReactContext
|
|
|
6
6
|
import com.facebook.react.views.view.ReactViewGroup
|
|
7
7
|
|
|
8
8
|
@SuppressLint("ViewConstructor")
|
|
9
|
-
class ScreenStackHeaderSubview(
|
|
9
|
+
class ScreenStackHeaderSubview(
|
|
10
|
+
context: ReactContext?,
|
|
11
|
+
) : ReactViewGroup(context) {
|
|
10
12
|
private var reactWidth = 0
|
|
11
13
|
private var reactHeight = 0
|
|
12
14
|
var type = Type.RIGHT
|
|
@@ -14,7 +16,10 @@ class ScreenStackHeaderSubview(context: ReactContext?) : ReactViewGroup(context)
|
|
|
14
16
|
val config: ScreenStackHeaderConfig?
|
|
15
17
|
get() = (parent as? CustomToolbar)?.config
|
|
16
18
|
|
|
17
|
-
override fun onMeasure(
|
|
19
|
+
override fun onMeasure(
|
|
20
|
+
widthMeasureSpec: Int,
|
|
21
|
+
heightMeasureSpec: Int,
|
|
22
|
+
) {
|
|
18
23
|
if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY &&
|
|
19
24
|
MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.EXACTLY
|
|
20
25
|
) {
|
|
@@ -30,9 +35,19 @@ class ScreenStackHeaderSubview(context: ReactContext?) : ReactViewGroup(context)
|
|
|
30
35
|
setMeasuredDimension(reactWidth, reactHeight)
|
|
31
36
|
}
|
|
32
37
|
|
|
33
|
-
override fun onLayout(
|
|
38
|
+
override fun onLayout(
|
|
39
|
+
changed: Boolean,
|
|
40
|
+
left: Int,
|
|
41
|
+
top: Int,
|
|
42
|
+
right: Int,
|
|
43
|
+
bottom: Int,
|
|
44
|
+
) = Unit
|
|
34
45
|
|
|
35
46
|
enum class Type {
|
|
36
|
-
LEFT,
|
|
47
|
+
LEFT,
|
|
48
|
+
CENTER,
|
|
49
|
+
RIGHT,
|
|
50
|
+
BACK,
|
|
51
|
+
SEARCH_BAR,
|
|
37
52
|
}
|
|
38
53
|
}
|
|
@@ -10,7 +10,9 @@ import com.facebook.react.viewmanagers.RNSScreenStackHeaderSubviewManagerDelegat
|
|
|
10
10
|
import com.facebook.react.viewmanagers.RNSScreenStackHeaderSubviewManagerInterface
|
|
11
11
|
|
|
12
12
|
@ReactModule(name = ScreenStackHeaderSubviewManager.REACT_CLASS)
|
|
13
|
-
class ScreenStackHeaderSubviewManager :
|
|
13
|
+
class ScreenStackHeaderSubviewManager :
|
|
14
|
+
ViewGroupManager<ScreenStackHeaderSubview>(),
|
|
15
|
+
RNSScreenStackHeaderSubviewManagerInterface<ScreenStackHeaderSubview> {
|
|
14
16
|
private val delegate: ViewManagerDelegate<ScreenStackHeaderSubview>
|
|
15
17
|
|
|
16
18
|
init {
|
|
@@ -22,15 +24,19 @@ class ScreenStackHeaderSubviewManager : ViewGroupManager<ScreenStackHeaderSubvie
|
|
|
22
24
|
override fun createViewInstance(context: ThemedReactContext) = ScreenStackHeaderSubview(context)
|
|
23
25
|
|
|
24
26
|
@ReactProp(name = "type")
|
|
25
|
-
override fun setType(
|
|
26
|
-
view
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
override fun setType(
|
|
28
|
+
view: ScreenStackHeaderSubview,
|
|
29
|
+
type: String?,
|
|
30
|
+
) {
|
|
31
|
+
view.type =
|
|
32
|
+
when (type) {
|
|
33
|
+
"left" -> ScreenStackHeaderSubview.Type.LEFT
|
|
34
|
+
"center" -> ScreenStackHeaderSubview.Type.CENTER
|
|
35
|
+
"right" -> ScreenStackHeaderSubview.Type.RIGHT
|
|
36
|
+
"back" -> ScreenStackHeaderSubview.Type.BACK
|
|
37
|
+
"searchBar" -> ScreenStackHeaderSubview.Type.SEARCH_BAR
|
|
38
|
+
else -> throw JSApplicationIllegalArgumentException("Unknown type $type")
|
|
39
|
+
}
|
|
34
40
|
}
|
|
35
41
|
|
|
36
42
|
protected override fun getDelegate(): ViewManagerDelegate<ScreenStackHeaderSubview> = delegate
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
package com.swmansion.rnscreens
|
|
2
2
|
|
|
3
3
|
import android.view.View
|
|
4
|
-
import android.view.ViewGroup
|
|
5
4
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
5
|
import com.facebook.react.module.annotations.ReactModule
|
|
7
6
|
import com.facebook.react.uimanager.LayoutShadowNode
|
|
@@ -13,7 +12,9 @@ import com.facebook.react.viewmanagers.RNSScreenStackManagerInterface
|
|
|
13
12
|
import com.swmansion.rnscreens.events.StackFinishTransitioningEvent
|
|
14
13
|
|
|
15
14
|
@ReactModule(name = ScreenStackViewManager.REACT_CLASS)
|
|
16
|
-
class ScreenStackViewManager :
|
|
15
|
+
class ScreenStackViewManager :
|
|
16
|
+
ViewGroupManager<ScreenStack>(),
|
|
17
|
+
RNSScreenStackManagerInterface<ScreenStack> {
|
|
17
18
|
private val delegate: ViewManagerDelegate<ScreenStack>
|
|
18
19
|
|
|
19
20
|
init {
|
|
@@ -24,40 +25,41 @@ class ScreenStackViewManager : ViewGroupManager<ScreenStack>(), RNSScreenStackMa
|
|
|
24
25
|
|
|
25
26
|
override fun createViewInstance(reactContext: ThemedReactContext) = ScreenStack(reactContext)
|
|
26
27
|
|
|
27
|
-
override fun addView(
|
|
28
|
+
override fun addView(
|
|
29
|
+
parent: ScreenStack,
|
|
30
|
+
child: View,
|
|
31
|
+
index: Int,
|
|
32
|
+
) {
|
|
28
33
|
require(child is Screen) { "Attempt attach child that is not of type RNScreen" }
|
|
34
|
+
NativeProxy.addScreenToMap(child.id, child)
|
|
29
35
|
parent.addScreen(child, index)
|
|
30
36
|
}
|
|
31
37
|
|
|
32
|
-
override fun removeViewAt(
|
|
33
|
-
|
|
38
|
+
override fun removeViewAt(
|
|
39
|
+
parent: ScreenStack,
|
|
40
|
+
index: Int,
|
|
41
|
+
) {
|
|
42
|
+
val screen = parent.getScreenAt(index)
|
|
43
|
+
prepareOutTransition(screen)
|
|
34
44
|
parent.removeScreenAt(index)
|
|
45
|
+
NativeProxy.removeScreenFromMap(screen.id)
|
|
35
46
|
}
|
|
36
47
|
|
|
37
48
|
private fun prepareOutTransition(screen: Screen?) {
|
|
38
|
-
|
|
49
|
+
screen?.startRemovalTransition()
|
|
39
50
|
}
|
|
40
51
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
val child = it.getChildAt(i)
|
|
45
|
-
child?.let { view -> it.startViewTransition(view) }
|
|
46
|
-
if (child is ScreenStackHeaderConfig) {
|
|
47
|
-
// we want to start transition on children of the toolbar too,
|
|
48
|
-
// which is not a child of ScreenStackHeaderConfig
|
|
49
|
-
startTransitionRecursive(child.toolbar)
|
|
50
|
-
}
|
|
51
|
-
if (child is ViewGroup) {
|
|
52
|
-
startTransitionRecursive(child)
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
52
|
+
override fun invalidate() {
|
|
53
|
+
super.invalidate()
|
|
54
|
+
NativeProxy.clearMapOnInvalidate()
|
|
56
55
|
}
|
|
57
56
|
|
|
58
57
|
override fun getChildCount(parent: ScreenStack) = parent.screenCount
|
|
59
58
|
|
|
60
|
-
override fun getChildAt(
|
|
59
|
+
override fun getChildAt(
|
|
60
|
+
parent: ScreenStack,
|
|
61
|
+
index: Int,
|
|
62
|
+
): View = parent.getScreenAt(index)
|
|
61
63
|
|
|
62
64
|
override fun createShadowNodeInstance(context: ReactApplicationContext): LayoutShadowNode = ScreensShadowNode(context)
|
|
63
65
|
|
|
@@ -65,9 +67,10 @@ class ScreenStackViewManager : ViewGroupManager<ScreenStack>(), RNSScreenStackMa
|
|
|
65
67
|
|
|
66
68
|
protected override fun getDelegate(): ViewManagerDelegate<ScreenStack> = delegate
|
|
67
69
|
|
|
68
|
-
override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> =
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> =
|
|
71
|
+
mutableMapOf(
|
|
72
|
+
StackFinishTransitioningEvent.EVENT_NAME to mutableMapOf("registrationName" to "onFinishTransitioning"),
|
|
73
|
+
)
|
|
71
74
|
|
|
72
75
|
companion object {
|
|
73
76
|
const val REACT_CLASS = "RNSScreenStack"
|