Skip to content

Commit 326ceaa

Browse files
committed
fix: add avatar component improvements to optimize performance
1 parent a9397c4 commit 326ceaa

File tree

1 file changed

+33
-19
lines changed

1 file changed

+33
-19
lines changed

package/src/components/Avatar/Avatar.tsx

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { useCallback, useMemo } from 'react';
22
import {
33
Image,
44
ImageProps,
@@ -83,6 +83,34 @@ export const Avatar = (props: AvatarProps) => {
8383

8484
const { isLoadingImageError, setLoadingImageError } = useLoadingImage();
8585

86+
const onError = useCallback(() => {
87+
setLoadingImageError(true);
88+
}, [setLoadingImageError]);
89+
90+
const uri = useMemo(() => {
91+
let imageUrl;
92+
if (
93+
!imageProp ||
94+
imageProp.includes(randomImageBaseUrl) ||
95+
imageProp.includes(randomSvgBaseUrl)
96+
) {
97+
if (imageProp?.includes(streamCDN)) {
98+
imageUrl = imageProp;
99+
} else {
100+
imageUrl = `${randomImageBaseUrl}${name ? `?name=${getInitials(name)}&size=${size}` : ''}`;
101+
}
102+
} else {
103+
imageUrl = getResizedImageUrl({
104+
height: size,
105+
resizableCDNHosts,
106+
url: imageProp,
107+
width: size,
108+
});
109+
}
110+
111+
return imageUrl;
112+
}, [imageProp, name, size, resizableCDNHosts]);
113+
86114
return (
87115
<View>
88116
<View
@@ -108,24 +136,10 @@ export const Avatar = (props: AvatarProps) => {
108136
/>
109137
) : (
110138
<ImageComponent
111-
accessibilityLabel={testID || 'Avatar Image'}
112-
onError={() => setLoadingImageError(true)}
139+
accessibilityLabel={testID ?? 'Avatar Image'}
140+
onError={onError}
113141
source={{
114-
uri:
115-
!imageProp ||
116-
imageProp.includes(randomImageBaseUrl) ||
117-
imageProp.includes(randomSvgBaseUrl)
118-
? imageProp?.includes(streamCDN)
119-
? imageProp
120-
: `${randomImageBaseUrl}${
121-
name ? `?name=${getInitials(name)}&size=${size}` : ''
122-
}`
123-
: getResizedImageUrl({
124-
height: size,
125-
resizableCDNHosts,
126-
url: imageProp,
127-
width: size,
128-
}),
142+
uri,
129143
}}
130144
style={[
131145
image,
@@ -139,7 +153,7 @@ export const Avatar = (props: AvatarProps) => {
139153
: {},
140154
imageStyle,
141155
]}
142-
testID={testID || 'avatar-image'}
156+
testID={testID ?? 'avatar-image'}
143157
/>
144158
)}
145159
</View>

0 commit comments

Comments
 (0)