You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.9 KiB
TypeScript
56 lines
1.9 KiB
TypeScript
import _ from 'lodash';
|
|
import { useEffect, useState } from 'react';
|
|
import { getConversationController } from '../session/conversations';
|
|
import { UserUtils } from '../session/utils';
|
|
import { ReduxConversationType } from '../state/ducks/conversations';
|
|
|
|
export function useMembersAvatars(conversation: ReduxConversationType | undefined) {
|
|
const [membersAvatars, setMembersAvatars] = useState<
|
|
| Array<{
|
|
avatarPath: string | undefined;
|
|
id: string;
|
|
name: string;
|
|
}>
|
|
| undefined
|
|
>(undefined);
|
|
|
|
useEffect(
|
|
() => {
|
|
if (!conversation) {
|
|
setMembersAvatars(undefined);
|
|
return;
|
|
}
|
|
const { isPublic, isGroup, members: convoMembers } = conversation;
|
|
if (!isPublic && isGroup) {
|
|
const ourPrimary = UserUtils.getOurPubKeyStrFromCache();
|
|
|
|
const ourself = convoMembers.find(m => m !== ourPrimary);
|
|
// add ourself back at the back, so it's shown only if only 1 member and we are still a member
|
|
let membersFiltered = convoMembers.filter(m => m !== ourPrimary);
|
|
membersFiltered.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
|
|
if (ourself) {
|
|
membersFiltered.push(ourPrimary);
|
|
}
|
|
// no need to forward more than 2 conversations for rendering the group avatar
|
|
membersFiltered = membersFiltered.slice(0, 2);
|
|
const memberConvos = _.compact(
|
|
membersFiltered.map(m => getConversationController().get(m))
|
|
);
|
|
const memberAvatars = memberConvos.map(m => {
|
|
return {
|
|
avatarPath: m.getAvatarPath() || undefined,
|
|
id: m.id as string,
|
|
name: (m.get('name') || m.get('profileName') || m.id) as string,
|
|
};
|
|
});
|
|
setMembersAvatars(memberAvatars);
|
|
} else {
|
|
setMembersAvatars(undefined);
|
|
}
|
|
},
|
|
conversation ? [conversation.members, conversation.id] : []
|
|
);
|
|
|
|
return membersAvatars;
|
|
}
|