1- import React from 'react' ;
1+ import React , { useCallback , useMemo } from 'react' ;
22import {
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