react-native-screens 4.12.0 → 4.13.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/RNScreens.podspec +29 -2
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +4 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +9 -1
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragmentWrapper.kt +0 -1
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +4 -4
- package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/DimmingView.kt +4 -4
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/DimmingViewManager.kt +8 -2
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenAnimationDelegate.kt +1 -2
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenEventEmitter.kt +16 -13
- package/android/src/main/java/com/swmansion/rnscreens/gamma/common/BaseEventEmitter.kt +22 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/common/FragmentProviding.kt +11 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/common/NamingAwareEventType.kt +13 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/helpers/EventHelpers.kt +6 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/helpers/FragmentManagerHelper.kt +76 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/helpers/SystemDrawable.kt +33 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreen.kt +101 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreenDelegate.kt +17 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreenEventEmitter.kt +46 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreenFragment.kt +37 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreenViewManager.kt +178 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt +433 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostEventEmitter.kt +14 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostViewManager.kt +177 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/event/TabScreenDidAppearEvent.kt +30 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/event/TabScreenDidDisappearEvent.kt +30 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/event/TabScreenWillAppearEvent.kt +30 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/event/TabScreenWillDisappearEvent.kt +30 -0
- package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/event/TabsHostNativeFocusChangeEvent.kt +36 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/views/ChildDrawingOrderStrategyImpl.kt +0 -1
- package/android/src/main/java/com/swmansion/rnscreens/transition/ExternalBoundaryValuesEvaluator.kt +9 -2
- package/android/src/main/java/com/swmansion/rnscreens/utils/FragmentTransactionKt.kt +4 -1
- package/android/src/main/jni/rnscreens.h +1 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSBottomTabsManagerDelegate.java +76 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSBottomTabsManagerInterface.java +33 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSBottomTabsScreenManagerDelegate.java +97 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSBottomTabsScreenManagerInterface.java +40 -0
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt +2 -2
- package/android/src/versioned/backgroundcolor/76/ViewBackgroundUtils.kt +0 -1
- package/android/src/versioned/backgroundcolor/latest/ViewBackgroundUtils.kt +0 -3
- package/android/src/versioned/pointerevents/77/com/swmansion/rnscreens/PointerEventsBoxNoneImpl.kt +1 -1
- package/android/src/versioned/pointerevents/latest/com/swmansion/rnscreens/PointerEventsBoxNoneImpl.kt +1 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSBottomTabsComponentDescriptor.h +31 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSBottomTabsShadowNode.cpp +20 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSBottomTabsShadowNode.h +32 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSBottomTabsState.cpp +22 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSBottomTabsState.h +44 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +8 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSSplitViewScreenComponentDescriptor.h +40 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSSplitViewScreenShadowNode.cpp +13 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSSplitViewScreenShadowNode.h +36 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSSplitViewScreenState.h +32 -0
- package/cpp/RNScreensTurboModule.h +5 -0
- package/ios/RNSEnums.h +6 -0
- package/ios/RNSScreen.h +2 -1
- package/ios/RNSScreen.mm +48 -1
- package/ios/RNSScreenContainer.mm +6 -0
- package/ios/RNSScreenStack.h +3 -1
- package/ios/RNSScreenStack.mm +39 -2
- package/ios/RNSScreenStackHeaderConfig.mm +1 -1
- package/ios/RNSScrollViewBehaviorOverriding.h +24 -0
- package/ios/RNSScrollViewFinder.h +13 -0
- package/ios/RNSScrollViewFinder.mm +22 -0
- package/ios/RNSScrollViewHelper.h +10 -0
- package/ios/RNSScrollViewHelper.mm +15 -0
- package/ios/RNScreens-Bridging-Header.h +4 -0
- package/ios/UIScrollView+RNScreens.h +14 -0
- package/ios/UIScrollView+RNScreens.mm +15 -0
- package/ios/bottom-tabs/RCTConvert+RNSBottomTabs.h +18 -0
- package/ios/bottom-tabs/RCTConvert+RNSBottomTabs.mm +25 -0
- package/ios/bottom-tabs/RNSBottomTabsHostComponentView.h +80 -0
- package/ios/bottom-tabs/RNSBottomTabsHostComponentView.mm +486 -0
- package/ios/bottom-tabs/RNSBottomTabsHostComponentViewManager.h +11 -0
- package/ios/bottom-tabs/RNSBottomTabsHostComponentViewManager.mm +48 -0
- package/ios/bottom-tabs/RNSBottomTabsHostEventEmitter.h +53 -0
- package/ios/bottom-tabs/RNSBottomTabsHostEventEmitter.mm +57 -0
- package/ios/bottom-tabs/RNSBottomTabsScreenComponentView.h +95 -0
- package/ios/bottom-tabs/RNSBottomTabsScreenComponentView.mm +492 -0
- package/ios/bottom-tabs/RNSBottomTabsScreenComponentViewManager.h +9 -0
- package/ios/bottom-tabs/RNSBottomTabsScreenComponentViewManager.mm +55 -0
- package/ios/bottom-tabs/RNSBottomTabsScreenEventEmitter.h +53 -0
- package/ios/bottom-tabs/RNSBottomTabsScreenEventEmitter.mm +106 -0
- package/ios/bottom-tabs/RNSBottomTabsSpecialEffectsSupporting.h +17 -0
- package/ios/bottom-tabs/RNSTabBarAppearanceCoordinator.h +34 -0
- package/ios/bottom-tabs/RNSTabBarAppearanceCoordinator.mm +243 -0
- package/ios/bottom-tabs/RNSTabBarAppearanceProvider.h +23 -0
- package/ios/bottom-tabs/RNSTabBarController.h +132 -0
- package/ios/bottom-tabs/RNSTabBarController.mm +206 -0
- package/ios/bottom-tabs/RNSTabBarControllerDelegate.h +9 -0
- package/ios/bottom-tabs/RNSTabBarControllerDelegate.mm +63 -0
- package/ios/bottom-tabs/RNSTabsScreenViewController.h +42 -0
- package/ios/bottom-tabs/RNSTabsScreenViewController.mm +105 -0
- package/ios/bottom-tabs/extensions/RNSBottomTabsHostComponentView+RNSImageLoader.h +21 -0
- package/ios/bottom-tabs/extensions/RNSBottomTabsHostComponentView+RNSImageLoader.mm +22 -0
- package/ios/bridging/RNSReactBaseView.h +31 -0
- package/ios/bridging/RNSReactBaseView.mm +5 -0
- package/ios/bridging/Swift-Bridging.h +7 -0
- package/ios/conversion/RNSConversions-BottomTabs.mm +216 -0
- package/ios/conversion/RNSConversions-SplitView.mm +63 -0
- package/ios/conversion/RNSConversions.h +53 -0
- package/ios/gamma/ReactMountingTransactionObserving.swift +7 -0
- package/ios/gamma/split-view/RNSSplitViewHostComponentView.h +29 -0
- package/ios/gamma/split-view/RNSSplitViewHostComponentView.mm +209 -0
- package/ios/gamma/split-view/RNSSplitViewHostComponentViewManager.h +11 -0
- package/ios/gamma/split-view/RNSSplitViewHostComponentViewManager.mm +7 -0
- package/ios/gamma/split-view/RNSSplitViewHostController.swift +98 -0
- package/ios/gamma/split-view/RNSSplitViewNavigationController.swift +31 -0
- package/ios/gamma/split-view/RNSSplitViewScreenComponentView.h +24 -0
- package/ios/gamma/split-view/RNSSplitViewScreenComponentView.mm +106 -0
- package/ios/gamma/split-view/RNSSplitViewScreenComponentViewManager.h +11 -0
- package/ios/gamma/split-view/RNSSplitViewScreenComponentViewManager.mm +7 -0
- package/ios/gamma/split-view/RNSSplitViewScreenController.swift +86 -0
- package/ios/gamma/split-view/RNSSplitViewScreenShadowStateProxy.h +35 -0
- package/ios/gamma/split-view/RNSSplitViewScreenShadowStateProxy.mm +56 -0
- package/ios/gamma/stack/RNSScreenStackHostComponentView.h +16 -0
- package/ios/gamma/stack/RNSScreenStackHostComponentView.mm +143 -0
- package/ios/gamma/stack/RNSScreenStackHostComponentViewManager.h +11 -0
- package/ios/gamma/stack/RNSScreenStackHostComponentViewManager.mm +7 -0
- package/ios/gamma/stack/RNSStackController.swift +65 -0
- package/ios/gamma/stack/RNSStackScreenComponentEventEmitter.h +37 -0
- package/ios/gamma/stack/RNSStackScreenComponentEventEmitter.mm +60 -0
- package/ios/gamma/stack/RNSStackScreenComponentView.h +36 -0
- package/ios/gamma/stack/RNSStackScreenComponentView.mm +124 -0
- package/ios/gamma/stack/RNSStackScreenComponentViewManager.h +11 -0
- package/ios/gamma/stack/RNSStackScreenComponentViewManager.mm +7 -0
- package/ios/gamma/stack/RNSStackScreenController.swift +56 -0
- package/ios/utils/NSString+RNSUtility.h +17 -0
- package/ios/utils/NSString+RNSUtility.mm +37 -0
- package/lib/commonjs/components/BottomTabs.js +54 -0
- package/lib/commonjs/components/BottomTabs.js.map +1 -0
- package/lib/commonjs/components/BottomTabsScreen.js +149 -0
- package/lib/commonjs/components/BottomTabsScreen.js.map +1 -0
- package/lib/commonjs/components/gamma/ScreenStackHost.js +27 -0
- package/lib/commonjs/components/gamma/ScreenStackHost.js.map +1 -0
- package/lib/commonjs/components/gamma/SplitViewHost.js +57 -0
- package/lib/commonjs/components/gamma/SplitViewHost.js.map +1 -0
- package/lib/commonjs/components/gamma/SplitViewScreen.js +22 -0
- package/lib/commonjs/components/gamma/SplitViewScreen.js.map +1 -0
- package/lib/commonjs/components/gamma/StackScreen.js +51 -0
- package/lib/commonjs/components/gamma/StackScreen.js.map +1 -0
- package/lib/commonjs/fabric/BottomTabsNativeComponent.js +19 -0
- package/lib/commonjs/fabric/BottomTabsNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/BottomTabsScreenNativeComponent.js +14 -0
- package/lib/commonjs/fabric/BottomTabsScreenNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/gamma/ScreenStackHostNativeComponent.js +11 -0
- package/lib/commonjs/fabric/gamma/ScreenStackHostNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/gamma/SplitViewHostNativeComponent.js +11 -0
- package/lib/commonjs/fabric/gamma/SplitViewHostNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/gamma/SplitViewScreenNativeComponent.js +13 -0
- package/lib/commonjs/fabric/gamma/SplitViewScreenNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/gamma/StackScreenNativeComponent.js +12 -0
- package/lib/commonjs/fabric/gamma/StackScreenNativeComponent.js.map +1 -0
- package/lib/commonjs/flags.js +70 -0
- package/lib/commonjs/flags.js.map +1 -0
- package/lib/commonjs/index.js +66 -3
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils.js +0 -28
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/module/components/BottomTabs.js +48 -0
- package/lib/module/components/BottomTabs.js.map +1 -0
- package/lib/module/components/BottomTabsScreen.js +144 -0
- package/lib/module/components/BottomTabsScreen.js.map +1 -0
- package/lib/module/components/gamma/ScreenStackHost.js +20 -0
- package/lib/module/components/gamma/ScreenStackHost.js.map +1 -0
- package/lib/module/components/gamma/SplitViewHost.js +50 -0
- package/lib/module/components/gamma/SplitViewHost.js.map +1 -0
- package/lib/module/components/gamma/SplitViewScreen.js +15 -0
- package/lib/module/components/gamma/SplitViewScreen.js.map +1 -0
- package/lib/module/components/gamma/StackScreen.js +44 -0
- package/lib/module/components/gamma/StackScreen.js.map +1 -0
- package/lib/module/fabric/BottomTabsNativeComponent.js +15 -0
- package/lib/module/fabric/BottomTabsNativeComponent.js.map +1 -0
- package/lib/module/fabric/BottomTabsScreenNativeComponent.js +12 -0
- package/lib/module/fabric/BottomTabsScreenNativeComponent.js.map +1 -0
- package/lib/module/fabric/gamma/ScreenStackHostNativeComponent.js +5 -0
- package/lib/module/fabric/gamma/ScreenStackHostNativeComponent.js.map +1 -0
- package/lib/module/fabric/gamma/SplitViewHostNativeComponent.js +5 -0
- package/lib/module/fabric/gamma/SplitViewHostNativeComponent.js.map +1 -0
- package/lib/module/fabric/gamma/SplitViewScreenNativeComponent.js +7 -0
- package/lib/module/fabric/gamma/SplitViewScreenNativeComponent.js.map +1 -0
- package/lib/module/fabric/gamma/StackScreenNativeComponent.js +8 -0
- package/lib/module/fabric/gamma/StackScreenNativeComponent.js.map +1 -0
- package/lib/module/flags.js +64 -0
- package/lib/module/flags.js.map +1 -0
- package/lib/module/index.js +16 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils.js +0 -27
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/components/BottomTabs.d.ts +30 -0
- package/lib/typescript/components/BottomTabs.d.ts.map +1 -0
- package/lib/typescript/components/BottomTabsScreen.d.ts +56 -0
- package/lib/typescript/components/BottomTabsScreen.d.ts.map +1 -0
- package/lib/typescript/components/gamma/ScreenStackHost.d.ts +13 -0
- package/lib/typescript/components/gamma/ScreenStackHost.d.ts.map +1 -0
- package/lib/typescript/components/gamma/SplitViewHost.d.ts +13 -0
- package/lib/typescript/components/gamma/SplitViewHost.d.ts.map +1 -0
- package/lib/typescript/components/gamma/SplitViewScreen.d.ts +13 -0
- package/lib/typescript/components/gamma/SplitViewScreen.d.ts.map +1 -0
- package/lib/typescript/components/gamma/StackScreen.d.ts +21 -0
- package/lib/typescript/components/gamma/StackScreen.d.ts.map +1 -0
- package/lib/typescript/fabric/BottomTabsNativeComponent.d.ts +31 -0
- package/lib/typescript/fabric/BottomTabsNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/BottomTabsScreenNativeComponent.d.ts +51 -0
- package/lib/typescript/fabric/BottomTabsScreenNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/gamma/ScreenStackHostNativeComponent.d.ts +7 -0
- package/lib/typescript/fabric/gamma/ScreenStackHostNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/gamma/SplitViewHostNativeComponent.d.ts +16 -0
- package/lib/typescript/fabric/gamma/SplitViewHostNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/gamma/SplitViewScreenNativeComponent.d.ts +7 -0
- package/lib/typescript/fabric/gamma/SplitViewScreenNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/gamma/StackScreenNativeComponent.d.ts +15 -0
- package/lib/typescript/fabric/gamma/StackScreenNativeComponent.d.ts.map +1 -0
- package/lib/typescript/flags.d.ts +45 -0
- package/lib/typescript/flags.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +14 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/utils.d.ts +0 -26
- package/lib/typescript/utils.d.ts.map +1 -1
- package/package.json +34 -6
- package/react-native.config.js +2 -1
- package/src/components/BottomTabs.tsx +115 -0
- package/src/components/BottomTabsScreen.tsx +291 -0
- package/src/components/gamma/ScreenStackHost.tsx +32 -0
- package/src/components/gamma/SplitViewHost.tsx +84 -0
- package/src/components/gamma/SplitViewScreen.tsx +26 -0
- package/src/components/gamma/StackScreen.tsx +64 -0
- package/src/fabric/BottomTabsNativeComponent.ts +82 -0
- package/src/fabric/BottomTabsScreenNativeComponent.ts +107 -0
- package/src/fabric/gamma/ScreenStackHostNativeComponent.ts +8 -0
- package/src/fabric/gamma/SplitViewHostNativeComponent.ts +39 -0
- package/src/fabric/gamma/SplitViewScreenNativeComponent.ts +10 -0
- package/src/fabric/gamma/StackScreenNativeComponent.ts +25 -0
- package/src/flags.ts +72 -0
- package/src/index.tsx +18 -1
- package/src/utils.ts +0 -28
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#import "RNSStackScreenComponentEventEmitter.h"
|
|
2
|
+
|
|
3
|
+
#import <React/RCTConversions.h>
|
|
4
|
+
#import <React/RCTLog.h>
|
|
5
|
+
#import <react/renderer/components/rnscreens/EventEmitters.h>
|
|
6
|
+
|
|
7
|
+
@implementation RNSStackScreenComponentEventEmitter {
|
|
8
|
+
std::shared_ptr<const react::RNSStackScreenEventEmitter> _reactEventEmitter;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
- (BOOL)emitOnWillAppear
|
|
12
|
+
{
|
|
13
|
+
if (_reactEventEmitter != nullptr) {
|
|
14
|
+
_reactEventEmitter->onWillAppear({});
|
|
15
|
+
return YES;
|
|
16
|
+
} else {
|
|
17
|
+
RCTLogWarn(@"[RNScreens] Skipped OnWillAppear event emission due to nullish emitter");
|
|
18
|
+
return NO;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
- (BOOL)emitOnDidAppear
|
|
23
|
+
{
|
|
24
|
+
if (_reactEventEmitter != nullptr) {
|
|
25
|
+
_reactEventEmitter->onDidAppear({});
|
|
26
|
+
return YES;
|
|
27
|
+
} else {
|
|
28
|
+
RCTLogWarn(@"[RNScreens] Skipped OnDidAppear event emission due to nullish emitter");
|
|
29
|
+
return NO;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
- (BOOL)emitOnWillDisappear
|
|
34
|
+
{
|
|
35
|
+
if (_reactEventEmitter != nullptr) {
|
|
36
|
+
_reactEventEmitter->onWillDisappear({});
|
|
37
|
+
return YES;
|
|
38
|
+
} else {
|
|
39
|
+
RCTLogWarn(@"[RNScreens] Skipped OnWillDisappear event emission due to nullish emitter");
|
|
40
|
+
return NO;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
- (BOOL)emitOnDidDisappear
|
|
45
|
+
{
|
|
46
|
+
if (_reactEventEmitter != nullptr) {
|
|
47
|
+
_reactEventEmitter->onDidDisappear({});
|
|
48
|
+
return YES;
|
|
49
|
+
} else {
|
|
50
|
+
RCTLogWarn(@"[RNScreens] Skipped OnDidDisappear event emission due to nullish emitter");
|
|
51
|
+
return NO;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
- (void)updateEventEmitter:(const std::shared_ptr<const react::RNSStackScreenEventEmitter> &)emitter
|
|
56
|
+
{
|
|
57
|
+
_reactEventEmitter = emitter;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#import "RNSReactBaseView.h"
|
|
2
|
+
#import "RNSStackScreenComponentEventEmitter.h"
|
|
3
|
+
|
|
4
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
5
|
+
|
|
6
|
+
@class RNSStackScreenController;
|
|
7
|
+
@class RNSScreenStackHostComponentView;
|
|
8
|
+
|
|
9
|
+
typedef NS_ENUM(int, RNSScreenStackLifecycleState) {
|
|
10
|
+
RNSScreenStackLifecycleInitial = 0,
|
|
11
|
+
RNSScreenStackLifecycleDetached = 1,
|
|
12
|
+
RNSScreenStackLifecycleAttached = 2,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
@interface RNSStackScreenComponentView : RNSReactBaseView
|
|
16
|
+
|
|
17
|
+
@property (nonatomic, weak, readwrite, nullable) RNSScreenStackHostComponentView *stackHost;
|
|
18
|
+
@property (nonatomic, strong, readonly, nonnull) RNSStackScreenController *controller;
|
|
19
|
+
|
|
20
|
+
@property (nonatomic, strong, readonly, nullable) NSString *screenKey;
|
|
21
|
+
@property (nonatomic, readonly) RNSScreenStackLifecycleState maxLifecycleState;
|
|
22
|
+
|
|
23
|
+
@end
|
|
24
|
+
|
|
25
|
+
#pragma mark - Events
|
|
26
|
+
|
|
27
|
+
@interface RNSStackScreenComponentView ()
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Use returned object to emit appropriate React Events to Element Tree.
|
|
31
|
+
*/
|
|
32
|
+
- (nonnull RNSStackScreenComponentEventEmitter *)reactEventEmitter;
|
|
33
|
+
|
|
34
|
+
@end
|
|
35
|
+
|
|
36
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
#import "RNSStackScreenComponentView.h"
|
|
2
|
+
#import <React/RCTConversions.h>
|
|
3
|
+
#import <React/RCTMountingTransactionObserving.h>
|
|
4
|
+
#import <react/renderer/components/rnscreens/ComponentDescriptors.h>
|
|
5
|
+
#import <react/renderer/components/rnscreens/EventEmitters.h>
|
|
6
|
+
#import <react/renderer/components/rnscreens/Props.h>
|
|
7
|
+
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
8
|
+
|
|
9
|
+
#import "Swift-Bridging.h"
|
|
10
|
+
|
|
11
|
+
namespace react = facebook::react;
|
|
12
|
+
|
|
13
|
+
@interface RNSStackScreenComponentView () <RCTMountingTransactionObserving>
|
|
14
|
+
@end
|
|
15
|
+
|
|
16
|
+
#pragma mark - View implementation
|
|
17
|
+
|
|
18
|
+
@implementation RNSStackScreenComponentView {
|
|
19
|
+
RNSStackScreenController *_Nonnull _controller;
|
|
20
|
+
RNSStackScreenComponentEventEmitter *_Nonnull _reactEventEmitter;
|
|
21
|
+
|
|
22
|
+
// Flags
|
|
23
|
+
BOOL _needsLifecycleStateUpdate;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
- (instancetype)initWithFrame:(CGRect)frame
|
|
27
|
+
{
|
|
28
|
+
if (self = [super initWithFrame:frame]) {
|
|
29
|
+
[self initState];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return self;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
- (void)initState
|
|
36
|
+
{
|
|
37
|
+
[self resetProps];
|
|
38
|
+
[self setupController];
|
|
39
|
+
|
|
40
|
+
_reactEventEmitter = [RNSStackScreenComponentEventEmitter new];
|
|
41
|
+
|
|
42
|
+
_needsLifecycleStateUpdate = NO;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
- (void)resetProps
|
|
46
|
+
{
|
|
47
|
+
static const auto defaultProps = std::make_shared<const react::RNSScreenStackProps>();
|
|
48
|
+
_props = defaultProps;
|
|
49
|
+
|
|
50
|
+
// container state
|
|
51
|
+
_screenKey = nil;
|
|
52
|
+
_maxLifecycleState = RNSScreenStackLifecycleInitial;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
- (void)setupController
|
|
56
|
+
{
|
|
57
|
+
_controller = [[RNSStackScreenController alloc] initWithComponentView:self];
|
|
58
|
+
_controller.view = self;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
#pragma mark - Events
|
|
62
|
+
|
|
63
|
+
- (nonnull RNSStackScreenComponentEventEmitter *)reactEventEmitter
|
|
64
|
+
{
|
|
65
|
+
RCTAssert(_reactEventEmitter != nil, @"[RNScreens] Attempt to access uninitialized _reactEventEmitter");
|
|
66
|
+
return _reactEventEmitter;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
#pragma mark - RCTViewComponentViewProtocol
|
|
70
|
+
|
|
71
|
+
- (void)updateProps:(const facebook::react::Props::Shared &)props
|
|
72
|
+
oldProps:(const facebook::react::Props::Shared &)oldProps
|
|
73
|
+
{
|
|
74
|
+
const auto &oldComponentProps = *std::static_pointer_cast<const react::RNSStackScreenProps>(_props);
|
|
75
|
+
const auto &newComponentProps = *std::static_pointer_cast<const react::RNSStackScreenProps>(props);
|
|
76
|
+
|
|
77
|
+
if (oldComponentProps.maxLifecycleState != newComponentProps.maxLifecycleState) {
|
|
78
|
+
_maxLifecycleState = static_cast<RNSScreenStackLifecycleState>(newComponentProps.maxLifecycleState);
|
|
79
|
+
_needsLifecycleStateUpdate = YES;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (oldComponentProps.screenKey != newComponentProps.screenKey) {
|
|
83
|
+
RCTAssert(_screenKey == nil, @"[RNScreens] ScreenController cannot change its screenKey");
|
|
84
|
+
_screenKey = RCTNSStringFromStringNilIfEmpty(newComponentProps.screenKey);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
[super updateProps:props oldProps:oldProps];
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
- (void)finalizeUpdates:(RNComponentViewUpdateMask)updateMask
|
|
91
|
+
{
|
|
92
|
+
if (_needsLifecycleStateUpdate) {
|
|
93
|
+
_needsLifecycleStateUpdate = NO;
|
|
94
|
+
[_controller setNeedsLifecycleStateUpdate];
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
[super finalizeUpdates:updateMask];
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
- (void)updateEventEmitter:(const facebook::react::EventEmitter::Shared &)eventEmitter
|
|
101
|
+
{
|
|
102
|
+
[super updateEventEmitter:eventEmitter];
|
|
103
|
+
[_reactEventEmitter
|
|
104
|
+
updateEventEmitter:std::static_pointer_cast<const react::RNSStackScreenEventEmitter>(eventEmitter)];
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
+ (react::ComponentDescriptorProvider)componentDescriptorProvider
|
|
108
|
+
{
|
|
109
|
+
return react::concreteComponentDescriptorProvider<react::RNSStackScreenComponentDescriptor>();
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
+ (BOOL)shouldBeRecycled
|
|
113
|
+
{
|
|
114
|
+
// There won't be tens of instances of this component usually & it's easier for now.
|
|
115
|
+
// We could consider enabling it someday though.
|
|
116
|
+
return NO;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@end
|
|
120
|
+
|
|
121
|
+
Class<RCTComponentViewProtocol> RNSStackScreenCls(void)
|
|
122
|
+
{
|
|
123
|
+
return RNSStackScreenComponentView.class;
|
|
124
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import UIKit
|
|
3
|
+
|
|
4
|
+
@objc
|
|
5
|
+
public class RNSStackScreenController: UIViewController {
|
|
6
|
+
let screenStackComponentView: RNSStackScreenComponentView
|
|
7
|
+
private var reactEventEmitter: RNSStackScreenComponentEventEmitter {
|
|
8
|
+
return screenStackComponentView.reactEventEmitter()
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@objc public required init(componentView: RNSStackScreenComponentView) {
|
|
12
|
+
self.screenStackComponentView = componentView
|
|
13
|
+
super.init(nibName: nil, bundle: nil)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
required init?(coder aDecoder: NSCoder) {
|
|
17
|
+
return nil
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
func findStackController() -> RNSStackController? {
|
|
21
|
+
if let navCtrl = self.navigationController {
|
|
22
|
+
return navCtrl as? RNSStackController
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if let stackHost = self.screenStackComponentView.stackHost {
|
|
26
|
+
return stackHost.stackController
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return nil
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// MARK: Signals
|
|
33
|
+
|
|
34
|
+
@objc
|
|
35
|
+
public func setNeedsLifecycleStateUpdate() {
|
|
36
|
+
findStackController()?.setNeedsUpdateOfChildViewControllers()
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// MARK: Events
|
|
40
|
+
|
|
41
|
+
public override func viewWillAppear(_ animated: Bool) {
|
|
42
|
+
reactEventEmitter.emitOnWillAppear()
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public override func viewDidAppear(_ animated: Bool) {
|
|
46
|
+
reactEventEmitter.emitOnDidAppear()
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
public override func viewWillDisappear(_ animated: Bool) {
|
|
50
|
+
reactEventEmitter.emitOnWillDisappear()
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public override func viewDidDisappear(_ animated: Bool) {
|
|
54
|
+
reactEventEmitter.emitOnDidDisappear()
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
|
|
3
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
4
|
+
|
|
5
|
+
@interface NSString (RNSUtility)
|
|
6
|
+
|
|
7
|
+
+ (BOOL)rnscreens_isBlankOrNull:(NSString *)string;
|
|
8
|
+
|
|
9
|
+
+ (nullable NSString *)rnscreens_stringOrNilIfBlank:(NSString *)string;
|
|
10
|
+
|
|
11
|
+
+ (BOOL)rnscreens_isEmptyOrNull:(NSString *)string;
|
|
12
|
+
|
|
13
|
+
+ (nullable NSString *)rnscreens_stringOrNilIfEmpty:(NSString *)string;
|
|
14
|
+
|
|
15
|
+
@end
|
|
16
|
+
|
|
17
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#import "NSString+RNSUtility.h"
|
|
2
|
+
|
|
3
|
+
@implementation NSString (RNSUtility)
|
|
4
|
+
|
|
5
|
+
+ (BOOL)rnscreens_isBlankOrNull:(NSString *)string
|
|
6
|
+
{
|
|
7
|
+
if (string == nil) {
|
|
8
|
+
return YES;
|
|
9
|
+
}
|
|
10
|
+
return [[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
+ (BOOL)rnscreens_isEmptyOrNull:(NSString *)string
|
|
14
|
+
{
|
|
15
|
+
if (string == nil) {
|
|
16
|
+
return YES;
|
|
17
|
+
}
|
|
18
|
+
return [string length] == 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
+ (nullable NSString *)rnscreens_stringOrNilIfBlank:(NSString *)string
|
|
22
|
+
{
|
|
23
|
+
if ([NSString rnscreens_isBlankOrNull:string]) {
|
|
24
|
+
return nil;
|
|
25
|
+
}
|
|
26
|
+
return string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
+ (nullable NSString *)rnscreens_stringOrNilIfEmpty:(NSString *)string
|
|
30
|
+
{
|
|
31
|
+
if ([NSString rnscreens_isEmptyOrNull:string]) {
|
|
32
|
+
return nil;
|
|
33
|
+
}
|
|
34
|
+
return string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _BottomTabsNativeComponent = _interopRequireDefault(require("../fabric/BottomTabsNativeComponent"));
|
|
10
|
+
var _reactNative = require("react-native");
|
|
11
|
+
var _flags = _interopRequireDefault(require("../flags"));
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
14
|
+
/**
|
|
15
|
+
* EXPERIMENTAL API, MIGHT CHANGE W/O ANY NOTICE
|
|
16
|
+
*/
|
|
17
|
+
function BottomTabs(props) {
|
|
18
|
+
console.info(`BottomTabs render`);
|
|
19
|
+
const {
|
|
20
|
+
onNativeFocusChange,
|
|
21
|
+
experimentalControlNavigationStateInJS = _flags.default.experiment.controlledBottomTabs,
|
|
22
|
+
...filteredProps
|
|
23
|
+
} = props;
|
|
24
|
+
const componentNodeRef = _react.default.useRef(null);
|
|
25
|
+
const componentNodeHandle = _react.default.useRef(-1);
|
|
26
|
+
_react.default.useEffect(() => {
|
|
27
|
+
if (componentNodeRef.current != null) {
|
|
28
|
+
componentNodeHandle.current = (0, _reactNative.findNodeHandle)(componentNodeRef.current) ?? -1;
|
|
29
|
+
} else {
|
|
30
|
+
componentNodeHandle.current = -1;
|
|
31
|
+
}
|
|
32
|
+
}, []);
|
|
33
|
+
const onNativeFocusChangeCallback = _react.default.useCallback(event => {
|
|
34
|
+
console.log(`BottomTabs [${componentNodeHandle.current ?? -1}] onNativeFocusChange: ${JSON.stringify(event.nativeEvent)}`);
|
|
35
|
+
onNativeFocusChange?.(event);
|
|
36
|
+
}, [onNativeFocusChange]);
|
|
37
|
+
return /*#__PURE__*/_react.default.createElement(_BottomTabsNativeComponent.default, _extends({
|
|
38
|
+
style: styles.fillParent,
|
|
39
|
+
onNativeFocusChange: onNativeFocusChangeCallback,
|
|
40
|
+
controlNavigationStateInJS: experimentalControlNavigationStateInJS
|
|
41
|
+
// @ts-ignore suppress ref - debug only
|
|
42
|
+
,
|
|
43
|
+
ref: componentNodeRef
|
|
44
|
+
}, filteredProps), filteredProps.children);
|
|
45
|
+
}
|
|
46
|
+
var _default = exports.default = BottomTabs;
|
|
47
|
+
const styles = _reactNative.StyleSheet.create({
|
|
48
|
+
fillParent: {
|
|
49
|
+
flex: 1,
|
|
50
|
+
width: '100%',
|
|
51
|
+
height: '100%'
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=BottomTabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Object","defineProperty","exports","value","default","_react","_interopRequireDefault","require","_BottomTabsNativeComponent","_reactNative","_flags","e","__esModule","_extends","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","BottomTabs","props","console","info","onNativeFocusChange","experimentalControlNavigationStateInJS","featureFlags","experiment","controlledBottomTabs","filteredProps","componentNodeRef","React","useRef","componentNodeHandle","useEffect","current","findNodeHandle","onNativeFocusChangeCallback","useCallback","event","log","JSON","stringify","nativeEvent","createElement","style","styles","fillParent","controlNavigationStateInJS","ref","children","_default","StyleSheet","create","flex","width","height"],"sourceRoot":"../../../src","sources":["components/BottomTabs.tsx"],"mappings":";AAAA,YAAY;;AAACA,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,OAAA;AAEb,IAAAC,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,0BAAA,GAAAF,sBAAA,CAAAC,OAAA;AAKA,IAAAE,YAAA,GAAAF,OAAA;AAQA,IAAAG,MAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAAoC,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAP,OAAA,EAAAO,CAAA;AAAA,SAAAE,SAAA,WAAAA,QAAA,GAAAb,MAAA,CAAAc,MAAA,GAAAd,MAAA,CAAAc,MAAA,CAAAC,IAAA,eAAAC,CAAA,aAAAL,CAAA,MAAAA,CAAA,GAAAM,SAAA,CAAAC,MAAA,EAAAP,CAAA,UAAAQ,CAAA,GAAAF,SAAA,CAAAN,CAAA,YAAAS,CAAA,IAAAD,CAAA,OAAAE,cAAA,CAAAC,IAAA,CAAAH,CAAA,EAAAC,CAAA,MAAAJ,CAAA,CAAAI,CAAA,IAAAD,CAAA,CAAAC,CAAA,aAAAJ,CAAA,KAAAH,QAAA,CAAAU,KAAA,OAAAN,SAAA;AAuCpC;AACA;AACA;AACA,SAASO,UAAUA,CAACC,KAAsB,EAAE;EAC1CC,OAAO,CAACC,IAAI,CAAC,mBAAmB,CAAC;EAEjC,MAAM;IACJC,mBAAmB;IACnBC,sCAAsC,GAAGC,cAAY,CAACC,UAAU,CAC7DC,oBAAoB;IACvB,GAAGC;EACL,CAAC,GAAGR,KAAK;EAET,MAAMS,gBAAgB,GACpBC,cAAK,CAACC,MAAM,CAAkD,IAAI,CAAC;EACrE,MAAMC,mBAAmB,GAAGF,cAAK,CAACC,MAAM,CAAS,CAAC,CAAC,CAAC;EAEpDD,cAAK,CAACG,SAAS,CAAC,MAAM;IACpB,IAAIJ,gBAAgB,CAACK,OAAO,IAAI,IAAI,EAAE;MACpCF,mBAAmB,CAACE,OAAO,GACzB,IAAAC,2BAAc,EAACN,gBAAgB,CAACK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,MAAM;MACLF,mBAAmB,CAACE,OAAO,GAAG,CAAC,CAAC;IAClC;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,MAAME,2BAA2B,GAAGN,cAAK,CAACO,WAAW,CAClDC,KAAmD,IAAK;IACvDjB,OAAO,CAACkB,GAAG,CACT,eACEP,mBAAmB,CAACE,OAAO,IAAI,CAAC,CAAC,0BACTM,IAAI,CAACC,SAAS,CAACH,KAAK,CAACI,WAAW,CAAC,EAC7D,CAAC;IACDnB,mBAAmB,GAAGe,KAAK,CAAC;EAC9B,CAAC,EACD,CAACf,mBAAmB,CACtB,CAAC;EAED,oBACEvB,MAAA,CAAAD,OAAA,CAAA4C,aAAA,CAACxC,0BAAA,CAAAJ,OAAyB,EAAAS,QAAA;IACxBoC,KAAK,EAAEC,MAAM,CAACC,UAAW;IACzBvB,mBAAmB,EAAEa,2BAA4B;IACjDW,0BAA0B,EAAEvB;IAC5B;IAAA;IACAwB,GAAG,EAAEnB;EAAiB,GAClBD,aAAa,GAChBA,aAAa,CAACqB,QACU,CAAC;AAEhC;AAAC,IAAAC,QAAA,GAAArD,OAAA,CAAAE,OAAA,GAEcoB,UAAU;AAEzB,MAAM0B,MAAM,GAAGM,uBAAU,CAACC,MAAM,CAAC;EAC/BN,UAAU,EAAE;IACVO,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,MAAM;IACbC,MAAM,EAAE;EACV;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _BottomTabsScreenNativeComponent = _interopRequireDefault(require("../fabric/BottomTabsScreenNativeComponent"));
|
|
10
|
+
var _reactNative = require("react-native");
|
|
11
|
+
var _reactFreeze = require("react-freeze");
|
|
12
|
+
var _core = require("../core");
|
|
13
|
+
var _flags = require("../flags");
|
|
14
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
16
|
+
// iOS-specific: SFSymbol usage
|
|
17
|
+
|
|
18
|
+
// iOS-specific: image as a template usage
|
|
19
|
+
|
|
20
|
+
// iOS-specific: SFSymbol, image as a template usage
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* EXPERIMENTAL API, MIGHT CHANGE W/O ANY NOTICE
|
|
24
|
+
*/
|
|
25
|
+
function BottomTabsScreen(props) {
|
|
26
|
+
const componentNodeRef = _react.default.useRef(null);
|
|
27
|
+
const componentNodeHandle = _react.default.useRef(-1);
|
|
28
|
+
_react.default.useEffect(() => {
|
|
29
|
+
if (componentNodeRef.current != null) {
|
|
30
|
+
componentNodeHandle.current = (0, _reactNative.findNodeHandle)(componentNodeRef.current) ?? -1;
|
|
31
|
+
} else {
|
|
32
|
+
componentNodeHandle.current = -1;
|
|
33
|
+
}
|
|
34
|
+
}, []);
|
|
35
|
+
const [nativeViewIsVisible, setNativeViewIsVisible] = _react.default.useState(false);
|
|
36
|
+
const {
|
|
37
|
+
onWillAppear,
|
|
38
|
+
onDidAppear,
|
|
39
|
+
onWillDisappear,
|
|
40
|
+
onDidDisappear,
|
|
41
|
+
isFocused = false,
|
|
42
|
+
icon,
|
|
43
|
+
selectedIcon,
|
|
44
|
+
...rest
|
|
45
|
+
} = props;
|
|
46
|
+
let shouldFreeze = (0, _core.freezeEnabled)();
|
|
47
|
+
if (_flags.featureFlags.experiment.controlledBottomTabs) {
|
|
48
|
+
// If the tabs are JS controlled, we want to freeze only when given view is not focused && it is not currently visible
|
|
49
|
+
shouldFreeze = shouldFreeze && !nativeViewIsVisible && !isFocused;
|
|
50
|
+
} else {
|
|
51
|
+
shouldFreeze = shouldFreeze && !nativeViewIsVisible;
|
|
52
|
+
}
|
|
53
|
+
const onWillAppearCallback = _react.default.useCallback(event => {
|
|
54
|
+
console.log(`TabsScreen [${componentNodeHandle.current}] onWillAppear received`);
|
|
55
|
+
setNativeViewIsVisible(true);
|
|
56
|
+
onWillAppear?.(event);
|
|
57
|
+
}, [onWillAppear]);
|
|
58
|
+
const onDidAppearCallback = _react.default.useCallback(event => {
|
|
59
|
+
console.log(`TabsScreen [${componentNodeHandle.current}] onDidAppear received`);
|
|
60
|
+
onDidAppear?.(event);
|
|
61
|
+
}, [onDidAppear]);
|
|
62
|
+
const onWillDisappearCallback = _react.default.useCallback(event => {
|
|
63
|
+
console.log(`TabsScreen [${componentNodeHandle.current}] onWillDisappear received`);
|
|
64
|
+
onWillDisappear?.(event);
|
|
65
|
+
}, [onWillDisappear]);
|
|
66
|
+
const onDidDisappearCallback = _react.default.useCallback(event => {
|
|
67
|
+
console.log(`TabsScreen [${componentNodeHandle.current}] onDidDisappear received`);
|
|
68
|
+
setNativeViewIsVisible(false);
|
|
69
|
+
onDidDisappear?.(event);
|
|
70
|
+
}, [onDidDisappear]);
|
|
71
|
+
console.info(`TabsScreen [${componentNodeHandle.current ?? -1}] render; tabKey: ${rest.tabKey} shouldFreeze: ${shouldFreeze}, isFocused: ${isFocused} nativeViewIsVisible: ${nativeViewIsVisible}`);
|
|
72
|
+
const iconProps = parseIconsToNativeProps(icon, selectedIcon);
|
|
73
|
+
return /*#__PURE__*/_react.default.createElement(_BottomTabsScreenNativeComponent.default, _extends({
|
|
74
|
+
collapsable: false,
|
|
75
|
+
style: styles.fillParent,
|
|
76
|
+
onWillAppear: onWillAppearCallback,
|
|
77
|
+
onDidAppear: onDidAppearCallback,
|
|
78
|
+
onWillDisappear: onWillDisappearCallback,
|
|
79
|
+
onDidDisappear: onDidDisappearCallback,
|
|
80
|
+
isFocused: isFocused
|
|
81
|
+
}, iconProps, {
|
|
82
|
+
// @ts-ignore - This is debug only anyway
|
|
83
|
+
ref: componentNodeRef
|
|
84
|
+
}, rest), /*#__PURE__*/_react.default.createElement(_reactFreeze.Freeze, {
|
|
85
|
+
freeze: shouldFreeze,
|
|
86
|
+
placeholder: rest.placeholder
|
|
87
|
+
}, rest.children));
|
|
88
|
+
}
|
|
89
|
+
function parseIconToNativeProps(icon) {
|
|
90
|
+
if (!icon) {
|
|
91
|
+
return {};
|
|
92
|
+
}
|
|
93
|
+
if ('sfSymbolName' in icon) {
|
|
94
|
+
// iOS-specific: SFSymbol usage
|
|
95
|
+
return {
|
|
96
|
+
iconType: 'sfSymbol',
|
|
97
|
+
iconSfSymbolName: icon.sfSymbolName
|
|
98
|
+
};
|
|
99
|
+
} else if ('imageSource' in icon) {
|
|
100
|
+
return {
|
|
101
|
+
iconType: 'image',
|
|
102
|
+
iconImageSource: icon.imageSource
|
|
103
|
+
};
|
|
104
|
+
} else if ('templateSource' in icon) {
|
|
105
|
+
// iOS-specifig: image as a template usage
|
|
106
|
+
return {
|
|
107
|
+
iconType: 'template',
|
|
108
|
+
iconImageSource: icon.templateSource
|
|
109
|
+
};
|
|
110
|
+
} else {
|
|
111
|
+
// iOS-specific: SFSymbol, image as a template usage
|
|
112
|
+
throw new Error('[RNScreens] Incorrect icon format. You must provide sfSymbolName, imageSource or templateSource.');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function parseIconsToNativeProps(icon, selectedIcon) {
|
|
116
|
+
const {
|
|
117
|
+
iconImageSource,
|
|
118
|
+
iconSfSymbolName,
|
|
119
|
+
iconType
|
|
120
|
+
} = parseIconToNativeProps(icon);
|
|
121
|
+
const {
|
|
122
|
+
iconImageSource: selectedIconImageSource,
|
|
123
|
+
iconSfSymbolName: selectedIconSfSymbolName,
|
|
124
|
+
iconType: selectedIconType
|
|
125
|
+
} = parseIconToNativeProps(selectedIcon);
|
|
126
|
+
if (iconType !== undefined && selectedIconType !== undefined && iconType !== selectedIconType) {
|
|
127
|
+
throw new Error('[RNScreens] icon and selectedIcon must be same type.');
|
|
128
|
+
} else if (iconType === undefined && selectedIconType !== undefined) {
|
|
129
|
+
// iOS-specific: UIKit requirement
|
|
130
|
+
throw new Error('[RNScreens] To use selectedIcon prop, the icon prop must also be provided.');
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
iconType,
|
|
134
|
+
iconImageSource,
|
|
135
|
+
iconSfSymbolName,
|
|
136
|
+
selectedIconImageSource,
|
|
137
|
+
selectedIconSfSymbolName
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
var _default = exports.default = BottomTabsScreen;
|
|
141
|
+
const styles = _reactNative.StyleSheet.create({
|
|
142
|
+
fillParent: {
|
|
143
|
+
position: 'absolute',
|
|
144
|
+
flex: 1,
|
|
145
|
+
width: '100%',
|
|
146
|
+
height: '100%'
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
//# sourceMappingURL=BottomTabsScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Object","defineProperty","exports","value","default","_react","_interopRequireDefault","require","_BottomTabsScreenNativeComponent","_reactNative","_reactFreeze","_core","_flags","e","__esModule","_extends","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","BottomTabsScreen","props","componentNodeRef","React","useRef","componentNodeHandle","useEffect","current","findNodeHandle","nativeViewIsVisible","setNativeViewIsVisible","useState","onWillAppear","onDidAppear","onWillDisappear","onDidDisappear","isFocused","icon","selectedIcon","rest","shouldFreeze","freezeEnabled","featureFlags","experiment","controlledBottomTabs","onWillAppearCallback","useCallback","event","console","log","onDidAppearCallback","onWillDisappearCallback","onDidDisappearCallback","info","tabKey","iconProps","parseIconsToNativeProps","createElement","collapsable","style","styles","fillParent","ref","Freeze","freeze","placeholder","children","parseIconToNativeProps","iconType","iconSfSymbolName","sfSymbolName","iconImageSource","imageSource","templateSource","Error","selectedIconImageSource","selectedIconSfSymbolName","selectedIconType","undefined","_default","StyleSheet","create","position","flex","width","height"],"sourceRoot":"../../../src","sources":["components/BottomTabsScreen.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _ScreenStackHostNativeComponent = _interopRequireDefault(require("../../fabric/gamma/ScreenStackHostNativeComponent"));
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
/**
|
|
12
|
+
* EXPERIMENTAL API, MIGHT CHANGE W/O ANY NOTICE
|
|
13
|
+
*/
|
|
14
|
+
function ScreenStackHost({
|
|
15
|
+
children
|
|
16
|
+
}) {
|
|
17
|
+
return /*#__PURE__*/_react.default.createElement(_ScreenStackHostNativeComponent.default, {
|
|
18
|
+
style: styles.container
|
|
19
|
+
}, children);
|
|
20
|
+
}
|
|
21
|
+
const styles = _reactNative.StyleSheet.create({
|
|
22
|
+
container: {
|
|
23
|
+
flex: 1
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
var _default = exports.default = ScreenStackHost;
|
|
27
|
+
//# sourceMappingURL=ScreenStackHost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_ScreenStackHostNativeComponent","e","__esModule","default","ScreenStackHost","children","createElement","style","styles","container","StyleSheet","create","flex","_default","exports"],"sourceRoot":"../../../../src","sources":["components/gamma/ScreenStackHost.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAGA,IAAAE,+BAAA,GAAAH,sBAAA,CAAAC,OAAA;AAA+F,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAU/F;AACA;AACA;AACA,SAASG,eAAeA,CAAC;EAAEC;AAA+B,CAAC,EAAE;EAC3D,oBACET,MAAA,CAAAO,OAAA,CAAAG,aAAA,CAACN,+BAAA,CAAAG,OAA8B;IAACI,KAAK,EAAEC,MAAM,CAACC;EAAU,GACrDJ,QAC6B,CAAC;AAErC;AAEA,MAAMG,MAAM,GAAGE,uBAAU,CAACC,MAAM,CAAC;EAC/BF,SAAS,EAAE;IACTG,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAX,OAAA,GAEYC,eAAe","ignoreList":[]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _SplitViewHostNativeComponent = _interopRequireDefault(require("../../fabric/gamma/SplitViewHostNativeComponent"));
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
12
|
+
// According to the UIKit documentation: https://developer.apple.com/documentation/uikit/uisplitviewcontroller/displaymode-swift.enum
|
|
13
|
+
// Only specific pairs for displayMode - splitBehavior are valid and others may lead to unexpected results.
|
|
14
|
+
// Therefore, we're adding check on the JS side to return a feedback to the client when that pairing isn't valid.
|
|
15
|
+
// However, we're not blocking these props to be set on the native side, because it doesn't crash, just the result or transitions may not work as expected.
|
|
16
|
+
const displayModeForSplitViewCompatibilityMap = {
|
|
17
|
+
tile: ['secondaryOnly', 'oneBesideSecondary', 'twoBesideSecondary'],
|
|
18
|
+
overlay: ['secondaryOnly', 'oneOverSecondary', 'twoOverSecondary'],
|
|
19
|
+
displace: ['secondaryOnly', 'oneBesideSecondary', 'twoDisplaceSecondary'],
|
|
20
|
+
automatic: [] // placeholder for satisfying types; we'll handle it specially in logic
|
|
21
|
+
};
|
|
22
|
+
const isValidDisplayModeForSplitBehavior = (displayMode, splitBehavior) => {
|
|
23
|
+
if (splitBehavior === 'automatic') {
|
|
24
|
+
// for automatic we cannot easily verify the compatibility, because it depends on the system preference for display mode, therefore we're assuming that 'automatic' has only valid combinations
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
return displayModeForSplitViewCompatibilityMap[splitBehavior].includes(displayMode);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* EXPERIMENTAL API, MIGHT CHANGE W/O ANY NOTICE
|
|
32
|
+
*/
|
|
33
|
+
function SplitViewHost(props) {
|
|
34
|
+
const {
|
|
35
|
+
displayMode,
|
|
36
|
+
splitBehavior
|
|
37
|
+
} = props;
|
|
38
|
+
_react.default.useEffect(() => {
|
|
39
|
+
if (displayMode && splitBehavior) {
|
|
40
|
+
const isValid = isValidDisplayModeForSplitBehavior(displayMode, splitBehavior);
|
|
41
|
+
if (!isValid) {
|
|
42
|
+
const validDisplayModes = displayModeForSplitViewCompatibilityMap[splitBehavior];
|
|
43
|
+
console.warn(`Invalid display mode "${displayMode}" for split behavior "${splitBehavior}".` + `\nValid modes for "${splitBehavior}" are: ${validDisplayModes.join(', ')}.`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}, [displayMode, splitBehavior]);
|
|
47
|
+
return /*#__PURE__*/_react.default.createElement(_SplitViewHostNativeComponent.default, _extends({}, props, {
|
|
48
|
+
style: styles.container
|
|
49
|
+
}), props.children);
|
|
50
|
+
}
|
|
51
|
+
const styles = _reactNative.StyleSheet.create({
|
|
52
|
+
container: {
|
|
53
|
+
flex: 1
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
var _default = exports.default = SplitViewHost;
|
|
57
|
+
//# sourceMappingURL=SplitViewHost.js.map
|