Skip to content

Commit deab30f

Browse files
committed
chore: internet connectivity fallback added
1 parent 32b8aac commit deab30f

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
export const getFallbackInternetConnectivity = (controller: AbortController): Promise<any> => {
2+
const timeoutId = setTimeout(() => {
3+
controller.abort()
4+
}, 10000)
5+
6+
return fetch('https://www.google.com/favicon.ico', {
7+
method: 'HEAD',
8+
mode: 'no-cors',
9+
signal: controller.signal,
10+
}).finally(() => {
11+
clearTimeout(timeoutId)
12+
})
13+
}

src/components/common/hooks/useOnline/useOnline.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { getIsRequestAborted, noop, useMainContext } from '@devtron-labs/devtron
55
import { getInternetConnectivity } from '@Services/service'
66

77
import { INTERNET_CONNECTIVITY_INTERVAL } from '../constants'
8+
import { getFallbackInternetConnectivity } from './service'
89

910
export const useOnline = ({ onOnline = noop }: { onOnline?: () => void }) => {
1011
const [online, setOnline] = useState(structuredClone(navigator.onLine))
@@ -36,12 +37,22 @@ export const useOnline = ({ onOnline = noop }: { onOnline?: () => void }) => {
3637
})
3738
timeoutRef.current = setTimeout(checkConnectivity, INTERNET_CONNECTIVITY_INTERVAL)
3839
} catch (error) {
39-
setOnline(false)
40-
if (!getIsRequestAborted(error)) {
41-
timeoutRef.current = setTimeout(checkConnectivity, INTERNET_CONNECTIVITY_INTERVAL)
40+
try {
41+
await getFallbackInternetConnectivity(abortControllerRef.current)
42+
setOnline((prev) => {
43+
if (!prev) onOnline()
44+
return true
45+
})
46+
} catch {
47+
setOnline(false)
48+
} finally {
49+
if (!getIsRequestAborted(error)) {
50+
timeoutRef.current = setTimeout(checkConnectivity, INTERNET_CONNECTIVITY_INTERVAL)
51+
}
4252
}
4353
}
4454
}
55+
4556
const handleOffline = () => {
4657
handleClearTimeout()
4758
setOnline(false)

0 commit comments

Comments
 (0)