Only fetch data when is connected to the internet

This commit is contained in:
Maarten 2024-08-19 14:06:03 +02:00
parent 9cf11b01df
commit 8167a693a2
2 changed files with 32 additions and 26 deletions

View file

@ -1,4 +1,4 @@
import React, { useEffect } from 'react';
import React, { useEffect, useState } from 'react';
import { Redirect, useRouter } from 'expo-router';
import { useTranslation } from 'react-i18next';
@ -16,6 +16,8 @@ export default function OnboardStartScreen() {
const { token, isLoading } = useToken();
const { t, i18n } = useTranslation();
const router = useRouter();
const [ isConnected, setIsConnected ] = useState( false );
const fetchData = async () => {
const response = await Request.post( 'sessions/get', { token: token } );
@ -34,10 +36,14 @@ export default function OnboardStartScreen() {
};
useEffect( () => {
if (!isLoading && token) {
if (!isLoading && token && isConnected) {
fetchData();
}
}, [ isLoading, token, router ] );
}, [ isLoading, token, isConnected, router ] );
const handleConnectionChange = () => {
setIsConnected( true );
};
if (!isLoading && !token) {
return <Redirect href="/(onboarding)/start"/>;
@ -45,7 +51,7 @@ export default function OnboardStartScreen() {
return (
<ThemedView style={{ flex: 1 }}>
<NoInternetConnectionScreen onReconnect={fetchData}/>
<NoInternetConnectionScreen connected={handleConnectionChange}/>
<LoadingScreen message={t( "loading" ) + '...'}/>
</ThemedView>
)

View file

@ -11,39 +11,39 @@ import { useTranslation } from 'react-i18next';
const { width, height } = Dimensions.get( 'window' );
interface NoInternetConnectionScreenProps {
onReconnect?: () => void;
connected?: () => void;
}
const NoInternetConnectionScreen: React.FC<NoInternetConnectionScreenProps> = ({ onReconnect }) => {
const NoInternetConnectionScreen: React.FC<NoInternetConnectionScreenProps> = ({ connected }) => {
const colorScheme = useColorScheme() ?? 'light';
const [ isConnected, setIsConnected ] = useState<boolean | null>( null );
const { t } = useTranslation();
useEffect( () => {
const unsubscribe = NetInfo.addEventListener( state => {
setIsConnected( state.isConnected );
useEffect(() => {
// Listener for when connection is back
const unsubscribe = NetInfo.addEventListener(state => {
setIsConnected(state.isConnected);
});
if (state.isConnected && onReconnect) {
onReconnect();
}
} );
// Check the initial connection status
NetInfo.fetch().then( state => {
setIsConnected( state.isConnected );
} );
// Check initial connection state
NetInfo.fetch().then(state => {
setIsConnected(state.isConnected);
});
return () => unsubscribe();
}, [] );
}, []);
useEffect(() => {
// Execute callback when connection is made
if (isConnected && connected) {
connected();
}
}, [isConnected, isConnected]);
const retryConnection = () => {
NetInfo.fetch().then( state => {
setIsConnected( state.isConnected );
if (state.isConnected && onReconnect) {
onReconnect();
}
} );
NetInfo.fetch().then(state => {
setIsConnected(state.isConnected);
});
};
if (isConnected !== false) {