Skip to content

Commit 62f47ab

Browse files
committed
feat: image loader
1 parent 9e9d39d commit 62f47ab

File tree

3 files changed

+65
-5
lines changed

3 files changed

+65
-5
lines changed

mobile/components/OEncounter/OEncounter.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
OButtonSmall,
1313
} from "@/components/OButtonSmall/OButtonSmall";
1414
import { OEncounterStrike } from "@/components/OEncounterStrike/OEncounterStrike";
15+
import { OImageWithLoader } from "@/components/OImageWithLoader/OImageWithLoader";
1516
import OMessageModal from "@/components/OMessageModal/OMessageModal";
1617
import {
1718
EACTION_ENCOUNTERS,
@@ -28,7 +29,7 @@ import { getValidImgURI } from "@/utils/media.utils";
2829
import { MaterialIcons } from "@expo/vector-icons";
2930
import * as React from "react";
3031
import { useState } from "react";
31-
import { Image, StyleSheet, Text, View } from "react-native";
32+
import { StyleSheet, Text, View } from "react-native";
3233
import { Dropdown } from "react-native-element-dropdown";
3334
import { TouchableOpacity } from "react-native-gesture-handler";
3435
import { TourGuideZone, useTourGuideController } from "rn-tourguide";
@@ -135,9 +136,9 @@ const OEncounter = (props: ISingleEncounterProps) => {
135136
});
136137
}}
137138
>
138-
<Image
139+
<OImageWithLoader
139140
style={styles.profileImage}
140-
contentFit="cover"
141+
resizeMode="cover"
141142
source={{
142143
uri: getValidImgURI(
143144
encounterProfile.otherUser.imageURIs[0],
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import { Color } from "@/GlobalStyles";
2+
import React, { useState } from "react";
3+
import {
4+
ActivityIndicator,
5+
Image,
6+
ImageProps,
7+
StyleProp,
8+
StyleSheet,
9+
View,
10+
ViewStyle,
11+
} from "react-native";
12+
13+
interface OImageWithLoaderProps extends ImageProps {
14+
containerStyle?: StyleProp<ViewStyle>;
15+
}
16+
17+
export const OImageWithLoader = (props: OImageWithLoaderProps) => {
18+
const [isLoading, setIsLoading] = useState(false);
19+
20+
return (
21+
<View style={[styles.container, props.containerStyle]}>
22+
<Image
23+
{...props}
24+
style={[styles.image, props.style]}
25+
onLoadStart={() => setIsLoading(true)}
26+
onLoadEnd={() => setIsLoading(false)}
27+
/>
28+
{isLoading && (
29+
<View style={styles.loaderContainer}>
30+
<ActivityIndicator size="large" color={Color.primary} />
31+
</View>
32+
)}
33+
</View>
34+
);
35+
};
36+
37+
const styles = StyleSheet.create({
38+
container: {
39+
position: "relative",
40+
},
41+
image: {
42+
width: "100%",
43+
height: "100%",
44+
},
45+
loaderContainer: {
46+
position: "absolute",
47+
top: 0,
48+
left: 0,
49+
right: 0,
50+
bottom: 0,
51+
justifyContent: "center",
52+
alignItems: "center",
53+
backgroundColor: "rgba(255, 255, 255, 0.7)",
54+
},
55+
});

mobile/screens/main/ProfileView.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Color, Subtitle } from "@/GlobalStyles";
22
import { UserPublicDTO } from "@/api/gen/src";
33
import { OBadgesOfUser } from "@/components/OBadge/OBadgesOfUser";
4+
import { OImageWithLoader } from "@/components/OImageWithLoader/OImageWithLoader";
45
import { OPageContainer } from "@/components/OPageContainer/OPageContainer";
56
import { OPageHeader } from "@/components/OPageHeader/OPageHeader";
67
import { OPageHeaderEncounters } from "@/components/OPageHeader/OPageHeaderEncounters/OPageHeaderEncounters";
@@ -53,7 +54,10 @@ const ProfileView = ({
5354
}}
5455
style={styles.previewImageContainer}
5556
>
56-
<Image source={{ uri: item }} style={styles.previewImage} />
57+
<OImageWithLoader
58+
source={{ uri: item }}
59+
style={styles.previewImage}
60+
/>
5761
</TouchableOpacity>
5862
);
5963
};
@@ -109,7 +113,7 @@ const ProfileView = ({
109113
setFullScreenVisible(true);
110114
}}
111115
>
112-
<Image
116+
<OImageWithLoader
113117
source={{ uri: item }}
114118
style={styles.carouselImage}
115119
/>

0 commit comments

Comments
 (0)