Add share intent

Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
2023-07-29 19:14:19 +03:00
parent a0b7a6310b
commit f33fe2c54b
13 changed files with 224 additions and 26 deletions

View File

@@ -1,5 +1,9 @@
import React from 'react';
import { NavigationContainer as NavigationContainerBase } from '@react-navigation/native';
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';
@@ -20,8 +24,14 @@ import {
FloatingActionButton,
HideableBottomNavigationBar,
} from './components';
import { ROUTE, RootStackParamList } from './types';
import {
ROUTE,
RootStackParamList,
SharedItem,
sharedItemToAddMemeFile,
} from './types';
import { RootState } from './state';
import ShareMenu from 'react-native-share-menu';
const TabNavigator = () => {
const navVisible = useSelector(
@@ -84,10 +94,28 @@ const TabNavigator = () => {
const NavigationContainer = () => {
const theme = useTheme();
const navigationRef = createNavigationContainerRef<ParamListBase>();
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<RootStackParamList>();
return (
<NavigationContainerBase
ref={navigationRef}
theme={theme.dark ? darkNavigationTheme : lightNavigationTheme}>
<StackNavigatorBase.Navigator
screenOptions={{