Page MenuHomePhorge

D15263.1765112809.diff
No OneTemporary

Size
2 KB
Referenced Files
None
Subscribers
None

D15263.1765112809.diff

diff --git a/lib/hooks/user-identities-hooks.js b/lib/hooks/user-identities-hooks.js
--- a/lib/hooks/user-identities-hooks.js
+++ b/lib/hooks/user-identities-hooks.js
@@ -1,8 +1,11 @@
// @flow
+import invariant from 'invariant';
import * as React from 'react';
import { useFindUserIdentities } from '../actions/find-user-identities-actions.js';
+import { IdentityClientContext } from '../shared/identity-client-context.js';
+import type { FarcasterUser } from '../types/identity-service-types.js';
import { useSelector } from '../utils/redux-utils.js';
function useUsersSupportThickThreads(): (
@@ -85,4 +88,58 @@
);
}
-export { useUsersSupportThickThreads, useUsersSupportFarcasterDCs };
+export type FCUserInfos = $ReadOnlyMap<string, FarcasterUser | void>;
+export type GetCommFCUsersForFIDs = (
+ farcasterIDs: $ReadOnlyArray<string | number>,
+) => Promise<FCUserInfos>;
+
+function useGetCommFCUsersForFIDs(): GetCommFCUsersForFIDs {
+ const auxUserInfos = useSelector(state => state.auxUserStore.auxUserInfos);
+ const userInfos = useSelector(state => state.userStore.userInfos);
+
+ const identityClientContext = React.useContext(IdentityClientContext);
+ invariant(identityClientContext, 'NeynarClientContext is missing');
+
+ const { identityClient } = identityClientContext;
+
+ return React.useCallback(
+ async (farcasterIDs: $ReadOnlyArray<string | number>) => {
+ const fcUsers = new Map<string, FarcasterUser | void>();
+ const unresolvedFIDs = new Set(farcasterIDs.map(fid => `${fid}`));
+
+ for (const [userID, auxUserInfo] of Object.entries(auxUserInfos)) {
+ const { fid, supportsFarcasterDCs } = auxUserInfo;
+
+ const username = userInfos[userID]?.username;
+ if (fid && username && unresolvedFIDs.delete(fid)) {
+ fcUsers.set(fid, {
+ userID,
+ farcasterID: fid,
+ username,
+ supportsFarcasterDCs: !!supportsFarcasterDCs,
+ });
+ }
+ }
+
+ if (unresolvedFIDs.size > 0) {
+ const fetchedInfos = await identityClient.getFarcasterUsers([
+ ...unresolvedFIDs,
+ ]);
+ for (const fcUserInfo of fetchedInfos) {
+ fcUsers.set(fcUserInfo.farcasterID, fcUserInfo);
+ unresolvedFIDs.delete(fcUserInfo.farcasterID);
+ }
+ }
+
+ unresolvedFIDs.forEach(missingFID => fcUsers.set(missingFID, undefined));
+ return fcUsers;
+ },
+ [userInfos, auxUserInfos, identityClient],
+ );
+}
+
+export {
+ useUsersSupportThickThreads,
+ useUsersSupportFarcasterDCs,
+ useGetCommFCUsersForFIDs,
+};

File Metadata

Mime Type
text/plain
Expires
Sun, Dec 7, 1:06 PM (13 h, 19 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5844258
Default Alt Text
D15263.1765112809.diff (2 KB)

Event Timeline