Page MenuHomePhabricator

D9884.diff
No OneTemporary

D9884.diff

diff --git a/native/profile/relationship-list.react.js b/native/profile/relationship-list.react.js
--- a/native/profile/relationship-list.react.js
+++ b/native/profile/relationship-list.react.js
@@ -9,14 +9,11 @@
updateRelationshipsActionTypes,
updateRelationships,
} from 'lib/actions/relationship-actions.js';
-import {
- searchUsersActionTypes,
- searchUsers,
-} from 'lib/actions/user-actions.js';
import { useENSNames } from 'lib/hooks/ens-cache.js';
import { registerFetchKey } from 'lib/reducers/loading-reducer.js';
import { userRelationshipsSelector } from 'lib/selectors/relationship-selectors.js';
import { userStoreSearchIndex as userStoreSearchIndexSelector } from 'lib/selectors/user-selectors.js';
+import { useSearchUsers } from 'lib/shared/search-utils.js';
import {
userRelationshipStatus,
relationshipActions,
@@ -93,44 +90,44 @@
+route: NavigationRoute<'FriendList' | 'BlockList'>,
};
function RelationshipList(props: Props): React.Node {
- const callSearchUsers = useServerCall(searchUsers);
const userInfos = useSelector(state => state.userStore.userInfos);
- const searchUsersOnServer = React.useCallback(
- async (
- usernamePrefix: string,
- ): Promise<$ReadOnlyArray<GlobalAccountUserInfo>> => {
- if (usernamePrefix.length === 0) {
- return [];
- }
-
- const userInfosResult = await callSearchUsers(usernamePrefix);
- return userInfosResult.userInfos;
- },
- [callSearchUsers],
- );
const [searchInputText, setSearchInputText] = React.useState<string>('');
const [userStoreSearchResults, setUserStoreSearchResults] = React.useState<
$ReadOnlySet<string>,
>(new Set());
- const [serverSearchResults, setServerSearchResults] = React.useState<
- $ReadOnlyArray<GlobalAccountUserInfo>,
- >([]);
const { route } = props;
const routeName = route.name;
- const userStoreSearchIndex = useSelector(userStoreSearchIndexSelector);
- const onChangeSearchText = React.useCallback(
- async (searchText: string) => {
- setSearchInputText(searchText);
-
- const excludeStatuses = {
+ const excludeStatuses = React.useMemo(
+ () =>
+ ({
[FriendListRouteName]: [
userRelationshipStatus.BLOCKED_VIEWER,
userRelationshipStatus.BOTH_BLOCKED,
],
[BlockListRouteName]: [],
- }[routeName];
+ }[routeName]),
+ [routeName],
+ );
+
+ const serverSearchResults = useSearchUsers(searchInputText);
+ const filteredServerSearchResults = React.useMemo(
+ () =>
+ serverSearchResults.filter(searchUserInfo => {
+ const userInfo = userInfos[searchUserInfo.id];
+ return (
+ !userInfo || !excludeStatuses.includes(userInfo.relationshipStatus)
+ );
+ }),
+ [serverSearchResults, userInfos, excludeStatuses],
+ );
+
+ const userStoreSearchIndex = useSelector(userStoreSearchIndexSelector);
+ const onChangeSearchText = React.useCallback(
+ async (searchText: string) => {
+ setSearchInputText(searchText);
+
const results = userStoreSearchIndex
.getSearchResults(searchText)
.filter(userID => {
@@ -138,19 +135,8 @@
return !excludeStatuses.includes(relationship);
});
setUserStoreSearchResults(new Set(results));
-
- const searchResultsFromServer = await searchUsersOnServer(searchText);
- const filteredServerSearchResults = searchResultsFromServer.filter(
- searchUserInfo => {
- const userInfo = userInfos[searchUserInfo.id];
- return (
- !userInfo || !excludeStatuses.includes(userInfo.relationshipStatus)
- );
- },
- );
- setServerSearchResults(filteredServerSearchResults);
},
- [routeName, userStoreSearchIndex, userInfos, searchUsersOnServer],
+ [userStoreSearchIndex, userInfos, excludeStatuses],
);
const overlayContext = React.useContext(OverlayContext);
@@ -338,7 +324,7 @@
}
const mergedUserInfos: { [id: string]: AccountUserInfo } = {};
- for (const userInfo of serverSearchResults) {
+ for (const userInfo of filteredServerSearchResults) {
mergedUserInfos[userInfo.id] = userInfo;
}
for (const id of userStoreSearchResults) {
@@ -382,7 +368,7 @@
routeName,
viewerID,
currentTags,
- serverSearchResults,
+ filteredServerSearchResults,
userStoreSearchResults,
userInfos,
]);
@@ -491,7 +477,6 @@
},
};
-registerFetchKey(searchUsersActionTypes);
registerFetchKey(updateRelationshipsActionTypes);
const MemoizedRelationshipList: React.ComponentType<Props> =
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
@@ -6,10 +6,10 @@
updateRelationships,
updateRelationshipsActionTypes,
} from 'lib/actions/relationship-actions.js';
-import { searchUsers } from 'lib/actions/user-actions.js';
import { useENSNames } from 'lib/hooks/ens-cache.js';
import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js';
import { userStoreSearchIndex as userStoreSearchIndexSelector } from 'lib/selectors/user-selectors.js';
+import { useSearchUsers } from 'lib/shared/search-utils.js';
import type {
UserRelationshipStatus,
RelationshipAction,
@@ -65,20 +65,7 @@
);
}, [searchText, userStoreSearchIndex]);
- const [serverSearchResults, setServerSearchResults] = React.useState<
- $ReadOnlyArray<GlobalAccountUserInfo>,
- >([]);
- const callSearchUsers = useServerCall(searchUsers);
- React.useEffect(() => {
- (async () => {
- if (searchText.length === 0) {
- setServerSearchResults([]);
- } else {
- const { userInfos } = await callSearchUsers(searchText);
- setServerSearchResults(userInfos);
- }
- })();
- }, [callSearchUsers, searchText]);
+ const serverSearchResults = useSearchUsers(searchText);
const searchTextPresent = searchText.length > 0;
const userInfos = useSelector(state => state.userStore.userInfos);

File Metadata

Mime Type
text/plain
Expires
Sat, Nov 30, 7:12 PM (21 h, 35 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2602059
Default Alt Text
D9884.diff (6 KB)

Event Timeline