react-native-navigation 7.22.1 → 7.22.2

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.
@@ -5,7 +5,6 @@ import com.facebook.react.ReactPackage
5
5
  import com.facebook.react.bridge.NativeModule
6
6
  import com.facebook.react.bridge.ReactApplicationContext
7
7
  import com.facebook.react.uimanager.ViewManager
8
- import com.reactnativenavigation.NavigationActivity
9
8
  import com.reactnativenavigation.options.LayoutFactory
10
9
  import com.reactnativenavigation.react.modal.ModalViewManager
11
10
 
@@ -22,6 +21,6 @@ class NavigationPackage(private val reactNativeHost: ReactNativeHost) : ReactPac
22
21
 
23
22
  override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
24
23
 
25
- return listOf(ModalViewManager((reactContext.currentActivity as NavigationActivity).navigator))
24
+ return listOf(ModalViewManager(reactContext))
26
25
  }
27
26
  }
@@ -4,6 +4,7 @@ import android.content.Context
4
4
  import android.graphics.Point
5
5
  import android.view.WindowManager
6
6
  import com.facebook.infer.annotation.Assertions
7
+ import com.facebook.react.bridge.ReactContext
7
8
  import com.facebook.react.bridge.ReadableMap
8
9
  import com.facebook.react.common.MapBuilder
9
10
  import com.facebook.react.module.annotations.ReactModule
@@ -12,6 +13,7 @@ import com.facebook.react.uimanager.ReactShadowNodeImpl
12
13
  import com.facebook.react.uimanager.ThemedReactContext
13
14
  import com.facebook.react.uimanager.ViewGroupManager
14
15
  import com.facebook.react.uimanager.annotations.ReactProp
16
+ import com.reactnativenavigation.NavigationActivity
15
17
  import com.reactnativenavigation.options.ModalPresentationStyle
16
18
  import com.reactnativenavigation.options.Options
17
19
  import com.reactnativenavigation.options.params.Bool
@@ -25,7 +27,15 @@ import com.reactnativenavigation.viewcontrollers.navigator.Navigator
25
27
  private const val MODAL_MANAGER_NAME = "RNNModalViewManager"
26
28
 
27
29
  @ReactModule(name = MODAL_MANAGER_NAME)
28
- class ModalViewManager(private val navigator: Navigator) : ViewGroupManager<ModalHostLayout>() {
30
+ class ModalViewManager(val reactContext: ReactContext) : ViewGroupManager<ModalHostLayout>() {
31
+
32
+ private val navigator: Navigator?
33
+ get() {
34
+ val navigationActivity = reactContext.currentActivity as? NavigationActivity
35
+ return navigationActivity?.let {
36
+ if (it.isFinishing || it.isDestroyed) null else it.navigator
37
+ }
38
+ }
29
39
  private val jsonParser = JSONParser()
30
40
  override fun getName(): String = MODAL_MANAGER_NAME
31
41
 
@@ -41,15 +51,18 @@ class ModalViewManager(private val navigator: Navigator) : ViewGroupManager<Moda
41
51
  return ModalHostShadowNode::class.java
42
52
  }
43
53
 
54
+
44
55
  override fun onDropViewInstance(modal: ModalHostLayout) {
45
56
  super.onDropViewInstance(modal)
46
- navigator.dismissModal(modal.viewController.id, CommandListenerAdapter())
47
- modal.onDropInstance()
57
+ navigator?.let {
58
+ it.dismissModal(modal.viewController.id, CommandListenerAdapter())
59
+ modal.onDropInstance()
60
+ }
48
61
  }
49
62
 
50
63
  override fun onAfterUpdateTransaction(modal: ModalHostLayout) {
51
64
  super.onAfterUpdateTransaction(modal)
52
- navigator.showModal(modal.viewController, CommandListenerAdapter(object : CommandListener {
65
+ navigator?.showModal(modal.viewController, CommandListenerAdapter(object : CommandListener {
53
66
  override fun onSuccess(childId: String?) {
54
67
  modal.viewController.sendShowEvent()
55
68
  }
@@ -70,23 +83,26 @@ class ModalViewManager(private val navigator: Navigator) : ViewGroupManager<Moda
70
83
  @ReactProp(name = "animation")
71
84
  fun setAnimation(modal: ModalHostLayout, animation: ReadableMap) {
72
85
  modal.viewController.mergeOptions(Options().apply {
73
- val animationJson = jsonParser.parse(animation)
86
+ val animationJson = jsonParser.parse(animation)
74
87
  val showModal = parseTransitionAnimationOptions(animationJson.optJSONObject("showModal"))
75
88
  val dismissModal = parseTransitionAnimationOptions(animationJson.optJSONObject("dismissModal"))
76
89
  this.animations.showModal = showModal
77
90
  this.animations.dismissModal = dismissModal
78
91
  })
79
92
  }
93
+
80
94
  @ReactProp(name = "blurOnUnmount")
81
95
  fun setBlurOnUnmount(modal: ModalHostLayout, blurOnUnmount: Boolean) {
82
- modal.viewController.mergeOptions(Options().apply {
83
- this.modal.blurOnUnmount = Bool(blurOnUnmount)
84
- })
96
+ modal.viewController.mergeOptions(Options().apply {
97
+ this.modal.blurOnUnmount = Bool(blurOnUnmount)
98
+ })
85
99
  }
100
+
86
101
  @ReactProp(name = "transparent")
87
102
  fun setTransparent(modal: ModalHostLayout, transparent: Boolean) {
88
103
  modal.viewController.mergeOptions(Options().apply {
89
- this.modal.presentationStyle = if(transparent) ModalPresentationStyle.OverCurrentContext else ModalPresentationStyle.None
104
+ this.modal.presentationStyle =
105
+ if (transparent) ModalPresentationStyle.OverCurrentContext else ModalPresentationStyle.None
90
106
  })
91
107
  }
92
108
  }
@@ -2,30 +2,9 @@ package com.reactnativenavigation.views.stack.topbar.titlebar
2
2
 
3
3
  import android.annotation.SuppressLint
4
4
  import android.content.Context
5
- import androidx.core.view.children
6
5
  import com.facebook.react.ReactInstanceManager
7
6
  import com.reactnativenavigation.react.ReactView
8
7
 
9
8
  @SuppressLint("ViewConstructor")
10
9
  class TitleBarReactView(context: Context?, reactInstanceManager: ReactInstanceManager?, componentId: String?,
11
- componentName: String?) : ReactView(context, reactInstanceManager, componentId, componentName) {
12
- override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
13
- super.onMeasure(interceptReactRootViewMeasureSpec(widthMeasureSpec), heightMeasureSpec)
14
- }
15
-
16
- private fun interceptReactRootViewMeasureSpec(widthMeasureSpec: Int): Int {
17
- // This is a HACK.
18
- // ReactRootView has problematic behavior when setting width to WRAP_CONTENT,
19
- // It's causing infinite measurements, that hung up the UI.
20
- // Intercepting largest child by width, and use its width as (parent) ReactRootView width fixed that.
21
- // See for more details https://github.com/wix/react-native-navigation/pull/7096
22
- var measuredWidth = 0;
23
- this.children.forEach {
24
- if (it.measuredWidth > measuredWidth) {
25
- measuredWidth = it.measuredWidth
26
- }
27
- }
28
- return if (measuredWidth > 0) MeasureSpec.makeMeasureSpec(measuredWidth, MeasureSpec.EXACTLY) else
29
- widthMeasureSpec
30
- }
31
- }
10
+ componentName: String?) : ReactView(context, reactInstanceManager, componentId, componentName)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-navigation",
3
- "version": "7.22.1",
3
+ "version": "7.22.2",
4
4
  "description": "React Native Navigation - truly native navigation for iOS and Android",
5
5
  "license": "MIT",
6
6
  "nativePackage": true,