diff --git a/src/__tests__/components/network-status/NetworkStatusMessage.test.tsx b/src/__tests__/components/network-status/NetworkStatusMessage.test.tsx
index 9902a964c3..c64cb31ac8 100644
--- a/src/__tests__/components/network-status/NetworkStatusMessage.test.tsx
+++ b/src/__tests__/components/network-status/NetworkStatusMessage.test.tsx
@@ -1,23 +1,42 @@
import { render, shallow } from 'enzyme'
import React from 'react'
+import { NetworkStatusMessage } from '../../../components/network-status'
import {
- NetworkStatusMessage,
OFFLINE_MESSAGE,
ONLINE_MESSAGE,
} from '../../../components/network-status/NetworkStatusMessage'
+import { useNetworkStatus } from '../../../components/network-status/useNetworkStatus'
+
+jest.mock('../../../components/network-status/useNetworkStatus')
+const useNetworkStatusCast = (useNetworkStatus as unknown) as jest.MockInstance<
+ ReturnType
,
+ any
+>
describe('NetworkStatusMessage', () => {
it('returns null if the app has always been online', () => {
- const wrapper = shallow()
+ useNetworkStatusCast.mockReturnValue({
+ isOnline: true,
+ wasOffline: false,
+ })
+ const wrapper = shallow()
expect(wrapper.equals(null as any)).toBe(true)
})
it(`shows the message "${OFFLINE_MESSAGE}" if the app goes offline`, () => {
- const wrapper = render()
+ useNetworkStatusCast.mockReturnValue({
+ isOnline: false,
+ wasOffline: false,
+ })
+ const wrapper = render()
expect(wrapper.text()).toContain(OFFLINE_MESSAGE)
})
it(`shows the message "${ONLINE_MESSAGE}" if the app goes back online after it was offline`, () => {
- const wrapper = render()
+ useNetworkStatusCast.mockReturnValue({
+ isOnline: true,
+ wasOffline: true,
+ })
+ const wrapper = render()
expect(wrapper.text()).toContain(ONLINE_MESSAGE)
})
})
diff --git a/src/components/network-status/NetworkStatusMessage.tsx b/src/components/network-status/NetworkStatusMessage.tsx
index 4d7470cccc..511f4e1001 100644
--- a/src/components/network-status/NetworkStatusMessage.tsx
+++ b/src/components/network-status/NetworkStatusMessage.tsx
@@ -1,31 +1,27 @@
import React, { useState } from 'react'
+import { useNetworkStatus } from './useNetworkStatus'
import './styles.css'
-interface Props {
- online: boolean
- wasOffline: boolean
-}
-
export const OFFLINE_MESSAGE = 'you are working in offline mode'
export const ONLINE_MESSAGE = 'you are back online'
const OPACITY_TRANSITION_TIME = 4000
-export const NetworkStatusMessage = (props: Props) => {
- const { online, wasOffline } = props
+export const NetworkStatusMessage = () => {
+ const { isOnline, wasOffline } = useNetworkStatus()
const [display, setDisplay] = useState('flex')
const [opacity, setOpacity] = useState(1)
- if (online && !wasOffline) {
+ if (isOnline && !wasOffline) {
return null
}
- if (!online && opacity !== 1) {
+ if (!isOnline && opacity !== 1) {
setDisplay('flex')
setOpacity(1)
}
- if (online && wasOffline && opacity !== 0) {
+ if (isOnline && wasOffline && opacity !== 0) {
setOpacity(0)
setTimeout(() => {
setDisplay('none')
@@ -34,10 +30,10 @@ export const NetworkStatusMessage = (props: Props) => {
return (
- {online ? ONLINE_MESSAGE : OFFLINE_MESSAGE}
+ {isOnline ? ONLINE_MESSAGE : OFFLINE_MESSAGE}
)
}
diff --git a/src/components/network-status/index.ts b/src/components/network-status/index.ts
new file mode 100644
index 0000000000..e69b8f6c18
--- /dev/null
+++ b/src/components/network-status/index.ts
@@ -0,0 +1,2 @@
+export { NetworkStatusMessage } from './NetworkStatusMessage'
+export { useNetworkStatus } from './useNetworkStatus'
diff --git a/src/components/network-status/types.ts b/src/components/network-status/types.ts
new file mode 100644
index 0000000000..1ab39c4229
--- /dev/null
+++ b/src/components/network-status/types.ts
@@ -0,0 +1,4 @@
+export interface NetworkStatus {
+ isOnline: boolean
+ wasOffline: boolean
+}
diff --git a/src/components/network-status/NetworkStatus.tsx b/src/components/network-status/useNetworkStatus.ts
similarity index 70%
rename from src/components/network-status/NetworkStatus.tsx
rename to src/components/network-status/useNetworkStatus.ts
index 9366f90c1e..e6d7911b65 100644
--- a/src/components/network-status/NetworkStatus.tsx
+++ b/src/components/network-status/useNetworkStatus.ts
@@ -1,8 +1,8 @@
-import React, { useState, useEffect } from 'react'
+import { useState, useEffect } from 'react'
-import { NetworkStatusMessage } from './NetworkStatusMessage'
+import { NetworkStatus } from './types'
-export const NetworkStatus = () => {
+export const useNetworkStatus = (): NetworkStatus => {
const [networkStatus, setNetworkStatus] = useState({
isOnline: true,
wasOffline: false,
@@ -23,7 +23,5 @@ export const NetworkStatus = () => {
}
}, [])
- return (
-
- )
+ return networkStatus
}