From 8167a693a2df88316cfaf8c662cdf4a538189701 Mon Sep 17 00:00:00 2001 From: Maarten Date: Mon, 19 Aug 2024 14:06:03 +0200 Subject: [PATCH] Only fetch data when is connected to the internet --- app/index.tsx | 14 +++++++---- src/components/NoInternet.tsx | 44 +++++++++++++++++------------------ 2 files changed, 32 insertions(+), 26 deletions(-) diff --git a/app/index.tsx b/app/index.tsx index 749267b..7076673 100644 --- a/app/index.tsx +++ b/app/index.tsx @@ -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 ; @@ -45,7 +51,7 @@ export default function OnboardStartScreen() { return ( - + ) diff --git a/src/components/NoInternet.tsx b/src/components/NoInternet.tsx index 1500b91..8320c06 100644 --- a/src/components/NoInternet.tsx +++ b/src/components/NoInternet.tsx @@ -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 = ({ onReconnect }) => { +const NoInternetConnectionScreen: React.FC = ({ connected }) => { const colorScheme = useColorScheme() ?? 'light'; const [ isConnected, setIsConnected ] = useState( 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) {