diff --git a/lib/handlers/user-infos-handler.react.js b/lib/handlers/user-infos-handler.react.js --- a/lib/handlers/user-infos-handler.react.js +++ b/lib/handlers/user-infos-handler.react.js @@ -2,6 +2,11 @@ import * as React from 'react'; +import { + useFindUserIdentities, + findUserIdentitiesActionTypes, +} from '../actions/user-actions.js'; +import { useDispatchActionPromise } from '../utils/redux-promise-utils.js'; import { useSelector } from '../utils/redux-utils.js'; import { relyingOnAuthoritativeKeyserver, @@ -18,17 +23,40 @@ return Object.fromEntries(entriesWithoutUsernames); }, [userInfos]); + const dispatchActionPromise = useDispatchActionPromise(); + const findUserIdentities = useFindUserIdentities(); + React.useEffect(() => { - if (!usingCommServicesAccessToken) { + const userIDs = Object.keys(userInfosWithMissingUsernames); + if (!usingCommServicesAccessToken || userIDs.length === 0) { return; } - // 1. TODO: fetch usernames from identity - // 2. Fetch avatars and settings from auth keyserver - if (relyingOnAuthoritativeKeyserver) { - // TODO - } - }, [userInfosWithMissingUsernames]); + const promise = async () => { + // 1. Fetch usernames from identity + const identities = await findUserIdentities(userIDs); + + // 2. Fetch avatars and settings from auth keyserver + if (relyingOnAuthoritativeKeyserver) { + // TODO + } + + const newUserInfos = []; + for (const id in identities) { + newUserInfos.push({ + id, + username: identities[id].username, + }); + } + return { userInfos: newUserInfos }; + }; + void dispatchActionPromise(findUserIdentitiesActionTypes, promise()); + }, [ + dispatchActionPromise, + findUserIdentities, + userInfos, + userInfosWithMissingUsernames, + ]); } export { UserInfosHandler };