Only fetch data when is connected to the internet
This commit is contained in:
parent
9cf11b01df
commit
8167a693a2
2 changed files with 32 additions and 26 deletions
|
@ -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>
|
||||
)
|
||||
|
|
|
@ -11,24 +11,21 @@ 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(() => {
|
||||
// Listener for when connection is back
|
||||
const unsubscribe = NetInfo.addEventListener(state => {
|
||||
setIsConnected(state.isConnected);
|
||||
|
||||
if (state.isConnected && onReconnect) {
|
||||
onReconnect();
|
||||
}
|
||||
});
|
||||
|
||||
// Check the initial connection status
|
||||
// Check initial connection state
|
||||
NetInfo.fetch().then(state => {
|
||||
setIsConnected(state.isConnected);
|
||||
});
|
||||
|
@ -36,13 +33,16 @@ const NoInternetConnectionScreen: React.FC<NoInternetConnectionScreenProps> = ({
|
|||
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();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue