|
@@ -1,16 +1,27 @@
|
|
|
import React, { useCallback } from 'react';
|
|
|
import { View, Image, TouchableOpacity, Text } from 'react-native';
|
|
|
+import * as FileSystem from 'expo-file-system';
|
|
|
|
|
|
import { AvatarWithInitials } from 'src/components';
|
|
|
import { API_HOST } from 'src/constants';
|
|
|
import { TriumphsStyles } from './styles';
|
|
|
import { TriumphsData } from '../utils/types';
|
|
|
+import { useConnection } from 'src/contexts/ConnectionContext';
|
|
|
|
|
|
export const TriumphItem = React.memo(
|
|
|
({ item, onPress }: { item: TriumphsData; onPress: (userId: number) => void }) => {
|
|
|
+ const netInfo = useConnection();
|
|
|
const [firstPart, secondPart] = item.text.split(' reached ');
|
|
|
const [firstName, lastName] = item.name.split(' ');
|
|
|
|
|
|
+ const avatarBaseUri = netInfo?.isInternetReachable
|
|
|
+ ? API_HOST + item.avatar
|
|
|
+ : `${FileSystem.documentDirectory}avatars/${item.user_id}.webp`;
|
|
|
+
|
|
|
+ const flagBaseUri = netInfo?.isInternetReachable
|
|
|
+ ? API_HOST + item.flag
|
|
|
+ : `${FileSystem.documentDirectory}flags/${item.flag.split('/').pop()}`;
|
|
|
+
|
|
|
const handlePress = useCallback(() => {
|
|
|
onPress(item.user_id);
|
|
|
}, [item.user_id, onPress]);
|
|
@@ -19,13 +30,13 @@ export const TriumphItem = React.memo(
|
|
|
<TouchableOpacity onPress={handlePress} style={TriumphsStyles.itemContainer}>
|
|
|
{item.avatar ? (
|
|
|
<View>
|
|
|
- <Image source={{ uri: API_HOST + item.avatar }} style={TriumphsStyles.avatar} />
|
|
|
- <Image source={{ uri: API_HOST + item.flag }} style={TriumphsStyles.flag} />
|
|
|
+ <Image source={{ uri: avatarBaseUri }} style={TriumphsStyles.avatar} />
|
|
|
+ <Image source={{ uri: flagBaseUri }} style={TriumphsStyles.flag} />
|
|
|
</View>
|
|
|
) : (
|
|
|
<AvatarWithInitials
|
|
|
text={`${firstName[0] ?? ''}${lastName[0] ?? ''}`}
|
|
|
- flag={API_HOST + item.flag}
|
|
|
+ flag={flagBaseUri}
|
|
|
size={48}
|
|
|
/>
|
|
|
)}
|