import React, { useCallback, useEffect } from 'react'; import { NavigationContainer as NavigationContainerBase, ParamListBase, createNavigationContainerRef, } from '@react-navigation/native'; import FontAwesome5 from 'react-native-vector-icons/FontAwesome5'; import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { Snackbar, useTheme } from 'react-native-paper'; import { useDispatch, useSelector } from 'react-redux'; import { Memes, Tags, Settings, EditMeme, EditTag, AddMeme, AddTag, MemeView, } from './screens'; import { darkNavigationTheme, lightNavigationTheme } from './theme'; import { FloatingActionButton, HideableBottomNavigationBar, } from './components'; import { ROUTE, RootStackParamList, SharedItem, sharedItemToAddMemeFile, } from './types'; import { RootState } from './state'; import ShareMenu from 'react-native-share-menu'; import { setSnackbarMessage } from './state/navigation'; import { StyleSheet } from 'react-native'; import { useKeyboard } from '@react-native-community/hooks'; const tabNavigatorStyles = StyleSheet.create({ snackbar: { marginBottom: 90, }, snackbarKeyboard: { marginBottom: 10, }, }); const TabNavigator = () => { const navVisible = useSelector( (state: RootState) => state.navigation.navVisible, ); const snackbarMessage = useSelector( (state: RootState) => state.navigation.snackbarMessage, ); const dispatch = useDispatch(); const keyboardOpen = useKeyboard().keyboardShown; const [route, setRoute] = React.useState(ROUTE.MEMES); const TabNavigatorBase = createBottomTabNavigator(); return ( <> ( setRoute(newRoute)} /> )}> ( ), }} /> ( ), }} /> ( ), }} /> dispatch(setSnackbarMessage(undefined))} style={ keyboardOpen ? tabNavigatorStyles.snackbarKeyboard : tabNavigatorStyles.snackbar } action={{ label: 'Dismiss', // eslint-disable-next-line unicorn/no-useless-undefined onPress: () => dispatch(setSnackbarMessage(undefined)), }}> {snackbarMessage} ); }; const NavigationContainer = () => { const theme = useTheme(); const navigationRef = createNavigationContainerRef(); const handleShare = useCallback( (item: SharedItem | undefined) => { if (!item) return; const files = sharedItemToAddMemeFile(item); navigationRef.current?.navigate(ROUTE.ADD_MEME, { files }); }, [navigationRef], ); useEffect(() => { ShareMenu.getInitialShare(handleShare); const listener = ShareMenu.addNewShareListener(handleShare); return () => listener.remove(); }, [handleShare]); const StackNavigatorBase = createNativeStackNavigator(); return ( ); }; export default NavigationContainer;