react-native-screens 4.1.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.
- package/android/src/main/java/com/swmansion/rnscreens/InsetsObserverProxy.kt +5 -6
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +8 -6
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFooter.kt +16 -4
- package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +0 -1
- package/android/src/main/java/com/swmansion/rnscreens/ext/ViewExt.kt +0 -24
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h +1 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigComponentDescriptor.h +5 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.cpp +14 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.h +8 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.cpp +12 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.h +9 -2
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewComponentDescriptor.h +1 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.cpp +1 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.h +0 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.cpp +1 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.h +1 -2
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +1 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +2 -2
- package/ios/RNSScreenStack.mm +1 -10
- package/ios/RNSScreenStackHeaderConfig.mm +62 -30
- package/ios/RNSScreenStackHeaderSubview.h +0 -7
- package/ios/RNSScreenStackHeaderSubview.mm +2 -24
- package/ios/events/RNSHeaderHeightChangeEvent.h +0 -1
- package/ios/events/RNSScreenViewEvent.h +0 -1
- package/lib/commonjs/components/ScreenFooter.js +9 -0
- package/lib/commonjs/components/ScreenFooter.js.map +1 -1
- package/lib/commonjs/components/ScreenStackItem.js +4 -1
- package/lib/commonjs/components/ScreenStackItem.js.map +1 -1
- package/lib/module/components/ScreenFooter.js +8 -0
- package/lib/module/components/ScreenFooter.js.map +1 -1
- package/lib/module/components/ScreenStackItem.js +4 -1
- package/lib/module/components/ScreenStackItem.js.map +1 -1
- package/lib/typescript/components/ScreenFooter.d.ts +4 -0
- package/lib/typescript/components/ScreenFooter.d.ts.map +1 -1
- package/lib/typescript/components/ScreenStackItem.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/ScreenFooter.tsx +8 -0
- package/src/components/ScreenStackItem.tsx +7 -0
|
@@ -23,10 +23,7 @@ object InsetsObserverProxy : OnApplyWindowInsetsListener {
|
|
|
23
23
|
): WindowInsetsCompat {
|
|
24
24
|
var rollingInsets =
|
|
25
25
|
if (shouldForwardInsetsToView) {
|
|
26
|
-
|
|
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
|
|
61
|
-
|
|
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
|
|
403
|
-
//
|
|
404
|
-
//
|
|
405
|
-
//
|
|
406
|
-
|
|
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 =
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
}
|
|
@@ -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
|
|
package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.cpp
CHANGED
|
@@ -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
|
package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.h
CHANGED
|
@@ -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
|
-
|
|
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
|
-
#
|
|
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
|
package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.h
CHANGED
|
@@ -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
|
|
@@ -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/RNSScreenStack.mm
CHANGED
|
@@ -1183,16 +1183,7 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
1183
1183
|
- (void)unmountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index
|
|
1184
1184
|
{
|
|
1185
1185
|
RNSScreenView *screenChildComponent = (RNSScreenView *)childComponentView;
|
|
1186
|
-
|
|
1187
|
-
// We should only do a snapshot of a screen that is on the top.
|
|
1188
|
-
// We also check `_presentedModals` since if you push 2 modals, second one is not a "child" of _controller.
|
|
1189
|
-
// Also, when dissmised with a gesture, the screen already is not under the window, so we don't need to apply
|
|
1190
|
-
// snapshot.
|
|
1191
|
-
if (screenChildComponent.window != nil &&
|
|
1192
|
-
((screenChildComponent == _controller.visibleViewController.view && _presentedModals.count < 2) ||
|
|
1193
|
-
screenChildComponent == [_presentedModals.lastObject view])) {
|
|
1194
|
-
[screenChildComponent.controller setViewToSnapshot];
|
|
1195
|
-
}
|
|
1186
|
+
[screenChildComponent.controller setViewToSnapshot];
|
|
1196
1187
|
|
|
1197
1188
|
RCTAssert(
|
|
1198
1189
|
screenChildComponent.reactSuperview == self,
|
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
11
11
|
#import <rnscreens/RNSScreenStackHeaderConfigComponentDescriptor.h>
|
|
12
12
|
#import "RCTImageComponentView+RNSScreenStackHeaderConfig.h"
|
|
13
|
+
#ifndef NDEBUG
|
|
14
|
+
#import <react/utils/ManagedObjectWrapper.h>
|
|
15
|
+
#endif // !NDEBUG
|
|
13
16
|
#else
|
|
14
17
|
#import <React/RCTImageView.h>
|
|
15
18
|
#import <React/RCTShadowView.h>
|
|
@@ -61,6 +64,9 @@ namespace react = facebook::react;
|
|
|
61
64
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
62
65
|
BOOL _initialPropsSet;
|
|
63
66
|
react::RNSScreenStackHeaderConfigShadowNode::ConcreteState::Shared _state;
|
|
67
|
+
#ifndef NDEBUG
|
|
68
|
+
RCTImageLoader *imageLoader;
|
|
69
|
+
#endif // !NDEBUG
|
|
64
70
|
#else
|
|
65
71
|
__weak RCTBridge *_bridge;
|
|
66
72
|
#endif
|
|
@@ -338,10 +344,10 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
338
344
|
[button setTitleTextAttributes:attrs forState:UIControlStateFocused];
|
|
339
345
|
}
|
|
340
346
|
|
|
341
|
-
|
|
347
|
+
- (UIImage *)loadBackButtonImageInViewController:(UIViewController *)vc
|
|
342
348
|
{
|
|
343
349
|
BOOL hasBackButtonImage = NO;
|
|
344
|
-
for (RNSScreenStackHeaderSubview *subview in
|
|
350
|
+
for (RNSScreenStackHeaderSubview *subview in self.reactSubviews) {
|
|
345
351
|
if (subview.type == RNSScreenStackHeaderSubviewTypeBackButton && subview.subviews.count > 0) {
|
|
346
352
|
hasBackButtonImage = YES;
|
|
347
353
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
@@ -367,6 +373,7 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
367
373
|
|
|
368
374
|
UIImage *image = imageView.image;
|
|
369
375
|
|
|
376
|
+
#ifndef NDEBUG
|
|
370
377
|
// IMPORTANT!!!
|
|
371
378
|
// image can be nil in DEV MODE ONLY
|
|
372
379
|
//
|
|
@@ -381,8 +388,9 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
381
388
|
// in DEV MODE we try to load from cache (we use private API for that as it is not exposed
|
|
382
389
|
// publically in headers).
|
|
383
390
|
RCTImageSource *imageSource = [RNSScreenStackHeaderConfig imageSourceFromImageView:imageView];
|
|
384
|
-
|
|
385
|
-
|
|
391
|
+
#ifndef RCT_NEW_ARCH_ENABLED
|
|
392
|
+
RCTImageLoader *imageLoader = [_bridge moduleForClass:[RCTImageLoader class]];
|
|
393
|
+
#endif // !RCT_NEW_ARCH_ENABLED
|
|
386
394
|
image = [imageLoader.imageCache
|
|
387
395
|
imageForUrl:imageSource.request.URL.absoluteString
|
|
388
396
|
size:imageSource.size
|
|
@@ -394,6 +402,7 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
394
402
|
resizeMode:imageView.resizeMode];
|
|
395
403
|
#endif // RCT_NEW_ARCH_ENABLED
|
|
396
404
|
}
|
|
405
|
+
#endif // !NDEBUG
|
|
397
406
|
if (image == nil) {
|
|
398
407
|
// This will be triggered if the image is not in the cache yet. What we do is we wait until
|
|
399
408
|
// the end of transition and run header config updates again. We could potentially wait for
|
|
@@ -410,7 +419,7 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
410
419
|
#if !TARGET_OS_TV
|
|
411
420
|
vc.navigationItem.hidesBackButton = YES;
|
|
412
421
|
#endif
|
|
413
|
-
[
|
|
422
|
+
[self updateViewControllerIfNeeded];
|
|
414
423
|
}];
|
|
415
424
|
}
|
|
416
425
|
return [UIImage new];
|
|
@@ -442,8 +451,16 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
442
451
|
UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
|
|
443
452
|
|
|
444
453
|
if (config.backgroundColor && CGColorGetAlpha(config.backgroundColor.CGColor) == 0.) {
|
|
454
|
+
// Preserve the shadow properties in case the user wants to show the shadow on scroll.
|
|
455
|
+
UIColor *shadowColor = appearance.shadowColor;
|
|
456
|
+
UIImage *shadowImage = appearance.shadowImage;
|
|
445
457
|
// transparent background color
|
|
446
458
|
[appearance configureWithTransparentBackground];
|
|
459
|
+
|
|
460
|
+
if (!config.hideShadow) {
|
|
461
|
+
appearance.shadowColor = shadowColor;
|
|
462
|
+
appearance.shadowImage = shadowImage;
|
|
463
|
+
}
|
|
447
464
|
} else {
|
|
448
465
|
[appearance configureWithOpaqueBackground];
|
|
449
466
|
}
|
|
@@ -520,7 +537,7 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
520
537
|
appearance.largeTitleTextAttributes = largeAttrs;
|
|
521
538
|
}
|
|
522
539
|
|
|
523
|
-
UIImage *backButtonImage = [
|
|
540
|
+
UIImage *backButtonImage = [config loadBackButtonImageInViewController:vc];
|
|
524
541
|
if (backButtonImage) {
|
|
525
542
|
[appearance setBackIndicatorImage:backButtonImage transitionMaskImage:backButtonImage];
|
|
526
543
|
} else if (appearance.backIndicatorImage) {
|
|
@@ -671,7 +688,15 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
671
688
|
UINavigationBarAppearance *scrollEdgeAppearance =
|
|
672
689
|
[[UINavigationBarAppearance alloc] initWithBarAppearance:appearance];
|
|
673
690
|
if (config.largeTitleBackgroundColor != nil) {
|
|
674
|
-
|
|
691
|
+
// Add support for using a fully transparent bar when the backgroundColor is set to transparent.
|
|
692
|
+
if (CGColorGetAlpha(config.largeTitleBackgroundColor.CGColor) == 0.) {
|
|
693
|
+
// This will also remove the background blur effect in the large title which is otherwise inherited from the standard appearance.
|
|
694
|
+
[scrollEdgeAppearance configureWithTransparentBackground];
|
|
695
|
+
// This must be set to nil otherwise a default view will be added to the navigation bar background with an opaque background.
|
|
696
|
+
scrollEdgeAppearance.backgroundColor = nil;
|
|
697
|
+
} else {
|
|
698
|
+
scrollEdgeAppearance.backgroundColor = config.largeTitleBackgroundColor;
|
|
699
|
+
}
|
|
675
700
|
}
|
|
676
701
|
if (config.largeTitleHideShadow) {
|
|
677
702
|
scrollEdgeAppearance.shadowColor = nil;
|
|
@@ -683,7 +708,7 @@ RNS_IGNORE_SUPER_CALL_END
|
|
|
683
708
|
#if !TARGET_OS_TV
|
|
684
709
|
// updating backIndicatotImage does not work when called during transition. On iOS pre 13 we need
|
|
685
710
|
// to update it before the navigation starts.
|
|
686
|
-
UIImage *backButtonImage = [
|
|
711
|
+
UIImage *backButtonImage = [config loadBackButtonImageInViewController:vc];
|
|
687
712
|
if (backButtonImage) {
|
|
688
713
|
navctr.navigationBar.backIndicatorImage = backButtonImage;
|
|
689
714
|
navctr.navigationBar.backIndicatorTransitionMaskImage = backButtonImage;
|
|
@@ -847,27 +872,29 @@ RNS_IGNORE_SUPER_CALL_BEGIN
|
|
|
847
872
|
|
|
848
873
|
- (void)replaceNavigationBarViewsWithSnapshotOfSubview:(RNSScreenStackHeaderSubview *)childComponentView
|
|
849
874
|
{
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
875
|
+
if (childComponentView.window != nil) {
|
|
876
|
+
UINavigationItem *navitem = _screenView.controller.navigationItem;
|
|
877
|
+
UIView *snapshot = [childComponentView snapshotViewAfterScreenUpdates:NO];
|
|
878
|
+
|
|
879
|
+
// This code should be kept in sync with analogous switch statement in
|
|
880
|
+
// `+ [RNSScreenStackHeaderConfig updateViewController: withConfig: animated:]` method.
|
|
881
|
+
switch (childComponentView.type) {
|
|
882
|
+
case RNSScreenStackHeaderSubviewTypeLeft:
|
|
883
|
+
navitem.leftBarButtonItem.customView = snapshot;
|
|
884
|
+
break;
|
|
885
|
+
case RNSScreenStackHeaderSubviewTypeCenter:
|
|
886
|
+
case RNSScreenStackHeaderSubviewTypeTitle:
|
|
887
|
+
navitem.titleView = snapshot;
|
|
888
|
+
break;
|
|
889
|
+
case RNSScreenStackHeaderSubviewTypeRight:
|
|
890
|
+
navitem.rightBarButtonItem.customView = snapshot;
|
|
891
|
+
break;
|
|
892
|
+
case RNSScreenStackHeaderSubviewTypeSearchBar:
|
|
893
|
+
case RNSScreenStackHeaderSubviewTypeBackButton:
|
|
894
|
+
break;
|
|
895
|
+
default:
|
|
896
|
+
RCTLogError(@"[RNScreens] Unhandled subview type: %ld", childComponentView.type);
|
|
897
|
+
}
|
|
871
898
|
}
|
|
872
899
|
}
|
|
873
900
|
|
|
@@ -965,7 +992,7 @@ static RCTResizeMode resizeModeFromCppEquiv(react::ImageResizeMode resizeMode)
|
|
|
965
992
|
_largeTitleFontSize = [self getFontSizePropValue:newScreenProps.largeTitleFontSize];
|
|
966
993
|
_largeTitleHideShadow = newScreenProps.largeTitleHideShadow;
|
|
967
994
|
_largeTitleBackgroundColor = RCTUIColorFromSharedColor(newScreenProps.largeTitleBackgroundColor);
|
|
968
|
-
|
|
995
|
+
|
|
969
996
|
_backTitle = RCTNSStringFromStringNilIfEmpty(newScreenProps.backTitle);
|
|
970
997
|
if (newScreenProps.backTitleFontFamily != oldScreenProps.backTitleFontFamily) {
|
|
971
998
|
_backTitleFontFamily = RCTNSStringFromStringNilIfEmpty(newScreenProps.backTitleFontFamily);
|
|
@@ -1009,6 +1036,11 @@ static RCTResizeMode resizeModeFromCppEquiv(react::ImageResizeMode resizeMode)
|
|
|
1009
1036
|
oldState:(const facebook::react::State::Shared &)oldState
|
|
1010
1037
|
{
|
|
1011
1038
|
_state = std::static_pointer_cast<const react::RNSScreenStackHeaderConfigShadowNode::ConcreteState>(state);
|
|
1039
|
+
#ifndef NDEBUG
|
|
1040
|
+
if (auto imgLoaderPtr = _state.get()->getData().getImageLoader().lock()) {
|
|
1041
|
+
imageLoader = react::unwrapManagedObject(imgLoaderPtr);
|
|
1042
|
+
}
|
|
1043
|
+
#endif // !NDEBUG
|
|
1012
1044
|
}
|
|
1013
1045
|
|
|
1014
1046
|
#else
|
|
@@ -20,13 +20,6 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
20
20
|
|
|
21
21
|
@property (nonatomic, weak) UIView *reactSuperview;
|
|
22
22
|
|
|
23
|
-
@property (nonatomic, weak) RCTBridge *bridge;
|
|
24
|
-
|
|
25
|
-
#ifdef RCT_NEW_ARCH_ENABLED
|
|
26
|
-
#else
|
|
27
|
-
- (instancetype)initWithBridge:(RCTBridge *)bridge;
|
|
28
|
-
#endif // RCT_NEW_ARCH_ENABLED
|
|
29
|
-
|
|
30
23
|
@end
|
|
31
24
|
|
|
32
25
|
@interface RNSScreenStackHeaderSubviewManager : RCTViewManager
|
|
@@ -18,10 +18,6 @@
|
|
|
18
18
|
namespace react = facebook::react;
|
|
19
19
|
#endif // RCT_NEW_ARCH_ENABLED
|
|
20
20
|
|
|
21
|
-
@interface RCTBridge (Private)
|
|
22
|
-
+ (RCTBridge *)currentBridge;
|
|
23
|
-
@end
|
|
24
|
-
|
|
25
21
|
@implementation RNSScreenStackHeaderSubview
|
|
26
22
|
|
|
27
23
|
#pragma mark - Common
|
|
@@ -115,17 +111,9 @@ RNS_IGNORE_SUPER_CALL_BEGIN
|
|
|
115
111
|
return NO;
|
|
116
112
|
}
|
|
117
113
|
|
|
118
|
-
#else
|
|
114
|
+
#else // RCT_NEW_ARCH_ENABLED
|
|
119
115
|
#pragma mark - Paper specific
|
|
120
116
|
|
|
121
|
-
- (instancetype)initWithBridge:(RCTBridge *)bridge
|
|
122
|
-
{
|
|
123
|
-
if (self = [super init]) {
|
|
124
|
-
_bridge = bridge;
|
|
125
|
-
}
|
|
126
|
-
return self;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
117
|
- (void)reactSetFrame:(CGRect)frame
|
|
130
118
|
{
|
|
131
119
|
// Block any attempt to set coordinates on RNSScreenStackHeaderSubview. This
|
|
@@ -133,18 +121,8 @@ RNS_IGNORE_SUPER_CALL_BEGIN
|
|
|
133
121
|
[super reactSetFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
|
|
134
122
|
[self layoutNavigationBarIfNeeded];
|
|
135
123
|
}
|
|
136
|
-
|
|
137
124
|
#endif // RCT_NEW_ARCH_ENABLED
|
|
138
125
|
|
|
139
|
-
- (RCTBridge *)bridge
|
|
140
|
-
{
|
|
141
|
-
#ifdef RCT_NEW_ARCH_ENABLED
|
|
142
|
-
return [RCTBridge currentBridge];
|
|
143
|
-
#else
|
|
144
|
-
return _bridge;
|
|
145
|
-
#endif // RCT_NEW_ARCH_ENABLED
|
|
146
|
-
}
|
|
147
|
-
|
|
148
126
|
@end
|
|
149
127
|
|
|
150
128
|
@implementation RNSScreenStackHeaderSubviewManager
|
|
@@ -157,7 +135,7 @@ RCT_EXPORT_VIEW_PROPERTY(type, RNSScreenStackHeaderSubviewType)
|
|
|
157
135
|
#else
|
|
158
136
|
- (UIView *)view
|
|
159
137
|
{
|
|
160
|
-
return [
|
|
138
|
+
return [RNSScreenStackHeaderSubview new];
|
|
161
139
|
}
|
|
162
140
|
#endif
|
|
163
141
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.FooterComponent = FooterComponent;
|
|
6
7
|
exports.default = void 0;
|
|
7
8
|
var _react = _interopRequireDefault(require("react"));
|
|
8
9
|
var _ScreenFooterNativeComponent = _interopRequireDefault(require("../fabric/ScreenFooterNativeComponent"));
|
|
@@ -13,5 +14,13 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
13
14
|
function ScreenFooter(props) {
|
|
14
15
|
return /*#__PURE__*/_react.default.createElement(_ScreenFooterNativeComponent.default, props);
|
|
15
16
|
}
|
|
17
|
+
function FooterComponent(_ref) {
|
|
18
|
+
let {
|
|
19
|
+
children
|
|
20
|
+
} = _ref;
|
|
21
|
+
return /*#__PURE__*/_react.default.createElement(ScreenFooter, {
|
|
22
|
+
collapsable: false
|
|
23
|
+
}, children);
|
|
24
|
+
}
|
|
16
25
|
var _default = exports.default = ScreenFooter;
|
|
17
26
|
//# sourceMappingURL=ScreenFooter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_ScreenFooterNativeComponent","obj","__esModule","default","ScreenFooter","props","createElement","_default","exports"],"sourceRoot":"../../../src","sources":["components/ScreenFooter.tsx"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_ScreenFooterNativeComponent","obj","__esModule","default","ScreenFooter","props","createElement","FooterComponent","_ref","children","collapsable","_default","exports"],"sourceRoot":"../../../src","sources":["components/ScreenFooter.tsx"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,4BAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAgF,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEhF;AACA;AACA;AACA,SAASG,YAAYA,CAACC,KAAgB,EAAE;EACtC,oBAAOR,MAAA,CAAAM,OAAA,CAAAG,aAAA,CAACN,4BAAA,CAAAG,OAA2B,EAAKE,KAAQ,CAAC;AACnD;AAMO,SAASE,eAAeA,CAAAC,IAAA,EAA4B;EAAA,IAA3B;IAAEC;EAAsB,CAAC,GAAAD,IAAA;EACvD,oBAAOX,MAAA,CAAAM,OAAA,CAAAG,aAAA,CAACF,YAAY;IAACM,WAAW,EAAE;EAAM,GAAED,QAAuB,CAAC;AACpE;AAAC,IAAAE,QAAA,GAAAC,OAAA,CAAAT,OAAA,GAEcC,YAAY"}
|
|
@@ -12,6 +12,7 @@ var _ScreenStackHeaderConfig = require("./ScreenStackHeaderConfig");
|
|
|
12
12
|
var _Screen = _interopRequireDefault(require("./Screen"));
|
|
13
13
|
var _ScreenStack = _interopRequireDefault(require("./ScreenStack"));
|
|
14
14
|
var _contexts = require("../contexts");
|
|
15
|
+
var _ScreenFooter = require("./ScreenFooter");
|
|
15
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
17
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
17
18
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -25,6 +26,8 @@ function ScreenStackItem(_ref, ref) {
|
|
|
25
26
|
contentStyle,
|
|
26
27
|
style,
|
|
27
28
|
screenId,
|
|
29
|
+
// eslint-disable-next-line camelcase
|
|
30
|
+
unstable_sheetFooter,
|
|
28
31
|
...rest
|
|
29
32
|
} = _ref;
|
|
30
33
|
const currentScreenRef = React.useRef(null);
|
|
@@ -39,7 +42,7 @@ function ScreenStackItem(_ref, ref) {
|
|
|
39
42
|
const content = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_DebugContainer.default, {
|
|
40
43
|
style: [stackPresentation === 'formSheet' ? _reactNative.Platform.OS === 'ios' ? styles.absolute : null : styles.container, contentStyle],
|
|
41
44
|
stackPresentation: stackPresentation ?? 'push'
|
|
42
|
-
}, children), /*#__PURE__*/React.createElement(_ScreenStackHeaderConfig.ScreenStackHeaderConfig, headerConfig));
|
|
45
|
+
}, children), /*#__PURE__*/React.createElement(_ScreenStackHeaderConfig.ScreenStackHeaderConfig, headerConfig), stackPresentation === 'formSheet' && unstable_sheetFooter && /*#__PURE__*/React.createElement(_ScreenFooter.FooterComponent, null, unstable_sheetFooter()));
|
|
43
46
|
|
|
44
47
|
// We take backgroundColor from contentStyle and apply it on Screen.
|
|
45
48
|
// This allows to workaround one issue with truncated
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","_interopRequireWildcard","require","_reactNative","_warnOnce","_interopRequireDefault","_DebugContainer","_ScreenStackHeaderConfig","_Screen","_ScreenStack","_contexts","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","ScreenStackItem","_ref","ref","children","headerConfig","activityState","stackPresentation","contentStyle","style","screenId","rest","currentScreenRef","useRef","screenRefs","useContext","RNSScreensRefContext","useImperativeHandle","current","isHeaderInModal","Platform","OS","hidden","headerHiddenPreviousRef","useEffect","warnOnce","content","createElement","Fragment","styles","absolute","container","ScreenStackHeaderConfig","internalScreenStyle","flattenContentStyles","StyleSheet","flatten","backgroundColor","node","console","warn","currentRefs","enabled","isNativeStack","hasLargeHeader","largeTitle","absoluteFill","_default","exports","forwardRef","create","flex","position","top","start","end"],"sourceRoot":"../../../src","sources":["components/ScreenStackItem.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAOA,IAAAE,SAAA,GAAAC,sBAAA,CAAAH,OAAA;AAEA,IAAAI,eAAA,GAAAD,sBAAA,CAAAH,OAAA;AAEA,IAAAK,wBAAA,GAAAL,OAAA;AACA,IAAAM,OAAA,GAAAH,sBAAA,CAAAH,OAAA;AACA,IAAAO,YAAA,GAAAJ,sBAAA,CAAAH,OAAA;AACA,IAAAQ,SAAA,GAAAR,OAAA;
|
|
1
|
+
{"version":3,"names":["React","_interopRequireWildcard","require","_reactNative","_warnOnce","_interopRequireDefault","_DebugContainer","_ScreenStackHeaderConfig","_Screen","_ScreenStack","_contexts","_ScreenFooter","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","ScreenStackItem","_ref","ref","children","headerConfig","activityState","stackPresentation","contentStyle","style","screenId","unstable_sheetFooter","rest","currentScreenRef","useRef","screenRefs","useContext","RNSScreensRefContext","useImperativeHandle","current","isHeaderInModal","Platform","OS","hidden","headerHiddenPreviousRef","useEffect","warnOnce","content","createElement","Fragment","styles","absolute","container","ScreenStackHeaderConfig","FooterComponent","internalScreenStyle","flattenContentStyles","StyleSheet","flatten","backgroundColor","node","console","warn","currentRefs","enabled","isNativeStack","hasLargeHeader","largeTitle","absoluteFill","_default","exports","forwardRef","create","flex","position","top","start","end"],"sourceRoot":"../../../src","sources":["components/ScreenStackItem.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAOA,IAAAE,SAAA,GAAAC,sBAAA,CAAAH,OAAA;AAEA,IAAAI,eAAA,GAAAD,sBAAA,CAAAH,OAAA;AAEA,IAAAK,wBAAA,GAAAL,OAAA;AACA,IAAAM,OAAA,GAAAH,sBAAA,CAAAH,OAAA;AACA,IAAAO,YAAA,GAAAJ,sBAAA,CAAAH,OAAA;AACA,IAAAQ,SAAA,GAAAR,OAAA;AACA,IAAAS,aAAA,GAAAT,OAAA;AAAiD,SAAAG,uBAAAO,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAf,wBAAAe,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAH,UAAA,SAAAG,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAF,OAAA,EAAAE,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAC,GAAA,CAAAJ,CAAA,UAAAG,CAAA,CAAAE,GAAA,CAAAL,CAAA,OAAAM,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAZ,CAAA,oBAAAY,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAY,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAX,CAAA,EAAAY,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAZ,CAAA,CAAAY,CAAA,YAAAN,CAAA,CAAAR,OAAA,GAAAE,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAc,GAAA,CAAAjB,CAAA,EAAAM,CAAA,GAAAA,CAAA;AAAA,SAAAY,SAAA,IAAAA,QAAA,GAAAT,MAAA,CAAAU,MAAA,GAAAV,MAAA,CAAAU,MAAA,CAAAC,IAAA,eAAAC,MAAA,aAAAL,CAAA,MAAAA,CAAA,GAAAM,SAAA,CAAAC,MAAA,EAAAP,CAAA,UAAAQ,MAAA,GAAAF,SAAA,CAAAN,CAAA,YAAAS,GAAA,IAAAD,MAAA,QAAAf,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAS,MAAA,EAAAC,GAAA,KAAAJ,MAAA,CAAAI,GAAA,IAAAD,MAAA,CAAAC,GAAA,gBAAAJ,MAAA,YAAAH,QAAA,CAAAQ,KAAA,OAAAJ,SAAA;AAWjD,SAASK,eAAeA,CAAAC,IAAA,EAatBC,GAA6B,EAC7B;EAAA,IAbA;IACEC,QAAQ;IACRC,YAAY;IACZC,aAAa;IACbC,iBAAiB;IACjBC,YAAY;IACZC,KAAK;IACLC,QAAQ;IACR;IACAC,oBAAoB;IACpB,GAAGC;EACE,CAAC,GAAAV,IAAA;EAGR,MAAMW,gBAAgB,GAAGvD,KAAK,CAACwD,MAAM,CAAc,IAAI,CAAC;EACxD,MAAMC,UAAU,GAAGzD,KAAK,CAAC0D,UAAU,CAACC,8BAAoB,CAAC;EAEzD3D,KAAK,CAAC4D,mBAAmB,CAACf,GAAG,EAAE,MAAMU,gBAAgB,CAACM,OAAQ,CAAC;EAE/D,MAAMC,eAAe,GACnBC,qBAAQ,CAACC,EAAE,KAAK,SAAS,GACrB,KAAK,GACLf,iBAAiB,KAAK,MAAM,IAAIF,YAAY,EAAEkB,MAAM,KAAK,KAAK;EAEpE,MAAMC,uBAAuB,GAAGlE,KAAK,CAACwD,MAAM,CAACT,YAAY,EAAEkB,MAAM,CAAC;EAElEjE,KAAK,CAACmE,SAAS,CAAC,MAAM;IACpB,IAAAC,iBAAQ,EACNL,qBAAQ,CAACC,EAAE,KAAK,SAAS,IACvBf,iBAAiB,KAAK,MAAM,IAC5BiB,uBAAuB,CAACL,OAAO,KAAKd,YAAY,EAAEkB,MAAM,EACzD,qHACH,CAAC;IAEDC,uBAAuB,CAACL,OAAO,GAAGd,YAAY,EAAEkB,MAAM;EACxD,CAAC,EAAE,CAAClB,YAAY,EAAEkB,MAAM,EAAEhB,iBAAiB,CAAC,CAAC;EAE7C,MAAMoB,OAAO,gBACXrE,KAAA,CAAAsE,aAAA,CAAAtE,KAAA,CAAAuE,QAAA,qBACEvE,KAAA,CAAAsE,aAAA,CAAChE,eAAA,CAAAQ,OAAc;IACbqC,KAAK,EAAE,CACLF,iBAAiB,KAAK,WAAW,GAC7Bc,qBAAQ,CAACC,EAAE,KAAK,KAAK,GACnBQ,MAAM,CAACC,QAAQ,GACf,IAAI,GACND,MAAM,CAACE,SAAS,EACpBxB,YAAY,CACZ;IACFD,iBAAiB,EAAEA,iBAAiB,IAAI;EAAO,GAC9CH,QACa,CAAC,eAYjB9C,KAAA,CAAAsE,aAAA,CAAC/D,wBAAA,CAAAoE,uBAAuB,EAAK5B,YAAe,CAAC,EAE5CE,iBAAiB,KAAK,WAAW,IAAII,oBAAoB,iBACxDrD,KAAA,CAAAsE,aAAA,CAAC3D,aAAA,CAAAiE,eAAe,QAAEvB,oBAAoB,CAAC,CAAmB,CAE5D,CACH;;EAED;EACA;EACA;EACA,IAAIwB,mBAAmB;EAEvB,IAAI5B,iBAAiB,KAAK,WAAW,IAAIC,YAAY,EAAE;IACrD,MAAM4B,oBAAoB,GAAGC,uBAAU,CAACC,OAAO,CAAC9B,YAAY,CAAC;IAC7D2B,mBAAmB,GAAG;MACpBI,eAAe,EAAEH,oBAAoB,EAAEG;IACzC,CAAC;EACH;EAEA,oBACEjF,KAAA,CAAAsE,aAAA,CAAC9D,OAAA,CAAAM,OAAM,EAAAoB,QAAA;IACLW,GAAG,EAAEqC,IAAI,IAAI;MACX3B,gBAAgB,CAACM,OAAO,GAAGqB,IAAI;MAE/B,IAAIzB,UAAU,KAAK,IAAI,EAAE;QACvB0B,OAAO,CAACC,IAAI,CACV,kGACF,CAAC;QACD;MACF;MAEA,MAAMC,WAAW,GAAG5B,UAAU,CAACI,OAAO;MAEtC,IAAIqB,IAAI,KAAK,IAAI,EAAE;QACjB;QACA,OAAOG,WAAW,CAACjC,QAAQ,CAAC;MAC9B,CAAC,MAAM;QACLiC,WAAW,CAACjC,QAAQ,CAAC,GAAG;UAAES,OAAO,EAAEqB;QAAK,CAAC;MAC3C;IACF,CAAE;IACFI,OAAO;IACPC,aAAa;IACbvC,aAAa,EAAEA,aAAc;IAC7BC,iBAAiB,EAAEA,iBAAkB;IACrCuC,cAAc,EAAEzC,YAAY,EAAE0C,UAAU,IAAI,KAAM;IAClDtC,KAAK,EAAE,CAACA,KAAK,EAAE0B,mBAAmB;EAAE,GAChCvB,IAAI,GACPQ,eAAe,gBACd9D,KAAA,CAAAsE,aAAA,CAAC7D,YAAA,CAAAK,OAAW;IAACqC,KAAK,EAAEqB,MAAM,CAACE;EAAU,gBACnC1E,KAAA,CAAAsE,aAAA,CAAC9D,OAAA,CAAAM,OAAM;IACLwE,OAAO;IACPC,aAAa;IACbvC,aAAa,EAAEA,aAAc;IAC7BwC,cAAc,EAAEzC,YAAY,EAAE0C,UAAU,IAAI,KAAM;IAClDtC,KAAK,EAAE4B,uBAAU,CAACW;EAAa,GAC9BrB,OACK,CACG,CAAC,GAEdA,OAEI,CAAC;AAEb;AAAC,IAAAsB,QAAA,GAAAC,OAAA,CAAA9E,OAAA,gBAEcd,KAAK,CAAC6F,UAAU,CAAClD,eAAe,CAAC;AAEhD,MAAM6B,MAAM,GAAGO,uBAAU,CAACe,MAAM,CAAC;EAC/BpB,SAAS,EAAE;IACTqB,IAAI,EAAE;EACR,CAAC;EACDtB,QAAQ,EAAE;IACRuB,QAAQ,EAAE,UAAU;IACpBC,GAAG,EAAE,CAAC;IACNC,KAAK,EAAE,CAAC;IACRC,GAAG,EAAE;EACP;AACF,CAAC,CAAC"}
|
|
@@ -7,5 +7,13 @@ import ScreenFooterNativeComponent from '../fabric/ScreenFooterNativeComponent';
|
|
|
7
7
|
function ScreenFooter(props) {
|
|
8
8
|
return /*#__PURE__*/React.createElement(ScreenFooterNativeComponent, props);
|
|
9
9
|
}
|
|
10
|
+
export function FooterComponent(_ref) {
|
|
11
|
+
let {
|
|
12
|
+
children
|
|
13
|
+
} = _ref;
|
|
14
|
+
return /*#__PURE__*/React.createElement(ScreenFooter, {
|
|
15
|
+
collapsable: false
|
|
16
|
+
}, children);
|
|
17
|
+
}
|
|
10
18
|
export default ScreenFooter;
|
|
11
19
|
//# sourceMappingURL=ScreenFooter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","ScreenFooterNativeComponent","ScreenFooter","props","createElement"],"sourceRoot":"../../../src","sources":["components/ScreenFooter.tsx"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,OAAOC,2BAA2B,MAAM,uCAAuC;;AAE/E;AACA;AACA;AACA,SAASC,YAAYA,CAACC,KAAgB,EAAE;EACtC,oBAAOH,KAAA,CAAAI,aAAA,CAACH,2BAA2B,EAAKE,KAAQ,CAAC;AACnD;AAEA,
|
|
1
|
+
{"version":3,"names":["React","ScreenFooterNativeComponent","ScreenFooter","props","createElement","FooterComponent","_ref","children","collapsable"],"sourceRoot":"../../../src","sources":["components/ScreenFooter.tsx"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,OAAOC,2BAA2B,MAAM,uCAAuC;;AAE/E;AACA;AACA;AACA,SAASC,YAAYA,CAACC,KAAgB,EAAE;EACtC,oBAAOH,KAAA,CAAAI,aAAA,CAACH,2BAA2B,EAAKE,KAAQ,CAAC;AACnD;AAMA,OAAO,SAASE,eAAeA,CAAAC,IAAA,EAA4B;EAAA,IAA3B;IAAEC;EAAsB,CAAC,GAAAD,IAAA;EACvD,oBAAON,KAAA,CAAAI,aAAA,CAACF,YAAY;IAACM,WAAW,EAAE;EAAM,GAAED,QAAuB,CAAC;AACpE;AAEA,eAAeL,YAAY"}
|
|
@@ -7,6 +7,7 @@ import { ScreenStackHeaderConfig } from './ScreenStackHeaderConfig';
|
|
|
7
7
|
import Screen from './Screen';
|
|
8
8
|
import ScreenStack from './ScreenStack';
|
|
9
9
|
import { RNSScreensRefContext } from '../contexts';
|
|
10
|
+
import { FooterComponent } from './ScreenFooter';
|
|
10
11
|
function ScreenStackItem(_ref, ref) {
|
|
11
12
|
let {
|
|
12
13
|
children,
|
|
@@ -16,6 +17,8 @@ function ScreenStackItem(_ref, ref) {
|
|
|
16
17
|
contentStyle,
|
|
17
18
|
style,
|
|
18
19
|
screenId,
|
|
20
|
+
// eslint-disable-next-line camelcase
|
|
21
|
+
unstable_sheetFooter,
|
|
19
22
|
...rest
|
|
20
23
|
} = _ref;
|
|
21
24
|
const currentScreenRef = React.useRef(null);
|
|
@@ -30,7 +33,7 @@ function ScreenStackItem(_ref, ref) {
|
|
|
30
33
|
const content = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DebugContainer, {
|
|
31
34
|
style: [stackPresentation === 'formSheet' ? Platform.OS === 'ios' ? styles.absolute : null : styles.container, contentStyle],
|
|
32
35
|
stackPresentation: stackPresentation ?? 'push'
|
|
33
|
-
}, children), /*#__PURE__*/React.createElement(ScreenStackHeaderConfig, headerConfig));
|
|
36
|
+
}, children), /*#__PURE__*/React.createElement(ScreenStackHeaderConfig, headerConfig), stackPresentation === 'formSheet' && unstable_sheetFooter && /*#__PURE__*/React.createElement(FooterComponent, null, unstable_sheetFooter()));
|
|
34
37
|
|
|
35
38
|
// We take backgroundColor from contentStyle and apply it on Screen.
|
|
36
39
|
// This allows to workaround one issue with truncated
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Platform","StyleSheet","warnOnce","DebugContainer","ScreenStackHeaderConfig","Screen","ScreenStack","RNSScreensRefContext","ScreenStackItem","_ref","ref","children","headerConfig","activityState","stackPresentation","contentStyle","style","screenId","rest","currentScreenRef","useRef","screenRefs","useContext","useImperativeHandle","current","isHeaderInModal","OS","hidden","headerHiddenPreviousRef","useEffect","content","createElement","Fragment","styles","absolute","container","internalScreenStyle","flattenContentStyles","flatten","backgroundColor","_extends","node","console","warn","currentRefs","enabled","isNativeStack","hasLargeHeader","largeTitle","absoluteFill","forwardRef","create","flex","position","top","start","end"],"sourceRoot":"../../../src","sources":["components/ScreenStackItem.tsx"],"mappings":";AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SACEC,QAAQ,EAERC,UAAU,QAGL,cAAc;AACrB,OAAOC,QAAQ,MAAM,WAAW;AAEhC,OAAOC,cAAc,MAAM,kBAAkB;AAE7C,SAASC,uBAAuB,QAAQ,2BAA2B;AACnE,OAAOC,MAAM,MAAM,UAAU;AAC7B,OAAOC,WAAW,MAAM,eAAe;AACvC,SAASC,oBAAoB,QAAQ,aAAa;
|
|
1
|
+
{"version":3,"names":["React","Platform","StyleSheet","warnOnce","DebugContainer","ScreenStackHeaderConfig","Screen","ScreenStack","RNSScreensRefContext","FooterComponent","ScreenStackItem","_ref","ref","children","headerConfig","activityState","stackPresentation","contentStyle","style","screenId","unstable_sheetFooter","rest","currentScreenRef","useRef","screenRefs","useContext","useImperativeHandle","current","isHeaderInModal","OS","hidden","headerHiddenPreviousRef","useEffect","content","createElement","Fragment","styles","absolute","container","internalScreenStyle","flattenContentStyles","flatten","backgroundColor","_extends","node","console","warn","currentRefs","enabled","isNativeStack","hasLargeHeader","largeTitle","absoluteFill","forwardRef","create","flex","position","top","start","end"],"sourceRoot":"../../../src","sources":["components/ScreenStackItem.tsx"],"mappings":"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"}
|
|
@@ -4,5 +4,9 @@ import { ViewProps } from 'react-native';
|
|
|
4
4
|
* Unstable API
|
|
5
5
|
*/
|
|
6
6
|
declare function ScreenFooter(props: ViewProps): React.JSX.Element;
|
|
7
|
+
type FooterProps = {
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
};
|
|
10
|
+
export declare function FooterComponent({ children }: FooterProps): React.JSX.Element;
|
|
7
11
|
export default ScreenFooter;
|
|
8
12
|
//# sourceMappingURL=ScreenFooter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScreenFooter.d.ts","sourceRoot":"","sources":["../../../src/components/ScreenFooter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC;;GAEG;AACH,iBAAS,YAAY,CAAC,KAAK,EAAE,SAAS,qBAErC;AAED,eAAe,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"ScreenFooter.d.ts","sourceRoot":"","sources":["../../../src/components/ScreenFooter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC;;GAEG;AACH,iBAAS,YAAY,CAAC,KAAK,EAAE,SAAS,qBAErC;AAED,KAAK,WAAW,GAAG;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,WAAW,qBAExD;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScreenStackItem.d.ts","sourceRoot":"","sources":["../../../src/components/ScreenStackItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAEL,KAAK,SAAS,EAEd,KAAK,SAAS,EACd,IAAI,EACL,MAAM,cAAc,CAAC;AAItB,OAAO,EAAE,WAAW,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ScreenStackItem.d.ts","sourceRoot":"","sources":["../../../src/components/ScreenStackItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAEL,KAAK,SAAS,EAEd,KAAK,SAAS,EACd,IAAI,EACL,MAAM,cAAc,CAAC;AAItB,OAAO,EAAE,WAAW,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAOrE,KAAK,KAAK,GAAG,IAAI,CACf,WAAW,EACX,SAAS,GAAG,eAAe,GAAG,gBAAgB,CAC/C,GAAG;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,4BAA4B,CAAC;IAC5C,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACrC,CAAC;;AAmIF,wBAAiD"}
|
package/package.json
CHANGED
|
@@ -9,4 +9,12 @@ function ScreenFooter(props: ViewProps) {
|
|
|
9
9
|
return <ScreenFooterNativeComponent {...props} />;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
+
type FooterProps = {
|
|
13
|
+
children?: React.ReactNode;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export function FooterComponent({ children }: FooterProps) {
|
|
17
|
+
return <ScreenFooter collapsable={false}>{children}</ScreenFooter>;
|
|
18
|
+
}
|
|
19
|
+
|
|
12
20
|
export default ScreenFooter;
|
|
@@ -14,6 +14,7 @@ import { ScreenStackHeaderConfig } from './ScreenStackHeaderConfig';
|
|
|
14
14
|
import Screen from './Screen';
|
|
15
15
|
import ScreenStack from './ScreenStack';
|
|
16
16
|
import { RNSScreensRefContext } from '../contexts';
|
|
17
|
+
import { FooterComponent } from './ScreenFooter';
|
|
17
18
|
|
|
18
19
|
type Props = Omit<
|
|
19
20
|
ScreenProps,
|
|
@@ -33,6 +34,8 @@ function ScreenStackItem(
|
|
|
33
34
|
contentStyle,
|
|
34
35
|
style,
|
|
35
36
|
screenId,
|
|
37
|
+
// eslint-disable-next-line camelcase
|
|
38
|
+
unstable_sheetFooter,
|
|
36
39
|
...rest
|
|
37
40
|
}: Props,
|
|
38
41
|
ref: React.ForwardedRef<View>,
|
|
@@ -86,6 +89,10 @@ function ScreenStackItem(
|
|
|
86
89
|
* for detailed explanation.
|
|
87
90
|
*/}
|
|
88
91
|
<ScreenStackHeaderConfig {...headerConfig} />
|
|
92
|
+
{/* eslint-disable-next-line camelcase */}
|
|
93
|
+
{stackPresentation === 'formSheet' && unstable_sheetFooter && (
|
|
94
|
+
<FooterComponent>{unstable_sheetFooter()}</FooterComponent>
|
|
95
|
+
)}
|
|
89
96
|
</>
|
|
90
97
|
);
|
|
91
98
|
|