diff --git a/web/app.react.js b/web/app.react.js --- a/web/app.react.js +++ b/web/app.react.js @@ -21,6 +21,7 @@ useModalContext, } from 'lib/components/modal-provider.react.js'; import { StaffContextProvider } from 'lib/components/staff-provider.react.js'; +import { IdentitySearchProvider } from 'lib/identity-search/identity-search-context.js'; import { createLoadingStatusSelector, combineLoadingStatuses, @@ -67,6 +68,7 @@ import VisibilityHandler from './redux/visibility-handler.react.js'; import history from './router-history.js'; import { MessageSearchStateProvider } from './search/message-search-state-provider.react.js'; +import { createIdentitySearchAuthMessage } from './selectors/identity-search-selectors.js'; import { createTunnelbrokerInitMessage } from './selectors/tunnelbroker-selectors.js'; import AccountSettings from './settings/account-settings.react.js'; import DangerZone from './settings/danger-zone.react.js'; @@ -420,10 +422,16 @@ ); function AppWithProvider(props: BaseProps): React.Node { + const identitySearchAuthMessage = useSelector( + createIdentitySearchAuthMessage, + ); + return ( - - - + + + + + ); } diff --git a/web/chat/chat-thread-composer.react.js b/web/chat/chat-thread-composer.react.js --- a/web/chat/chat-thread-composer.react.js +++ b/web/chat/chat-thread-composer.react.js @@ -12,6 +12,7 @@ import { usePotentialMemberItems, useSearchUsers, + useSearchIdentityUsers, notFriendNotice, } from 'lib/shared/search-utils.js'; import { @@ -22,6 +23,7 @@ import { threadTypes } from 'lib/types/thread-types-enum.js'; import type { AccountUserInfo, UserListItem } from 'lib/types/user-types.js'; import { useDispatch } from 'lib/utils/redux-utils.js'; +import { usingCommServicesAccessToken } from 'lib/utils/services-utils.js'; import css from './chat-thread-composer.css'; import UserAvatar from '../avatars/user-avatar.react.js'; @@ -55,13 +57,21 @@ [userInfoInputArray], ); + let searchResults; + const identitySearchResults = useSearchIdentityUsers(usernameInputText); const serverSearchResults = useSearchUsers(usernameInputText); + if (usingCommServicesAccessToken) { + searchResults = identitySearchResults; + } else { + searchResults = serverSearchResults; + } + const userListItems = usePotentialMemberItems({ text: usernameInputText, userInfos: otherUserInfos, excludeUserIDs: userInfoInputIDs, - includeServerSearchUsers: serverSearchResults, + includeServerSearchUsers: searchResults, }); const userListItemsWithENSNames = useENSNames(userListItems); diff --git a/web/selectors/identity-search-selectors.js b/web/selectors/identity-search-selectors.js new file mode 100644 --- /dev/null +++ b/web/selectors/identity-search-selectors.js @@ -0,0 +1,29 @@ +// @flow + +import { createSelector } from 'reselect'; + +import type { AuthMessage } from 'lib/types/identity-search/auth-message-types.js'; + +import type { AppState } from '../redux/redux-setup.js'; + +export const createIdentitySearchAuthMessage: AppState => ?AuthMessage = + createSelector( + (state: AppState) => state.cryptoStore?.primaryIdentityKeys?.ed25519, + (state: AppState) => state.commServicesAccessToken, + (state: AppState) => state.currentUserInfo?.id, + ( + deviceID: ?string, + accessToken: ?string, + userID: ?string, + ): ?AuthMessage => { + if (!deviceID || !accessToken || !userID) { + return null; + } + return ({ + type: 'AuthMessage', + deviceID, + accessToken, + userID, + }: AuthMessage); + }, + ); diff --git a/web/settings/relationship/add-users-list.react.js b/web/settings/relationship/add-users-list.react.js --- a/web/settings/relationship/add-users-list.react.js +++ b/web/settings/relationship/add-users-list.react.js @@ -9,7 +9,10 @@ import { useENSNames } from 'lib/hooks/ens-cache.js'; import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js'; import { useUserSearchIndex } from 'lib/selectors/nav-selectors.js'; -import { useSearchUsers } from 'lib/shared/search-utils.js'; +import { + useSearchUsers, + useSearchIdentityUsers, +} from 'lib/shared/search-utils.js'; import type { UserRelationshipStatus, RelationshipAction, @@ -21,6 +24,7 @@ import { useLegacyAshoatKeyserverCall } from 'lib/utils/action-utils.js'; import { values } from 'lib/utils/objects.js'; import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js'; +import { usingCommServicesAccessToken } from 'lib/utils/services-utils.js'; import AddUsersListItem from './add-users-list-item.react.js'; import css from './add-users-list.css'; @@ -67,14 +71,22 @@ ); }, [searchText, userStoreSearchIndex]); + let searchResults; + const identitySearchResults = useSearchIdentityUsers(searchText); const serverSearchResults = useSearchUsers(searchText); + if (usingCommServicesAccessToken) { + searchResults = identitySearchResults; + } else { + searchResults = serverSearchResults; + } + const searchTextPresent = searchText.length > 0; const mergedUserInfos = React.useMemo(() => { const mergedInfos: { [string]: GlobalAccountUserInfo | AccountUserInfo } = {}; - for (const userInfo of serverSearchResults) { + for (const userInfo of searchResults) { mergedInfos[userInfo.id] = userInfo; } @@ -89,12 +101,7 @@ } return mergedInfos; - }, [ - searchTextPresent, - serverSearchResults, - userInfos, - userStoreSearchResults, - ]); + }, [searchTextPresent, searchResults, userInfos, userStoreSearchResults]); const sortedUsers = React.useMemo( () =>