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); + }, + );