diff --git a/lib/shared/search-utils.js b/lib/shared/search-utils.js --- a/lib/shared/search-utils.js +++ b/lib/shared/search-utils.js @@ -2,7 +2,8 @@ import * as React from 'react'; -import { messageID } from './id-utils.js'; +import { useGetFarcasterDirectCastUsers } from './farcaster/farcaster-api.js'; +import { messageID, userIDFromFID } from './id-utils.js'; import SearchIndex from './search-index.js'; import { getContainingThreadID, @@ -421,12 +422,14 @@ type UseSearchUsersOptions = { +includeViewer?: ?boolean, + +searchFarcaster?: ?boolean, }; function useSearchUsers( usernameInputText: string, options?: ?UseSearchUsersOptions, ): $ReadOnlyArray { const includeViewer = !!options?.includeViewer; + const searchFarcaster = options?.searchFarcaster ?? true; const currentUserID = useSelector( state => state.currentUserInfo && state.currentUserInfo.id, ); @@ -453,6 +456,8 @@ sendPrefixQuery: callIdentitySearchUsers, } = useIdentitySearch(); + const findFarcasterDCUsers = useGetFarcasterDirectCastUsers(); + const dispatchActionPromise = useDispatchActionPromise(); React.useEffect(() => { @@ -461,6 +466,7 @@ return; } const searchUsersPromise = (async () => { + const foundInfos: Array = []; if (identitySearchSocketConnected) { try { const identitySearchResult = await callIdentitySearchUsers( @@ -471,12 +477,40 @@ username: user.username, avatar: null, })); - setSearchResultsFromServer(userInfos); - return; + foundInfos.push(...userInfos); + // setSearchResultsFromServer(userInfos); + // return; + } catch (err) { + console.error(err); + } + } + + if (searchFarcaster) { + try { + const fcSearchResult = await findFarcasterDCUsers({ + q: forwardLookupSearchText, + limit: 10, + }); + const userInfos = fcSearchResult.result.users.map(fcUser => ({ + id: userIDFromFID(fcUser.fid.toString()), + username: fcUser.username ?? 'N/A', + avatar: fcUser.pfp + ? { + type: 'image', + uri: fcUser.pfp.url, + } + : null, + })); + foundInfos.push(...userInfos); } catch (err) { console.error(err); } } + + if (foundInfos.length > 0) { + setSearchResultsFromServer(foundInfos); + return; + } const { userInfos: keyserverSearchResult } = await callLegacyAshoatKeyserverSearchUsers(forwardLookupSearchText); setSearchResultsFromServer(keyserverSearchResult); @@ -489,6 +523,8 @@ identitySearchSocketConnected, dispatchActionPromise, forwardLookupSearchText, + findFarcasterDCUsers, + searchFarcaster, ]); return searchResults; }