diff --git a/src/HospitalRun.tsx b/src/HospitalRun.tsx index 0992eba033..b3f9cadcdf 100644 --- a/src/HospitalRun.tsx +++ b/src/HospitalRun.tsx @@ -5,7 +5,7 @@ import { Switch, Route } from 'react-router-dom' import Breadcrumbs from './breadcrumbs/Breadcrumbs' import Navbar from './components/Navbar' -import { NetworkStatus } from './components/network-status/NetworkStatus' +import { NetworkStatusMessage } from './components/network-status' import PrivateRoute from './components/PrivateRoute' import Sidebar from './components/Sidebar' import Dashboard from './dashboard/Dashboard' @@ -24,7 +24,7 @@ const HospitalRun = () => { return (
- +
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 }