diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/container/TabsContainer.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/container/TabsContainer.kt index 3d2913f325..1a96320231 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/container/TabsContainer.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/container/TabsContainer.kt @@ -361,12 +361,6 @@ internal class TabsContainer( val isRepeated = nextSelectedFragment === currSelectedFragment - // If this is user action we test whether it should be prevented before we progress the state. - if (!isRepeated && !isInExternalOperationContext && nextSelectedFragment.isPreventNativeSelectionEnabled) { - delegate.onNavStateUpdatePrevented(navState, nextSelectedFragment.requireScreenKey) - return false - } - val stateChanged = updateSelectedFragment(nextSelectedFragment) val hasTriggeredSpecialEffect = diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/container/TabsContainerDelegate.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/container/TabsContainerDelegate.kt index a1974440e1..ef8e617a6b 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/container/TabsContainerDelegate.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/container/TabsContainerDelegate.kt @@ -32,17 +32,4 @@ internal interface TabsContainerDelegate { rejectedNavState: TabsNavState, reason: TabsNavStateUpdateRejectionReason, ) - - /** - * Called when a native user action (tap) attempts to select a tab that has - * [com.swmansion.rnscreens.gamma.tabs.screen.TabsScreen.preventNativeSelection] enabled. - * The navigation state remains unchanged. - * - * @param currentNavState The currently active navigation state that was kept. - * @param preventedScreenKey The screen key of the tab whose selection was prevented. - */ - fun onNavStateUpdatePrevented( - currentNavState: TabsNavState, - preventedScreenKey: String, - ) } diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/TabsHost.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/TabsHost.kt index c7f3dc545f..ad3b6a2f22 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/TabsHost.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/TabsHost.kt @@ -182,13 +182,6 @@ class TabsHost( ) } - override fun onNavStateUpdatePrevented( - currentNavState: TabsNavState, - preventedScreenKey: String, - ) { - eventEmitter.emitOnTabSelectionPreventedEvent(currentNavState, preventedScreenKey) - } - override fun didMountItems(uiManager: UIManager) { container.performContainerUpdateIfNeeded() } diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/TabsHostEventEmitter.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/TabsHostEventEmitter.kt index e971268e8e..229df14bba 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/TabsHostEventEmitter.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/TabsHostEventEmitter.kt @@ -5,7 +5,6 @@ import com.swmansion.rnscreens.gamma.common.event.BaseEventEmitter import com.swmansion.rnscreens.gamma.tabs.container.TabsNavState import com.swmansion.rnscreens.gamma.tabs.container.TabsNavStateUpdateRejectionReason import com.swmansion.rnscreens.gamma.tabs.host.event.TabsHostTabSelectedEvent -import com.swmansion.rnscreens.gamma.tabs.host.event.TabsHostTabSelectionPreventedEvent import com.swmansion.rnscreens.gamma.tabs.host.event.TabsHostTabSelectionRejectedEvent internal class TabsHostEventEmitter( @@ -54,22 +53,4 @@ internal class TabsHostEventEmitter( ), ) } - - /** - * Emits `onTabSelectionPrevented` event to JS when a tab selection is prevented - * because the target screen has `preventNativeSelection` enabled. - */ - fun emitOnTabSelectionPreventedEvent( - currentNavState: TabsNavState, - preventedScreenKey: String, - ) { - reactEventDispatcher.dispatchEvent( - TabsHostTabSelectionPreventedEvent( - surfaceId, - viewTag, - currentNavState, - preventedScreenKey, - ), - ) - } } diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/TabsHostViewManager.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/TabsHostViewManager.kt index 5b81f7ee8c..59a5701ddb 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/TabsHostViewManager.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/TabsHostViewManager.kt @@ -13,7 +13,6 @@ import com.swmansion.rnscreens.gamma.common.colorscheme.ColorScheme import com.swmansion.rnscreens.gamma.helpers.makeEventRegistrationInfo import com.swmansion.rnscreens.gamma.tabs.container.TabsNavState import com.swmansion.rnscreens.gamma.tabs.host.event.TabsHostTabSelectedEvent -import com.swmansion.rnscreens.gamma.tabs.host.event.TabsHostTabSelectionPreventedEvent import com.swmansion.rnscreens.gamma.tabs.host.event.TabsHostTabSelectionRejectedEvent import com.swmansion.rnscreens.gamma.tabs.screen.TabsScreen @@ -60,7 +59,6 @@ class TabsHostViewManager : override fun getExportedCustomDirectEventTypeConstants(): MutableMap = mutableMapOf( makeEventRegistrationInfo(TabsHostTabSelectedEvent), - makeEventRegistrationInfo(TabsHostTabSelectionPreventedEvent), makeEventRegistrationInfo(TabsHostTabSelectionRejectedEvent), ) diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/event/TabsHostTabSelectionPreventedEvent.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/event/TabsHostTabSelectionPreventedEvent.kt deleted file mode 100644 index b65ac57136..0000000000 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/host/event/TabsHostTabSelectionPreventedEvent.kt +++ /dev/null @@ -1,47 +0,0 @@ -package com.swmansion.rnscreens.gamma.tabs.host.event - -import com.facebook.react.bridge.Arguments -import com.facebook.react.bridge.WritableMap -import com.facebook.react.uimanager.events.Event -import com.swmansion.rnscreens.gamma.common.event.NamingAwareEventType -import com.swmansion.rnscreens.gamma.tabs.container.TabsNavState - -/** - * React Native event dispatched to JS when a tab selection is prevented because the target - * screen has `preventNativeSelection` enabled. - * - * This event is never coalesced — every prevention is delivered individually. - */ -class TabsHostTabSelectionPreventedEvent( - surfaceId: Int, - viewId: Int, - val currentNavState: TabsNavState, - val preventedScreenKey: String, -) : Event(surfaceId, viewId), - NamingAwareEventType { - override fun getEventName() = EVENT_NAME - - override fun getEventRegistrationName() = EVENT_REGISTRATION_NAME - - override fun canCoalesce(): Boolean = false - - override fun getEventData(): WritableMap? = - Arguments.createMap().apply { - putString(EK_SELECTED_KEY, currentNavState.selectedKey) - putInt(EK_PROVENANCE, currentNavState.provenance) - putString(EK_PREVENTED_KEY, preventedScreenKey) - } - - companion object : NamingAwareEventType { - const val EVENT_NAME = "topTabSelectionPrevented" - const val EVENT_REGISTRATION_NAME = "onTabSelectionPrevented" - - private const val EK_SELECTED_KEY = "selectedScreenKey" - private const val EK_PROVENANCE = "provenance" - private const val EK_PREVENTED_KEY = "preventedScreenKey" - - override fun getEventName() = EVENT_NAME - - override fun getEventRegistrationName() = EVENT_REGISTRATION_NAME - } -} diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/screen/TabsScreen.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/screen/TabsScreen.kt index 24d107f6fe..646c1fa34d 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/screen/TabsScreen.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/screen/TabsScreen.kt @@ -94,8 +94,6 @@ class TabsScreen( var shouldUseRepeatedTabSelectionScrollToTopSpecialEffect: Boolean = true var shouldUseRepeatedTabSelectionPopToRootSpecialEffect: Boolean = true - var preventNativeSelection: Boolean = false - private fun updateMenuItemAttributesIfNeeded( oldValue: T, newValue: T, diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/screen/TabsScreenFragment.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/screen/TabsScreenFragment.kt index ee0a07ce85..6d70800492 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/screen/TabsScreenFragment.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/screen/TabsScreenFragment.kt @@ -11,7 +11,6 @@ class TabsScreenFragment( internal val tabsScreen: TabsScreen, ) : Fragment() { internal val requireScreenKey: String by tabsScreen::requireScreenKey - internal val isPreventNativeSelectionEnabled: Boolean by tabsScreen::preventNativeSelection override fun onCreateView( inflater: LayoutInflater, diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/screen/TabsScreenViewManager.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/screen/TabsScreenViewManager.kt index 73ea07790a..02fd4788e2 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/screen/TabsScreenViewManager.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/screen/TabsScreenViewManager.kt @@ -97,13 +97,6 @@ class TabsScreenViewManager : view.shouldUseRepeatedTabSelectionScrollToTopSpecialEffect = scrollToTop } - override fun setPreventNativeSelection( - view: TabsScreen, - value: Boolean, - ) { - view.preventNativeSelection = value - } - override fun setTabBarItemTestID( view: TabsScreen, value: String?, diff --git a/apps/Example.tsx b/apps/Example.tsx index d4f2dfe8a3..e5b329578a 100644 --- a/apps/Example.tsx +++ b/apps/Example.tsx @@ -33,7 +33,7 @@ import { GestureHandlerRootView } from 'react-native-gesture-handler'; import { ScreensDarkTheme, ScreensLightTheme, -} from './src/shared/styling/adapter/react-navigation'; +} from './src/shared/styling/Colors'; import IssueTestsScreen from './src/tests/IssueTestsScreen'; import SingleFeatureTests from './src/tests/single-feature-tests'; diff --git a/apps/src/shared/Alert.tsx b/apps/src/shared/Alert.tsx index f2dd9e3e24..ac1bd8581d 100644 --- a/apps/src/shared/Alert.tsx +++ b/apps/src/shared/Alert.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Text, StyleSheet, Dimensions, View, Pressable } from 'react-native'; import { useNavigation } from '@react-navigation/native'; -import useThemeColorPallette from './styling/adapter/react-navigation/useColorPallette'; +import useThemeColorPallette from './styling/theme-provider/useColorPallette'; export const Alert = (): React.JSX.Element => { const navigation = useNavigation(); diff --git a/apps/src/shared/ThemedText.tsx b/apps/src/shared/ThemedText.tsx index e67f69bb6e..a631337bb5 100644 --- a/apps/src/shared/ThemedText.tsx +++ b/apps/src/shared/ThemedText.tsx @@ -1,9 +1,9 @@ -import { useTheme } from '@react-navigation/native'; import React from 'react'; import { Text, TextProps } from 'react-native'; +import useThemeColorPallette from './styling/theme-provider/useColorPallette'; export const ThemedText = ({ children, style, ...props }: TextProps) => { - const { colors } = useTheme(); + const { colors } = useThemeColorPallette(); return ( diff --git a/apps/src/shared/ThemedTextInput.tsx b/apps/src/shared/ThemedTextInput.tsx index 9a26dcd165..9c807353e9 100644 --- a/apps/src/shared/ThemedTextInput.tsx +++ b/apps/src/shared/ThemedTextInput.tsx @@ -1,13 +1,13 @@ -import { useTheme } from '@react-navigation/native'; import React from 'react'; import { TextInput, TextInputProps } from 'react-native'; +import useThemeColorPallette from './styling/theme-provider/useColorPallette'; export const ThemedTextInput = ({ style, ...props }: TextInputProps) => { - const { colors } = useTheme(); + const { colors } = useThemeColorPallette(); return ( ); diff --git a/apps/src/shared/ThemedView.tsx b/apps/src/shared/ThemedView.tsx index 7f9c1a2b03..95c0e95dea 100644 --- a/apps/src/shared/ThemedView.tsx +++ b/apps/src/shared/ThemedView.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { View, ViewProps } from 'react-native'; -import useThemeColorPallette from './styling/adapter/react-navigation/useColorPallette'; +import useThemeColorPallette from './styling/theme-provider/useColorPallette'; export const ThemedView = ({ children, style, ...props }: ViewProps) => { const { colors } = useThemeColorPallette(); diff --git a/apps/src/shared/styling/Colors.ts b/apps/src/shared/styling/Colors.ts index 86bae246fc..97528b6efb 100644 --- a/apps/src/shared/styling/Colors.ts +++ b/apps/src/shared/styling/Colors.ts @@ -1,4 +1,5 @@ import { ColorValue } from 'react-native'; +import { DarkTheme, DefaultTheme } from '@react-navigation/native'; export const Palette = { NavyLight100: '#001a72', @@ -97,11 +98,12 @@ export const Palette = { } as const; export type ColorPallette = typeof Palette & { - background: ColorValue, - offBackground: ColorValue, - primary: ColorValue, - cardBackground: ColorValue, - cardBorder: ColorValue, + background: ColorValue; + offBackground: ColorValue; + primary: ColorValue; + text: ColorValue; + cardBackground: ColorValue; + cardBorder: ColorValue; }; export const Colors: ColorPallette = { @@ -109,6 +111,7 @@ export const Colors: ColorPallette = { background: Palette.White, offBackground: Palette.OffWhite, primary: Palette.NavyLight100, + text: Palette.NavyLight100, cardBackground: Palette.White, cardBorder: Palette.NavyLight20, }; @@ -120,10 +123,31 @@ export const DarkColors: ColorPallette = { background: Palette.Navy, offBackground: Palette.OffNavy, primary: Palette.NavyLight10, + text: Palette.NavyLight10, cardBackground: Palette.Navy, cardBorder: Palette.NavyDark60, }; -export default Colors; +export const ScreensLightTheme = { + ...DefaultTheme, + colors: { + ...DefaultTheme.colors, + primary: LightColors.primary as string, + background: LightColors.background as string, + card: LightColors.cardBackground as string, + border: LightColors.cardBorder as string, + }, +}; +export const ScreensDarkTheme = { + ...DarkTheme, + colors: { + ...DarkTheme.colors, + primary: DarkColors.primary as string, + background: DarkColors.background as string, + card: DarkColors.cardBackground as string, + border: DarkColors.cardBorder as string, + }, +}; +export default Colors; diff --git a/apps/src/shared/styling/adapter/react-navigation/index.ts b/apps/src/shared/styling/adapter/react-navigation/index.ts deleted file mode 100644 index e20ea747b7..0000000000 --- a/apps/src/shared/styling/adapter/react-navigation/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { DarkTheme, DefaultTheme } from '@react-navigation/native'; -import { DarkColors, LightColors } from '../../Colors'; - -export const ScreensLightTheme = { - ...DefaultTheme, - colors: { - ...DefaultTheme.colors, - primary: LightColors.primary as string, - background: LightColors.background as string, - card: LightColors.cardBackground as string, - border: LightColors.cardBorder as string, - }, -}; - -export const ScreensDarkTheme = { - ...DarkTheme, - colors: { - ...DarkTheme.colors, - primary: DarkColors.primary as string, - background: DarkColors.background as string, - card: DarkColors.cardBackground as string, - border: DarkColors.cardBorder as string, - }, -}; - diff --git a/apps/src/shared/styling/adapter/react-navigation/useColorPallette.tsx b/apps/src/shared/styling/adapter/react-navigation/useColorPallette.tsx deleted file mode 100644 index 99b3cda325..0000000000 --- a/apps/src/shared/styling/adapter/react-navigation/useColorPallette.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { Theme, useTheme } from '@react-navigation/native'; -import { ColorPallette, DarkColors, LightColors } from '../../Colors'; - -/** - * Requires `ThemeContext` (from react-navigation) presence. - * Use this to get whole collor pallete current theme is based on. - */ -export default function useThemeColorPallette(): { theme: Theme, colors: ColorPallette } { - const theme = useTheme(); - return { - theme, - colors: theme.dark ? DarkColors : LightColors, - }; -} diff --git a/apps/src/shared/styling/theme-provider/ThemeContext.ts b/apps/src/shared/styling/theme-provider/ThemeContext.ts new file mode 100644 index 0000000000..74c35a237d --- /dev/null +++ b/apps/src/shared/styling/theme-provider/ThemeContext.ts @@ -0,0 +1,9 @@ +import * as React from 'react'; + +export type ThemeName = 'light' | 'dark'; + +export const ThemeContext = React.createContext( + undefined, +); + +ThemeContext.displayName = 'ThemeContext'; diff --git a/apps/src/shared/styling/theme-provider/ThemeProvider.tsx b/apps/src/shared/styling/theme-provider/ThemeProvider.tsx new file mode 100644 index 0000000000..5270513328 --- /dev/null +++ b/apps/src/shared/styling/theme-provider/ThemeProvider.tsx @@ -0,0 +1,15 @@ +import * as React from 'react'; + +import { ThemeContext } from './ThemeContext'; +import type { ThemeName } from './ThemeContext'; + +type Props = { + theme: ThemeName; + children: React.ReactNode; +}; + +export function ThemeProvider({ theme, children }: Props) { + return ( + {children} + ); +} diff --git a/apps/src/shared/styling/theme-provider/useColorPallette.ts b/apps/src/shared/styling/theme-provider/useColorPallette.ts new file mode 100644 index 0000000000..60e27d4299 --- /dev/null +++ b/apps/src/shared/styling/theme-provider/useColorPallette.ts @@ -0,0 +1,27 @@ +import * as React from 'react'; +import { ThemeContext } from './ThemeContext'; +import type { ThemeName } from './ThemeContext'; +import { ColorPallette, DarkColors, LightColors } from '../Colors'; +import { useTheme } from '@react-navigation/native'; + +/** + * Requires `ThemeContext` (from react-navigation) presence. + * However, it is possible to override theme by wrapping part of the app in `ThemeProvider` and passing desired theme as a prop. + * Use this to get whole collor pallete current theme is based on. + */ +export default function useThemeColorPallette(): { + theme: ThemeName; + colors: ColorPallette; +} { + const navigationTheme = useTheme(); + let theme: ThemeName = navigationTheme.dark ? 'dark' : 'light'; + + const providedTheme = React.useContext(ThemeContext); + if (providedTheme !== undefined) { + theme = providedTheme; + } + return { + theme: theme, + colors: theme === 'dark' ? DarkColors : LightColors, + }; +} diff --git a/apps/src/tests/IssueTestsScreen.tsx b/apps/src/tests/IssueTestsScreen.tsx index f645cf651e..551cd85e71 100644 --- a/apps/src/tests/IssueTestsScreen.tsx +++ b/apps/src/tests/IssueTestsScreen.tsx @@ -10,7 +10,7 @@ import { ListItem } from '@apps/shared'; import { ScreensDarkTheme, ScreensLightTheme, -} from '@apps/shared/styling/adapter/react-navigation'; +} from '@apps/shared/styling/Colors'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; const SCREENS: Record< diff --git a/apps/src/tests/issue-tests/TestThemeProvider.tsx b/apps/src/tests/issue-tests/TestThemeProvider.tsx new file mode 100644 index 0000000000..73f2618159 --- /dev/null +++ b/apps/src/tests/issue-tests/TestThemeProvider.tsx @@ -0,0 +1,47 @@ +import React from 'react'; +import { StyleSheet } from 'react-native'; +import { ThemedText, ThemedView } from '@apps/shared'; +import { ThemeProvider } from '@apps/shared/styling/theme-provider/ThemeProvider'; +import { SafeAreaView } from 'react-native-safe-area-context'; + +export default function TestThemeProvider() { + return ( + + + Without ThemeProvider + This text uses the theme from parent NavigationContainer. + + + + + With ThemeProvider (dark) + This text should use dark theme colors (light text, dark background). + + + + + + With ThemeProvider (light) + This text should use light theme colors explicitly. + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + padding: 16, + gap: 16, + }, + section: { + padding: 16, + borderRadius: 8, + }, + heading: { + fontSize: 16, + fontWeight: 'bold', + marginBottom: 8, + }, +}); diff --git a/apps/src/tests/issue-tests/index.ts b/apps/src/tests/issue-tests/index.ts index ddb658f60e..fbe2741214 100644 --- a/apps/src/tests/issue-tests/index.ts +++ b/apps/src/tests/issue-tests/index.ts @@ -205,3 +205,4 @@ export { default as TestScreenStack } from './TestScreenStack'; export { default as TestSplit } from './TestSplit'; export { default as TestSafeAreaViewIOS } from './TestSafeAreaViewIOS'; export { default as TestStackNesting } from './TestStackNesting'; +export { default as TestThemeProvider } from './TestThemeProvider'; diff --git a/apps/src/tests/single-feature-tests/tabs/index.ts b/apps/src/tests/single-feature-tests/tabs/index.ts index 4703ab3fb9..bcac76e01e 100644 --- a/apps/src/tests/single-feature-tests/tabs/index.ts +++ b/apps/src/tests/single-feature-tests/tabs/index.ts @@ -10,10 +10,10 @@ import TestTabsTabBarLayoutDirection from './test-tabs-tab-bar-layout-direction' import TestTabsIMEInsets from './test-tabs-ime-insets'; import TestTabsSimpleNav from './test-tabs-simple-nav'; import TestTabsMoreNavigationController from './test-tabs-more-navigation-controller'; -import TestTabsPreventNativeSelection from './test-tabs-prevent-native-selection'; import TestTabsStaleStateUpdateRejection from './test-tabs-stale-update-rejection'; import TestTabsTabBarMinimizeBehavior from './test-tabs-tab-bar-minimize-behavior-ios'; import TestTabsTabBarControllerMode from './test-tabs-tab-bar-controller-mode-ios'; +import TestTabsTabBarExperimentalUserInterfaceStyle from './test-tabs-tab-bar-experimental-userInterfaceStyle'; const scenarios = { BottomAccessoryScenario, @@ -26,10 +26,10 @@ const scenarios = { TestTabsIMEInsets, TestTabsSimpleNav, TestTabsMoreNavigationController, - TestTabsPreventNativeSelection, TestTabsStaleStateUpdateRejection, TestTabsTabBarMinimizeBehavior, TestTabsTabBarControllerMode, + TestTabsTabBarExperimentalUserInterfaceStyle, }; const TabsScenarioGroup: ScenarioGroup = { diff --git a/apps/src/tests/single-feature-tests/tabs/test-tabs-prevent-native-selection.tsx b/apps/src/tests/single-feature-tests/tabs/test-tabs-prevent-native-selection.tsx deleted file mode 100644 index 846487779d..0000000000 --- a/apps/src/tests/single-feature-tests/tabs/test-tabs-prevent-native-selection.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import React from 'react'; -import type { Scenario } from '../../shared/helpers'; -import { Button, Text, View } from 'react-native'; -import { - type TabRouteConfig, - DEFAULT_TAB_ROUTE_OPTIONS, - useTabsNavigationContext, - TabsContainerWithHostConfigContext, -} from '../../../shared/gamma/containers/tabs'; -import { CenteredLayoutView } from '../../../shared/CenteredLayoutView'; -import { ToastProvider, useToast } from '../../../shared/'; -import Colors from '../../../shared/styling/Colors'; - -const SCENARIO: Scenario = { - name: 'Prevent native selection', - key: 'test-tabs-prevent-native-selection', - details: 'Test preventNativeSelection prop on TabsScreen', - platforms: ['android', 'ios'], - AppComponent: App, -}; - -export default SCENARIO; - -function ContentView() { - const nav = useTabsNavigationContext(); - - const preventNativeSelection = - nav.routeOptions.preventNativeSelection ?? false; - - return ( - - - {nav.routeKey} - - - preventNativeSelection: {JSON.stringify(preventNativeSelection)} - -