-
Notifications
You must be signed in to change notification settings - Fork 5.2k
/
Copy pathOfflineBanner.tsx
41 lines (35 loc) · 1.54 KB
/
OfflineBanner.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import { useNetInfo } from '@react-native-community/netinfo'
import React from 'react'
import { useTranslation } from 'react-i18next'
import { useSelector } from 'react-redux'
import { BANNER_HEIGHT, BottomBanner } from 'src/components/banners/BottomBanner'
import { selectSomeModalOpen } from 'src/features/modals/selectSomeModalOpen'
import { useSporeColors } from 'ui/src'
import InfoCircle from 'ui/src/assets/icons/info-circle.svg'
import { iconSizes } from 'ui/src/theme'
import { selectFinishedOnboarding } from 'wallet/src/features/wallet/selectors'
const EXTRA_MARGIN = 5
export function OfflineBanner(): JSX.Element | null {
const { t } = useTranslation()
const colors = useSporeColors()
const netInfo = useNetInfo()
// don't show the offline banner in onboarding
const finishedOnboarding = useSelector(selectFinishedOnboarding)
const isModalOpen = useSelector(selectSomeModalOpen)
// Needs to explicitly check for false since `netInfo.isConnected` may be null
const showBanner = netInfo.isConnected === false && finishedOnboarding && !isModalOpen
if (__DEV__) {
// do not check in Dev mode since the simulator
// gets funky with the network state:
// https://github.com/react-native-netinfo/react-native-netinfo/issues/7
return null
}
return showBanner ? (
<BottomBanner
backgroundColor="$surface2"
icon={<InfoCircle color={colors.neutral1.get()} height={iconSizes.icon24} width={iconSizes.icon24} />}
text={t('home.banner.offline')}
translateY={BANNER_HEIGHT - EXTRA_MARGIN}
/>
) : null
}