react-native-screens 4.0.0 → 4.2.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.
Files changed (48) hide show
  1. package/android/src/main/cpp/jni-adapter.cpp +3 -0
  2. package/android/src/main/java/com/swmansion/rnscreens/InsetsObserverProxy.kt +5 -6
  3. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +8 -6
  4. package/android/src/main/java/com/swmansion/rnscreens/ScreenFooter.kt +16 -4
  5. package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +0 -1
  6. package/android/src/main/java/com/swmansion/rnscreens/ext/ViewExt.kt +0 -24
  7. package/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h +1 -1
  8. package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +1 -1
  9. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigComponentDescriptor.h +5 -0
  10. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.cpp +14 -0
  11. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.h +8 -0
  12. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.cpp +12 -1
  13. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.h +9 -2
  14. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewComponentDescriptor.h +1 -1
  15. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.cpp +1 -1
  16. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.h +0 -1
  17. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.cpp +1 -1
  18. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.h +1 -2
  19. package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +1 -1
  20. package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +2 -2
  21. package/ios/RNSConvert.h +0 -2
  22. package/ios/RNSConvert.mm +82 -68
  23. package/ios/RNSFullWindowOverlay.mm +4 -0
  24. package/ios/RNSScreen.mm +5 -0
  25. package/ios/RNSScreenContainer.mm +5 -0
  26. package/ios/RNSScreenFooter.mm +24 -25
  27. package/ios/RNSScreenStack.mm +9 -11
  28. package/ios/RNSScreenStackHeaderConfig.h +9 -6
  29. package/ios/RNSScreenStackHeaderConfig.mm +70 -29
  30. package/ios/RNSScreenStackHeaderSubview.h +0 -7
  31. package/ios/RNSScreenStackHeaderSubview.mm +6 -24
  32. package/ios/events/RNSHeaderHeightChangeEvent.h +0 -1
  33. package/ios/events/RNSScreenViewEvent.h +0 -1
  34. package/ios/utils/RNSDefines.h +7 -0
  35. package/lib/commonjs/components/ScreenFooter.js +9 -0
  36. package/lib/commonjs/components/ScreenFooter.js.map +1 -1
  37. package/lib/commonjs/components/ScreenStackItem.js +4 -1
  38. package/lib/commonjs/components/ScreenStackItem.js.map +1 -1
  39. package/lib/module/components/ScreenFooter.js +8 -0
  40. package/lib/module/components/ScreenFooter.js.map +1 -1
  41. package/lib/module/components/ScreenStackItem.js +4 -1
  42. package/lib/module/components/ScreenStackItem.js.map +1 -1
  43. package/lib/typescript/components/ScreenFooter.d.ts +4 -0
  44. package/lib/typescript/components/ScreenFooter.d.ts.map +1 -1
  45. package/lib/typescript/components/ScreenStackItem.d.ts.map +1 -1
  46. package/package.json +1 -1
  47. package/src/components/ScreenFooter.tsx +8 -0
  48. package/src/components/ScreenStackItem.tsx +7 -0
@@ -18,6 +18,9 @@ Java_com_swmansion_rnscreens_ScreensModule_nativeInstall(
18
18
  return;
19
19
  }
20
20
  jsi::Runtime &rt = *runtime;
21
+ if (globalThis) {
22
+ env->DeleteGlobalRef(globalThis);
23
+ }
21
24
  globalThis = env->NewGlobalRef(thiz);
22
25
  JavaVM *jvm;
23
26
  env->GetJavaVM(&jvm);
@@ -23,10 +23,7 @@ object InsetsObserverProxy : OnApplyWindowInsetsListener {
23
23
  ): WindowInsetsCompat {
24
24
  var rollingInsets =
25
25
  if (shouldForwardInsetsToView) {
26
- WindowInsetsCompat.toWindowInsetsCompat(
27
- v.onApplyWindowInsets(insets.toWindowInsets()),
28
- v,
29
- )
26
+ ViewCompat.onApplyWindowInsets(v, insets)
30
27
  } else {
31
28
  insets
32
29
  }
@@ -57,8 +54,10 @@ object InsetsObserverProxy : OnApplyWindowInsetsListener {
57
54
  }
58
55
  }
59
56
 
60
- fun unregisterOnView(view: View) {
61
- ViewCompat.setOnApplyWindowInsetsListener(view, null)
57
+ fun unregister() {
58
+ getObservedView()?.takeIf { hasBeenRegistered }?.let {
59
+ ViewCompat.setOnApplyWindowInsetsListener(it, null)
60
+ }
62
61
  }
63
62
 
64
63
  private fun getObservedView(): View? = eventSourceView.get()
@@ -20,13 +20,14 @@ import com.facebook.react.uimanager.PixelUtil
20
20
  import com.facebook.react.uimanager.UIManagerHelper
21
21
  import com.facebook.react.uimanager.UIManagerModule
22
22
  import com.facebook.react.uimanager.events.EventDispatcher
23
+ import com.facebook.react.views.scroll.ReactHorizontalScrollView
24
+ import com.facebook.react.views.scroll.ReactScrollView
23
25
  import com.google.android.material.bottomsheet.BottomSheetBehavior
24
26
  import com.google.android.material.shape.CornerFamily
25
27
  import com.google.android.material.shape.MaterialShapeDrawable
26
28
  import com.google.android.material.shape.ShapeAppearanceModel
27
29
  import com.swmansion.rnscreens.events.HeaderHeightChangeEvent
28
30
  import com.swmansion.rnscreens.events.SheetDetentChangedEvent
29
- import com.swmansion.rnscreens.ext.isInsideScrollViewWithRemoveClippedSubviews
30
31
  import java.lang.ref.WeakReference
31
32
 
32
33
  @SuppressLint("ViewConstructor") // Only we construct this view, it is never inflated.
@@ -399,11 +400,12 @@ class Screen(
399
400
  startTransitionRecursive(child.toolbar)
400
401
  }
401
402
  if (child is ViewGroup) {
402
- // The children are miscounted when there's a FlatList with
403
- // removeClippedSubviews set to true (default).
404
- // We add a simple view for each item in the list to make it work as expected.
405
- // See https://github.com/software-mansion/react-native-screens/pull/2383
406
- if (child.isInsideScrollViewWithRemoveClippedSubviews()) {
403
+ // The children are miscounted when there's removeClippedSubviews prop
404
+ // set to true (which is the default for FlatLists).
405
+ // Unless the child is a ScrollView it's safe to assume that it's true
406
+ // and add a simple view for each possibly clipped item to make it work as expected.
407
+ // See https://github.com/software-mansion/react-native-screens/pull/2495
408
+ if (child !is ReactScrollView && child !is ReactHorizontalScrollView) {
407
409
  for (j in 0 until child.childCount) {
408
410
  child.addView(View(context))
409
411
  }
@@ -35,6 +35,7 @@ class ScreenFooter(
35
35
  private val sheetBehavior
36
36
  get() = requireScreenParent().sheetBehavior
37
37
 
38
+ private val hasReceivedInitialLayoutFromParent get() = lastContainerHeight > 0
38
39
 
39
40
  // Due to Android restrictions on layout flow, particularly
40
41
  // the fact that onMeasure must set `measuredHeight` & `measuredWidth` React calls `measure` on every
@@ -92,9 +93,10 @@ class ScreenFooter(
92
93
  }
93
94
 
94
95
  init {
95
- val rootView = checkNotNull(reactContext.currentActivity) {
96
- "[RNScreens] Context detached from activity while creating ScreenFooter"
97
- }.window.decorView
96
+ val rootView =
97
+ checkNotNull(reactContext.currentActivity) {
98
+ "[RNScreens] Context detached from activity while creating ScreenFooter"
99
+ }.window.decorView
98
100
 
99
101
  // Note that we do override insets animation on given view. I can see it interfering e.g.
100
102
  // with reanimated keyboard or even other places in our code. Need to test this.
@@ -115,6 +117,9 @@ class ScreenFooter(
115
117
  bottom: Int,
116
118
  ) {
117
119
  super.onLayout(changed, left, top, right, bottom)
120
+ if (!hasReceivedInitialLayoutFromParent) {
121
+ return
122
+ }
118
123
  layoutFooterOnYAxis(
119
124
  lastContainerHeight,
120
125
  bottom - top,
@@ -219,11 +224,18 @@ class ScreenFooter(
219
224
  *
220
225
  * This method should not be used for sheet in stable state.
221
226
  *
227
+ * Currently the implementation assumes that the Screen's (sheet's) container starts at y: 0
228
+ * in global coordinates. Then we can use simply sheet's top. If that is for some reason
229
+ * unavailable, then we fallback to interpolation basing on values provided by sheet behaviour.
230
+ *
231
+ * We don't want to primarily rely on interpolation, because due to division rounding errors the footer
232
+ * will "flicker" (jump up / down a single pixel).
233
+ *
222
234
  * @param slideOffset sheet offset as reported by [BottomSheetCallback.onSlide]
223
235
  * @return position of sheet's top **relative to container**
224
236
  */
225
237
  private fun sheetTopWhileDragging(slideOffset: Float): Int =
226
- MathUtils
238
+ screenParent?.top ?: MathUtils
227
239
  .lerp(
228
240
  sheetTopInStableState(STATE_COLLAPSED).toFloat(),
229
241
  sheetTopInStableState(
@@ -163,7 +163,6 @@ object ScreenWindowTraits {
163
163
  InsetsObserverProxy.registerOnView(decorView)
164
164
  InsetsObserverProxy.addOnApplyWindowInsetsListener(windowInsetsListener)
165
165
  } else {
166
- InsetsObserverProxy.unregisterOnView(decorView)
167
166
  InsetsObserverProxy.removeOnApplyWindowInsetsListener(windowInsetsListener)
168
167
  }
169
168
  ViewCompat.requestApplyInsets(decorView)
@@ -3,9 +3,6 @@ package com.swmansion.rnscreens.ext
3
3
  import android.graphics.drawable.ColorDrawable
4
4
  import android.view.View
5
5
  import android.view.ViewGroup
6
- import com.facebook.react.views.scroll.ReactHorizontalScrollView
7
- import com.facebook.react.views.scroll.ReactScrollView
8
- import com.swmansion.rnscreens.ScreenStack
9
6
 
10
7
  internal fun View.parentAsView() = this.parent as? View
11
8
 
@@ -33,24 +30,3 @@ internal fun View.maybeBgColor(): Int? {
33
30
  }
34
31
  return null
35
32
  }
36
-
37
- internal fun View.isInsideScrollViewWithRemoveClippedSubviews(): Boolean {
38
- if (this is ReactHorizontalScrollView || this is ReactScrollView) {
39
- return false
40
- }
41
- var parentView = this.parent
42
- while (parentView is ViewGroup && parentView !is ScreenStack) {
43
- when (parentView) {
44
- is ReactHorizontalScrollView -> {
45
- return parentView.removeClippedSubviews
46
- }
47
- is ReactScrollView -> {
48
- return parentView.removeClippedSubviews
49
- }
50
- else -> {
51
- parentView = parentView.parent
52
- }
53
- }
54
- }
55
- return false
56
- }
@@ -2,7 +2,7 @@
2
2
 
3
3
  #ifdef ANDROID
4
4
  #include <fbjni/fbjni.h>
5
- #endif
5
+ #endif // ANDROID
6
6
  #include <react/debug/react_native_assert.h>
7
7
  #include <react/renderer/components/rnscreens/Props.h>
8
8
  #include <react/renderer/components/rnscreens/utils/RectUtil.h>
@@ -26,10 +26,10 @@ findHeaderConfigChild(const YogaLayoutableShadowNode &screenShadowNode) {
26
26
  return {};
27
27
  }
28
28
 
29
+ #ifdef ANDROID
29
30
  static constexpr const char *kScreenDummyLayoutHelperClass =
30
31
  "com/swmansion/rnscreens/utils/ScreenDummyLayoutHelper";
31
32
 
32
- #ifdef ANDROID
33
33
  std::optional<float> findHeaderHeight(
34
34
  const int fontSize,
35
35
  const bool isTitleEmpty) {
@@ -38,6 +38,11 @@ class RNSScreenStackHeaderConfigComponentDescriptor final
38
38
  {stateData.getPaddingStart(), 0, stateData.getPaddingEnd(), 0});
39
39
 
40
40
  ConcreteComponentDescriptor::adopt(shadowNode);
41
+ #if !defined(ANDROID) && !defined(NDEBUG)
42
+ std::weak_ptr<void> imageLoader =
43
+ contextContainer_->at<std::shared_ptr<void>>("RCTImageLoader");
44
+ configShadowNode.setImageLoader(imageLoader);
45
+ #endif // !ANDROID && !NDEBUG
41
46
  }
42
47
  };
43
48
 
@@ -5,4 +5,18 @@ namespace facebook::react {
5
5
  extern const char RNSScreenStackHeaderConfigComponentName[] =
6
6
  "RNSScreenStackHeaderConfig";
7
7
 
8
+ #if !defined(ANDROID) && !defined(NDEBUG)
9
+ void RNSScreenStackHeaderConfigShadowNode::setImageLoader(
10
+ std::weak_ptr<void> imageLoader) {
11
+ getStateDataMutable().setImageLoader(imageLoader);
8
12
  }
13
+ RNSScreenStackHeaderConfigShadowNode::StateData &
14
+ RNSScreenStackHeaderConfigShadowNode::getStateDataMutable() {
15
+ // We assume that this method is called to mutate the data, so we ensure
16
+ // we're unsealed.
17
+ ensureUnsealed();
18
+ return const_cast<RNSScreenStackHeaderConfigShadowNode::StateData &>(
19
+ getStateData());
20
+ }
21
+ #endif // !ANDROID && !NDEBUG
22
+ } // namespace facebook::react
@@ -27,6 +27,14 @@ class JSI_EXPORT RNSScreenStackHeaderConfigShadowNode final
27
27
  #pragma mark - ShadowNode overrides
28
28
 
29
29
  #pragma mark - Custom interface
30
+ #if !defined(ANDROID) && !defined(NDEBUG)
31
+ void setImageLoader(std::weak_ptr<void> imageLoader);
32
+ #endif // !ANDROID && !NDEBUG
33
+
34
+ private:
35
+ #if !defined(ANDROID) && !defined(NDEBUG)
36
+ StateData &getStateDataMutable();
37
+ #endif // !ANDROID && !NDEBUG
30
38
  };
31
39
 
32
40
  } // namespace facebook::react
@@ -8,8 +8,19 @@ folly::dynamic RNSScreenStackHeaderConfigState::getDynamic() const {
8
8
  return folly::dynamic::object("paddingStart", paddingStart_)(
9
9
  "paddingEnd_", paddingEnd_);
10
10
  }
11
+ #else // ANDROID
12
+ #ifndef NDEBUG
13
+ void RNSScreenStackHeaderConfigState::setImageLoader(
14
+ std::weak_ptr<void> imageLoader) {
15
+ imageLoader_ = imageLoader;
16
+ }
11
17
 
12
- #endif
18
+ std::weak_ptr<void> RNSScreenStackHeaderConfigState::getImageLoader()
19
+ const noexcept {
20
+ return imageLoader_;
21
+ }
22
+ #endif // !NDEBUG
23
+ #endif // ANDROID
13
24
 
14
25
  Float RNSScreenStackHeaderConfigState::getPaddingStart() const noexcept {
15
26
  return paddingStart_;
@@ -33,8 +33,12 @@ class JSI_EXPORT RNSScreenStackHeaderConfigState final {
33
33
  MapBuffer getMapBuffer() const {
34
34
  return MapBufferBuilder::EMPTY();
35
35
  };
36
-
37
- #endif
36
+ #else // ANDROID
37
+ #ifndef NDEBUG
38
+ void setImageLoader(std::weak_ptr<void> imageLoader);
39
+ std::weak_ptr<void> getImageLoader() const noexcept;
40
+ #endif // !NDEBUG
41
+ #endif // ANDROID
38
42
 
39
43
  #pragma mark - Getters
40
44
 
@@ -45,6 +49,9 @@ class JSI_EXPORT RNSScreenStackHeaderConfigState final {
45
49
  private:
46
50
  Float paddingStart_{0.f};
47
51
  Float paddingEnd_{0.f};
52
+ #if !defined(ANDROID) && !defined(NDEBUG)
53
+ std::weak_ptr<void> imageLoader_;
54
+ #endif // !ANDROID && !NDEBUG
48
55
  };
49
56
 
50
57
  } // namespace facebook::react
@@ -2,7 +2,7 @@
2
2
 
3
3
  #ifdef ANDROID
4
4
  #include <fbjni/fbjni.h>
5
- #endif
5
+ #endif // ANDROID
6
6
  #include <react/debug/react_native_assert.h>
7
7
  #include <react/renderer/components/rnscreens/Props.h>
8
8
  #include <react/renderer/components/rnscreens/utils/RectUtil.h>
@@ -5,4 +5,4 @@ namespace facebook::react {
5
5
  extern const char RNSScreenStackHeaderSubviewComponentName[] =
6
6
  "RNSScreenStackHeaderSubview";
7
7
 
8
- }
8
+ } // namespace facebook::react
@@ -23,7 +23,6 @@ class JSI_EXPORT RNSScreenStackHeaderSubviewShadowNode final
23
23
  public:
24
24
  using ConcreteViewShadowNode::ConcreteViewShadowNode;
25
25
  using StateData = ConcreteViewShadowNode::ConcreteStateData;
26
-
27
26
  #pragma mark - ShadowNode overrides
28
27
 
29
28
  #pragma mark - Custom interface
@@ -9,7 +9,7 @@ using namespace rnscreens;
9
9
  folly::dynamic RNSScreenStackHeaderSubviewState::getDynamic() const {
10
10
  return folly::dynamic::object();
11
11
  }
12
- #endif
12
+ #endif // ANDROID
13
13
 
14
14
  } // namespace react
15
15
  } // namespace facebook
@@ -32,8 +32,7 @@ class JSI_EXPORT RNSScreenStackHeaderSubviewState final {
32
32
  MapBuffer getMapBuffer() const {
33
33
  return MapBufferBuilder::EMPTY();
34
34
  };
35
- #endif
36
-
35
+ #endif // ANDROID
37
36
  #pragma mark - Getters
38
37
  };
39
38
 
@@ -29,7 +29,7 @@ const FrameCorrectionModes &RNSScreenState::getHeaderCorrectionModes()
29
29
  return headerCorrectionModes_;
30
30
  }
31
31
 
32
- #endif
32
+ #endif // ANDROID
33
33
 
34
34
  } // namespace react
35
35
  } // namespace facebook
@@ -7,7 +7,7 @@
7
7
  #include <folly/dynamic.h>
8
8
  #include <react/renderer/mapbuffer/MapBuffer.h>
9
9
  #include <react/renderer/mapbuffer/MapBufferBuilder.h>
10
- #endif
10
+ #endif // ANDROID
11
11
 
12
12
  #include "FrameCorrectionModes.h"
13
13
 
@@ -53,7 +53,7 @@ class JSI_EXPORT RNSScreenState final {
53
53
 
54
54
  const FrameCorrectionModes &getHeaderCorrectionModes() const noexcept;
55
55
 
56
- #endif
56
+ #endif // ANDROID
57
57
 
58
58
  private:
59
59
  #ifdef ANDROID
package/ios/RNSConvert.h CHANGED
@@ -43,8 +43,6 @@ namespace react = facebook::react;
43
43
 
44
44
  + (RNSSearchBarPlacement)RNSScreenSearchBarPlacementFromCppEquivalent:(react::RNSSearchBarPlacement)placement;
45
45
 
46
- + (NSMutableArray<NSNumber *> *)NSNumberMutableArrayFromFloatVector:(const std::vector<CGFloat> &)vector;
47
-
48
46
  + (NSMutableArray<NSNumber *> *)arrayFromVector:(const std::vector<CGFloat> &)vector;
49
47
 
50
48
  + (RNSBlurEffectStyle)RNSBlurEffectStyleFromCppEquivalent:(react::RNSScreenStackHeaderConfigBlurEffect)blurEffect;
package/ios/RNSConvert.mm CHANGED
@@ -11,9 +11,11 @@
11
11
  (react::RNSScreenStackHeaderConfigDirection)direction
12
12
  {
13
13
  switch (direction) {
14
- case react::RNSScreenStackHeaderConfigDirection::Rtl:
14
+ using enum react::RNSScreenStackHeaderConfigDirection;
15
+
16
+ case Rtl:
15
17
  return UISemanticContentAttributeForceRightToLeft;
16
- case react::RNSScreenStackHeaderConfigDirection::Ltr:
18
+ case Ltr:
17
19
  return UISemanticContentAttributeForceLeftToRight;
18
20
  }
19
21
  }
@@ -22,11 +24,13 @@
22
24
  (react::RNSScreenStackHeaderConfigBackButtonDisplayMode)backButtonDisplayMode
23
25
  {
24
26
  switch (backButtonDisplayMode) {
25
- case react::RNSScreenStackHeaderConfigBackButtonDisplayMode::Default:
27
+ using enum react::RNSScreenStackHeaderConfigBackButtonDisplayMode;
28
+
29
+ case Default:
26
30
  return UINavigationItemBackButtonDisplayModeDefault;
27
- case react::RNSScreenStackHeaderConfigBackButtonDisplayMode::Generic:
31
+ case Generic:
28
32
  return UINavigationItemBackButtonDisplayModeGeneric;
29
- case react::RNSScreenStackHeaderConfigBackButtonDisplayMode::Minimal:
33
+ case Minimal:
30
34
  return UINavigationItemBackButtonDisplayModeMinimal;
31
35
  }
32
36
  }
@@ -35,19 +39,21 @@
35
39
  (react::RNSScreenStackPresentation)stackPresentation
36
40
  {
37
41
  switch (stackPresentation) {
38
- case react::RNSScreenStackPresentation::Push:
42
+ using enum react::RNSScreenStackPresentation;
43
+
44
+ case Push:
39
45
  return RNSScreenStackPresentationPush;
40
- case react::RNSScreenStackPresentation::Modal:
46
+ case Modal:
41
47
  return RNSScreenStackPresentationModal;
42
- case react::RNSScreenStackPresentation::FullScreenModal:
48
+ case FullScreenModal:
43
49
  return RNSScreenStackPresentationFullScreenModal;
44
- case react::RNSScreenStackPresentation::FormSheet:
50
+ case FormSheet:
45
51
  return RNSScreenStackPresentationFormSheet;
46
- case react::RNSScreenStackPresentation::ContainedModal:
52
+ case ContainedModal:
47
53
  return RNSScreenStackPresentationContainedModal;
48
- case react::RNSScreenStackPresentation::TransparentModal:
54
+ case TransparentModal:
49
55
  return RNSScreenStackPresentationTransparentModal;
50
- case react::RNSScreenStackPresentation::ContainedTransparentModal:
56
+ case ContainedTransparentModal:
51
57
  return RNSScreenStackPresentationContainedTransparentModal;
52
58
  }
53
59
  }
@@ -55,26 +61,27 @@
55
61
  + (RNSScreenStackAnimation)RNSScreenStackAnimationFromCppEquivalent:(react::RNSScreenStackAnimation)stackAnimation
56
62
  {
57
63
  switch (stackAnimation) {
58
- // these four are intentionally grouped
59
- case react::RNSScreenStackAnimation::Slide_from_right:
60
- case react::RNSScreenStackAnimation::Ios_from_right:
61
- case react::RNSScreenStackAnimation::Default:
64
+ using enum react::RNSScreenStackAnimation;
65
+ // these three are intentionally grouped
66
+ case Slide_from_right:
67
+ case Ios_from_right:
68
+ case Default:
62
69
  return RNSScreenStackAnimationDefault;
63
70
  // these two are intentionally grouped
64
- case react::RNSScreenStackAnimation::Slide_from_left:
65
- case react::RNSScreenStackAnimation::Ios_from_left:
71
+ case Slide_from_left:
72
+ case Ios_from_left:
66
73
  return RNSScreenStackAnimationSlideFromLeft;
67
- case react::RNSScreenStackAnimation::Flip:
74
+ case Flip:
68
75
  return RNSScreenStackAnimationFlip;
69
- case react::RNSScreenStackAnimation::Simple_push:
76
+ case Simple_push:
70
77
  return RNSScreenStackAnimationSimplePush;
71
- case react::RNSScreenStackAnimation::None:
78
+ case None:
72
79
  return RNSScreenStackAnimationNone;
73
- case react::RNSScreenStackAnimation::Fade:
80
+ case Fade:
74
81
  return RNSScreenStackAnimationFade;
75
- case react::RNSScreenStackAnimation::Slide_from_bottom:
82
+ case Slide_from_bottom:
76
83
  return RNSScreenStackAnimationSlideFromBottom;
77
- case react::RNSScreenStackAnimation::Fade_from_bottom:
84
+ case Fade_from_bottom:
78
85
  return RNSScreenStackAnimationFadeFromBottom;
79
86
  }
80
87
  }
@@ -83,17 +90,19 @@
83
90
  (react::RNSScreenStackHeaderSubviewType)subviewType
84
91
  {
85
92
  switch (subviewType) {
86
- case react::RNSScreenStackHeaderSubviewType::Left:
93
+ using enum react::RNSScreenStackHeaderSubviewType;
94
+
95
+ case Left:
87
96
  return RNSScreenStackHeaderSubviewTypeLeft;
88
- case react::RNSScreenStackHeaderSubviewType::Right:
97
+ case Right:
89
98
  return RNSScreenStackHeaderSubviewTypeRight;
90
- case react::RNSScreenStackHeaderSubviewType::Title:
99
+ case Title:
91
100
  return RNSScreenStackHeaderSubviewTypeTitle;
92
- case react::RNSScreenStackHeaderSubviewType::Center:
101
+ case Center:
93
102
  return RNSScreenStackHeaderSubviewTypeCenter;
94
- case react::RNSScreenStackHeaderSubviewType::SearchBar:
103
+ case SearchBar:
95
104
  return RNSScreenStackHeaderSubviewTypeSearchBar;
96
- case react::RNSScreenStackHeaderSubviewType::Back:
105
+ case Back:
97
106
  return RNSScreenStackHeaderSubviewTypeBackButton;
98
107
  }
99
108
  }
@@ -102,9 +111,10 @@
102
111
  (react::RNSScreenReplaceAnimation)replaceAnimation
103
112
  {
104
113
  switch (replaceAnimation) {
105
- case react::RNSScreenReplaceAnimation::Pop:
114
+ using enum react::RNSScreenReplaceAnimation;
115
+ case Pop:
106
116
  return RNSScreenReplaceAnimationPop;
107
- case react::RNSScreenReplaceAnimation::Push:
117
+ case Push:
108
118
  return RNSScreenReplaceAnimationPush;
109
119
  }
110
120
  }
@@ -112,9 +122,10 @@
112
122
  + (RNSScreenSwipeDirection)RNSScreenSwipeDirectionFromCppEquivalent:(react::RNSScreenSwipeDirection)swipeDirection
113
123
  {
114
124
  switch (swipeDirection) {
115
- case react::RNSScreenSwipeDirection::Horizontal:
125
+ using enum react::RNSScreenSwipeDirection;
126
+ case Horizontal:
116
127
  return RNSScreenSwipeDirectionHorizontal;
117
- case react::RNSScreenSwipeDirection::Vertical:
128
+ case Vertical:
118
129
  return RNSScreenSwipeDirectionVertical;
119
130
  }
120
131
  }
@@ -144,13 +155,14 @@
144
155
  (react::RNSSearchBarAutoCapitalize)autoCapitalize
145
156
  {
146
157
  switch (autoCapitalize) {
147
- case react::RNSSearchBarAutoCapitalize::Words:
158
+ using enum react::RNSSearchBarAutoCapitalize;
159
+ case Words:
148
160
  return UITextAutocapitalizationTypeWords;
149
- case react::RNSSearchBarAutoCapitalize::Sentences:
161
+ case Sentences:
150
162
  return UITextAutocapitalizationTypeSentences;
151
- case react::RNSSearchBarAutoCapitalize::Characters:
163
+ case Characters:
152
164
  return UITextAutocapitalizationTypeAllCharacters;
153
- case react::RNSSearchBarAutoCapitalize::None:
165
+ case None:
154
166
  return UITextAutocapitalizationTypeNone;
155
167
  }
156
168
  }
@@ -159,11 +171,12 @@
159
171
  + (RNSSearchBarPlacement)RNSScreenSearchBarPlacementFromCppEquivalent:(react::RNSSearchBarPlacement)placement
160
172
  {
161
173
  switch (placement) {
162
- case react::RNSSearchBarPlacement::Stacked:
174
+ using enum react::RNSSearchBarPlacement;
175
+ case Stacked:
163
176
  return RNSSearchBarPlacementStacked;
164
- case react::RNSSearchBarPlacement::Automatic:
177
+ case Automatic:
165
178
  return RNSSearchBarPlacementAutomatic;
166
- case react::RNSSearchBarPlacement::Inline:
179
+ case Inline:
167
180
  return RNSSearchBarPlacementInline;
168
181
  }
169
182
  }
@@ -179,68 +192,69 @@
179
192
 
180
193
  + (RNSBlurEffectStyle)RNSBlurEffectStyleFromCppEquivalent:(react::RNSScreenStackHeaderConfigBlurEffect)blurEffect
181
194
  {
195
+ using enum react::RNSScreenStackHeaderConfigBlurEffect;
182
196
  #if !TARGET_OS_TV && defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
183
197
  __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
184
198
  if (@available(iOS 13.0, *)) {
185
199
  switch (blurEffect) {
186
- case react::RNSScreenStackHeaderConfigBlurEffect::None:
200
+ case None:
187
201
  return RNSBlurEffectStyleNone;
188
- case react::RNSScreenStackHeaderConfigBlurEffect::ExtraLight:
202
+ case ExtraLight:
189
203
  return RNSBlurEffectStyleExtraLight;
190
- case react::RNSScreenStackHeaderConfigBlurEffect::Light:
204
+ case Light:
191
205
  return RNSBlurEffectStyleLight;
192
- case react::RNSScreenStackHeaderConfigBlurEffect::Dark:
206
+ case Dark:
193
207
  return RNSBlurEffectStyleDark;
194
- case react::RNSScreenStackHeaderConfigBlurEffect::Regular:
208
+ case Regular:
195
209
  return RNSBlurEffectStyleRegular;
196
- case react::RNSScreenStackHeaderConfigBlurEffect::Prominent:
210
+ case Prominent:
197
211
  return RNSBlurEffectStyleProminent;
198
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemUltraThinMaterial:
212
+ case SystemUltraThinMaterial:
199
213
  return RNSBlurEffectStyleSystemUltraThinMaterial;
200
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemThinMaterial:
214
+ case SystemThinMaterial:
201
215
  return RNSBlurEffectStyleSystemThinMaterial;
202
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemMaterial:
216
+ case SystemMaterial:
203
217
  return RNSBlurEffectStyleSystemMaterial;
204
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemThickMaterial:
218
+ case SystemThickMaterial:
205
219
  return RNSBlurEffectStyleSystemThickMaterial;
206
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemChromeMaterial:
220
+ case SystemChromeMaterial:
207
221
  return RNSBlurEffectStyleSystemChromeMaterial;
208
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemUltraThinMaterialLight:
222
+ case SystemUltraThinMaterialLight:
209
223
  return RNSBlurEffectStyleSystemUltraThinMaterialLight;
210
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemThinMaterialLight:
224
+ case SystemThinMaterialLight:
211
225
  return RNSBlurEffectStyleSystemThinMaterialLight;
212
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemMaterialLight:
226
+ case SystemMaterialLight:
213
227
  return RNSBlurEffectStyleSystemMaterialLight;
214
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemThickMaterialLight:
228
+ case SystemThickMaterialLight:
215
229
  return RNSBlurEffectStyleSystemThickMaterialLight;
216
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemChromeMaterialLight:
230
+ case SystemChromeMaterialLight:
217
231
  return RNSBlurEffectStyleSystemChromeMaterialLight;
218
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemUltraThinMaterialDark:
232
+ case SystemUltraThinMaterialDark:
219
233
  return RNSBlurEffectStyleSystemUltraThinMaterialDark;
220
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemThinMaterialDark:
234
+ case SystemThinMaterialDark:
221
235
  return RNSBlurEffectStyleSystemThinMaterialDark;
222
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemMaterialDark:
236
+ case SystemMaterialDark:
223
237
  return RNSBlurEffectStyleSystemMaterialDark;
224
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemThickMaterialDark:
238
+ case SystemThickMaterialDark:
225
239
  return RNSBlurEffectStyleSystemThickMaterialDark;
226
- case react::RNSScreenStackHeaderConfigBlurEffect::SystemChromeMaterialDark:
240
+ case SystemChromeMaterialDark:
227
241
  return RNSBlurEffectStyleSystemChromeMaterialDark;
228
242
  }
229
243
  }
230
244
  #endif
231
245
 
232
246
  switch (blurEffect) {
233
- case react::RNSScreenStackHeaderConfigBlurEffect::None:
247
+ case None:
234
248
  return RNSBlurEffectStyleNone;
235
- case react::RNSScreenStackHeaderConfigBlurEffect::Light:
249
+ case Light:
236
250
  return RNSBlurEffectStyleLight;
237
- case react::RNSScreenStackHeaderConfigBlurEffect::Dark:
251
+ case Dark:
238
252
  return RNSBlurEffectStyleDark;
239
- case react::RNSScreenStackHeaderConfigBlurEffect::Regular:
253
+ case Regular:
240
254
  return RNSBlurEffectStyleRegular;
241
- case react::RNSScreenStackHeaderConfigBlurEffect::Prominent:
255
+ case Prominent:
242
256
  return RNSBlurEffectStyleProminent;
243
- case react::RNSScreenStackHeaderConfigBlurEffect::ExtraLight:
257
+ case ExtraLight:
244
258
  default:
245
259
  return RNSBlurEffectStyleNone;
246
260
  }