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;