react-native-screens 5.0.0-alpha.1 → 5.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -2
- package/RNScreens.podspec +2 -6
- package/android/build.gradle +26 -1
- package/android/src/fabric/java/com/swmansion/rnscreens/NativeProxy.kt +5 -0
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/legacy/Screen.kt +22 -6
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenStackFragment.kt +39 -10
- package/android/src/main/java/com/swmansion/rnscreens/legacy/ScreenViewManager.kt +5 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetAppearanceCoordinator.kt → native/coordinator/FormSheetAppearanceCoordinator.kt} +2 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetBehaviorController.kt → native/coordinator/FormSheetBehaviorController.kt} +25 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDimensionsCoordinator.kt → native/coordinator/FormSheetDimensionsCoordinator.kt} +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/native/coordinator/FormSheetNativeDismissCoordinator.kt +50 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContainer.kt → native/core/FormSheetContainer.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDialog.kt → native/core/FormSheetDialog.kt} +24 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDialogManager.kt → native/core/FormSheetDialogManager.kt} +25 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentSizeChangeDelegate.kt → native/interfaces/FormSheetContentSizeChangeDelegate.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentSizeChangeProvider.kt → native/interfaces/FormSheetContentSizeChangeProvider.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDialogEventEmitter.kt → native/interfaces/FormSheetDialogEventEmitter.kt} +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetConfig.kt → native/model/FormSheetConfig.kt} +5 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDetents.kt → native/model/FormSheetDetents.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetAnimatorFactory.kt → native/presentation/FormSheetAnimatorFactory.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetPresentationManager.kt → native/presentation/FormSheetPresentationManager.kt} +3 -12
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetPresentationState.kt → native/presentation/FormSheetPresentationState.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentWrapper.kt → react/contentwrapper/FormSheetContentWrapper.kt} +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentWrapperViewManager.kt → react/contentwrapper/FormSheetContentWrapperViewManager.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDetentChangedEvent.kt → react/event/FormSheetDetentChangedEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDidAppearEvent.kt → react/event/FormSheetDidAppearEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetDidDisappearEvent.kt → react/event/FormSheetDidDisappearEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetNativeDismissEvent.kt → react/event/FormSheetNativeDismissEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/react/event/FormSheetNativeDismissPreventedEvent.kt +29 -0
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetSyncFlushEvent.kt → react/event/FormSheetSyncFlushEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetWillAppearEvent.kt → react/event/FormSheetWillAppearEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetWillDisappearEvent.kt → react/event/FormSheetWillDisappearEvent.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetContentView.kt → react/host/FormSheetContentView.kt} +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHost.kt → react/host/FormSheetHost.kt} +6 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHostEventEmitter.kt → react/host/FormSheetHostEventEmitter.kt} +16 -1
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/{FormSheetHostViewManager.kt → react/host/FormSheetHostViewManager.kt} +11 -2
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderApplicator.kt +30 -418
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderCoordinatorLayout.kt +36 -113
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/StackHeaderFrameSynchronizer.kt +63 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/{StackHeaderAppBarLayout.kt → appbar/StackHeaderAppBarLayout.kt} +1 -6
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/{StackHeaderAppBarLayoutBehavior.kt → appbar/StackHeaderAppBarLayoutBehavior.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/{StackHeaderScrollingViewBehavior.kt → appbar/StackHeaderScrollingViewBehavior.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfig.kt +28 -6
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigViewManager.kt +8 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationObserver.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderConfigurationProviding.kt +2 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/config/StackHeaderInvalidationFlags.kt +2 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuApplicator.kt +448 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuMapper.kt +17 -3
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/StackHeaderToolbarMenuSelectionController.kt +83 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuConfig.kt → model/StackHeaderToolbarMenuConfig.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuElementConfig.kt → model/StackHeaderToolbarMenuElementConfig.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuGroupConfig.kt → model/StackHeaderToolbarMenuGroupConfig.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuGroupMetadata.kt → model/StackHeaderToolbarMenuGroupMetadata.kt} +5 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemConfig.kt → model/StackHeaderToolbarMenuItemConfig.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemDefaults.kt → model/StackHeaderToolbarMenuItemDefaults.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemIconSource.kt → model/StackHeaderToolbarMenuItemIconSource.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemShowAsAction.kt → model/StackHeaderToolbarMenuItemShowAsAction.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuItemType.kt → model/StackHeaderToolbarMenuItemType.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarFieldUpdate.kt → update/StackHeaderToolbarFieldUpdate.kt} +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuElementOptions.kt → update/StackHeaderToolbarMenuElementOptions.kt} +2 -1
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementRawUpdate.kt +13 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuElementUpdate.kt +10 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuIconResolver.kt +17 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/{StackHeaderToolbarMenuUpdateQueue.kt → update/StackHeaderToolbarMenuUpdateQueue.kt} +1 -43
- package/android/src/main/java/com/swmansion/rnscreens/stack/header/toolbar/update/StackHeaderToolbarMenuUpdateQueueDelegate.kt +9 -0
- package/android/src/main/java/com/swmansion/rnscreens/stack/screen/StackScreen.kt +1 -0
- package/common/cpp/react/renderer/components/rnscreens/legacy/RNSScreenShadowNode.cpp +10 -5
- package/ios/RNSEnums.h +0 -2
- package/ios/RNSOrientationProviding.h +0 -2
- package/ios/RNSReactMountingTransactionObserving.h +15 -0
- package/ios/legacy/RNSBarButtonItem.mm +12 -5
- package/ios/legacy/RNSScreen.h +8 -1
- package/ios/legacy/RNSScreen.mm +39 -17
- package/ios/legacy/RNSScreenContentWrapper.mm +9 -0
- package/ios/legacy/RNSScreenFooter.mm +2 -0
- package/ios/legacy/RNSScreenStack.mm +9 -4
- package/ios/modals/form-sheet/RNSFormSheetContentWrapperComponentView.mm +9 -0
- package/ios/scroll-to-top-guard/RNSScrollToTopGuard.h +17 -0
- package/ios/scroll-to-top-guard/RNSScrollToTopGuard.mm +57 -0
- package/ios/scroll-to-top-guard/RNSScrollToTopGuardGestureRecognizer.h +28 -0
- package/ios/scroll-to-top-guard/RNSScrollToTopGuardGestureRecognizer.mm +64 -0
- package/ios/split/RNSSplitAppearanceApplicator.h +36 -0
- package/ios/split/RNSSplitAppearanceApplicator.mm +185 -0
- package/ios/split/RNSSplitAppearanceCoordinator.h +26 -0
- package/ios/split/RNSSplitAppearanceCoordinator.mm +27 -0
- package/ios/split/RNSSplitAppearanceUpdateFlags.h +14 -0
- package/ios/split/RNSSplitHostComponentView.mm +1 -1
- package/ios/split/RNSSplitHostController.h +86 -0
- package/ios/split/RNSSplitHostController.mm +560 -0
- package/ios/split/RNSSplitNavigationController.h +31 -0
- package/ios/split/RNSSplitNavigationController.mm +44 -0
- package/ios/split/RNSSplitNavigationControllerFrameObserver.h +32 -0
- package/ios/split/RNSSplitNavigationControllerFrameObserver.mm +80 -0
- package/ios/split/RNSSplitNavigationControllerFrameOriginChangeDelegate.h +15 -0
- package/ios/split/RNSSplitScreenComponentView.mm +8 -9
- package/ios/split/RNSSplitScreenController.h +45 -0
- package/ios/split/RNSSplitScreenController.mm +130 -0
- package/ios/stack/header/RNSStackHeaderConfigComponentView.h +1 -0
- package/ios/stack/header/RNSStackHeaderConfigComponentView.mm +47 -9
- package/ios/stack/header/RNSStackHeaderConfigDataProviding.h +3 -0
- package/ios/stack/header/RNSStackHeaderMenuCoordinator.h +9 -0
- package/ios/stack/header/RNSStackHeaderMenuCoordinator.mm +15 -0
- package/ios/stack/header/RNSStackHeaderMenuFinder.h +18 -3
- package/ios/stack/header/RNSStackHeaderMenuFinder.mm +21 -3
- package/ios/stack/host/RNSStackHostComponentView.mm +3 -1
- package/ios/stack/host/RNSStackNavigationController.mm +1 -1
- package/ios/stack/screen/RNSStackScreenComponentView.mm +0 -2
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.h +6 -1
- package/ios/stack/screen/RNSStackScreenHeaderCoordinator.mm +61 -12
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryComponentView.mm +3 -0
- package/ios/tabs/bottom-accessory/RNSTabsBottomAccessoryContentComponentView.mm +4 -1
- package/ios/tabs/host/RNSTabBarController.h +5 -12
- package/ios/tabs/host/RNSTabBarController.mm +1 -1
- package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.ios.js +25 -0
- package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.ios.js.map +1 -0
- package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.js +24 -0
- package/lib/commonjs/components/scroll-to-top-guard/ScrollToTopGuard.js.map +1 -0
- package/lib/commonjs/components/scroll-to-top-guard/index.js +13 -0
- package/lib/commonjs/components/scroll-to-top-guard/index.js.map +1 -0
- package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js +11 -12
- package/lib/commonjs/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
- package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js +1 -22
- package/lib/commonjs/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
- package/lib/commonjs/components/stack/header/ios/iconUtils.ios.js +33 -2
- package/lib/commonjs/components/stack/header/ios/iconUtils.ios.js.map +1 -1
- package/lib/commonjs/components/stack/header/utils.js +6 -9
- package/lib/commonjs/components/stack/header/utils.js.map +1 -1
- package/lib/commonjs/experimental/index.js +11 -0
- package/lib/commonjs/experimental/index.js.map +1 -1
- package/lib/commonjs/fabric/ScrollViewMarkerNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/FullWindowOverlayNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ModalScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenContainerNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenFooterNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/legacy/SearchBarNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/modals/form-sheet/FormSheetHostNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/safe-area/SafeAreaViewNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js +12 -0
- package/lib/commonjs/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/split/SplitHostNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/split/SplitScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHeaderSubviewAndroidNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackHostNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/stack/StackScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsBottomAccessoryContentNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsBottomAccessoryNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsHostAndroidNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
- package/lib/commonjs/flags.js +22 -1
- package/lib/commonjs/flags.js.map +1 -1
- package/lib/commonjs/legacy/components/Screen.js +6 -1
- package/lib/commonjs/legacy/components/Screen.js.map +1 -1
- package/lib/commonjs/legacy/components/ScreenStackHeaderConfig.js +5 -0
- package/lib/commonjs/legacy/components/ScreenStackHeaderConfig.js.map +1 -1
- package/lib/commonjs/legacy/components/ScreenStackItem.js.map +1 -1
- package/lib/commonjs/legacy/components/SearchBar.js +16 -16
- package/lib/commonjs/legacy/components/SearchBar.js.map +1 -1
- package/lib/commonjs/legacy/components/helpers/prepareHeaderBarButtonItems.js +3 -0
- package/lib/commonjs/legacy/components/helpers/prepareHeaderBarButtonItems.js.map +1 -1
- package/lib/commonjs/legacy/gesture-handler/fabricUtils.js.map +1 -1
- package/lib/commonjs/legacy/useTransitionProgress.js.map +1 -1
- package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.ios.js +20 -0
- package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.ios.js.map +1 -0
- package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.js +18 -0
- package/lib/module/components/scroll-to-top-guard/ScrollToTopGuard.js.map +1 -0
- package/lib/module/components/scroll-to-top-guard/index.js +2 -0
- package/lib/module/components/scroll-to-top-guard/index.js.map +1 -0
- package/lib/module/components/stack/header/StackHeaderConfig.ios.js +14 -15
- package/lib/module/components/stack/header/StackHeaderConfig.ios.js.map +1 -1
- package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js +1 -22
- package/lib/module/components/stack/header/ios/StackHeaderItem.ios.js.map +1 -1
- package/lib/module/components/stack/header/ios/iconUtils.ios.js +31 -2
- package/lib/module/components/stack/header/ios/iconUtils.ios.js.map +1 -1
- package/lib/module/components/stack/header/utils.js +5 -8
- package/lib/module/components/stack/header/utils.js.map +1 -1
- package/lib/module/experimental/index.js +1 -0
- package/lib/module/experimental/index.js.map +1 -1
- package/lib/module/fabric/ScrollViewMarkerNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/FullWindowOverlayNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ModalScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenContainerNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenFooterNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/ScreenStackNativeComponent.js.map +1 -1
- package/lib/module/fabric/legacy/SearchBarNativeComponent.js.map +1 -1
- package/lib/module/fabric/modals/form-sheet/FormSheetHostNativeComponent.js.map +1 -1
- package/lib/module/fabric/safe-area/SafeAreaViewNativeComponent.js.map +1 -1
- package/lib/module/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js +7 -0
- package/lib/module/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.js.map +1 -0
- package/lib/module/fabric/split/SplitHostNativeComponent.js.map +1 -1
- package/lib/module/fabric/split/SplitScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderConfigAndroidNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderConfigIOSNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderItemIOSNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHeaderSubviewAndroidNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackHostNativeComponent.js.map +1 -1
- package/lib/module/fabric/stack/StackScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsBottomAccessoryContentNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsBottomAccessoryNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsHostAndroidNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsHostIOSNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsScreenAndroidNativeComponent.js.map +1 -1
- package/lib/module/fabric/tabs/TabsScreenIOSNativeComponent.js.map +1 -1
- package/lib/module/flags.js +22 -1
- package/lib/module/flags.js.map +1 -1
- package/lib/module/legacy/components/Screen.js +6 -1
- package/lib/module/legacy/components/Screen.js.map +1 -1
- package/lib/module/legacy/components/ScreenStackHeaderConfig.js +5 -0
- package/lib/module/legacy/components/ScreenStackHeaderConfig.js.map +1 -1
- package/lib/module/legacy/components/ScreenStackItem.js.map +1 -1
- package/lib/module/legacy/components/SearchBar.js +17 -17
- package/lib/module/legacy/components/SearchBar.js.map +1 -1
- package/lib/module/legacy/components/helpers/prepareHeaderBarButtonItems.js +4 -0
- package/lib/module/legacy/components/helpers/prepareHeaderBarButtonItems.js.map +1 -1
- package/lib/module/legacy/gesture-handler/fabricUtils.js.map +1 -1
- package/lib/module/legacy/useTransitionProgress.js.map +1 -1
- package/lib/module/private/hooks/useRenderDebugInfo.js.map +1 -1
- package/lib/typescript/components/modals/form-sheet/FormSheet.types.d.ts +2 -2
- package/lib/typescript/components/safe-area/SafeAreaView.web.d.ts +5 -2
- package/lib/typescript/components/safe-area/SafeAreaView.web.d.ts.map +1 -1
- package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.d.ts +15 -0
- package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.d.ts.map +1 -0
- package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.ios.d.ts +12 -0
- package/lib/typescript/components/scroll-to-top-guard/ScrollToTopGuard.ios.d.ts.map +1 -0
- package/lib/typescript/components/scroll-to-top-guard/index.d.ts +2 -0
- package/lib/typescript/components/scroll-to-top-guard/index.d.ts.map +1 -0
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts +24 -0
- package/lib/typescript/components/stack/header/StackHeaderConfig.android.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts +13 -0
- package/lib/typescript/components/stack/header/StackHeaderConfig.ios.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts +5 -2
- package/lib/typescript/components/stack/header/StackHeaderConfig.web.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/ios/StackHeaderItem.ios.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/ios/iconUtils.ios.d.ts +3 -0
- package/lib/typescript/components/stack/header/ios/iconUtils.ios.d.ts.map +1 -1
- package/lib/typescript/components/stack/header/utils.d.ts +1 -2
- package/lib/typescript/components/stack/header/utils.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.types.d.ts +2 -2
- package/lib/typescript/components/stack/host/StackHost.types.d.ts.map +1 -1
- package/lib/typescript/components/stack/host/StackHost.web.d.ts +6 -2
- package/lib/typescript/components/stack/host/StackHost.web.d.ts.map +1 -1
- package/lib/typescript/components/stack/screen/StackScreen.web.d.ts +5 -2
- package/lib/typescript/components/stack/screen/StackScreen.web.d.ts.map +1 -1
- package/lib/typescript/components/tabs/host/TabsHost.web.d.ts +5 -2
- package/lib/typescript/components/tabs/host/TabsHost.web.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.types.d.ts +7 -3
- package/lib/typescript/components/tabs/screen/TabsScreen.types.d.ts.map +1 -1
- package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts +5 -2
- package/lib/typescript/components/tabs/screen/TabsScreen.web.d.ts.map +1 -1
- package/lib/typescript/experimental/index.d.ts +1 -0
- package/lib/typescript/experimental/index.d.ts.map +1 -1
- package/lib/typescript/fabric/NativeScreensModule.d.ts +1 -1
- package/lib/typescript/fabric/ScrollViewMarkerNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/ScrollViewMarkerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/FullWindowOverlayNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/FullWindowOverlayNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ModalScreenNativeComponent.d.ts +3 -2
- package/lib/typescript/fabric/legacy/ModalScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenContainerNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenContainerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenContentWrapperNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenContentWrapperNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenFooterNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenFooterNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenNativeComponent.d.ts +3 -2
- package/lib/typescript/fabric/legacy/ScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenNavigationContainerNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenNavigationContainerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenStackHeaderConfigNativeComponent.d.ts +3 -3
- package/lib/typescript/fabric/legacy/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/legacy/ScreenStackNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/legacy/SearchBarNativeComponent.d.ts +6 -6
- package/lib/typescript/fabric/legacy/SearchBarNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/modals/form-sheet/FormSheetHostNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/modals/form-sheet/FormSheetHostNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/safe-area/SafeAreaViewNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/safe-area/SafeAreaViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.d.ts +6 -0
- package/lib/typescript/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/split/SplitHostNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/split/SplitHostNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/split/SplitScreenNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/split/SplitScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts +1 -0
- package/lib/typescript/fabric/stack/StackHeaderConfigAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts +2 -1
- package/lib/typescript/fabric/stack/StackHeaderConfigIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/stack/StackHeaderItemIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHeaderSubviewAndroidNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/stack/StackHeaderSubviewAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/stack/StackHostNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/stack/StackScreenNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/stack/StackScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsBottomAccessoryContentNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/tabs/TabsBottomAccessoryContentNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsBottomAccessoryNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/tabs/TabsBottomAccessoryNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsHostAndroidNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/tabs/TabsHostAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/tabs/TabsHostIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/tabs/TabsScreenAndroidNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts +2 -2
- package/lib/typescript/fabric/tabs/TabsScreenIOSNativeComponent.d.ts.map +1 -1
- package/lib/typescript/flags.d.ts +13 -0
- package/lib/typescript/flags.d.ts.map +1 -1
- package/lib/typescript/legacy/TransitionProgressContext.d.ts +1 -1
- package/lib/typescript/legacy/TransitionProgressContext.d.ts.map +1 -1
- package/lib/typescript/legacy/components/Screen.d.ts +5 -3
- package/lib/typescript/legacy/components/Screen.d.ts.map +1 -1
- package/lib/typescript/legacy/components/Screen.web.d.ts +10 -2
- package/lib/typescript/legacy/components/Screen.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenContainer.web.d.ts +5 -2
- package/lib/typescript/legacy/components/ScreenContainer.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenContentWrapper.web.d.ts +5 -2
- package/lib/typescript/legacy/components/ScreenContentWrapper.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenContentWrapper.windows.d.ts +5 -2
- package/lib/typescript/legacy/components/ScreenContentWrapper.windows.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenFooter.web.d.ts +10 -3
- package/lib/typescript/legacy/components/ScreenFooter.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenFooter.windows.d.ts +10 -3
- package/lib/typescript/legacy/components/ScreenFooter.windows.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenStack.web.d.ts +5 -2
- package/lib/typescript/legacy/components/ScreenStack.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenStackHeaderConfig.d.ts +3 -1
- package/lib/typescript/legacy/components/ScreenStackHeaderConfig.d.ts.map +1 -1
- package/lib/typescript/legacy/components/ScreenStackItem.d.ts +3 -2
- package/lib/typescript/legacy/components/ScreenStackItem.d.ts.map +1 -1
- package/lib/typescript/legacy/components/SearchBar.d.ts +3 -3
- package/lib/typescript/legacy/components/SearchBar.d.ts.map +1 -1
- package/lib/typescript/legacy/components/SearchBar.web.d.ts +5 -2
- package/lib/typescript/legacy/components/SearchBar.web.d.ts.map +1 -1
- package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts +15 -12
- package/lib/typescript/legacy/components/helpers/prepareHeaderBarButtonItems.d.ts.map +1 -1
- package/lib/typescript/legacy/gesture-handler/fabricUtils.d.ts +3 -2
- package/lib/typescript/legacy/gesture-handler/fabricUtils.d.ts.map +1 -1
- package/lib/typescript/legacy/types.d.ts +25 -5
- package/lib/typescript/legacy/types.d.ts.map +1 -1
- package/lib/typescript/legacy/useTransitionProgress.d.ts +2 -5
- package/lib/typescript/legacy/useTransitionProgress.d.ts.map +1 -1
- package/lib/typescript/private/hooks/useRenderDebugInfo.d.ts +2 -2
- package/lib/typescript/private/hooks/useRenderDebugInfo.d.ts.map +1 -1
- package/package.json +17 -17
- package/src/components/modals/form-sheet/FormSheet.types.ts +2 -2
- package/src/components/scroll-to-top-guard/ScrollToTopGuard.ios.tsx +17 -0
- package/src/components/scroll-to-top-guard/ScrollToTopGuard.tsx +18 -0
- package/src/components/scroll-to-top-guard/index.ts +1 -0
- package/src/components/stack/header/StackHeaderConfig.android.types.ts +24 -0
- package/src/components/stack/header/StackHeaderConfig.ios.tsx +32 -22
- package/src/components/stack/header/StackHeaderConfig.ios.types.ts +13 -0
- package/src/components/stack/header/ios/StackHeaderItem.ios.tsx +1 -23
- package/src/components/stack/header/ios/iconUtils.ios.ts +38 -2
- package/src/components/stack/header/utils.ts +6 -11
- package/src/components/stack/host/StackHost.types.ts +2 -4
- package/src/components/tabs/screen/TabsScreen.types.ts +7 -3
- package/src/experimental/index.ts +1 -0
- package/src/fabric/ScrollViewMarkerNativeComponent.ts +8 -2
- package/src/fabric/legacy/FullWindowOverlayNativeComponent.ts +6 -2
- package/src/fabric/legacy/ModalScreenNativeComponent.ts +8 -2
- package/src/fabric/legacy/ScreenContainerNativeComponent.ts +5 -2
- package/src/fabric/legacy/ScreenContentWrapperNativeComponent.ts +2 -2
- package/src/fabric/legacy/ScreenFooterNativeComponent.ts +5 -2
- package/src/fabric/legacy/ScreenNativeComponent.ts +8 -2
- package/src/fabric/legacy/ScreenNavigationContainerNativeComponent.ts +2 -2
- package/src/fabric/legacy/ScreenStackHeaderConfigNativeComponent.ts +8 -3
- package/src/fabric/legacy/ScreenStackHeaderSubviewNativeComponent.ts +6 -2
- package/src/fabric/legacy/ScreenStackNativeComponent.ts +10 -2
- package/src/fabric/legacy/SearchBarNativeComponent.ts +10 -7
- package/src/fabric/modals/form-sheet/FormSheetContentWrapperNativeComponent.ts +2 -2
- package/src/fabric/modals/form-sheet/FormSheetHostNativeComponent.ts +7 -2
- package/src/fabric/safe-area/SafeAreaViewNativeComponent.ts +6 -2
- package/src/fabric/scroll-to-top-guard/ScrollToTopGuardNativeComponent.ts +10 -0
- package/src/fabric/split/SplitHostNativeComponent.ts +5 -2
- package/src/fabric/split/SplitScreenNativeComponent.ts +6 -2
- package/src/fabric/stack/StackHeaderConfigAndroidNativeComponent.ts +3 -1
- package/src/fabric/stack/StackHeaderConfigIOSNativeComponent.ts +7 -2
- package/src/fabric/stack/StackHeaderItemIOSNativeComponent.ts +2 -1
- package/src/fabric/stack/StackHeaderItemSpacerIOSNativeComponent.ts +6 -2
- package/src/fabric/stack/StackHeaderSubviewAndroidNativeComponent.ts +6 -2
- package/src/fabric/stack/StackHostNativeComponent.ts +5 -2
- package/src/fabric/stack/StackScreenNativeComponent.ts +6 -2
- package/src/fabric/tabs/TabsBottomAccessoryContentNativeComponent.ts +6 -2
- package/src/fabric/tabs/TabsBottomAccessoryNativeComponent.ts +6 -2
- package/src/fabric/tabs/TabsHostAndroidNativeComponent.ts +7 -2
- package/src/fabric/tabs/TabsHostIOSNativeComponent.ts +7 -2
- package/src/fabric/tabs/TabsScreenAndroidNativeComponent.ts +2 -1
- package/src/fabric/tabs/TabsScreenIOSNativeComponent.ts +2 -1
- package/src/flags.ts +26 -0
- package/src/legacy/TransitionProgressContext.tsx +1 -1
- package/src/legacy/components/Screen.tsx +14 -6
- package/src/legacy/components/ScreenStackHeaderConfig.tsx +7 -1
- package/src/legacy/components/ScreenStackItem.tsx +3 -4
- package/src/legacy/components/SearchBar.tsx +34 -44
- package/src/legacy/components/helpers/prepareHeaderBarButtonItems.ts +7 -1
- package/src/legacy/gesture-handler/fabricUtils.ts +5 -2
- package/src/legacy/types.ts +28 -5
- package/src/legacy/useTransitionProgress.tsx +4 -2
- package/src/private/hooks/useRenderDebugInfo.tsx +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/modals/formsheet/FormSheetNativeDismissCoordinator.kt +0 -25
- package/ios/ReactMountingTransactionObserving.swift +0 -7
- package/ios/bridging/Swift-Bridging.h +0 -7
- package/ios/orientation/RNSOrientationProviding.swift +0 -6
- package/ios/orientation/RNSOrientationSwift.swift +0 -14
- package/ios/split/RNSSplitAppearanceApplicator.swift +0 -199
- package/ios/split/RNSSplitAppearanceCoordinator.swift +0 -26
- package/ios/split/RNSSplitAppearanceUpdateFlags.swift +0 -11
- package/ios/split/RNSSplitHostController.swift +0 -570
- package/ios/split/RNSSplitNavigationController.swift +0 -46
- package/ios/split/RNSSplitScreenController.swift +0 -133
- package/ios/utils/RNSLog.swift +0 -6
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#import "RNSSplitNavigationControllerFrameObserver.h"
|
|
2
|
+
#import "RNSSplitNavigationControllerFrameOriginChangeDelegate.h"
|
|
3
|
+
|
|
4
|
+
static void *RNSSplitNavigationViewFrameContext = &RNSSplitNavigationViewFrameContext;
|
|
5
|
+
|
|
6
|
+
@implementation RNSSplitNavigationControllerFrameObserver {
|
|
7
|
+
RNSSplitNavigationController *__weak _navigationController;
|
|
8
|
+
id<RNSSplitNavigationControllerFrameOriginChangeDelegate> __weak _frameOriginChangeDelegate;
|
|
9
|
+
UIView *__weak _observedView;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
- (instancetype)initWithSplitNavigationController:(RNSSplitNavigationController *)navigationController
|
|
13
|
+
delegate:(id<RNSSplitNavigationControllerFrameOriginChangeDelegate>)
|
|
14
|
+
frameOriginChangeDelegate
|
|
15
|
+
{
|
|
16
|
+
if (self = [super init]) {
|
|
17
|
+
_navigationController = navigationController;
|
|
18
|
+
_frameOriginChangeDelegate = frameOriginChangeDelegate;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return self;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
#pragma mark - Observing view frame changes
|
|
25
|
+
|
|
26
|
+
- (void)registerForViewFrameChanges
|
|
27
|
+
{
|
|
28
|
+
[self unregisterForViewFrameChanges];
|
|
29
|
+
|
|
30
|
+
UIView *view = _navigationController.viewIfLoaded;
|
|
31
|
+
if (view == nil) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
[view addObserver:self
|
|
36
|
+
forKeyPath:@"frame"
|
|
37
|
+
options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew
|
|
38
|
+
context:RNSSplitNavigationViewFrameContext];
|
|
39
|
+
_observedView = view;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
- (void)unregisterForViewFrameChanges
|
|
43
|
+
{
|
|
44
|
+
[_observedView removeObserver:self forKeyPath:@"frame" context:RNSSplitNavigationViewFrameContext];
|
|
45
|
+
_observedView = nil;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
- (void)observeValueForKeyPath:(NSString *)keyPath
|
|
49
|
+
ofObject:(id)object
|
|
50
|
+
change:(NSDictionary<NSKeyValueChangeKey, id> *)change
|
|
51
|
+
context:(void *)context
|
|
52
|
+
{
|
|
53
|
+
if (context != RNSSplitNavigationViewFrameContext) {
|
|
54
|
+
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
id oldValue = change[NSKeyValueChangeOldKey];
|
|
59
|
+
id newValue = change[NSKeyValueChangeNewKey];
|
|
60
|
+
if (![oldValue isKindOfClass:[NSValue class]] || ![newValue isKindOfClass:[NSValue class]]) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
CGRect oldFrame = [oldValue CGRectValue];
|
|
65
|
+
CGRect newFrame = [newValue CGRectValue];
|
|
66
|
+
|
|
67
|
+
if (!CGPointEqualToPoint(oldFrame.origin, newFrame.origin)) {
|
|
68
|
+
RNSSplitNavigationController *navigationController = _navigationController;
|
|
69
|
+
if (navigationController != nil) {
|
|
70
|
+
[_frameOriginChangeDelegate splitNavigationControllerFrameOriginDidChange:navigationController];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
- (void)dealloc
|
|
76
|
+
{
|
|
77
|
+
[self unregisterForViewFrameChanges];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#import <UIKit/UIKit.h>
|
|
4
|
+
|
|
5
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
6
|
+
|
|
7
|
+
@class RNSSplitNavigationController;
|
|
8
|
+
|
|
9
|
+
@protocol RNSSplitNavigationControllerFrameOriginChangeDelegate <NSObject>
|
|
10
|
+
|
|
11
|
+
- (void)splitNavigationControllerFrameOriginDidChange:(RNSSplitNavigationController *)splitNavCtrl;
|
|
12
|
+
|
|
13
|
+
@end
|
|
14
|
+
|
|
15
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
#import <rnscreens/RNSSplitScreenComponentDescriptor.h>
|
|
5
5
|
#import "RNSConversions.h"
|
|
6
6
|
#import "RNSSafeAreaViewNotifications.h"
|
|
7
|
-
|
|
8
|
-
#import "Swift-Bridging.h"
|
|
7
|
+
#import "RNSSplitScreenController.h"
|
|
9
8
|
|
|
10
9
|
namespace react = facebook::react;
|
|
11
10
|
|
|
@@ -97,13 +96,13 @@ namespace react = facebook::react;
|
|
|
97
96
|
|
|
98
97
|
#pragma mark - Layout
|
|
99
98
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
99
|
+
/**
|
|
100
|
+
* This override **should be considered as a workaround** for which I made some assumptions:
|
|
101
|
+
* 1. All parents of views with associated `UINavigationController` should have the same width as the SplitView column
|
|
102
|
+
* 2. I'm greedily aligning all native components which are extending `UINavigationController` - is covers both old and
|
|
103
|
+
* new stack implementations, however, it will have an impact on any other native component which will be extending
|
|
104
|
+
* from the same class.
|
|
105
|
+
*/
|
|
107
106
|
- (void)layoutSubviews
|
|
108
107
|
{
|
|
109
108
|
[super layoutSubviews];
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#import <UIKit/UIKit.h>
|
|
4
|
+
|
|
5
|
+
@class RNSSplitScreenComponentView;
|
|
6
|
+
|
|
7
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @class RNSSplitScreenController
|
|
11
|
+
* @brief A UIViewController subclass that manages a Split column in a UISplitViewController.
|
|
12
|
+
*
|
|
13
|
+
* Associated with a RNSSplitScreenComponentView, it handles layout synchronization with the
|
|
14
|
+
* Shadow Tree, emits React lifecycle events, and interacts with the SplitHost hierarchy.
|
|
15
|
+
*/
|
|
16
|
+
@interface RNSSplitScreenController : UIViewController
|
|
17
|
+
|
|
18
|
+
- (instancetype)initWithSplitScreenComponentView:(RNSSplitScreenComponentView *)splitScreenComponentView;
|
|
19
|
+
|
|
20
|
+
#pragma mark - Signals
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @brief Determines if this controller is nested inside a SplitHost hierarchy.
|
|
24
|
+
*
|
|
25
|
+
* Used to differentiate between screens embedded in the native host and modal presentations.
|
|
26
|
+
*
|
|
27
|
+
* @return true if inside RNSSplitHostController, false otherwise.
|
|
28
|
+
*/
|
|
29
|
+
- (BOOL)isInSplitHostSubtree;
|
|
30
|
+
|
|
31
|
+
- (void)setNeedsLifecycleStateUpdate;
|
|
32
|
+
|
|
33
|
+
#pragma mark - Layout
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @brief Request ShadowNode state update when the Split screen frame origin has changed.
|
|
37
|
+
*
|
|
38
|
+
* @param splitViewController The UISplitViewController whose layout positioning changed, represented by
|
|
39
|
+
* RNSSplitHostController.
|
|
40
|
+
*/
|
|
41
|
+
- (void)columnPositioningDidChangeInSplitViewController:(UISplitViewController *)splitViewController;
|
|
42
|
+
|
|
43
|
+
@end
|
|
44
|
+
|
|
45
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
#import "RNSSplitScreenController.h"
|
|
2
|
+
|
|
3
|
+
#import <React/RCTAssert.h>
|
|
4
|
+
#import "RNSSplitHostComponentView.h"
|
|
5
|
+
#import "RNSSplitHostController.h"
|
|
6
|
+
#import "RNSSplitScreenComponentView.h"
|
|
7
|
+
|
|
8
|
+
@implementation RNSSplitScreenController {
|
|
9
|
+
RNSSplitScreenComponentView *_splitScreenComponentView;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
- (instancetype)initWithSplitScreenComponentView:(RNSSplitScreenComponentView *)splitScreenComponentView
|
|
13
|
+
{
|
|
14
|
+
if (self = [super init]) {
|
|
15
|
+
_splitScreenComponentView = splitScreenComponentView;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return self;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
- (RNSSplitScreenShadowStateProxy *)shadowStateProxy
|
|
22
|
+
{
|
|
23
|
+
return [_splitScreenComponentView shadowStateProxy];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
- (RNSSplitScreenComponentEventEmitter *)reactEventEmitter
|
|
27
|
+
{
|
|
28
|
+
return [_splitScreenComponentView reactEventEmitter];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @brief Searching for the SplitHost controller
|
|
33
|
+
*
|
|
34
|
+
* It checks whether the parent controller is our host controller.
|
|
35
|
+
* If we're outside the structure, e. g. for inspector represented as a modal,
|
|
36
|
+
* we're searching for that controller using a reference that Screen keeps for Host component view.
|
|
37
|
+
*
|
|
38
|
+
* @return If found - a RNSSplitHostController instance, otherwise nil.
|
|
39
|
+
*/
|
|
40
|
+
- (nullable RNSSplitHostController *)findSplitHostController
|
|
41
|
+
{
|
|
42
|
+
if ([self.splitViewController isKindOfClass:RNSSplitHostController.class]) {
|
|
43
|
+
return (RNSSplitHostController *)self.splitViewController;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
RNSSplitHostComponentView *splitHost = _splitScreenComponentView.splitHost;
|
|
47
|
+
if (splitHost != nil) {
|
|
48
|
+
return splitHost.splitHostController;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return nil;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
- (BOOL)isInSplitHostSubtree
|
|
55
|
+
{
|
|
56
|
+
return [self.splitViewController isKindOfClass:RNSSplitHostController.class];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
#pragma mark - Signals
|
|
60
|
+
|
|
61
|
+
- (void)setNeedsLifecycleStateUpdate
|
|
62
|
+
{
|
|
63
|
+
[[self findSplitHostController] setNeedsUpdateOfChildViewControllers];
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
#pragma mark - Layout
|
|
67
|
+
|
|
68
|
+
- (void)viewDidLayoutSubviews
|
|
69
|
+
{
|
|
70
|
+
[super viewDidLayoutSubviews];
|
|
71
|
+
|
|
72
|
+
[self updateShadowTreeState];
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @brief Handles frame layout changes and updates Shadow Tree accordingly.
|
|
77
|
+
*
|
|
78
|
+
* Requests for the ShadowNode updates through the shadow state proxy.
|
|
79
|
+
* Differentiates cases when we're in the Host hierarchy to calculate frame relatively
|
|
80
|
+
* to the Host view from the modal case where we're passing absolute layout metrics to the ShadowNode.
|
|
81
|
+
*/
|
|
82
|
+
- (void)updateShadowTreeState
|
|
83
|
+
{
|
|
84
|
+
// For modals, which are presented outside the SplitHost subtree (and RN hierarchy),
|
|
85
|
+
// we're attaching our touch handler and we don't need to apply any offset corrections,
|
|
86
|
+
// because it's positioned relatively to our RNSSplitScreenComponentView
|
|
87
|
+
if (![self isInSplitHostSubtree]) {
|
|
88
|
+
[[self shadowStateProxy] updateShadowStateOfComponent:_splitScreenComponentView];
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
UIView *ancestorView = [self findSplitHostController].view;
|
|
93
|
+
RCTAssert(ancestorView != nil, @"[RNScreens] Expected to find RNSSplitHost component for RNSSplitScreen component");
|
|
94
|
+
|
|
95
|
+
[[self shadowStateProxy] updateShadowStateOfComponent:_splitScreenComponentView inContextOfAncestorView:ancestorView];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
- (void)columnPositioningDidChangeInSplitViewController:(UISplitViewController *)splitViewController
|
|
99
|
+
{
|
|
100
|
+
[[self shadowStateProxy] updateShadowStateOfComponent:_splitScreenComponentView
|
|
101
|
+
inContextOfAncestorView:splitViewController.view];
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
#pragma mark - Events
|
|
105
|
+
|
|
106
|
+
- (void)viewWillAppear:(BOOL)animated
|
|
107
|
+
{
|
|
108
|
+
[super viewWillAppear:animated];
|
|
109
|
+
[[self reactEventEmitter] emitOnWillAppear];
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
- (void)viewDidAppear:(BOOL)animated
|
|
113
|
+
{
|
|
114
|
+
[super viewDidAppear:animated];
|
|
115
|
+
[[self reactEventEmitter] emitOnDidAppear];
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
- (void)viewWillDisappear:(BOOL)animated
|
|
119
|
+
{
|
|
120
|
+
[super viewWillDisappear:animated];
|
|
121
|
+
[[self reactEventEmitter] emitOnWillDisappear];
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
- (void)viewDidDisappear:(BOOL)animated
|
|
125
|
+
{
|
|
126
|
+
[super viewDidDisappear:animated];
|
|
127
|
+
[[self reactEventEmitter] emitOnDidDisappear];
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
@end
|
|
@@ -21,6 +21,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
21
21
|
@property (nonatomic, readonly, nullable) NSString *largeTitle;
|
|
22
22
|
@property (nonatomic, readonly, nullable) NSString *largeSubtitle;
|
|
23
23
|
@property (nonatomic, readonly) BOOL largeTitleEnabled;
|
|
24
|
+
@property (nonatomic, readonly, nullable) RNSStackHeaderMenuData *titleMenu;
|
|
24
25
|
@property (nonatomic, readonly) NSArray<id> *children;
|
|
25
26
|
|
|
26
27
|
- (void)resetProps;
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
#import "RNSStackHeaderConfigComponentView.h"
|
|
2
|
+
#import "RNSConversions.h"
|
|
2
3
|
#import "RNSImageLoadingHelper.h"
|
|
3
4
|
#import "RNSStackHeaderConfigEventEmitter.h"
|
|
4
5
|
#import "RNSStackHeaderConfigShadowStateProxy.h"
|
|
5
6
|
#import "RNSStackHeaderItemComponentView.h"
|
|
6
7
|
#import "RNSStackHeaderItemSpacerComponentView.h"
|
|
8
|
+
#import "RNSStackHeaderMenuCoordinator.h"
|
|
7
9
|
#import "RNSStackHeaderMenuFinder.h"
|
|
10
|
+
#import "RNSStackHeaderMenuMapper.h"
|
|
8
11
|
#import "RNSStackHeaderMenuUpdateOptions.h"
|
|
9
12
|
#import "RNSStackNavigationController.h"
|
|
10
13
|
#import "RNSStackScreenComponentView.h"
|
|
@@ -64,6 +67,7 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
64
67
|
_largeTitle = nil;
|
|
65
68
|
_largeSubtitle = nil;
|
|
66
69
|
_largeTitleEnabled = NO;
|
|
70
|
+
_titleMenu = nil;
|
|
67
71
|
}
|
|
68
72
|
|
|
69
73
|
- (NSArray<id> *)children
|
|
@@ -270,7 +274,8 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
270
274
|
}
|
|
271
275
|
|
|
272
276
|
RNSMenuElementLocator *locator = [RNSStackHeaderMenuFinder findMenuElementWithId:menuItemId
|
|
273
|
-
inHeaderItems:[self headerItems]
|
|
277
|
+
inHeaderItems:[self headerItems]
|
|
278
|
+
titleMenu:_titleMenu];
|
|
274
279
|
if (locator == nil) {
|
|
275
280
|
RCTLogWarn(@"[RNScreens] setMenuItemOptions: element with id \"%@\" not found", menuItemId);
|
|
276
281
|
return;
|
|
@@ -285,15 +290,15 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
285
290
|
RNSStackHeaderMenuItemData *newItemData = [RNSMenuItemUpdateOptions applyOptions:updateOptions
|
|
286
291
|
toMenuItem:oldItemData];
|
|
287
292
|
|
|
288
|
-
if (updateOptions.hasToggleState) {
|
|
293
|
+
if (updateOptions.hasToggleState && locator.rootMenu != nil && locator.trackerItemId != nil) {
|
|
289
294
|
BOOL isToggle = oldItemData.itemType == RNSMenuItemTypeToggle ||
|
|
290
|
-
(oldItemData.itemType == RNSMenuItemTypeAutomatic &&
|
|
291
|
-
[RNSStackHeaderMenuFinder singleSelectionRootForElementWithId:menuItemId
|
|
292
|
-
inMenu:locator.headerItem.menu] != nil);
|
|
295
|
+
(oldItemData.itemType == RNSMenuItemTypeAutomatic &&
|
|
296
|
+
[RNSStackHeaderMenuFinder singleSelectionRootForElementWithId:menuItemId inMenu:locator.rootMenu] != nil);
|
|
293
297
|
if (isToggle) {
|
|
294
298
|
[[self headerCoordinator] setToggleState:updateOptions.toggleState
|
|
295
299
|
forMenuElementId:menuItemId
|
|
296
|
-
|
|
300
|
+
trackerItemId:locator.trackerItemId
|
|
301
|
+
rootMenu:locator.rootMenu
|
|
297
302
|
parentMenu:locator.searchResult.parentMenu];
|
|
298
303
|
}
|
|
299
304
|
}
|
|
@@ -308,8 +313,15 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
308
313
|
parentMenu:locator.searchResult.parentMenu];
|
|
309
314
|
break;
|
|
310
315
|
case RNSMenuElementPositionTitle:
|
|
316
|
+
if (locator.searchResult.parentMenu != nil) {
|
|
317
|
+
_titleMenu = [RNSStackHeaderMenuCoordinator menu:_titleMenu
|
|
318
|
+
replacingChildWithId:menuItemId
|
|
319
|
+
withElement:newItemData];
|
|
320
|
+
}
|
|
321
|
+
[[self headerCoordinator] reapplyTitleMenu];
|
|
322
|
+
break;
|
|
311
323
|
case RNSMenuElementPositionOverflow:
|
|
312
|
-
// TODO: handle
|
|
324
|
+
// TODO: handle overflow menu
|
|
313
325
|
break;
|
|
314
326
|
}
|
|
315
327
|
}
|
|
@@ -322,7 +334,8 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
322
334
|
}
|
|
323
335
|
|
|
324
336
|
RNSMenuElementLocator *locator = [RNSStackHeaderMenuFinder findMenuElementWithId:menuElementId
|
|
325
|
-
inHeaderItems:[self headerItems]
|
|
337
|
+
inHeaderItems:[self headerItems]
|
|
338
|
+
titleMenu:_titleMenu];
|
|
326
339
|
if (locator == nil) {
|
|
327
340
|
RCTLogWarn(@"[RNScreens] setMenuOptions: element with id \"%@\" not found", menuElementId);
|
|
328
341
|
return;
|
|
@@ -346,8 +359,17 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
346
359
|
parentMenu:locator.searchResult.parentMenu];
|
|
347
360
|
break;
|
|
348
361
|
case RNSMenuElementPositionTitle:
|
|
362
|
+
if (locator.searchResult.parentMenu == nil) {
|
|
363
|
+
_titleMenu = (RNSStackHeaderMenuData *)newMenuItem;
|
|
364
|
+
} else {
|
|
365
|
+
_titleMenu = [RNSStackHeaderMenuCoordinator menu:_titleMenu
|
|
366
|
+
replacingChildWithId:menuElementId
|
|
367
|
+
withElement:newMenuItem];
|
|
368
|
+
}
|
|
369
|
+
[[self headerCoordinator] reapplyTitleMenu];
|
|
370
|
+
break;
|
|
349
371
|
case RNSMenuElementPositionOverflow:
|
|
350
|
-
// TODO: handle
|
|
372
|
+
// TODO: handle overflow menu
|
|
351
373
|
break;
|
|
352
374
|
}
|
|
353
375
|
}
|
|
@@ -396,6 +418,8 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
396
418
|
const auto &newHeaderProps = *std::static_pointer_cast<const react::RNSStackHeaderConfigIOSProps>(props);
|
|
397
419
|
const auto &oldHeaderProps = *std::static_pointer_cast<const react::RNSStackHeaderConfigIOSProps>(_props);
|
|
398
420
|
|
|
421
|
+
BOOL titleMenuDidChange = NO;
|
|
422
|
+
|
|
399
423
|
if (oldHeaderProps.title != newHeaderProps.title) {
|
|
400
424
|
_title = RCTNSStringFromStringNilIfEmpty(newHeaderProps.title);
|
|
401
425
|
}
|
|
@@ -420,9 +444,23 @@ static void RNSAssertIsValidHeaderChild(UIView *child)
|
|
|
420
444
|
_largeTitleEnabled = newHeaderProps.largeTitleEnabled;
|
|
421
445
|
}
|
|
422
446
|
|
|
447
|
+
if (oldHeaderProps.titleMenu != newHeaderProps.titleMenu) {
|
|
448
|
+
_titleMenu = [RNSStackHeaderMenuMapper
|
|
449
|
+
menuFromDictionary:rnscreens::conversion::RNSConvertFollyDynamicToId(newHeaderProps.titleMenu)];
|
|
450
|
+
titleMenuDidChange = YES;
|
|
451
|
+
}
|
|
452
|
+
|
|
423
453
|
[super updateProps:props oldProps:oldProps];
|
|
424
454
|
|
|
425
455
|
[[self headerCoordinator] applyConfigProperties];
|
|
456
|
+
|
|
457
|
+
if (titleMenuDidChange) {
|
|
458
|
+
// title menu is a prop on the navigation item, not on one of the bar button items
|
|
459
|
+
// thus it is not configured with matching RNSStackHeaderItemComponentView
|
|
460
|
+
// but here directly
|
|
461
|
+
[[self headerCoordinator] resetTitleMenuTracker];
|
|
462
|
+
[[self headerCoordinator] reapplyTitleMenu];
|
|
463
|
+
}
|
|
426
464
|
}
|
|
427
465
|
|
|
428
466
|
+ (react::ComponentDescriptorProvider)componentDescriptorProvider
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
#import <UIKit/UIKit.h>
|
|
4
4
|
|
|
5
|
+
@class RNSStackHeaderMenuData;
|
|
6
|
+
|
|
5
7
|
NS_ASSUME_NONNULL_BEGIN
|
|
6
8
|
|
|
7
9
|
@protocol RNSStackHeaderConfigDataProviding <NSObject>
|
|
@@ -12,6 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
12
14
|
@property (nonatomic, readonly, nullable) NSString *largeTitle;
|
|
13
15
|
@property (nonatomic, readonly, nullable) NSString *largeSubtitle;
|
|
14
16
|
@property (nonatomic, readonly) BOOL largeTitleEnabled;
|
|
17
|
+
@property (nonatomic, readonly, nullable) RNSStackHeaderMenuData *titleMenu;
|
|
15
18
|
|
|
16
19
|
/**
|
|
17
20
|
Children are expected to conform to either RNSStackHeaderItemDataProviding
|
|
@@ -35,6 +35,15 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
35
35
|
*/
|
|
36
36
|
+ (NSArray<NSString *> *)getToggleItemsIdsInMenu:(RNSStackHeaderMenuData *)menu;
|
|
37
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Builds a UIMenu from the given menu data. Used for `UINavigationItem.titleMenuProvider`.
|
|
40
|
+
*/
|
|
41
|
+
+ (UIMenu *)buildUIMenuFromData:(RNSStackHeaderMenuData *)data
|
|
42
|
+
withHeaderEventsDelegate:(id<RNSStackHeaderEventsDelegate>)delegate
|
|
43
|
+
stateTracker:(RNSStackHeaderMenuToggleStateTracker *)tracker
|
|
44
|
+
withImageLoader:(id<RNSImageLoading>)imageLoader
|
|
45
|
+
menuInvalidatedCallback:(nullable void (^)(void))onMenuInvalidated;
|
|
46
|
+
|
|
38
47
|
/**
|
|
39
48
|
* Constructs a new menu tree with the child matching `elementId` replaced by `newElement`.
|
|
40
49
|
* Returns the original menu unchanged if no matching child is found in the subtree.
|
|
@@ -88,6 +88,21 @@
|
|
|
88
88
|
return [UIMenu menuWithTitle:data.title image:menuImage identifier:nil options:options children:elements];
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
+
+ (UIMenu *)buildUIMenuFromData:(RNSStackHeaderMenuData *)data
|
|
92
|
+
withHeaderEventsDelegate:(id<RNSStackHeaderEventsDelegate>)delegate
|
|
93
|
+
stateTracker:(RNSStackHeaderMenuToggleStateTracker *)tracker
|
|
94
|
+
withImageLoader:(id<RNSImageLoading>)imageLoader
|
|
95
|
+
menuInvalidatedCallback:(nullable void (^)(void))onMenuInvalidated
|
|
96
|
+
{
|
|
97
|
+
return [self buildMenuFromData:data
|
|
98
|
+
withHeaderEventsDelegate:delegate
|
|
99
|
+
stateTracker:tracker
|
|
100
|
+
singleSelectionRoot:nil
|
|
101
|
+
initialSingleSelectionStateClaimed:NULL
|
|
102
|
+
withImageLoader:imageLoader
|
|
103
|
+
menuInvalidatedCallback:onMenuInvalidated];
|
|
104
|
+
}
|
|
105
|
+
|
|
91
106
|
+ (nullable UIMenuElement *)buildElementFromData:(id<RNSStackHeaderMenuElement>)element
|
|
92
107
|
withHeaderEventsDelegate:(id<RNSStackHeaderEventsDelegate>)delegate
|
|
93
108
|
stateTracker:(RNSStackHeaderMenuToggleStateTracker *)tracker
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
|
|
8
8
|
NS_ASSUME_NONNULL_BEGIN
|
|
9
9
|
|
|
10
|
+
static NSString *const RNSTitleMenuTrackerItemId = @"__titleMenu__";
|
|
11
|
+
|
|
10
12
|
@interface RNSStackHeaderMenuElementSearchResult : NSObject
|
|
11
13
|
|
|
12
14
|
@property (nonatomic, strong, readonly) id<RNSStackHeaderMenuElement> element;
|
|
@@ -29,19 +31,32 @@ typedef NS_ENUM(NSInteger, RNSMenuElementPosition) {
|
|
|
29
31
|
@property (nonatomic, readonly) RNSMenuElementPosition position;
|
|
30
32
|
@property (nonatomic, weak, readonly, nullable) id<RNSStackHeaderItemDataProviding> headerItem;
|
|
31
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Root menu tree that contains the found element. Used for singleSelectionRoot lookups.
|
|
36
|
+
*/
|
|
37
|
+
@property (nonatomic, strong, readonly, nullable) RNSStackHeaderMenuData *rootMenu;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Tracker key for the toggle state tracker registry.
|
|
41
|
+
*/
|
|
42
|
+
@property (nonatomic, copy, readonly, nullable) NSString *trackerItemId;
|
|
43
|
+
|
|
32
44
|
- (instancetype)initWithSearchResult:(RNSStackHeaderMenuElementSearchResult *)searchResult
|
|
33
45
|
position:(RNSMenuElementPosition)position
|
|
34
|
-
headerItem:(nullable id<RNSStackHeaderItemDataProviding>)headerItem
|
|
46
|
+
headerItem:(nullable id<RNSStackHeaderItemDataProviding>)headerItem
|
|
47
|
+
rootMenu:(nullable RNSStackHeaderMenuData *)rootMenu
|
|
48
|
+
trackerItemId:(nullable NSString *)trackerItemId;
|
|
35
49
|
|
|
36
50
|
@end
|
|
37
51
|
|
|
38
52
|
@interface RNSStackHeaderMenuFinder : NSObject
|
|
39
53
|
|
|
40
54
|
/**
|
|
41
|
-
* Searches all header items' menus for a menu element with the given ID.
|
|
55
|
+
* Searches all header items' menus and the title menu for a menu element with the given ID.
|
|
42
56
|
*/
|
|
43
57
|
+ (nullable RNSMenuElementLocator *)findMenuElementWithId:(NSString *)elementId
|
|
44
|
-
inHeaderItems:(NSArray<id<RNSStackHeaderItemDataProviding>> *)items
|
|
58
|
+
inHeaderItems:(NSArray<id<RNSStackHeaderItemDataProviding>> *)items
|
|
59
|
+
titleMenu:(nullable RNSStackHeaderMenuData *)titleMenu;
|
|
45
60
|
|
|
46
61
|
/**
|
|
47
62
|
* Recursively searches a single menu tree for an element with the given ID.
|
|
@@ -23,11 +23,15 @@
|
|
|
23
23
|
- (instancetype)initWithSearchResult:(RNSStackHeaderMenuElementSearchResult *)searchResult
|
|
24
24
|
position:(RNSMenuElementPosition)position
|
|
25
25
|
headerItem:(nullable id<RNSStackHeaderItemDataProviding>)headerItem
|
|
26
|
+
rootMenu:(nullable RNSStackHeaderMenuData *)rootMenu
|
|
27
|
+
trackerItemId:(nullable NSString *)trackerItemId
|
|
26
28
|
{
|
|
27
29
|
if (self = [super init]) {
|
|
28
30
|
_searchResult = searchResult;
|
|
29
31
|
_position = position;
|
|
30
32
|
_headerItem = headerItem;
|
|
33
|
+
_rootMenu = rootMenu;
|
|
34
|
+
_trackerItemId = [trackerItemId copy];
|
|
31
35
|
}
|
|
32
36
|
return self;
|
|
33
37
|
}
|
|
@@ -40,6 +44,7 @@
|
|
|
40
44
|
|
|
41
45
|
+ (nullable RNSMenuElementLocator *)findMenuElementWithId:(NSString *)elementId
|
|
42
46
|
inHeaderItems:(NSArray<id<RNSStackHeaderItemDataProviding>> *)items
|
|
47
|
+
titleMenu:(nullable RNSStackHeaderMenuData *)titleMenu
|
|
43
48
|
{
|
|
44
49
|
for (id<RNSStackHeaderItemDataProviding> item in items) {
|
|
45
50
|
if (item.menu == nil || item.itemId == nil) {
|
|
@@ -49,11 +54,24 @@
|
|
|
49
54
|
if (result != nil) {
|
|
50
55
|
return [[RNSMenuElementLocator alloc] initWithSearchResult:result
|
|
51
56
|
position:RNSMenuElementPositionItem
|
|
52
|
-
headerItem:item
|
|
57
|
+
headerItem:item
|
|
58
|
+
rootMenu:item.menu
|
|
59
|
+
trackerItemId:item.itemId];
|
|
53
60
|
}
|
|
54
61
|
}
|
|
55
|
-
|
|
56
|
-
|
|
62
|
+
|
|
63
|
+
if (titleMenu != nil) {
|
|
64
|
+
RNSStackHeaderMenuElementSearchResult *result = [self findElementWithId:elementId inMenu:titleMenu];
|
|
65
|
+
if (result != nil) {
|
|
66
|
+
return [[RNSMenuElementLocator alloc] initWithSearchResult:result
|
|
67
|
+
position:RNSMenuElementPositionTitle
|
|
68
|
+
headerItem:nil
|
|
69
|
+
rootMenu:titleMenu
|
|
70
|
+
trackerItemId:RNSTitleMenuTrackerItemId];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// TODO: search overflow menu (RNSMenuElementPositionOverflow)
|
|
57
75
|
return nil;
|
|
58
76
|
}
|
|
59
77
|
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
#import "RNSStackNavigationController.h"
|
|
16
16
|
#import "RNSStackOperationCoordinator.h"
|
|
17
17
|
#import "RNSStackScreenComponentView.h"
|
|
18
|
-
#import "Swift-Bridging.h"
|
|
19
18
|
|
|
20
19
|
namespace react = facebook::react;
|
|
21
20
|
|
|
@@ -38,6 +37,9 @@ namespace react = facebook::react;
|
|
|
38
37
|
|
|
39
38
|
- (void)initState
|
|
40
39
|
{
|
|
40
|
+
static const auto defaultProps = std::make_shared<const react::RNSStackHostProps>();
|
|
41
|
+
_props = defaultProps;
|
|
42
|
+
|
|
41
43
|
_stackNavigationController = [RNSStackNavigationController new];
|
|
42
44
|
_stackOperationCoordinator = [RNSStackOperationCoordinator new];
|
|
43
45
|
_renderedScreens = [NSMutableArray new];
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#import "RNSStackNavigationController.h"
|
|
2
|
+
#import <React/RCTAssert.h>
|
|
2
3
|
#import "RNSContainer.h"
|
|
3
4
|
#import "RNSLog.h"
|
|
4
5
|
#import "RNSParentContainerItemRegistry.h"
|
|
5
6
|
#import "RNSStackOperation.h"
|
|
6
7
|
#import "RNSStackScreenController.h"
|
|
7
8
|
#import "RNSViewFrameChangeDelegate.h"
|
|
8
|
-
#import "React/RCTAssert.h"
|
|
9
9
|
|
|
10
10
|
@implementation RNSStackNavigationController {
|
|
11
11
|
NSMutableArray<RNSPushOperation *> *_Nonnull _pendingPushOperations;
|
|
@@ -16,8 +16,6 @@
|
|
|
16
16
|
#import "RNSStackScreenController.h"
|
|
17
17
|
#import "RNSStackScreenHeaderCoordinator.h"
|
|
18
18
|
|
|
19
|
-
#import "Swift-Bridging.h"
|
|
20
|
-
|
|
21
19
|
namespace react = facebook::react;
|
|
22
20
|
|
|
23
21
|
@interface RNSStackScreenComponentView () <RCTMountingTransactionObserving, RNSScrollViewSeeking>
|
|
@@ -30,9 +30,14 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
30
30
|
|
|
31
31
|
- (void)resetTrackerForItemWithId:(nullable NSString *)itemId;
|
|
32
32
|
|
|
33
|
+
- (void)reapplyTitleMenu;
|
|
34
|
+
|
|
35
|
+
- (void)resetTitleMenuTracker;
|
|
36
|
+
|
|
33
37
|
- (void)setToggleState:(BOOL)state
|
|
34
38
|
forMenuElementId:(NSString *)elementId
|
|
35
|
-
|
|
39
|
+
trackerItemId:(NSString *)trackerItemId
|
|
40
|
+
rootMenu:(RNSStackHeaderMenuData *)rootMenu
|
|
36
41
|
parentMenu:(nullable RNSStackHeaderMenuData *)parentMenu;
|
|
37
42
|
|
|
38
43
|
- (void)clearHeaderConfiguration;
|