diff --git a/keyserver/src/fetchers/user-fetchers.js b/keyserver/src/fetchers/user-fetchers.js --- a/keyserver/src/fetchers/user-fetchers.js +++ b/keyserver/src/fetchers/user-fetchers.js @@ -24,7 +24,7 @@ import type { Viewer } from '../session/viewer'; async function fetchUserInfos( - userIDs: string[], + userIDs: $ReadOnlyArray, ): Promise<{ [id: string]: GlobalUserInfo }> { if (userIDs.length <= 0) { return {}; diff --git a/keyserver/src/responders/website-responders.js b/keyserver/src/responders/website-responders.js --- a/keyserver/src/responders/website-responders.js +++ b/keyserver/src/responders/website-responders.js @@ -42,6 +42,7 @@ import { fetchCurrentUserInfo, fetchKnownUserInfos, + fetchUserInfos, } from '../fetchers/user-fetchers'; import { setNewSession } from '../session/cookies'; import { Viewer } from '../session/viewer'; @@ -145,6 +146,28 @@ throw new ServerError(e.message); } + let navInfoUserInfoPromise; + if ( + viewer.loggedIn && + initialNavInfo.tab === 'chat' && + initialNavInfo.chatMode === 'create' && + initialNavInfo.selectedUserList && + initialNavInfo.selectedUserList.length > 0 + ) { + const userIDs = initialNavInfo.selectedUserList; + navInfoUserInfoPromise = (async () => { + const userInfos = {}; + const fetchedUserInfos = await fetchUserInfos(userIDs); + for (const userID in fetchedUserInfos) { + const userInfo = fetchedUserInfos[userID]; + if (userInfo.username) { + userInfos[userID] = userInfo; + } + } + return userInfos; + })(); + } + const calendarQuery = { startDate: initialNavInfo.startDate, endDate: initialNavInfo.endDate, @@ -162,7 +185,7 @@ ); const entryInfoPromise = fetchEntryInfos(viewer, [calendarQuery]); const currentUserInfoPromise = fetchCurrentUserInfo(viewer); - const userInfoPromise = fetchKnownUserInfos(viewer); + const knownUserInfoPromise = fetchKnownUserInfos(viewer); const sessionIDPromise = (async () => { if (viewer.loggedIn) { @@ -197,8 +220,14 @@ }; })(); const userStorePromise = (async () => { - const userInfos = await userInfoPromise; - return { userInfos, inconsistencyReports: [] }; + const [knownUserInfos, navInfoUserInfos] = await Promise.all([ + knownUserInfoPromise, + navInfoUserInfoPromise, + ]); + return { + userInfos: { ...navInfoUserInfos, ...knownUserInfos }, + inconsistencyReports: [], + }; })(); const navInfoPromise = (async () => {