forked from Expensify/App
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOfflineIndicator.tsx
56 lines (47 loc) · 1.98 KB
/
OfflineIndicator.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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import React, {useMemo} from 'react';
import type {StyleProp, ViewStyle} from 'react-native';
import {View} from 'react-native';
import useLocalize from '@hooks/useLocalize';
import useNetwork from '@hooks/useNetwork';
import useResponsiveLayout from '@hooks/useResponsiveLayout';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
import variables from '@styles/variables';
import Icon from './Icon';
import * as Expensicons from './Icon/Expensicons';
import Text from './Text';
type OfflineIndicatorProps = {
/** Optional styles for container element that will override the default styling for the offline indicator */
containerStyles?: StyleProp<ViewStyle>;
/** Optional styles for the container */
style?: StyleProp<ViewStyle>;
};
function OfflineIndicator({style, containerStyles}: OfflineIndicatorProps) {
const theme = useTheme();
const styles = useThemeStyles();
const {translate} = useLocalize();
const {isOffline} = useNetwork();
const {shouldUseNarrowLayout} = useResponsiveLayout();
const computedStyles = useMemo((): StyleProp<ViewStyle> => {
if (containerStyles) {
return containerStyles;
}
return shouldUseNarrowLayout ? styles.offlineIndicatorMobile : styles.offlineIndicator;
}, [containerStyles, shouldUseNarrowLayout, styles.offlineIndicatorMobile, styles.offlineIndicator]);
if (!isOffline) {
return null;
}
return (
<View style={[computedStyles, styles.flexRow, styles.alignItemsCenter, style]}>
<Icon
fill={theme.icon}
src={Expensicons.OfflineCloud}
width={variables.iconSizeSmall}
height={variables.iconSizeSmall}
/>
<Text style={[styles.ml3, styles.chatItemComposeSecondaryRowSubText]}>{translate('common.youAppearToBeOffline')}</Text>
</View>
);
}
OfflineIndicator.displayName = 'OfflineIndicator';
export default OfflineIndicator;