58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
|
// Copyright 2021 Signal Messenger, LLC
|
||
|
// SPDX-License-Identifier: AGPL-3.0-only
|
||
|
|
||
|
import { compact } from 'lodash';
|
||
|
import { ConversationAttributesType } from '../model-types.d';
|
||
|
import { isDirectConversation } from './whatTypeOfConversation';
|
||
|
|
||
|
export function getConversationMembers(
|
||
|
conversationAttrs: ConversationAttributesType,
|
||
|
options: { includePendingMembers?: boolean } = {}
|
||
|
): Array<ConversationAttributesType> {
|
||
|
if (isDirectConversation(conversationAttrs)) {
|
||
|
return [conversationAttrs];
|
||
|
}
|
||
|
|
||
|
if (conversationAttrs.membersV2) {
|
||
|
const { includePendingMembers } = options;
|
||
|
const members: Array<{ conversationId: string }> = includePendingMembers
|
||
|
? [
|
||
|
...(conversationAttrs.membersV2 || []),
|
||
|
...(conversationAttrs.pendingMembersV2 || []),
|
||
|
]
|
||
|
: conversationAttrs.membersV2 || [];
|
||
|
|
||
|
return compact(
|
||
|
members.map(member => {
|
||
|
const conversation = window.ConversationController.get(
|
||
|
member.conversationId
|
||
|
);
|
||
|
|
||
|
// In groups we won't sent to contacts we believe are unregistered
|
||
|
if (conversation && conversation.isUnregistered()) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
return conversation?.attributes;
|
||
|
})
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if (conversationAttrs.members) {
|
||
|
return compact(
|
||
|
conversationAttrs.members.map(id => {
|
||
|
const conversation = window.ConversationController.get(id);
|
||
|
|
||
|
// In groups we won't send to contacts we believe are unregistered
|
||
|
if (conversation && conversation.isUnregistered()) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
return conversation?.attributes;
|
||
|
})
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return [];
|
||
|
}
|