diff --git a/lib/shared/avatar-utils.js b/lib/shared/avatar-utils.js --- a/lib/shared/avatar-utils.js +++ b/lib/shared/avatar-utils.js @@ -9,7 +9,10 @@ import { threadOtherMembers } from './thread-utils.js'; import genesis from '../facts/genesis.js'; import { useENSAvatar } from '../hooks/ens-cache.js'; -import { useFarcasterUserAvatarURL } from '../hooks/fc-cache.js'; +import { + useFarcasterUserAvatarURL, + useFarcasterChannelAvatarURL, +} from '../hooks/fc-cache.js'; import type { ClientAvatar, ClientEmojiAvatar, @@ -319,9 +322,12 @@ return getDefaultAvatar(thread.id, thread.color); } +type UsernameAndFID = { +username?: ?string, +farcasterID?: ?string, ... }; +type FCChannelInfo = { +fcChannelID: string }; + function useResolvedUserAvatar( userAvatarInfo: ClientAvatar, - usernameAndFID: ?{ +username?: ?string, +farcasterID?: ?string, ... }, + usernameAndFID: ?UsernameAndFID, ): ResolvedClientAvatar { const ethAddress = React.useMemo( () => getETHAddressForUserInfo(usernameAndFID), @@ -338,12 +344,14 @@ return userAvatarInfo; } - if (ensAvatarURI) { + if (ensAvatarURI && userAvatarInfo.type === 'ens') { return { type: 'image', uri: ensAvatarURI, }; - } else if (farcasterAvatarURL) { + } + + if (farcasterAvatarURL && userAvatarInfo.type === 'farcaster') { return { type: 'image', uri: farcasterAvatarURL, @@ -358,13 +366,27 @@ function useResolvedThreadAvatar( threadAvatarInfo: ClientAvatar, - displayUser: ?{ +username?: ?string, +farcasterID?: ?string, ... }, + userOrChannel: ?UsernameAndFID | ?FCChannelInfo, ): ResolvedClientAvatar { + let displayUser = null; + let fcChannelID = null; + + if (userOrChannel?.username || userOrChannel?.farcasterID) { + displayUser = userOrChannel; + } else if ( + userOrChannel?.fcChannelID && + typeof userOrChannel.fcChannelID === 'string' + ) { + fcChannelID = userOrChannel.fcChannelID; + } + const resolvedUserAvatar = useResolvedUserAvatar( threadAvatarInfo, displayUser, ); + const farcasterAvatarURL = useFarcasterChannelAvatarURL(fcChannelID); + if ( threadAvatarInfo.type !== 'ens' && threadAvatarInfo.type !== 'farcaster' @@ -372,6 +394,13 @@ return threadAvatarInfo; } + if (farcasterAvatarURL) { + return { + type: 'image', + uri: farcasterAvatarURL, + }; + } + return resolvedUserAvatar; }