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 @@ -487,6 +487,7 @@ type UseSearchUsersOptions = { +includeViewer?: ?boolean, +searchFarcaster?: ?boolean, + +skipCommUsers?: ?boolean, }; function useSearchUsers( usernameInputText: string, @@ -494,6 +495,7 @@ ): $ReadOnlyArray { const includeViewer = !!options?.includeViewer; const searchFarcaster = !!options?.searchFarcaster; + const skipCommUsers = !!options?.skipCommUsers; const currentUserID = useSelector( state => state.currentUserInfo && state.currentUserInfo.id, @@ -534,7 +536,7 @@ const foundInfos: Array = []; const identityPromise = (async () => { - if (identitySearchSocketConnected) { + if (identitySearchSocketConnected && !skipCommUsers) { try { const identitySearchResult = await callIdentitySearchUsers( forwardLookupSearchText, @@ -578,7 +580,7 @@ await Promise.all([identityPromise, farcasterPromise]); - if (foundInfos.length > 0) { + if (foundInfos.length > 0 || skipCommUsers) { setSearchResultsFromServer(foundInfos); return; } @@ -596,6 +598,7 @@ forwardLookupSearchText, findFarcasterDCUsers, searchFarcaster, + skipCommUsers, ]); return searchResults; } diff --git a/native/chat/settings/add-users-modal.react.js b/native/chat/settings/add-users-modal.react.js --- a/native/chat/settings/add-users-modal.react.js +++ b/native/chat/settings/add-users-modal.react.js @@ -12,11 +12,16 @@ import { useAddDMThreadMembers } from 'lib/shared/dm-ops/dm-op-utils.js'; import { useModifyFarcasterMembershipInput } from 'lib/shared/farcaster/farcaster-api.js'; import { useRefreshFarcasterConversation } from 'lib/shared/farcaster/farcaster-hooks.js'; -import { usePotentialMemberItems } from 'lib/shared/search-utils.js'; +import { + usePotentialMemberItems, + useSearchUsers, +} from 'lib/shared/search-utils.js'; import { threadActualMembers } from 'lib/shared/thread-utils.js'; import { threadSpecs } from 'lib/shared/threads/thread-specs.js'; import type { ThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js'; +import { farcasterThreadTypeValidator } from 'lib/types/thread-types-enum.js'; import { type AccountUserInfo } from 'lib/types/user-types.js'; +import { useCurrentUserSupportsDCs } from 'lib/utils/farcaster-utils.js'; import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js'; import Button from '../../components/button.react.js'; @@ -187,6 +192,12 @@ const communityThreadInfo = useSelector(state => community ? threadInfoSelector(state)[community] : null, ); + const farcasterDCsEnabled = useCurrentUserSupportsDCs(); + const isFarcasterThread = farcasterThreadTypeValidator.is(threadInfo.type); + const searchUsersResult = useSearchUsers(usernameInputText, { + searchFarcaster: farcasterDCsEnabled && isFarcasterThread, + skipCommUsers: true, + }); const auxUserInfos = useSelector(state => state.auxUserStore.auxUserInfos); const userSearchResults = usePotentialMemberItems({ text: usernameInputText, @@ -196,6 +207,7 @@ inputParentThreadInfo: parentThreadInfo, inputCommunityThreadInfo: communityThreadInfo, threadType: threadInfo.type, + includeServerSearchUsers: isFarcasterThread ? searchUsersResult : undefined, }); const onChangeTagInput = React.useCallback( diff --git a/web/settings/relationship/add-users-utils.js b/web/settings/relationship/add-users-utils.js --- a/web/settings/relationship/add-users-utils.js +++ b/web/settings/relationship/add-users-utils.js @@ -14,12 +14,16 @@ import { threadActualMembers } from 'lib/shared/thread-utils.js'; import type { ThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js'; import type { UserRelationshipStatus } from 'lib/types/relationship-types.js'; -import type { ThreadType } from 'lib/types/thread-types-enum.js'; +import { + farcasterThreadTypeValidator, + type ThreadType, +} from 'lib/types/thread-types-enum.js'; import type { GlobalAccountUserInfo, AccountUserInfo, UserListItem, } from 'lib/types/user-types.js'; +import { useCurrentUserSupportsDCs } from 'lib/utils/farcaster-utils.js'; import { values } from 'lib/utils/objects.js'; import { useAddUsersListContext } from './add-users-list-provider.react.js'; @@ -149,6 +153,12 @@ [previouslySelectedUsers, threadInfo.members, viewerID], ); + const farcasterDCsEnabled = useCurrentUserSupportsDCs(); + const isFarcasterThread = farcasterThreadTypeValidator.is(threadInfo.type); + const searchUsersResult = useSearchUsers(searchText, { + searchFarcaster: farcasterDCsEnabled && isFarcasterThread, + skipCommUsers: true, + }); const auxUserInfos = useSelector(state => state.auxUserStore.auxUserInfos); const userSearchResults = usePotentialMemberItems({ text: searchText, @@ -158,6 +168,7 @@ inputParentThreadInfo: parentThreadInfo, inputCommunityThreadInfo: communityThreadInfo, threadType: threadInfo.type, + includeServerSearchUsers: isFarcasterThread ? searchUsersResult : undefined, }); const userInfos = React.useMemo(() => {