deeplinks for profiles and posts
This commit is contained in:
29
App.js
29
App.js
@@ -26,27 +26,6 @@ import MediaView from './components/MediaView.js';
|
|||||||
import { useSnapshot } from 'valtio';
|
import { useSnapshot } from 'valtio';
|
||||||
import GlobalState from './contexts/GlobalState.js';
|
import GlobalState from './contexts/GlobalState.js';
|
||||||
import NewGroup from './Views/NewGroup.js';
|
import NewGroup from './Views/NewGroup.js';
|
||||||
import * as Linking2 from 'expo-linking';
|
|
||||||
|
|
||||||
import { Linking } from 'expo';
|
|
||||||
|
|
||||||
const handleDeepLink = (url) => {
|
|
||||||
// Handle the deep linking URL here
|
|
||||||
alert('Deep link:', url);
|
|
||||||
}
|
|
||||||
|
|
||||||
const checkDeepLinking = async () => {
|
|
||||||
// Check if the app was opened by a deep linking URL
|
|
||||||
const initialUrl = await Linking.getInitialURL();
|
|
||||||
if (initialUrl) {
|
|
||||||
handleDeepLink(initialUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add an event listener to handle deep linking URLs
|
|
||||||
Linking.addEventListener('url', (event) => {
|
|
||||||
handleDeepLink(event.url);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const Tab = createBottomTabNavigator();
|
const Tab = createBottomTabNavigator();
|
||||||
@@ -104,7 +83,6 @@ async function registerForPushNotificationsAsync() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const MainNavigation = ({ route }) => {
|
const MainNavigation = ({ route }) => {
|
||||||
const gState = useSnapshot(GlobalState);
|
const gState = useSnapshot(GlobalState);
|
||||||
const viewer = gState.me;
|
const viewer = gState.me;
|
||||||
@@ -112,12 +90,6 @@ const MainNavigation = ({route}) => {
|
|||||||
const [notification, setNotification] = useState(false);
|
const [notification, setNotification] = useState(false);
|
||||||
const notificationListener = useRef();
|
const notificationListener = useRef();
|
||||||
const responseListener = useRef();
|
const responseListener = useRef();
|
||||||
const url = Linking2.useURL();
|
|
||||||
useEffect(() => {
|
|
||||||
// Do something with url
|
|
||||||
alert(url);
|
|
||||||
}, [url]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
registerForPushNotificationsAsync().then(async (token) => {
|
registerForPushNotificationsAsync().then(async (token) => {
|
||||||
let isLoggedIn = await API.isLoggedIn();
|
let isLoggedIn = await API.isLoggedIn();
|
||||||
@@ -125,7 +97,6 @@ const MainNavigation = ({route}) => {
|
|||||||
API.registerToken(token);
|
API.registerToken(token);
|
||||||
return setExpoPushToken(token);
|
return setExpoPushToken(token);
|
||||||
});
|
});
|
||||||
checkDeepLinking();
|
|
||||||
|
|
||||||
// This listener is fired whenever a notification is received while the app is foregrounded
|
// This listener is fired whenever a notification is received while the app is foregrounded
|
||||||
notificationListener.current = Notifications.addNotificationReceivedListener(notification => {
|
notificationListener.current = Notifications.addNotificationReceivedListener(notification => {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { StyleSheet, SafeAreaView, FlatList } from 'react-native';
|
|||||||
import API from './../API.js';
|
import API from './../API.js';
|
||||||
import Post from './../components/Post.js';
|
import Post from './../components/Post.js';
|
||||||
import GlobalState from '../contexts/GlobalState.js';
|
import GlobalState from '../contexts/GlobalState.js';
|
||||||
|
import * as Linking from 'expo-linking';
|
||||||
|
|
||||||
|
|
||||||
import AsyncStorage from '@react-native-async-storage/async-storage';
|
import AsyncStorage from '@react-native-async-storage/async-storage';
|
||||||
@@ -26,10 +27,34 @@ const getFeed = async () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let prevLink = '';
|
||||||
|
const handleURL = (url, navigation) => {
|
||||||
|
const { hostname, path, queryParams } = Linking.parse(url);
|
||||||
|
if(path.includes("feed/post/")){
|
||||||
|
const postid = path.substring(10);
|
||||||
|
return navigation.navigate('SinglePost', { postid });
|
||||||
|
}
|
||||||
|
if(path.includes("feed/")){
|
||||||
|
const profileid = path.substring(5);
|
||||||
|
return navigation.navigate('Profile', { profileid });
|
||||||
|
}
|
||||||
|
if (path === 'alert') {
|
||||||
|
alert(queryParams.str);
|
||||||
|
} else {
|
||||||
|
alert(path + " ::: " + queryParams);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let Feed = ({ navigation, route }) => {
|
let Feed = ({ navigation, route }) => {
|
||||||
let [Posts, setPosts] = useState([]);
|
let [Posts, setPosts] = useState([]);
|
||||||
const flatListRef = React.useRef()
|
const flatListRef = React.useRef()
|
||||||
console.log("Render Feed");
|
console.log("Render Feed");
|
||||||
|
const url = Linking.useURL();
|
||||||
|
useEffect(() => {
|
||||||
|
if (prevLink === url || !url) return;
|
||||||
|
prevLink = url;
|
||||||
|
handleURL(url, navigation);
|
||||||
|
}, [url]);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let subscribed = true;
|
let subscribed = true;
|
||||||
const getData = async () => {
|
const getData = async () => {
|
||||||
@@ -43,7 +68,7 @@ let Feed = ({ navigation, route }) => {
|
|||||||
routes: [{ name: 'Login' }],
|
routes: [{ name: 'Login' }],
|
||||||
});
|
});
|
||||||
if (route.params && route.params.profileid) {
|
if (route.params && route.params.profileid) {
|
||||||
return navigation.navigate('Profile', { profileid: route.params.profileid })
|
return navigation.navigate('Profile', { profileid: route.params.profileid });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!route.params?.reRender){
|
if(!route.params?.reRender){
|
||||||
|
|||||||
Reference in New Issue
Block a user