react-native-screens 3.24.0 → 3.26.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 +1 -1
- package/RNScreens.podspec +53 -32
- package/android/build.gradle +13 -11
- package/android/src/main/java/com/swmansion/rnscreens/FragmentHolder.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +41 -10
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +35 -36
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt +7 -7
- package/android/src/main/java/com/swmansion/rnscreens/ScreenEventDispatcher.kt +21 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +46 -38
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragmentWrapper.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +40 -39
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +35 -10
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragmentWrapper.kt +15 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +6 -4
- package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +11 -18
- package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +27 -7
- package/android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +23 -7
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderAttachedEvent.kt +3 -5
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt +3 -5
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderDetachedEvent.kt +3 -5
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt +26 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenAppearEvent.kt +3 -5
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDisappearEvent.kt +3 -5
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDismissedEvent.kt +4 -7
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenTransitionProgressEvent.kt +7 -8
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillAppearEvent.kt +3 -5
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillDisappearEvent.kt +3 -5
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarBlurEvent.kt +3 -5
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarChangeTextEvent.kt +5 -6
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarCloseEvent.kt +3 -5
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarFocusEvent.kt +3 -5
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarOpenEvent.kt +3 -5
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarSearchButtonPressEvent.kt +4 -6
- package/android/src/main/java/com/swmansion/rnscreens/events/StackFinishTransitioningEvent.kt +3 -5
- package/android/src/main/java/com/swmansion/rnscreens/utils/DeviceUtils.kt +12 -0
- package/android/src/main/res/v33/anim-v33/rns_default_enter_out.xml +1 -1
- package/ios/RNSFullWindowOverlay.mm +2 -2
- package/ios/RNSScreen.h +5 -0
- package/ios/RNSScreen.mm +164 -7
- package/ios/RNSScreenStack.mm +18 -0
- package/ios/RNSScreenStackHeaderConfig.mm +18 -0
- package/ios/events/RNSHeaderHeightChangeEvent.h +8 -0
- package/ios/events/RNSHeaderHeightChangeEvent.mm +44 -0
- package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/index.native.js +11 -11
- package/lib/commonjs/index.native.js.map +1 -1
- package/lib/commonjs/native-stack/index.js +14 -0
- package/lib/commonjs/native-stack/index.js.map +1 -1
- package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js +1 -1
- package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
- package/lib/commonjs/native-stack/types.js.map +1 -1
- package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js +13 -0
- package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -0
- package/lib/commonjs/native-stack/utils/SafeAreaProviderCompat.js.map +1 -1
- package/lib/commonjs/native-stack/utils/getStatusBarHeight.js +22 -0
- package/lib/commonjs/native-stack/utils/getStatusBarHeight.js.map +1 -0
- package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js +19 -0
- package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -0
- package/lib/commonjs/native-stack/utils/useBackPressSubscription.js +2 -2
- package/lib/commonjs/native-stack/utils/useBackPressSubscription.js.map +1 -1
- package/lib/commonjs/native-stack/views/HeaderConfig.js +2 -2
- package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
- package/lib/commonjs/native-stack/views/NativeStackView.js +39 -21
- package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js +13 -0
- package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js.map +1 -0
- package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +37 -6
- package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +2 -2
- package/lib/commonjs/reanimated/ReanimatedScreenProvider.js.map +1 -1
- package/lib/commonjs/reanimated/index.js +7 -0
- package/lib/commonjs/reanimated/index.js.map +1 -1
- package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js +19 -0
- package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js.map +1 -0
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/module/index.native.js +12 -12
- package/lib/module/index.native.js.map +1 -1
- package/lib/module/native-stack/index.js +2 -0
- package/lib/module/native-stack/index.js.map +1 -1
- package/lib/module/native-stack/navigators/createNativeStackNavigator.js +1 -1
- package/lib/module/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
- package/lib/module/native-stack/types.js.map +1 -1
- package/lib/module/native-stack/utils/AnimatedHeaderHeightContext.js +4 -0
- package/lib/module/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -0
- package/lib/module/native-stack/utils/SafeAreaProviderCompat.js.map +1 -1
- package/lib/module/native-stack/utils/getStatusBarHeight.js +16 -0
- package/lib/module/native-stack/utils/getStatusBarHeight.js.map +1 -0
- package/lib/module/native-stack/utils/useAnimatedHeaderHeight.js +10 -0
- package/lib/module/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -0
- package/lib/module/native-stack/utils/useBackPressSubscription.js +2 -2
- package/lib/module/native-stack/utils/useBackPressSubscription.js.map +1 -1
- package/lib/module/native-stack/views/HeaderConfig.js +2 -2
- package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
- package/lib/module/native-stack/views/NativeStackView.js +40 -22
- package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/module/reanimated/ReanimatedHeaderHeightContext.js +5 -0
- package/lib/module/reanimated/ReanimatedHeaderHeightContext.js.map +1 -0
- package/lib/module/reanimated/ReanimatedNativeStackScreen.js +37 -6
- package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
- package/lib/module/reanimated/ReanimatedScreenProvider.js +2 -2
- package/lib/module/reanimated/ReanimatedScreenProvider.js.map +1 -1
- package/lib/module/reanimated/index.js +1 -0
- package/lib/module/reanimated/index.js.map +1 -1
- package/lib/module/reanimated/useReanimatedHeaderHeight.js +10 -0
- package/lib/module/reanimated/useReanimatedHeaderHeight.js.map +1 -0
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts +4 -0
- package/lib/typescript/native-stack/index.d.ts +2 -0
- package/lib/typescript/native-stack/types.d.ts +20 -12
- package/lib/typescript/native-stack/utils/AnimatedHeaderHeightContext.d.ts +4 -0
- package/lib/typescript/native-stack/utils/getStatusBarHeight.d.ts +2 -0
- package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts +1 -0
- package/lib/typescript/reanimated/ReanimatedHeaderHeightContext.d.ts +4 -0
- package/lib/typescript/reanimated/index.d.ts +1 -0
- package/lib/typescript/reanimated/useReanimatedHeaderHeight.d.ts +3 -0
- package/lib/typescript/types.d.ts +26 -15
- package/native-stack/README.md +16 -1
- package/package.json +36 -38
- package/src/fabric/ScreenNativeComponent.ts +5 -0
- package/src/index.native.tsx +17 -19
- package/src/native-stack/index.tsx +3 -0
- package/src/native-stack/types.tsx +21 -12
- package/src/native-stack/utils/AnimatedHeaderHeightContext.tsx +8 -0
- package/src/native-stack/utils/SafeAreaProviderCompat.tsx +1 -1
- package/src/native-stack/utils/getStatusBarHeight.tsx +22 -0
- package/src/native-stack/utils/useAnimatedHeaderHeight.tsx +15 -0
- package/src/native-stack/views/HeaderConfig.tsx +1 -2
- package/src/native-stack/views/NativeStackView.tsx +78 -44
- package/src/reanimated/ReanimatedHeaderHeightContext.tsx +7 -0
- package/src/reanimated/ReanimatedNativeStackScreen.tsx +58 -11
- package/src/reanimated/index.tsx +1 -0
- package/src/reanimated/useReanimatedHeaderHeight.tsx +14 -0
- package/src/types.tsx +29 -14
- package/windows/RNScreens/RNScreens.vcxproj +6 -3
- package/windows/RNScreens/ScreenStack.cpp +16 -0
- package/windows/RNScreens/ScreenStack.h +1 -0
- /package/ios/{RNSScreenViewEvent.h → events/RNSScreenViewEvent.h} +0 -0
- /package/ios/{RNSScreenViewEvent.mm → events/RNSScreenViewEvent.mm} +0 -0
|
@@ -9,6 +9,7 @@ import android.content.pm.ActivityInfo
|
|
|
9
9
|
import android.graphics.Color
|
|
10
10
|
import android.os.Build
|
|
11
11
|
import android.view.ViewParent
|
|
12
|
+
import androidx.core.graphics.Insets
|
|
12
13
|
import androidx.core.view.ViewCompat
|
|
13
14
|
import androidx.core.view.WindowCompat
|
|
14
15
|
import androidx.core.view.WindowInsetsCompat
|
|
@@ -115,12 +116,31 @@ object ScreenWindowTraits {
|
|
|
115
116
|
if (translucent) {
|
|
116
117
|
ViewCompat.setOnApplyWindowInsetsListener(decorView) { v, insets ->
|
|
117
118
|
val defaultInsets = ViewCompat.onApplyWindowInsets(v, insets)
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
119
|
+
|
|
120
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
|
121
|
+
val windowInsets =
|
|
122
|
+
defaultInsets.getInsets(WindowInsetsCompat.Type.statusBars())
|
|
123
|
+
|
|
124
|
+
WindowInsetsCompat
|
|
125
|
+
.Builder()
|
|
126
|
+
.setInsets(
|
|
127
|
+
WindowInsetsCompat.Type.statusBars(),
|
|
128
|
+
Insets.of(
|
|
129
|
+
windowInsets.left,
|
|
130
|
+
0,
|
|
131
|
+
windowInsets.right,
|
|
132
|
+
windowInsets.bottom
|
|
133
|
+
)
|
|
134
|
+
)
|
|
135
|
+
.build()
|
|
136
|
+
} else {
|
|
137
|
+
defaultInsets.replaceSystemWindowInsets(
|
|
138
|
+
defaultInsets.systemWindowInsetLeft,
|
|
139
|
+
0,
|
|
140
|
+
defaultInsets.systemWindowInsetRight,
|
|
141
|
+
defaultInsets.systemWindowInsetBottom
|
|
142
|
+
)
|
|
143
|
+
}
|
|
124
144
|
}
|
|
125
145
|
} else {
|
|
126
146
|
ViewCompat.setOnApplyWindowInsetsListener(decorView, null)
|
|
@@ -239,7 +259,7 @@ object ScreenWindowTraits {
|
|
|
239
259
|
screen: Screen?,
|
|
240
260
|
trait: WindowTraits
|
|
241
261
|
): Screen? {
|
|
242
|
-
screen?.
|
|
262
|
+
screen?.fragmentWrapper?.let {
|
|
243
263
|
for (sc in it.childScreenContainers) {
|
|
244
264
|
// we check only the top screen for the trait
|
|
245
265
|
val topScreen = sc.topScreen
|
|
@@ -11,7 +11,7 @@ internal class ScreensShadowNode(private var mContext: ReactContext) : LayoutSha
|
|
|
11
11
|
super.onBeforeLayout(nativeViewHierarchyOptimizer)
|
|
12
12
|
(mContext.getNativeModule(UIManagerModule::class.java))?.addUIBlock { nativeViewHierarchyManager: NativeViewHierarchyManager ->
|
|
13
13
|
val view = nativeViewHierarchyManager.resolveView(reactTag)
|
|
14
|
-
if (view is ScreenContainer
|
|
14
|
+
if (view is ScreenContainer) {
|
|
15
15
|
view.performUpdates()
|
|
16
16
|
}
|
|
17
17
|
}
|
|
@@ -32,15 +32,19 @@ class SearchBarView(reactContext: ReactContext?) : ReactViewGroup(reactContext)
|
|
|
32
32
|
|
|
33
33
|
private var mAreListenersSet: Boolean = false
|
|
34
34
|
|
|
35
|
-
private val
|
|
35
|
+
private val headerConfig: ScreenStackHeaderConfig?
|
|
36
36
|
get() {
|
|
37
37
|
val currentParent = parent
|
|
38
38
|
if (currentParent is ScreenStackHeaderSubview) {
|
|
39
|
-
return currentParent.config
|
|
39
|
+
return currentParent.config
|
|
40
40
|
}
|
|
41
|
+
|
|
41
42
|
return null
|
|
42
43
|
}
|
|
43
44
|
|
|
45
|
+
private val screenStackFragment: ScreenStackFragment?
|
|
46
|
+
get() = headerConfig?.screenFragment
|
|
47
|
+
|
|
44
48
|
fun onUpdate() {
|
|
45
49
|
setSearchViewProps()
|
|
46
50
|
}
|
|
@@ -101,23 +105,25 @@ class SearchBarView(reactContext: ReactContext?) : ReactViewGroup(reactContext)
|
|
|
101
105
|
}
|
|
102
106
|
|
|
103
107
|
private fun handleTextChange(newText: String?) {
|
|
104
|
-
sendEvent(SearchBarChangeTextEvent(id, newText))
|
|
108
|
+
sendEvent(SearchBarChangeTextEvent(surfaceId, id, newText))
|
|
105
109
|
}
|
|
106
110
|
|
|
107
111
|
private fun handleFocusChange(hasFocus: Boolean) {
|
|
108
|
-
sendEvent(if (hasFocus) SearchBarFocusEvent(id) else SearchBarBlurEvent(id))
|
|
112
|
+
sendEvent(if (hasFocus) SearchBarFocusEvent(surfaceId, id) else SearchBarBlurEvent(surfaceId, id))
|
|
109
113
|
}
|
|
110
114
|
|
|
111
115
|
private fun handleClose() {
|
|
112
|
-
sendEvent(SearchBarCloseEvent(id))
|
|
116
|
+
sendEvent(SearchBarCloseEvent(surfaceId, id))
|
|
117
|
+
setToolbarElementsVisibility(VISIBLE)
|
|
113
118
|
}
|
|
114
119
|
|
|
115
120
|
private fun handleOpen() {
|
|
116
|
-
sendEvent(SearchBarOpenEvent(id))
|
|
121
|
+
sendEvent(SearchBarOpenEvent(surfaceId, id))
|
|
122
|
+
setToolbarElementsVisibility(GONE)
|
|
117
123
|
}
|
|
118
124
|
|
|
119
125
|
private fun handleTextSubmit(newText: String?) {
|
|
120
|
-
sendEvent(SearchBarSearchButtonPressEvent(id, newText))
|
|
126
|
+
sendEvent(SearchBarSearchButtonPressEvent(surfaceId, id, newText))
|
|
121
127
|
}
|
|
122
128
|
|
|
123
129
|
private fun sendEvent(event: Event<*>) {
|
|
@@ -144,6 +150,16 @@ class SearchBarView(reactContext: ReactContext?) : ReactViewGroup(reactContext)
|
|
|
144
150
|
text?.let { screenStackFragment?.searchView?.setText(it) }
|
|
145
151
|
}
|
|
146
152
|
|
|
153
|
+
private fun setToolbarElementsVisibility(visibility: Int) {
|
|
154
|
+
for (i in 0..(headerConfig?.configSubviewsCount?.minus(1) ?: 0)) {
|
|
155
|
+
val subview = headerConfig?.getConfigSubview(i)
|
|
156
|
+
if (subview?.type != ScreenStackHeaderSubview.Type.SEARCH_BAR)
|
|
157
|
+
subview?.visibility = visibility
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
private val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
162
|
+
|
|
147
163
|
enum class SearchBarAutoCapitalize {
|
|
148
164
|
NONE, WORDS, SENTENCES, CHARACTERS
|
|
149
165
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.events
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
5
|
import com.facebook.react.uimanager.events.Event
|
|
5
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
6
|
|
|
7
|
-
class HeaderAttachedEvent(viewId: Int) : Event<ScreenAppearEvent>(viewId) {
|
|
7
|
+
class HeaderAttachedEvent(surfaceId: Int, viewId: Int) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
8
8
|
override fun getEventName(): String {
|
|
9
9
|
return EVENT_NAME
|
|
10
10
|
}
|
|
@@ -14,9 +14,7 @@ class HeaderAttachedEvent(viewId: Int) : Event<ScreenAppearEvent>(viewId) {
|
|
|
14
14
|
return 0
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
override fun
|
|
18
|
-
rctEventEmitter.receiveEvent(viewTag, eventName, Arguments.createMap())
|
|
19
|
-
}
|
|
17
|
+
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
20
18
|
|
|
21
19
|
companion object {
|
|
22
20
|
const val EVENT_NAME = "topAttached"
|
package/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.events
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
5
|
import com.facebook.react.uimanager.events.Event
|
|
5
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
6
|
|
|
7
|
-
class HeaderBackButtonClickedEvent(viewId: Int) : Event<ScreenAppearEvent>(viewId) {
|
|
7
|
+
class HeaderBackButtonClickedEvent(surfaceId: Int, viewId: Int) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
8
8
|
override fun getEventName(): String {
|
|
9
9
|
return EVENT_NAME
|
|
10
10
|
}
|
|
@@ -14,9 +14,7 @@ class HeaderBackButtonClickedEvent(viewId: Int) : Event<ScreenAppearEvent>(viewI
|
|
|
14
14
|
return 0
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
override fun
|
|
18
|
-
rctEventEmitter.receiveEvent(viewTag, eventName, Arguments.createMap())
|
|
19
|
-
}
|
|
17
|
+
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
20
18
|
|
|
21
19
|
companion object {
|
|
22
20
|
const val EVENT_NAME = "topHeaderBackButtonClickedEvent"
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.events
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
5
|
import com.facebook.react.uimanager.events.Event
|
|
5
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
6
|
|
|
7
|
-
class HeaderDetachedEvent(viewId: Int) : Event<ScreenAppearEvent>(viewId) {
|
|
7
|
+
class HeaderDetachedEvent(surfaceId: Int, viewId: Int) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
8
8
|
override fun getEventName(): String {
|
|
9
9
|
return EVENT_NAME
|
|
10
10
|
}
|
|
@@ -14,9 +14,7 @@ class HeaderDetachedEvent(viewId: Int) : Event<ScreenAppearEvent>(viewId) {
|
|
|
14
14
|
return 0
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
override fun
|
|
18
|
-
rctEventEmitter.receiveEvent(viewTag, eventName, Arguments.createMap())
|
|
19
|
-
}
|
|
17
|
+
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
20
18
|
|
|
21
19
|
companion object {
|
|
22
20
|
const val EVENT_NAME = "topDetached"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.events
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.uimanager.events.Event
|
|
5
|
+
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
|
+
|
|
7
|
+
class HeaderHeightChangeEvent(
|
|
8
|
+
viewId: Int,
|
|
9
|
+
private val mHeaderHeight: Double
|
|
10
|
+
) : Event<HeaderHeightChangeEvent>(viewId) {
|
|
11
|
+
|
|
12
|
+
override fun getEventName() = EVENT_NAME
|
|
13
|
+
|
|
14
|
+
// As the same header height could appear twice, use header height as a coalescing key.
|
|
15
|
+
override fun getCoalescingKey(): Short = mHeaderHeight.toInt().toShort()
|
|
16
|
+
|
|
17
|
+
override fun dispatch(rctEventEmitter: RCTEventEmitter) {
|
|
18
|
+
val map = Arguments.createMap()
|
|
19
|
+
map.putDouble("headerHeight", mHeaderHeight)
|
|
20
|
+
rctEventEmitter.receiveEvent(viewTag, eventName, map)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
companion object {
|
|
24
|
+
const val EVENT_NAME = "topHeaderHeightChange"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.events
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
5
|
import com.facebook.react.uimanager.events.Event
|
|
5
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
6
|
|
|
7
|
-
class ScreenAppearEvent(viewId: Int) : Event<ScreenAppearEvent>(viewId) {
|
|
7
|
+
class ScreenAppearEvent(surfaceId: Int, viewId: Int) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
8
8
|
override fun getEventName() = EVENT_NAME
|
|
9
9
|
|
|
10
10
|
// All events for a given view can be coalesced.
|
|
11
11
|
override fun getCoalescingKey(): Short = 0
|
|
12
12
|
|
|
13
|
-
override fun
|
|
14
|
-
rctEventEmitter.receiveEvent(viewTag, eventName, Arguments.createMap())
|
|
15
|
-
}
|
|
13
|
+
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
16
14
|
|
|
17
15
|
companion object {
|
|
18
16
|
const val EVENT_NAME = "topAppear"
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.events
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
5
|
import com.facebook.react.uimanager.events.Event
|
|
5
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
6
|
|
|
7
|
-
class ScreenDisappearEvent(viewId: Int) : Event<ScreenDisappearEvent>(viewId) {
|
|
7
|
+
class ScreenDisappearEvent(surfaceId: Int, viewId: Int) : Event<ScreenDisappearEvent>(surfaceId, viewId) {
|
|
8
8
|
override fun getEventName() = EVENT_NAME
|
|
9
9
|
|
|
10
10
|
// All events for a given view can be coalesced.
|
|
11
11
|
override fun getCoalescingKey(): Short = 0
|
|
12
12
|
|
|
13
|
-
override fun
|
|
14
|
-
rctEventEmitter.receiveEvent(viewTag, eventName, Arguments.createMap())
|
|
15
|
-
}
|
|
13
|
+
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
16
14
|
|
|
17
15
|
companion object {
|
|
18
16
|
const val EVENT_NAME = "topDisappear"
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.events
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
5
|
import com.facebook.react.uimanager.events.Event
|
|
5
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
6
|
|
|
7
|
-
class ScreenDismissedEvent(viewId: Int) : Event<ScreenDismissedEvent>(viewId) {
|
|
7
|
+
class ScreenDismissedEvent(surfaceId: Int, viewId: Int) : Event<ScreenDismissedEvent>(surfaceId, viewId) {
|
|
8
8
|
override fun getEventName() = EVENT_NAME
|
|
9
9
|
|
|
10
10
|
// All events for a given view can be coalesced.
|
|
11
11
|
override fun getCoalescingKey(): Short = 0
|
|
12
12
|
|
|
13
|
-
override fun
|
|
14
|
-
|
|
15
|
-
// on Android we always dismiss one screen at a time
|
|
16
|
-
args.putInt("dismissCount", 1)
|
|
17
|
-
rctEventEmitter.receiveEvent(viewTag, eventName, args)
|
|
13
|
+
override fun getEventData(): WritableMap? = Arguments.createMap().apply {
|
|
14
|
+
putInt("dismissCount", 1)
|
|
18
15
|
}
|
|
19
16
|
|
|
20
17
|
companion object {
|
package/android/src/main/java/com/swmansion/rnscreens/events/ScreenTransitionProgressEvent.kt
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.events
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
5
|
import com.facebook.react.uimanager.events.Event
|
|
5
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
6
|
|
|
7
7
|
class ScreenTransitionProgressEvent(
|
|
8
|
+
surfaceId: Int,
|
|
8
9
|
viewId: Int,
|
|
9
10
|
private val mProgress: Float,
|
|
10
11
|
private val mClosing: Boolean,
|
|
11
12
|
private val mGoingForward: Boolean,
|
|
12
13
|
private val mCoalescingKey: Short
|
|
13
|
-
) : Event<ScreenAppearEvent?>(viewId) {
|
|
14
|
+
) : Event<ScreenAppearEvent?>(surfaceId, viewId) {
|
|
14
15
|
override fun getEventName(): String {
|
|
15
16
|
return EVENT_NAME
|
|
16
17
|
}
|
|
@@ -19,12 +20,10 @@ class ScreenTransitionProgressEvent(
|
|
|
19
20
|
return mCoalescingKey
|
|
20
21
|
}
|
|
21
22
|
|
|
22
|
-
override fun
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
map.putInt("goingForward", if (mGoingForward) 1 else 0)
|
|
27
|
-
rctEventEmitter.receiveEvent(viewTag, eventName, map)
|
|
23
|
+
override fun getEventData(): WritableMap? = Arguments.createMap().apply {
|
|
24
|
+
putDouble("progress", mProgress.toDouble())
|
|
25
|
+
putInt("closing", if (mClosing) 1 else 0)
|
|
26
|
+
putInt("goingForward", if (mGoingForward) 1 else 0)
|
|
28
27
|
}
|
|
29
28
|
|
|
30
29
|
companion object {
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.events
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
5
|
import com.facebook.react.uimanager.events.Event
|
|
5
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
6
|
|
|
7
|
-
class ScreenWillAppearEvent(viewId: Int) : Event<ScreenWillAppearEvent>(viewId) {
|
|
7
|
+
class ScreenWillAppearEvent(surfaceId: Int, viewId: Int) : Event<ScreenWillAppearEvent>(surfaceId, viewId) {
|
|
8
8
|
override fun getEventName() = EVENT_NAME
|
|
9
9
|
|
|
10
10
|
// All events for a given view can be coalesced.
|
|
11
11
|
override fun getCoalescingKey(): Short = 0
|
|
12
12
|
|
|
13
|
-
override fun
|
|
14
|
-
rctEventEmitter.receiveEvent(viewTag, eventName, Arguments.createMap())
|
|
15
|
-
}
|
|
13
|
+
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
16
14
|
|
|
17
15
|
companion object {
|
|
18
16
|
const val EVENT_NAME = "topWillAppear"
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.events
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
5
|
import com.facebook.react.uimanager.events.Event
|
|
5
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
6
|
|
|
7
|
-
class ScreenWillDisappearEvent(viewId: Int) : Event<ScreenWillDisappearEvent>(viewId) {
|
|
7
|
+
class ScreenWillDisappearEvent(surfaceId: Int, viewId: Int) : Event<ScreenWillDisappearEvent>(surfaceId, viewId) {
|
|
8
8
|
override fun getEventName() = EVENT_NAME
|
|
9
9
|
|
|
10
10
|
// All events for a given view can be coalesced.
|
|
11
11
|
override fun getCoalescingKey(): Short = 0
|
|
12
12
|
|
|
13
|
-
override fun
|
|
14
|
-
rctEventEmitter.receiveEvent(viewTag, eventName, Arguments.createMap())
|
|
15
|
-
}
|
|
13
|
+
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
16
14
|
|
|
17
15
|
companion object {
|
|
18
16
|
const val EVENT_NAME = "topWillDisappear"
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.events
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
5
|
import com.facebook.react.uimanager.events.Event
|
|
5
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
6
|
|
|
7
|
-
class SearchBarBlurEvent(viewId: Int) : Event<ScreenAppearEvent>(viewId) {
|
|
7
|
+
class SearchBarBlurEvent(surfaceId: Int, viewId: Int) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
8
8
|
override fun getEventName(): String {
|
|
9
9
|
return EVENT_NAME
|
|
10
10
|
}
|
|
@@ -14,9 +14,7 @@ class SearchBarBlurEvent(viewId: Int) : Event<ScreenAppearEvent>(viewId) {
|
|
|
14
14
|
return 0
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
override fun
|
|
18
|
-
rctEventEmitter.receiveEvent(viewTag, eventName, Arguments.createMap())
|
|
19
|
-
}
|
|
17
|
+
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
20
18
|
|
|
21
19
|
companion object {
|
|
22
20
|
const val EVENT_NAME = "topBlur"
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.events
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
5
|
import com.facebook.react.uimanager.events.Event
|
|
5
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
6
|
|
|
7
7
|
class SearchBarChangeTextEvent(
|
|
8
|
+
surfaceId: Int,
|
|
8
9
|
viewId: Int,
|
|
9
10
|
private val text: String?,
|
|
10
|
-
) : Event<ScreenAppearEvent>(viewId) {
|
|
11
|
+
) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
11
12
|
override fun getEventName(): String {
|
|
12
13
|
return EVENT_NAME
|
|
13
14
|
}
|
|
@@ -17,10 +18,8 @@ class SearchBarChangeTextEvent(
|
|
|
17
18
|
return 0
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
override fun
|
|
21
|
-
|
|
22
|
-
map.putString("text", text)
|
|
23
|
-
rctEventEmitter.receiveEvent(viewTag, eventName, map)
|
|
21
|
+
override fun getEventData(): WritableMap? = Arguments.createMap().apply {
|
|
22
|
+
putString("text", text)
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
companion object {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.events
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
5
|
import com.facebook.react.uimanager.events.Event
|
|
5
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
6
|
|
|
7
|
-
class SearchBarCloseEvent(viewId: Int) : Event<ScreenAppearEvent>(viewId) {
|
|
7
|
+
class SearchBarCloseEvent(surfaceId: Int, viewId: Int) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
8
8
|
override fun getEventName(): String {
|
|
9
9
|
return EVENT_NAME
|
|
10
10
|
}
|
|
@@ -14,9 +14,7 @@ class SearchBarCloseEvent(viewId: Int) : Event<ScreenAppearEvent>(viewId) {
|
|
|
14
14
|
return 0
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
override fun
|
|
18
|
-
rctEventEmitter.receiveEvent(viewTag, eventName, Arguments.createMap())
|
|
19
|
-
}
|
|
17
|
+
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
20
18
|
|
|
21
19
|
companion object {
|
|
22
20
|
const val EVENT_NAME = "topClose"
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.events
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
5
|
import com.facebook.react.uimanager.events.Event
|
|
5
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
6
|
|
|
7
|
-
class SearchBarFocusEvent(viewId: Int) : Event<ScreenAppearEvent>(viewId) {
|
|
7
|
+
class SearchBarFocusEvent(surfaceId: Int, viewId: Int) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
8
8
|
override fun getEventName(): String {
|
|
9
9
|
return EVENT_NAME
|
|
10
10
|
}
|
|
@@ -14,9 +14,7 @@ class SearchBarFocusEvent(viewId: Int) : Event<ScreenAppearEvent>(viewId) {
|
|
|
14
14
|
return 0
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
override fun
|
|
18
|
-
rctEventEmitter.receiveEvent(viewTag, eventName, Arguments.createMap())
|
|
19
|
-
}
|
|
17
|
+
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
20
18
|
|
|
21
19
|
companion object {
|
|
22
20
|
const val EVENT_NAME = "topFocus"
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.events
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
5
|
import com.facebook.react.uimanager.events.Event
|
|
5
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
6
|
|
|
7
|
-
class SearchBarOpenEvent(viewId: Int) : Event<ScreenAppearEvent>(viewId) {
|
|
7
|
+
class SearchBarOpenEvent(surfaceId: Int, viewId: Int) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
8
8
|
override fun getEventName(): String {
|
|
9
9
|
return EVENT_NAME
|
|
10
10
|
}
|
|
@@ -14,9 +14,7 @@ class SearchBarOpenEvent(viewId: Int) : Event<ScreenAppearEvent>(viewId) {
|
|
|
14
14
|
return 0
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
override fun
|
|
18
|
-
rctEventEmitter.receiveEvent(viewTag, eventName, Arguments.createMap())
|
|
19
|
-
}
|
|
17
|
+
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
20
18
|
|
|
21
19
|
companion object {
|
|
22
20
|
const val EVENT_NAME = "topOpen"
|
package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarSearchButtonPressEvent.kt
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.events
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
5
|
import com.facebook.react.uimanager.events.Event
|
|
5
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
6
|
|
|
7
|
-
class SearchBarSearchButtonPressEvent(viewId: Int, private val text: String?) : Event<ScreenAppearEvent>(viewId) {
|
|
7
|
+
class SearchBarSearchButtonPressEvent(surfaceId: Int, viewId: Int, private val text: String?) : Event<ScreenAppearEvent>(surfaceId, viewId) {
|
|
8
8
|
override fun getEventName(): String {
|
|
9
9
|
return EVENT_NAME
|
|
10
10
|
}
|
|
@@ -14,10 +14,8 @@ class SearchBarSearchButtonPressEvent(viewId: Int, private val text: String?) :
|
|
|
14
14
|
return 0
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
override fun
|
|
18
|
-
|
|
19
|
-
map.putString("text", text)
|
|
20
|
-
rctEventEmitter.receiveEvent(viewTag, eventName, map)
|
|
17
|
+
override fun getEventData(): WritableMap? = Arguments.createMap().apply {
|
|
18
|
+
putString("text", text)
|
|
21
19
|
}
|
|
22
20
|
|
|
23
21
|
companion object {
|
package/android/src/main/java/com/swmansion/rnscreens/events/StackFinishTransitioningEvent.kt
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
package com.swmansion.rnscreens.events
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
4
5
|
import com.facebook.react.uimanager.events.Event
|
|
5
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter
|
|
6
6
|
|
|
7
|
-
class StackFinishTransitioningEvent(viewId: Int) : Event<StackFinishTransitioningEvent>(viewId) {
|
|
7
|
+
class StackFinishTransitioningEvent(surfaceId: Int, viewId: Int) : Event<StackFinishTransitioningEvent>(surfaceId, viewId) {
|
|
8
8
|
override fun getEventName() = EVENT_NAME
|
|
9
9
|
|
|
10
10
|
// All events for a given view can be coalesced.
|
|
11
11
|
override fun getCoalescingKey(): Short = 0
|
|
12
12
|
|
|
13
|
-
override fun
|
|
14
|
-
rctEventEmitter.receiveEvent(viewTag, eventName, Arguments.createMap())
|
|
15
|
-
}
|
|
13
|
+
override fun getEventData(): WritableMap? = Arguments.createMap()
|
|
16
14
|
|
|
17
15
|
companion object {
|
|
18
16
|
const val EVENT_NAME = "topFinishTransitioning"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package com.swmansion.rnscreens.utils
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.content.pm.PackageManager
|
|
5
|
+
|
|
6
|
+
object DeviceUtils {
|
|
7
|
+
|
|
8
|
+
fun isPlatformAndroidTV(context: Context?): Boolean {
|
|
9
|
+
return context?.packageManager?.hasSystemFeature(PackageManager.FEATURE_LEANBACK) == true
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
}
|
|
@@ -127,9 +127,9 @@
|
|
|
127
127
|
[window addSubview:_container];
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
- (void)
|
|
130
|
+
- (void)didMoveToSuperview
|
|
131
131
|
{
|
|
132
|
-
if (self.
|
|
132
|
+
if (self.superview == nil) {
|
|
133
133
|
if (_container != nil) {
|
|
134
134
|
[_container removeFromSuperview];
|
|
135
135
|
[_touchHandler detachFromView:_container];
|
package/ios/RNSScreen.h
CHANGED
|
@@ -35,6 +35,8 @@ namespace react = facebook::react;
|
|
|
35
35
|
|
|
36
36
|
- (instancetype)initWithView:(UIView *)view;
|
|
37
37
|
- (UIViewController *)findChildVCForConfigAndTrait:(RNSWindowTrait)trait includingModals:(BOOL)includingModals;
|
|
38
|
+
- (BOOL)hasNestedStack;
|
|
39
|
+
- (void)calculateAndNotifyHeaderHeightChangeIsModal:(BOOL)isModal;
|
|
38
40
|
- (void)notifyFinishTransitioning;
|
|
39
41
|
- (RNSScreenView *)screenView;
|
|
40
42
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
@@ -100,6 +102,7 @@ namespace react = facebook::react;
|
|
|
100
102
|
@property (nonatomic, copy) RCTDirectEventBlock onAppear;
|
|
101
103
|
@property (nonatomic, copy) RCTDirectEventBlock onDisappear;
|
|
102
104
|
@property (nonatomic, copy) RCTDirectEventBlock onDismissed;
|
|
105
|
+
@property (nonatomic, copy) RCTDirectEventBlock onHeaderHeightChange;
|
|
103
106
|
@property (nonatomic, copy) RCTDirectEventBlock onWillAppear;
|
|
104
107
|
@property (nonatomic, copy) RCTDirectEventBlock onWillDisappear;
|
|
105
108
|
@property (nonatomic, copy) RCTDirectEventBlock onNativeDismissCancelled;
|
|
@@ -108,6 +111,7 @@ namespace react = facebook::react;
|
|
|
108
111
|
#endif // RCT_NEW_ARCH_ENABLED
|
|
109
112
|
|
|
110
113
|
- (void)notifyFinishTransitioning;
|
|
114
|
+
- (void)notifyHeaderHeightChange:(double)height;
|
|
111
115
|
|
|
112
116
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
113
117
|
- (void)notifyWillAppear;
|
|
@@ -122,6 +126,7 @@ namespace react = facebook::react;
|
|
|
122
126
|
- (void)notifyTransitionProgress:(double)progress closing:(BOOL)closing goingForward:(BOOL)goingForward;
|
|
123
127
|
- (void)notifyDismissCancelledWithDismissCount:(int)dismissCount;
|
|
124
128
|
- (BOOL)isModal;
|
|
129
|
+
- (BOOL)isPresentedAsNativeModal;
|
|
125
130
|
|
|
126
131
|
/// Looks for header configuration in instance's `reactSubviews` and returns it. If not present returns `nil`.
|
|
127
132
|
- (RNSScreenStackHeaderConfig *_Nullable)findHeaderConfig;
|