|
@@ -1,5 +1,6 @@
|
|
|
import React from 'react';
|
|
|
import { Text, TouchableOpacity, View, Image } from 'react-native';
|
|
|
+import * as FileSystem from 'expo-file-system';
|
|
|
|
|
|
import { AvatarWithInitials } from '../../../../components';
|
|
|
|
|
@@ -8,6 +9,7 @@ import { getFontSize } from 'src/utils';
|
|
|
import { Colors } from 'src/theme';
|
|
|
import { SeriesRanking } from '../utils/types';
|
|
|
import { ProfileStyles, ScoreStyles } from './styles';
|
|
|
+import { useConnection } from 'src/contexts/ConnectionContext';
|
|
|
|
|
|
import TickIcon from 'assets/icons/tick.svg';
|
|
|
import UNIcon from 'assets/icons/un_icon.svg';
|
|
@@ -24,6 +26,17 @@ const SeriesRankingItem = React.memo(
|
|
|
index: number;
|
|
|
onPress: (userId: number) => void;
|
|
|
}) => {
|
|
|
+ const netInfo = useConnection();
|
|
|
+
|
|
|
+ const avatarBaseUri = netInfo?.isInternetReachable
|
|
|
+ ? API_HOST + item.avatar
|
|
|
+ : `${FileSystem.documentDirectory}avatars/${item.user_id}.webp`;
|
|
|
+
|
|
|
+ const flagBaseUri = (flag: string) =>
|
|
|
+ netInfo?.isInternetReachable
|
|
|
+ ? API_HOST + flag
|
|
|
+ : `${FileSystem.documentDirectory}flags/${flag.split('/').pop()}`;
|
|
|
+
|
|
|
return (
|
|
|
<TouchableOpacity
|
|
|
onPress={() => onPress(item.user_id)}
|
|
@@ -36,14 +49,11 @@ const SeriesRankingItem = React.memo(
|
|
|
</View>
|
|
|
<View style={{ marginLeft: index + 1 < 100 ? 5 : index + 1 < 1000 ? 15 : 25 }}>
|
|
|
{item.avatar ? (
|
|
|
- <Image
|
|
|
- style={ProfileStyles.profileAvatar}
|
|
|
- source={{ uri: API_HOST + item.avatar }}
|
|
|
- />
|
|
|
+ <Image style={ProfileStyles.profileAvatar} source={{ uri: avatarBaseUri }} />
|
|
|
) : (
|
|
|
<AvatarWithInitials
|
|
|
text={`${item.first_name[0] ?? ''}${item.last_name[0] ?? ''}`}
|
|
|
- flag={API_HOST + item.flag1}
|
|
|
+ flag={flagBaseUri(item.flag1)}
|
|
|
size={48}
|
|
|
/>
|
|
|
)}
|
|
@@ -58,10 +68,13 @@ const SeriesRankingItem = React.memo(
|
|
|
<View style={ProfileStyles.profileDataContainer}>
|
|
|
<View style={ProfileStyles.profileDataWrapper}>
|
|
|
<Text style={ProfileStyles.profileAge}>Age: {item.age ?? ''}</Text>
|
|
|
- <Image source={{ uri: API_HOST + item.flag1 }} style={ProfileStyles.countryFlag} />
|
|
|
+ <Image
|
|
|
+ source={{ uri: flagBaseUri(item.flag1) }}
|
|
|
+ style={ProfileStyles.countryFlag}
|
|
|
+ />
|
|
|
{item.flag2 && item.flag2 !== item.flag1 ? (
|
|
|
<Image
|
|
|
- source={{ uri: API_HOST + item.flag2 }}
|
|
|
+ source={{ uri: flagBaseUri(item.flag2) }}
|
|
|
style={[ProfileStyles.countryFlag, { marginLeft: -15 }]}
|
|
|
/>
|
|
|
) : null}
|