feat: Implement alert system and network connectivity handling, refactor error handling across screens
This commit is contained in:
42
utils/networkProvider.tsx
Normal file
42
utils/networkProvider.tsx
Normal file
@ -0,0 +1,42 @@
|
||||
import React, { useState, useEffect, ReactNode } from 'react';
|
||||
import NetInfo, { useNetInfo } from '@react-native-community/netinfo';
|
||||
import OfflineScreen from '@/components/OfflineScreen';
|
||||
|
||||
interface NetworkProviderProps {
|
||||
children: ReactNode;
|
||||
}
|
||||
|
||||
export const NetworkProvider = ({ children }: NetworkProviderProps) => {
|
||||
const netInfo = useNetInfo();
|
||||
const [isOffline, setIsOffline] = useState(false);
|
||||
const [isRetrying, setIsRetrying] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
if (netInfo.isConnected === false) {
|
||||
setIsOffline(true);
|
||||
} else {
|
||||
setIsOffline(false);
|
||||
}
|
||||
}, [netInfo.isConnected]);
|
||||
|
||||
// Manual Retry Handler
|
||||
const handleManualRetry = async () => {
|
||||
setIsRetrying(true);
|
||||
|
||||
const state = await NetInfo.fetch();
|
||||
setTimeout(() => {
|
||||
setIsOffline(state.isConnected === false);
|
||||
setIsRetrying(false);
|
||||
}, 1000);
|
||||
};
|
||||
|
||||
if (isOffline) {
|
||||
return (
|
||||
<OfflineScreen
|
||||
onRetry={handleManualRetry}
|
||||
isRetrying={isRetrying}
|
||||
/>
|
||||
);
|
||||
}
|
||||
return <>{children}</>;
|
||||
};
|
||||
Reference in New Issue
Block a user